; 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.std::allocator.71" = type { i8 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.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.std::pair.362" = type <{ %"struct.std::__detail::_Node_iterator.364", i8, [7 x i8] }>
%"struct.std::__detail::_Node_iterator.364" = type { %"struct.std::__detail::_Node_iterator_base.365" }
%"struct.std::__detail::_Node_iterator_base.365" = type { ptr }
%"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 }
%"struct.spirv_cross::SPIRExpression" = type <{ %"struct.spirv_cross::IVariant.base", %"class.spirv_cross::TypedID.280", %"class.std::__cxx11::basic_string", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.280", i8, i8, i8, i8, [4 x i8], %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", %"class.spirv_cross::SmallVector.7", i32, [4 x i8] }>

@.str.11 = external hidden unnamed_addr constant [90 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.185 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.298 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.335 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.340 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.341 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.342 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.345 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.346 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.347 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.348 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.363 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.364 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.365 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.366 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.367 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.374 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.381 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.382 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.383 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.384 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.385 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.390 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.391 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.392 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.393 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.415 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.416 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.417 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.418 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.419 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.423 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.426 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.427 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.429 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.435 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.438 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.444 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.448 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.449 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.452 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.453 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.456 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.457 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.458 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.459 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.460 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.461 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.462 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.463 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.464 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.465 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.466 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.467 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.468 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.469 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.470 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.471 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.494 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.499 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.500 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.503 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.504 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.507 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.508 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.719 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.751 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.920 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.921 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.922 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.955 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.975 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.976 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1016 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1100 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.1101 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1102 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1103 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1104 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.1105 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1106 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1107 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1108 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1109 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1110 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1111 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1112 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1113 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1114 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1115 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj = external hidden unnamed_addr constant [111 x i8], align 1
@.str.1116 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1117 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.1118 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1119 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1120 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1121 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.1122 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1123 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1124 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1125 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1126 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1127 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1128 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1129 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1130 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1131 = external hidden unnamed_addr constant [26 x i8], align 1

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

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

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

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

declare void @__cxa_throw(ptr, ptr, ptr)

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848)) #5 align 2

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

declare void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176), i32, i32 noundef, i32 noundef) #6

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

declare noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef) #6

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(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) #2 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 #7 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) #2 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)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488), ptr noundef nonnull align 8 dereferenceable(488)) #7 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #2 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) #2 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_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) #2 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef) #7

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef) #7

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

declare void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176), i32 noundef, i32 noundef) #6

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRPKcRA2_S1_NSt7__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)) #2

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross12CompilerGLSL20get_remapped_glsl_opE10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %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 i8, align 1
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::allocator.71", align 1
  %26 = alloca i8, align 1
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca ptr, align 8
  %29 = alloca %"struct.spirv_cross::SPIRType", 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 i32, align 4
  %38 = alloca %"struct.std::pair.362", align 8
  %39 = alloca ptr, align 8
  %40 = alloca %"struct.spirv_cross::SPIRType", 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 ptr, 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 ptr, align 8
  %52 = alloca %"struct.spirv_cross::SPIRType", 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 i8, align 1
  %64 = alloca %"class.std::__cxx11::basic_string", align 8
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca i8, align 1
  %68 = alloca %"class.std::__cxx11::basic_string", align 8
  %69 = alloca %"class.std::__cxx11::basic_string", align 8
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca ptr, align 8
  %72 = alloca %"class.spirv_cross::TypedID.280", align 4
  %73 = alloca %"class.spirv_cross::TypedID.280", align 4
  %74 = alloca %"class.spirv_cross::TypedID.280", align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca %"class.std::__cxx11::basic_string", align 8
  %78 = alloca %"class.std::__cxx11::basic_string", align 8
  %79 = alloca %"class.std::__cxx11::basic_string", align 8
  %80 = alloca %"class.std::__cxx11::basic_string", align 8
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  %82 = alloca %"class.std::__cxx11::basic_string", align 8
  %83 = alloca %"class.std::__cxx11::basic_string", align 8
  %84 = alloca %"class.std::__cxx11::basic_string", align 8
  %85 = alloca %"class.std::__cxx11::basic_string", align 8
  %86 = alloca ptr, align 8
  %87 = alloca i8, align 1
  %88 = alloca ptr, align 8
  %89 = alloca i8, align 1
  %90 = alloca %"class.spirv_cross::TypedID.280", align 4
  %91 = alloca ptr, align 8
  %92 = alloca i8, align 1
  %93 = alloca ptr, align 8
  %94 = alloca ptr, align 8
  %95 = alloca i8, align 1
  %96 = alloca %"class.spirv_cross::TypedID.280", align 4
  %97 = alloca i8, align 1
  %98 = alloca ptr, align 8
  %99 = alloca %"class.std::__cxx11::basic_string", align 8
  %100 = alloca %"class.std::__cxx11::basic_string", align 8
  %101 = alloca %"struct.std::pair.362", align 8
  %102 = alloca ptr, align 8
  %103 = alloca %"class.std::__cxx11::basic_string", align 8
  %104 = alloca %"class.std::__cxx11::basic_string", align 8
  %105 = alloca %"class.std::__cxx11::basic_string", align 8
  %106 = alloca %"class.std::__cxx11::basic_string", align 8
  %107 = alloca %"class.std::__cxx11::basic_string", align 8
  %108 = alloca i8, align 1
  %109 = alloca %"class.std::__cxx11::basic_string", align 8
  %110 = alloca %"class.std::__cxx11::basic_string", align 8
  %111 = alloca ptr, align 8
  %112 = alloca %"struct.spirv_cross::SPIRType", align 8
  %113 = alloca %"class.std::__cxx11::basic_string", align 8
  %114 = alloca %"class.std::__cxx11::basic_string", align 8
  %115 = alloca %"class.std::__cxx11::basic_string", align 8
  %116 = alloca %"class.std::__cxx11::basic_string", align 8
  %117 = alloca %"class.std::allocator.71", align 1
  %118 = alloca i8, align 1
  %119 = alloca %"class.spirv_cross::TypedID.280", align 4
  %120 = alloca i32, align 4
  %121 = alloca ptr, align 8
  %122 = alloca %"class.std::__cxx11::basic_string", align 8
  %123 = alloca %"class.std::allocator.71", align 1
  %124 = alloca i8, align 1
  %125 = alloca %"class.spirv_cross::TypedID.280", align 4
  %126 = alloca i32, align 4
  %127 = alloca ptr, align 8
  %128 = alloca i32, align 4
  %129 = alloca %"class.spirv_cross::TypedID.280", align 4
  %130 = alloca %"class.spirv_cross::TypedID.280", align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i32 %1, ptr %8, align 4, !tbaa !9
  store i32 %2, ptr %9, align 4, !tbaa !9
  store i32 %3, ptr %10, align 4, !tbaa !9
  store ptr %4, ptr %11, align 8, !tbaa !5
  store i32 %5, ptr %12, align 4, !tbaa !9
  %131 = load ptr, ptr %7, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  %132 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %132, ptr %13, align 4, !tbaa !11
  %133 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %131)
  br i1 %133, label %134, label %144

134:                                              ; preds = %6
  %135 = load i32, ptr %13, align 4, !tbaa !11
  %136 = call noundef zeroext i1 @_ZL23is_unsigned_glsl_opcode10GLSLstd450(i32 noundef %135)
  br i1 %136, label %137, label %144

137:                                              ; preds = %134
  %138 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %138, ptr noundef @.str.1100)
          to label %139 unwind label %140

139:                                              ; preds = %137
  call void @__cxa_throw(ptr %138, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

140:                                              ; preds = %137
  %141 = landingpad { ptr, i32 }
          cleanup
  %142 = extractvalue { ptr, i32 } %141, 0
  store ptr %142, ptr %14, align 8
  %143 = extractvalue { ptr, i32 } %141, 1
  store i32 %143, ptr %15, align 4
  call void @__cxa_free_exception(ptr %138) #8
  br label %1977

144:                                              ; preds = %134, %6
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  %145 = load i32, ptr %13, align 4, !tbaa !11
  %146 = load ptr, ptr %11, align 8, !tbaa !5
  %147 = load i32, ptr %12, align 4, !tbaa !9
  %148 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL38get_integer_width_for_glsl_instructionE10GLSLstd450PKjj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %145, ptr noundef %146, i32 noundef %147)
  store i32 %148, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  %149 = load i32, ptr %16, align 4, !tbaa !9
  %150 = call noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %149)
  store i32 %150, ptr %17, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  %151 = load i32, ptr %16, align 4, !tbaa !9
  %152 = call noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %151)
  store i32 %152, ptr %18, align 4, !tbaa !13
  %153 = load i32, ptr %13, align 4, !tbaa !11
  %154 = call noundef i32 @_ZNK11spirv_cross12CompilerGLSL20get_remapped_glsl_opE10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %153)
  store i32 %154, ptr %13, align 4, !tbaa !11
  %155 = load i32, ptr %13, align 4, !tbaa !11
  switch i32 %155, label %1974 [
    i32 1, label %156
    i32 2, label %213
    i32 3, label %252
    i32 5, label %328
    i32 4, label %336
    i32 7, label %342
    i32 6, label %350
    i32 8, label %356
    i32 9, label %362
    i32 10, label %368
    i32 11, label %374
    i32 12, label %380
    i32 50, label %386
    i32 35, label %495
    i32 36, label %579
    i32 38, label %722
    i32 39, label %732
    i32 37, label %742
    i32 40, label %751
    i32 41, label %760
    i32 42, label %770
    i32 43, label %780
    i32 44, label %792
    i32 45, label %805
    i32 13, label %818
    i32 14, label %824
    i32 15, label %830
    i32 16, label %836
    i32 17, label %842
    i32 18, label %848
    i32 19, label %854
    i32 20, label %902
    i32 21, label %950
    i32 22, label %1075
    i32 23, label %1090
    i32 24, label %1105
    i32 25, label %1120
    i32 26, label %1129
    i32 27, label %1138
    i32 28, label %1144
    i32 29, label %1150
    i32 30, label %1156
    i32 31, label %1162
    i32 32, label %1168
    i32 33, label %1174
    i32 34, label %1283
    i32 46, label %1410
    i32 47, label %1410
    i32 48, label %1422
    i32 49, label %1431
    i32 51, label %1443
    i32 52, label %1461
    i32 53, label %1503
    i32 54, label %1590
    i32 55, label %1596
    i32 56, label %1602
    i32 57, label %1608
    i32 58, label %1614
    i32 63, label %1620
    i32 64, label %1626
    i32 60, label %1632
    i32 61, label %1638
    i32 62, label %1644
    i32 59, label %1650
    i32 65, label %1656
    i32 66, label %1662
    i32 67, label %1668
    i32 68, label %1677
    i32 69, label %1686
    i32 70, label %1692
    i32 71, label %1704
    i32 72, label %1713
    i32 73, label %1725
    i32 74, label %1738
    i32 75, label %1746
    i32 76, label %1754
    i32 77, label %1760
    i32 78, label %1769
    i32 79, label %1778
    i32 80, label %1778
    i32 81, label %1874
  ]

156:                                              ; preds = %144
  %157 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %131)
  br i1 %157, label %164, label %158

158:                                              ; preds = %156
  %159 = load i32, ptr %8, align 4, !tbaa !9
  %160 = load i32, ptr %9, align 4, !tbaa !9
  %161 = load ptr, ptr %11, align 8, !tbaa !5
  %162 = getelementptr inbounds i32, ptr %161, i64 0
  %163 = load i32, ptr %162, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %159, i32 noundef %160, i32 noundef %163, ptr noundef @.str.462)
  br label %212

164:                                              ; preds = %156
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #8
  %165 = load ptr, ptr %11, align 8, !tbaa !5
  %166 = getelementptr inbounds i32, ptr %165, i64 0
  %167 = load i32, ptr %166, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %167, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %168 = load ptr, ptr %11, align 8, !tbaa !5
  %169 = getelementptr inbounds i32, ptr %168, i64 0
  %170 = load i32, ptr %169, align 4, !tbaa !9
  %171 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %170)
          to label %172 unwind label %193

172:                                              ; preds = %164
  store ptr %171, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #8
  %173 = load ptr, ptr %20, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %173)
          to label %174 unwind label %197

174:                                              ; preds = %172
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_S9_S3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 1 dereferenceable(7) @.str.1101, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 1 dereferenceable(4) @.str.1102, ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 1 dereferenceable(7) @.str.1103)
          to label %175 unwind label %201

175:                                              ; preds = %174
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #8
  %176 = load ptr, ptr %11, align 8, !tbaa !5
  %177 = getelementptr inbounds i32, ptr %176, i64 0
  %178 = load i32, ptr %177, align 4, !tbaa !9
  %179 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %178)
          to label %180 unwind label %206

180:                                              ; preds = %175
  %181 = zext i1 %179 to i8
  store i8 %181, ptr %23, align 1, !tbaa !15
  %182 = load i32, ptr %8, align 4, !tbaa !9
  %183 = load i32, ptr %9, align 4, !tbaa !9
  %184 = load i8, ptr %23, align 1, !tbaa !15, !range !17, !noundef !18
  %185 = trunc i8 %184 to i1
  %186 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %182, i32 noundef %183, ptr noundef nonnull align 8 dereferenceable(32) %21, i1 noundef zeroext %185, i1 noundef zeroext false)
          to label %187 unwind label %206

187:                                              ; preds = %180
  %188 = load i32, ptr %9, align 4, !tbaa !9
  %189 = load ptr, ptr %11, align 8, !tbaa !5
  %190 = getelementptr inbounds i32, ptr %189, i64 0
  %191 = load i32, ptr %190, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %188, i32 noundef %191)
          to label %192 unwind label %206

192:                                              ; preds = %187
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #8
  br label %212

193:                                              ; preds = %164
  %194 = landingpad { ptr, i32 }
          cleanup
  %195 = extractvalue { ptr, i32 } %194, 0
  store ptr %195, ptr %14, align 8
  %196 = extractvalue { ptr, i32 } %194, 1
  store i32 %196, ptr %15, align 4
  br label %211

197:                                              ; preds = %172
  %198 = landingpad { ptr, i32 }
          cleanup
  %199 = extractvalue { ptr, i32 } %198, 0
  store ptr %199, ptr %14, align 8
  %200 = extractvalue { ptr, i32 } %198, 1
  store i32 %200, ptr %15, align 4
  br label %205

201:                                              ; preds = %174
  %202 = landingpad { ptr, i32 }
          cleanup
  %203 = extractvalue { ptr, i32 } %202, 0
  store ptr %203, ptr %14, align 8
  %204 = extractvalue { ptr, i32 } %202, 1
  store i32 %204, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %205

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

206:                                              ; preds = %187, %180, %175
  %207 = landingpad { ptr, i32 }
          cleanup
  %208 = extractvalue { ptr, i32 } %207, 0
  store ptr %208, ptr %14, align 8
  %209 = extractvalue { ptr, i32 } %207, 1
  store i32 %209, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  br label %210

210:                                              ; preds = %206, %205
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #8
  br label %211

211:                                              ; preds = %210, %193
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #8
  br label %1976

212:                                              ; preds = %192, %158
  br label %1975

213:                                              ; preds = %144
  %214 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %131)
  br i1 %214, label %221, label %215

215:                                              ; preds = %213
  %216 = load i32, ptr %8, align 4, !tbaa !9
  %217 = load i32, ptr %9, align 4, !tbaa !9
  %218 = load ptr, ptr %11, align 8, !tbaa !5
  %219 = getelementptr inbounds i32, ptr %218, i64 0
  %220 = load i32, ptr %219, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %216, i32 noundef %217, i32 noundef %220, ptr noundef @.str.463)
  br label %251

221:                                              ; preds = %213
  %222 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %131, i32 0, i32 9
  %223 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %222, i32 0, i32 1
  %224 = load i8, ptr %223, align 4, !tbaa !19, !range !17, !noundef !18
  %225 = trunc i8 %224 to i1
  br i1 %225, label %243, label %226

226:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef @.str.185, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %227 unwind label %234

227:                                              ; preds = %226
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %228 unwind label %238

228:                                              ; preds = %227
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  %229 = load i32, ptr %8, align 4, !tbaa !9
  %230 = load i32, ptr %9, align 4, !tbaa !9
  %231 = load ptr, ptr %11, align 8, !tbaa !5
  %232 = getelementptr inbounds i32, ptr %231, i64 0
  %233 = load i32, ptr %232, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %229, i32 noundef %230, i32 noundef %233, ptr noundef @.str.462)
  br label %250

234:                                              ; preds = %226
  %235 = landingpad { ptr, i32 }
          cleanup
  %236 = extractvalue { ptr, i32 } %235, 0
  store ptr %236, ptr %14, align 8
  %237 = extractvalue { ptr, i32 } %235, 1
  store i32 %237, ptr %15, align 4
  br label %242

238:                                              ; preds = %227
  %239 = landingpad { ptr, i32 }
          cleanup
  %240 = extractvalue { ptr, i32 } %239, 0
  store ptr %240, ptr %14, align 8
  %241 = extractvalue { ptr, i32 } %239, 1
  store i32 %241, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  br label %242

242:                                              ; preds = %238, %234
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  br label %1976

243:                                              ; preds = %221
  %244 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %244, ptr noundef @.str.1104)
          to label %245 unwind label %246

245:                                              ; preds = %243
  call void @__cxa_throw(ptr %244, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

246:                                              ; preds = %243
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %14, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %15, align 4
  call void @__cxa_free_exception(ptr %244) #8
  br label %1976

250:                                              ; preds = %228
  br label %251

251:                                              ; preds = %250, %215
  br label %1975

252:                                              ; preds = %144
  %253 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %131)
  br i1 %253, label %260, label %254

254:                                              ; preds = %252
  %255 = load i32, ptr %8, align 4, !tbaa !9
  %256 = load i32, ptr %9, align 4, !tbaa !9
  %257 = load ptr, ptr %11, align 8, !tbaa !5
  %258 = getelementptr inbounds i32, ptr %257, i64 0
  %259 = load i32, ptr %258, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %255, i32 noundef %256, i32 noundef %259, ptr noundef @.str.494)
  br label %327

260:                                              ; preds = %252
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #8
  %261 = load ptr, ptr %11, align 8, !tbaa !5
  %262 = getelementptr inbounds i32, ptr %261, i64 0
  %263 = load i32, ptr %262, align 4, !tbaa !9
  %264 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %263)
  %265 = zext i1 %264 to i8
  store i8 %265, ptr %26, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #8
  %266 = load ptr, ptr %11, align 8, !tbaa !5
  %267 = getelementptr inbounds i32, ptr %266, i64 0
  %268 = load i32, ptr %267, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %268, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %269 = load ptr, ptr %11, align 8, !tbaa !5
  %270 = getelementptr inbounds i32, ptr %269, i64 0
  %271 = load i32, ptr %270, align 4, !tbaa !9
  %272 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %271)
          to label %273 unwind label %298

273:                                              ; preds = %260
  store ptr %272, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 336, ptr %29) #8
  %274 = load ptr, ptr %28, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %29, ptr noundef nonnull align 8 dereferenceable(336) %274)
          to label %275 unwind label %302

275:                                              ; preds = %273
  %276 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %29, i32 0, i32 2
  store i32 7, ptr %276, align 8, !tbaa !126
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %31) #8
  %277 = load ptr, ptr %28, align 8, !tbaa !5
  %278 = load ptr, ptr %131, align 8, !tbaa !140
  %279 = getelementptr inbounds ptr, ptr %278, i64 19
  %280 = load ptr, ptr %279, align 8
  invoke void %280(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %277, i32 noundef 0)
          to label %281 unwind label %306

281:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #8
  %282 = load ptr, ptr %131, align 8, !tbaa !140
  %283 = getelementptr inbounds ptr, ptr %282, i64 19
  %284 = load ptr, ptr %283, align 8
  invoke void %284(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %29, i32 noundef 0)
          to label %285 unwind label %310

285:                                              ; preds = %281
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_S9_RS6_RA3_S7_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %286 unwind label %314

286:                                              ; preds = %285
  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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #8
  %287 = load i32, ptr %8, align 4, !tbaa !9
  %288 = load i32, ptr %9, align 4, !tbaa !9
  %289 = load i8, ptr %26, align 1, !tbaa !15, !range !17, !noundef !18
  %290 = trunc i8 %289 to i1
  %291 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %287, i32 noundef %288, ptr noundef nonnull align 8 dereferenceable(32) %30, i1 noundef zeroext %290, i1 noundef zeroext false)
          to label %292 unwind label %320

292:                                              ; preds = %286
  %293 = load i32, ptr %9, align 4, !tbaa !9
  %294 = load ptr, ptr %11, align 8, !tbaa !5
  %295 = getelementptr inbounds i32, ptr %294, i64 0
  %296 = load i32, ptr %295, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %293, i32 noundef %296)
          to label %297 unwind label %320

297:                                              ; preds = %292
  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
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %29) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #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 @llvm.lifetime.end.p0(i64 1, ptr %26) #8
  br label %327

298:                                              ; preds = %260
  %299 = landingpad { ptr, i32 }
          cleanup
  %300 = extractvalue { ptr, i32 } %299, 0
  store ptr %300, ptr %14, align 8
  %301 = extractvalue { ptr, i32 } %299, 1
  store i32 %301, ptr %15, align 4
  br label %326

302:                                              ; preds = %273
  %303 = landingpad { ptr, i32 }
          cleanup
  %304 = extractvalue { ptr, i32 } %303, 0
  store ptr %304, ptr %14, align 8
  %305 = extractvalue { ptr, i32 } %303, 1
  store i32 %305, ptr %15, align 4
  br label %325

306:                                              ; preds = %275
  %307 = landingpad { ptr, i32 }
          cleanup
  %308 = extractvalue { ptr, i32 } %307, 0
  store ptr %308, ptr %14, align 8
  %309 = extractvalue { ptr, i32 } %307, 1
  store i32 %309, ptr %15, align 4
  br label %319

310:                                              ; preds = %281
  %311 = landingpad { ptr, i32 }
          cleanup
  %312 = extractvalue { ptr, i32 } %311, 0
  store ptr %312, ptr %14, align 8
  %313 = extractvalue { ptr, i32 } %311, 1
  store i32 %313, ptr %15, align 4
  br label %318

314:                                              ; preds = %285
  %315 = landingpad { ptr, i32 }
          cleanup
  %316 = extractvalue { ptr, i32 } %315, 0
  store ptr %316, ptr %14, align 8
  %317 = extractvalue { ptr, i32 } %315, 1
  store i32 %317, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  br label %318

318:                                              ; preds = %314, %310
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  br label %319

319:                                              ; preds = %318, %306
  call void @llvm.lifetime.end.p0(i64 32, ptr %31) #8
  br label %324

320:                                              ; preds = %292, %286
  %321 = landingpad { ptr, i32 }
          cleanup
  %322 = extractvalue { ptr, i32 } %321, 0
  store ptr %322, ptr %14, align 8
  %323 = extractvalue { ptr, i32 } %321, 1
  store i32 %323, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  br label %324

324:                                              ; preds = %320, %319
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %29) #8
  br label %325

325:                                              ; preds = %324, %302
  call void @llvm.lifetime.end.p0(i64 336, ptr %29) #8
  br label %326

326:                                              ; preds = %325, %298
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #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 @llvm.lifetime.end.p0(i64 1, ptr %26) #8
  br label %1976

327:                                              ; preds = %297, %254
  br label %1975

328:                                              ; preds = %144
  %329 = load i32, ptr %8, align 4, !tbaa !9
  %330 = load i32, ptr %9, align 4, !tbaa !9
  %331 = load ptr, ptr %11, align 8, !tbaa !5
  %332 = getelementptr inbounds i32, ptr %331, i64 0
  %333 = load i32, ptr %332, align 4, !tbaa !9
  %334 = load i32, ptr %17, align 4, !tbaa !13
  %335 = load i32, ptr %17, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %329, i32 noundef %330, i32 noundef %333, ptr noundef @.str.340, i32 noundef %334, i32 noundef %335)
  br label %1975

336:                                              ; preds = %144
  %337 = load i32, ptr %8, align 4, !tbaa !9
  %338 = load i32, ptr %9, align 4, !tbaa !9
  %339 = load ptr, ptr %11, align 8, !tbaa !5
  %340 = getelementptr inbounds i32, ptr %339, i64 0
  %341 = load i32, ptr %340, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %337, i32 noundef %338, i32 noundef %341, ptr noundef @.str.340)
  br label %1975

342:                                              ; preds = %144
  %343 = load i32, ptr %8, align 4, !tbaa !9
  %344 = load i32, ptr %9, align 4, !tbaa !9
  %345 = load ptr, ptr %11, align 8, !tbaa !5
  %346 = getelementptr inbounds i32, ptr %345, i64 0
  %347 = load i32, ptr %346, align 4, !tbaa !9
  %348 = load i32, ptr %17, align 4, !tbaa !13
  %349 = load i32, ptr %17, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %343, i32 noundef %344, i32 noundef %347, ptr noundef @.str.464, i32 noundef %348, i32 noundef %349)
  br label %1975

350:                                              ; preds = %144
  %351 = load i32, ptr %8, align 4, !tbaa !9
  %352 = load i32, ptr %9, align 4, !tbaa !9
  %353 = load ptr, ptr %11, align 8, !tbaa !5
  %354 = getelementptr inbounds i32, ptr %353, i64 0
  %355 = load i32, ptr %354, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %351, i32 noundef %352, i32 noundef %355, ptr noundef @.str.464)
  br label %1975

356:                                              ; preds = %144
  %357 = load i32, ptr %8, align 4, !tbaa !9
  %358 = load i32, ptr %9, align 4, !tbaa !9
  %359 = load ptr, ptr %11, align 8, !tbaa !5
  %360 = getelementptr inbounds i32, ptr %359, i64 0
  %361 = load i32, ptr %360, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %357, i32 noundef %358, i32 noundef %361, ptr noundef @.str.390)
  br label %1975

362:                                              ; preds = %144
  %363 = load i32, ptr %8, align 4, !tbaa !9
  %364 = load i32, ptr %9, align 4, !tbaa !9
  %365 = load ptr, ptr %11, align 8, !tbaa !5
  %366 = getelementptr inbounds i32, ptr %365, i64 0
  %367 = load i32, ptr %366, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %363, i32 noundef %364, i32 noundef %367, ptr noundef @.str.363)
  br label %1975

368:                                              ; preds = %144
  %369 = load i32, ptr %8, align 4, !tbaa !9
  %370 = load i32, ptr %9, align 4, !tbaa !9
  %371 = load ptr, ptr %11, align 8, !tbaa !5
  %372 = getelementptr inbounds i32, ptr %371, i64 0
  %373 = load i32, ptr %372, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %369, i32 noundef %370, i32 noundef %373, ptr noundef @.str.392)
  br label %1975

374:                                              ; preds = %144
  %375 = load i32, ptr %8, align 4, !tbaa !9
  %376 = load i32, ptr %9, align 4, !tbaa !9
  %377 = load ptr, ptr %11, align 8, !tbaa !5
  %378 = getelementptr inbounds i32, ptr %377, i64 0
  %379 = load i32, ptr %378, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %375, i32 noundef %376, i32 noundef %379, ptr noundef @.str.459)
  br label %1975

380:                                              ; preds = %144
  %381 = load i32, ptr %8, align 4, !tbaa !9
  %382 = load i32, ptr %9, align 4, !tbaa !9
  %383 = load ptr, ptr %11, align 8, !tbaa !5
  %384 = getelementptr inbounds i32, ptr %383, i64 0
  %385 = load i32, ptr %384, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %381, i32 noundef %382, i32 noundef %385, ptr noundef @.str.367)
  br label %1975

386:                                              ; preds = %144
  %387 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %131, i32 0, i32 9
  %388 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %387, i32 0, i32 1
  %389 = load i8, ptr %388, align 4, !tbaa !19, !range !17, !noundef !18
  %390 = trunc i8 %389 to i1
  br i1 %390, label %396, label %391

391:                                              ; preds = %386
  %392 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %131, i32 0, i32 9
  %393 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %392, i32 0, i32 0
  %394 = load i32, ptr %393, align 4, !tbaa !142
  %395 = icmp ult i32 %394, 400
  br i1 %395, label %406, label %396

396:                                              ; preds = %391, %386
  %397 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %131, i32 0, i32 9
  %398 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %397, i32 0, i32 1
  %399 = load i8, ptr %398, align 4, !tbaa !19, !range !17, !noundef !18
  %400 = trunc i8 %399 to i1
  br i1 %400, label %401, label %482

401:                                              ; preds = %396
  %402 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %131, i32 0, i32 9
  %403 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %402, i32 0, i32 0
  %404 = load i32, ptr %403, align 4, !tbaa !142
  %405 = icmp ult i32 %404, 320
  br i1 %405, label %406, label %482

406:                                              ; preds = %401, %391
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #8
  %407 = load ptr, ptr %11, align 8, !tbaa !5
  %408 = getelementptr inbounds i32, ptr %407, i64 0
  %409 = load i32, ptr %408, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %409, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #8
  %410 = load ptr, ptr %11, align 8, !tbaa !5
  %411 = getelementptr inbounds i32, ptr %410, i64 1
  %412 = load i32, ptr %411, align 4, !tbaa !9
  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) %131, i32 noundef %412, i1 noundef zeroext true)
          to label %413 unwind label %446

413:                                              ; preds = %406
  call void @llvm.lifetime.start.p0(i64 32, ptr %36) #8
  %414 = load ptr, ptr %11, align 8, !tbaa !5
  %415 = getelementptr inbounds i32, ptr %414, i64 2
  %416 = load i32, ptr %415, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %416, i1 noundef zeroext true)
          to label %417 unwind label %450

417:                                              ; preds = %413
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_S9_S6_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 1 dereferenceable(4) @.str.1102, ptr noundef nonnull align 8 dereferenceable(32) %36)
          to label %418 unwind label %454

418:                                              ; preds = %417
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #8
  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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #8
  %419 = load i32, ptr %8, align 4, !tbaa !9
  %420 = load i32, ptr %9, align 4, !tbaa !9
  %421 = load ptr, ptr %11, align 8, !tbaa !5
  %422 = getelementptr inbounds i32, ptr %421, i64 0
  %423 = load i32, ptr %422, align 4, !tbaa !9
  %424 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %423)
          to label %425 unwind label %460

425:                                              ; preds = %418
  br i1 %424, label %426, label %438

426:                                              ; preds = %425
  %427 = load ptr, ptr %11, align 8, !tbaa !5
  %428 = getelementptr inbounds i32, ptr %427, i64 1
  %429 = load i32, ptr %428, align 4, !tbaa !9
  %430 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %429)
          to label %431 unwind label %460

431:                                              ; preds = %426
  br i1 %430, label %432, label %438

432:                                              ; preds = %431
  %433 = load ptr, ptr %11, align 8, !tbaa !5
  %434 = getelementptr inbounds i32, ptr %433, i64 2
  %435 = load i32, ptr %434, align 4, !tbaa !9
  %436 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %435)
          to label %437 unwind label %460

437:                                              ; preds = %432
  br label %438

438:                                              ; preds = %437, %431, %425
  %439 = phi i1 [ false, %431 ], [ false, %425 ], [ %436, %437 ]
  %440 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %419, i32 noundef %420, ptr noundef nonnull align 8 dereferenceable(32) %33, i1 noundef zeroext %439, i1 noundef zeroext false)
          to label %441 unwind label %460

441:                                              ; preds = %438
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %442

442:                                              ; preds = %472, %441
  %443 = load i32, ptr %37, align 4, !tbaa !9
  %444 = icmp ult i32 %443, 3
  br i1 %444, label %464, label %445

445:                                              ; preds = %442
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  br label %479

446:                                              ; preds = %406
  %447 = landingpad { ptr, i32 }
          cleanup
  %448 = extractvalue { ptr, i32 } %447, 0
  store ptr %448, ptr %14, align 8
  %449 = extractvalue { ptr, i32 } %447, 1
  store i32 %449, ptr %15, align 4
  br label %459

450:                                              ; preds = %413
  %451 = landingpad { ptr, i32 }
          cleanup
  %452 = extractvalue { ptr, i32 } %451, 0
  store ptr %452, ptr %14, align 8
  %453 = extractvalue { ptr, i32 } %451, 1
  store i32 %453, ptr %15, align 4
  br label %458

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

458:                                              ; preds = %454, %450
  call void @llvm.lifetime.end.p0(i64 32, ptr %36) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  br label %459

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

460:                                              ; preds = %438, %432, %426, %418
  %461 = landingpad { ptr, i32 }
          cleanup
  %462 = extractvalue { ptr, i32 } %461, 0
  store ptr %462, ptr %14, align 8
  %463 = extractvalue { ptr, i32 } %461, 1
  store i32 %463, ptr %15, align 4
  br label %480

464:                                              ; preds = %442
  %465 = load i32, ptr %9, align 4, !tbaa !9
  %466 = load ptr, ptr %11, align 8, !tbaa !5
  %467 = load i32, ptr %37, align 4, !tbaa !9
  %468 = zext i32 %467 to i64
  %469 = getelementptr inbounds i32, ptr %466, i64 %468
  %470 = load i32, ptr %469, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %465, i32 noundef %470)
          to label %471 unwind label %475

471:                                              ; preds = %464
  br label %472

472:                                              ; preds = %471
  %473 = load i32, ptr %37, align 4, !tbaa !9
  %474 = add i32 %473, 1
  store i32 %474, ptr %37, align 4, !tbaa !9
  br label %442, !llvm.loop !143

475:                                              ; preds = %464
  %476 = landingpad { ptr, i32 }
          cleanup
  %477 = extractvalue { ptr, i32 } %476, 0
  store ptr %477, ptr %14, align 8
  %478 = extractvalue { ptr, i32 } %476, 1
  store i32 %478, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  br label %480

479:                                              ; preds = %445
  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
  br label %494

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

481:                                              ; preds = %480, %459
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #8
  br label %1976

482:                                              ; preds = %401, %396
  %483 = load i32, ptr %8, align 4, !tbaa !9
  %484 = load i32, ptr %9, align 4, !tbaa !9
  %485 = load ptr, ptr %11, align 8, !tbaa !5
  %486 = getelementptr inbounds i32, ptr %485, i64 0
  %487 = load i32, ptr %486, align 4, !tbaa !9
  %488 = load ptr, ptr %11, align 8, !tbaa !5
  %489 = getelementptr inbounds i32, ptr %488, i64 1
  %490 = load i32, ptr %489, align 4, !tbaa !9
  %491 = load ptr, ptr %11, align 8, !tbaa !5
  %492 = getelementptr inbounds i32, ptr %491, i64 2
  %493 = load i32, ptr %492, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %483, i32 noundef %484, i32 noundef %487, i32 noundef %490, i32 noundef %493, ptr noundef @.str.391)
  br label %494

494:                                              ; preds = %482, %479
  br label %1975

495:                                              ; preds = %144
  %496 = load ptr, ptr %11, align 8, !tbaa !5
  %497 = getelementptr inbounds i32, ptr %496, i64 1
  %498 = load i32, ptr %497, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL26register_call_out_argumentEj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %498)
  %499 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %131)
  br i1 %499, label %515, label %500

500:                                              ; preds = %495
  %501 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %131, i32 0, i32 15
  %502 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %501, ptr noundef nonnull align 4 dereferenceable(4) %9)
  %503 = getelementptr inbounds { ptr, i8 }, ptr %38, i32 0, i32 0
  %504 = extractvalue { ptr, i8 } %502, 0
  store ptr %504, ptr %503, align 8
  %505 = getelementptr inbounds { ptr, i8 }, ptr %38, i32 0, i32 1
  %506 = extractvalue { ptr, i8 } %502, 1
  store i8 %506, ptr %505, align 8
  %507 = load i32, ptr %8, align 4, !tbaa !9
  %508 = load i32, ptr %9, align 4, !tbaa !9
  %509 = load ptr, ptr %11, align 8, !tbaa !5
  %510 = getelementptr inbounds i32, ptr %509, i64 0
  %511 = load i32, ptr %510, align 4, !tbaa !9
  %512 = load ptr, ptr %11, align 8, !tbaa !5
  %513 = getelementptr inbounds i32, ptr %512, i64 1
  %514 = load i32, ptr %513, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %507, i32 noundef %508, i32 noundef %511, i32 noundef %514, ptr noundef @.str.438)
  br label %578

515:                                              ; preds = %495
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  %516 = load ptr, ptr %11, align 8, !tbaa !5
  %517 = getelementptr inbounds i32, ptr %516, i64 1
  %518 = load i32, ptr %517, align 4, !tbaa !9
  %519 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %518)
  store ptr %519, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 336, ptr %40) #8
  %520 = load ptr, ptr %39, align 8, !tbaa !5
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %40, ptr noundef nonnull align 8 dereferenceable(336) %520)
  %521 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %40, i32 0, i32 2
  store i32 7, ptr %521, align 8, !tbaa !126
  call void @llvm.lifetime.start.p0(i64 32, ptr %41) #8
  %522 = load ptr, ptr %11, align 8, !tbaa !5
  %523 = getelementptr inbounds i32, ptr %522, i64 1
  %524 = load i32, ptr %523, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %524, i1 noundef zeroext true)
          to label %525 unwind label %549

525:                                              ; preds = %515
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #8
  %526 = load ptr, ptr %39, align 8, !tbaa !5
  %527 = load ptr, ptr %131, align 8, !tbaa !140
  %528 = getelementptr inbounds ptr, ptr %527, i64 19
  %529 = load ptr, ptr %528, align 8
  invoke void %529(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %42, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %526, i32 noundef 0)
          to label %530 unwind label %553

530:                                              ; preds = %525
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #8
  %531 = load ptr, ptr %131, align 8, !tbaa !140
  %532 = getelementptr inbounds ptr, ptr %531, i64 19
  %533 = load ptr, ptr %532, align 8
  invoke void %533(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %40, i32 noundef 0)
          to label %534 unwind label %557

534:                                              ; preds = %530
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #8
  %535 = load ptr, ptr %11, align 8, !tbaa !5
  %536 = getelementptr inbounds i32, ptr %535, i64 0
  %537 = load i32, ptr %536, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %537, i1 noundef zeroext true)
          to label %538 unwind label %561

538:                                              ; preds = %534
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S8_S7_SC_S7_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef nonnull align 1 dereferenceable(4) @.str.1105)
          to label %539 unwind label %565

539:                                              ; preds = %538
  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 @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #8
  %540 = load i32, ptr %8, align 4, !tbaa !9
  %541 = load i32, ptr %9, align 4, !tbaa !9
  %542 = load ptr, ptr %11, align 8, !tbaa !5
  %543 = getelementptr inbounds i32, ptr %542, i64 0
  %544 = load i32, ptr %543, align 4, !tbaa !9
  %545 = load ptr, ptr %11, align 8, !tbaa !5
  %546 = getelementptr inbounds i32, ptr %545, i64 1
  %547 = load i32, ptr %546, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %540, i32 noundef %541, i32 noundef %544, i32 noundef %547, ptr noundef @.str.955)
          to label %548 unwind label %573

548:                                              ; preds = %539
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %40) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %578

549:                                              ; preds = %515
  %550 = landingpad { ptr, i32 }
          cleanup
  %551 = extractvalue { ptr, i32 } %550, 0
  store ptr %551, ptr %14, align 8
  %552 = extractvalue { ptr, i32 } %550, 1
  store i32 %552, ptr %15, align 4
  br label %572

553:                                              ; preds = %525
  %554 = landingpad { ptr, i32 }
          cleanup
  %555 = extractvalue { ptr, i32 } %554, 0
  store ptr %555, ptr %14, align 8
  %556 = extractvalue { ptr, i32 } %554, 1
  store i32 %556, ptr %15, align 4
  br label %571

557:                                              ; preds = %530
  %558 = landingpad { ptr, i32 }
          cleanup
  %559 = extractvalue { ptr, i32 } %558, 0
  store ptr %559, ptr %14, align 8
  %560 = extractvalue { ptr, i32 } %558, 1
  store i32 %560, ptr %15, align 4
  br label %570

561:                                              ; preds = %534
  %562 = landingpad { ptr, i32 }
          cleanup
  %563 = extractvalue { ptr, i32 } %562, 0
  store ptr %563, ptr %14, align 8
  %564 = extractvalue { ptr, i32 } %562, 1
  store i32 %564, ptr %15, align 4
  br label %569

565:                                              ; preds = %538
  %566 = landingpad { ptr, i32 }
          cleanup
  %567 = extractvalue { ptr, i32 } %566, 0
  store ptr %567, ptr %14, align 8
  %568 = extractvalue { ptr, i32 } %566, 1
  store i32 %568, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  br label %569

569:                                              ; preds = %565, %561
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  br label %570

570:                                              ; preds = %569, %557
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #8
  br label %571

571:                                              ; preds = %570, %553
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  br label %572

572:                                              ; preds = %571, %549
  call void @llvm.lifetime.end.p0(i64 32, ptr %41) #8
  br label %577

573:                                              ; preds = %539
  %574 = landingpad { ptr, i32 }
          cleanup
  %575 = extractvalue { ptr, i32 } %574, 0
  store ptr %575, ptr %14, align 8
  %576 = extractvalue { ptr, i32 } %574, 1
  store i32 %576, ptr %15, align 4
  br label %577

577:                                              ; preds = %573, %572
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %40) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %1976

578:                                              ; preds = %548, %500
  br label %1975

579:                                              ; preds = %144
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #8
  %580 = load i32, ptr %8, align 4, !tbaa !9
  %581 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %580)
  store ptr %581, ptr %45, align 8, !tbaa !5
  %582 = load i32, ptr %8, align 4, !tbaa !9
  %583 = load i32, ptr %9, align 4, !tbaa !9
  %584 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %582, i32 noundef %583)
  %585 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %131)
  br i1 %585, label %623, label %586

586:                                              ; preds = %579
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #8
  %587 = load i32, ptr %9, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %587, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #8
  %588 = load ptr, ptr %45, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %588, i32 noundef 0)
          to label %589 unwind label %599

589:                                              ; preds = %586
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #8
  %590 = load ptr, ptr %11, align 8, !tbaa !5
  %591 = getelementptr inbounds i32, ptr %590, i64 0
  %592 = load i32, ptr %591, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %48, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %592, i1 noundef zeroext true)
          to label %593 unwind label %603

593:                                              ; preds = %589
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #8
  %594 = load i32, ptr %9, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %594, i1 noundef zeroext true)
          to label %595 unwind label %607

595:                                              ; preds = %593
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #8
  %596 = load ptr, ptr %45, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %50, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %596, i32 noundef 1)
          to label %597 unwind label %611

597:                                              ; preds = %595
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_RA6_S8_S7_RA3_S8_S7_SA_S7_SG_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 1 dereferenceable(6) @.str.1106, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %598 unwind label %615

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

599:                                              ; preds = %586
  %600 = landingpad { ptr, i32 }
          cleanup
  %601 = extractvalue { ptr, i32 } %600, 0
  store ptr %601, ptr %14, align 8
  %602 = extractvalue { ptr, i32 } %600, 1
  store i32 %602, ptr %15, align 4
  br label %622

603:                                              ; preds = %589
  %604 = landingpad { ptr, i32 }
          cleanup
  %605 = extractvalue { ptr, i32 } %604, 0
  store ptr %605, ptr %14, align 8
  %606 = extractvalue { ptr, i32 } %604, 1
  store i32 %606, ptr %15, align 4
  br label %621

607:                                              ; preds = %593
  %608 = landingpad { ptr, i32 }
          cleanup
  %609 = extractvalue { ptr, i32 } %608, 0
  store ptr %609, ptr %14, align 8
  %610 = extractvalue { ptr, i32 } %608, 1
  store i32 %610, ptr %15, align 4
  br label %620

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

615:                                              ; preds = %597
  %616 = landingpad { ptr, i32 }
          cleanup
  %617 = extractvalue { ptr, i32 } %616, 0
  store ptr %617, ptr %14, align 8
  %618 = extractvalue { ptr, i32 } %616, 1
  store i32 %618, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  br label %619

619:                                              ; preds = %615, %611
  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 %620

620:                                              ; preds = %619, %607
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  br label %621

621:                                              ; preds = %620, %603
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  br label %622

622:                                              ; preds = %621, %599
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #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
  br label %721

623:                                              ; preds = %579
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #8
  %624 = load ptr, ptr %11, align 8, !tbaa !5
  %625 = getelementptr inbounds i32, ptr %624, i64 0
  %626 = load i32, ptr %625, align 4, !tbaa !9
  %627 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %626)
  store ptr %627, ptr %51, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 336, ptr %52) #8
  %628 = load ptr, ptr %51, align 8, !tbaa !5
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %52, ptr noundef nonnull align 8 dereferenceable(336) %628)
  %629 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %52, i32 0, i32 2
  store i32 7, ptr %629, align 8, !tbaa !126
  call void @llvm.lifetime.start.p0(i64 32, ptr %53) #8
  %630 = load i32, ptr %9, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %630, i1 noundef zeroext true)
          to label %631 unwind label %661

631:                                              ; preds = %623
  call void @llvm.lifetime.start.p0(i64 32, ptr %54) #8
  %632 = load ptr, ptr %45, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %632, i32 noundef 1)
          to label %633 unwind label %665

633:                                              ; preds = %631
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #8
  %634 = load ptr, ptr %51, align 8, !tbaa !5
  %635 = load ptr, ptr %131, align 8, !tbaa !140
  %636 = getelementptr inbounds ptr, ptr %635, i64 19
  %637 = load ptr, ptr %636, align 8
  invoke void %637(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %634, i32 noundef 0)
          to label %638 unwind label %669

638:                                              ; preds = %633
  call void @llvm.lifetime.start.p0(i64 32, ptr %56) #8
  %639 = load ptr, ptr %131, align 8, !tbaa !140
  %640 = getelementptr inbounds ptr, ptr %639, i64 19
  %641 = load ptr, ptr %640, align 8
  invoke void %641(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %52, i32 noundef 0)
          to label %642 unwind label %673

642:                                              ; preds = %638
  call void @llvm.lifetime.start.p0(i64 32, ptr %57) #8
  %643 = load ptr, ptr %11, align 8, !tbaa !5
  %644 = getelementptr inbounds i32, ptr %643, i64 0
  %645 = load i32, ptr %644, align 4, !tbaa !9
  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) %131, i32 noundef %645, i1 noundef zeroext true)
          to label %646 unwind label %677

646:                                              ; preds = %642
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_S7_SA_S7_SA_S7_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull align 1 dereferenceable(4) @.str.1105)
          to label %647 unwind label %681

647:                                              ; preds = %646
  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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #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.start.p0(i64 32, ptr %58) #8
  %648 = load i32, ptr %9, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %648, i1 noundef zeroext true)
          to label %649 unwind label %690

649:                                              ; preds = %647
  call void @llvm.lifetime.start.p0(i64 32, ptr %59) #8
  %650 = load ptr, ptr %45, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %650, i32 noundef 0)
          to label %651 unwind label %694

651:                                              ; preds = %649
  call void @llvm.lifetime.start.p0(i64 32, ptr %60) #8
  %652 = load ptr, ptr %11, align 8, !tbaa !5
  %653 = getelementptr inbounds i32, ptr %652, i64 0
  %654 = load i32, ptr %653, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %654, i1 noundef zeroext true)
          to label %655 unwind label %698

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

657:                                              ; preds = %655
  call void @llvm.lifetime.start.p0(i64 32, ptr %62) #8
  %658 = load ptr, ptr %45, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %62, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %658, i32 noundef 1)
          to label %659 unwind label %706

659:                                              ; preds = %657
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_S7_SC_S7_SA_S7_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 1 dereferenceable(4) @.str.975, ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %660 unwind label %710

660:                                              ; preds = %659
  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
  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
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #8
  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
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %52) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  br label %720

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

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

669:                                              ; preds = %633
  %670 = landingpad { ptr, i32 }
          cleanup
  %671 = extractvalue { ptr, i32 } %670, 0
  store ptr %671, ptr %14, align 8
  %672 = extractvalue { ptr, i32 } %670, 1
  store i32 %672, ptr %15, align 4
  br label %687

673:                                              ; preds = %638
  %674 = landingpad { ptr, i32 }
          cleanup
  %675 = extractvalue { ptr, i32 } %674, 0
  store ptr %675, ptr %14, align 8
  %676 = extractvalue { ptr, i32 } %674, 1
  store i32 %676, ptr %15, align 4
  br label %686

677:                                              ; preds = %642
  %678 = landingpad { ptr, i32 }
          cleanup
  %679 = extractvalue { ptr, i32 } %678, 0
  store ptr %679, ptr %14, align 8
  %680 = extractvalue { ptr, i32 } %678, 1
  store i32 %680, ptr %15, align 4
  br label %685

681:                                              ; preds = %646
  %682 = landingpad { ptr, i32 }
          cleanup
  %683 = extractvalue { ptr, i32 } %682, 0
  store ptr %683, ptr %14, align 8
  %684 = extractvalue { ptr, i32 } %682, 1
  store i32 %684, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  br label %685

685:                                              ; preds = %681, %677
  call void @llvm.lifetime.end.p0(i64 32, ptr %57) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  br label %686

686:                                              ; preds = %685, %673
  call void @llvm.lifetime.end.p0(i64 32, ptr %56) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  br label %687

687:                                              ; preds = %686, %669
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  br label %688

688:                                              ; preds = %687, %665
  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 %689

689:                                              ; preds = %688, %661
  call void @llvm.lifetime.end.p0(i64 32, ptr %53) #8
  br label %719

690:                                              ; preds = %647
  %691 = landingpad { ptr, i32 }
          cleanup
  %692 = extractvalue { ptr, i32 } %691, 0
  store ptr %692, ptr %14, align 8
  %693 = extractvalue { ptr, i32 } %691, 1
  store i32 %693, ptr %15, align 4
  br label %718

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

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

702:                                              ; preds = %655
  %703 = landingpad { ptr, i32 }
          cleanup
  %704 = extractvalue { ptr, i32 } %703, 0
  store ptr %704, ptr %14, align 8
  %705 = extractvalue { ptr, i32 } %703, 1
  store i32 %705, ptr %15, align 4
  br label %715

706:                                              ; preds = %657
  %707 = landingpad { ptr, i32 }
          cleanup
  %708 = extractvalue { ptr, i32 } %707, 0
  store ptr %708, ptr %14, align 8
  %709 = extractvalue { ptr, i32 } %707, 1
  store i32 %709, ptr %15, align 4
  br label %714

710:                                              ; preds = %659
  %711 = landingpad { ptr, i32 }
          cleanup
  %712 = extractvalue { ptr, i32 } %711, 0
  store ptr %712, ptr %14, align 8
  %713 = extractvalue { ptr, i32 } %711, 1
  store i32 %713, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #8
  br label %714

714:                                              ; preds = %710, %706
  call void @llvm.lifetime.end.p0(i64 32, ptr %62) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  br label %715

715:                                              ; preds = %714, %702
  call void @llvm.lifetime.end.p0(i64 32, ptr %61) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  br label %716

716:                                              ; preds = %715, %698
  call void @llvm.lifetime.end.p0(i64 32, ptr %60) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  br label %717

717:                                              ; preds = %716, %694
  call void @llvm.lifetime.end.p0(i64 32, ptr %59) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  br label %718

718:                                              ; preds = %717, %690
  call void @llvm.lifetime.end.p0(i64 32, ptr %58) #8
  br label %719

719:                                              ; preds = %718, %689
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %52) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  br label %721

720:                                              ; preds = %660, %598
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %1975

721:                                              ; preds = %719, %622
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #8
  br label %1976

722:                                              ; preds = %144
  %723 = load i32, ptr %8, align 4, !tbaa !9
  %724 = load i32, ptr %9, align 4, !tbaa !9
  %725 = load ptr, ptr %11, align 8, !tbaa !5
  %726 = getelementptr inbounds i32, ptr %725, i64 0
  %727 = load i32, ptr %726, align 4, !tbaa !9
  %728 = load ptr, ptr %11, align 8, !tbaa !5
  %729 = getelementptr inbounds i32, ptr %728, i64 1
  %730 = load i32, ptr %729, align 4, !tbaa !9
  %731 = load i32, ptr %18, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %723, i32 noundef %724, i32 noundef %727, i32 noundef %730, ptr noundef @.str.435, i32 noundef %731, i1 noundef zeroext false)
  br label %1975

732:                                              ; preds = %144
  %733 = load i32, ptr %8, align 4, !tbaa !9
  %734 = load i32, ptr %9, align 4, !tbaa !9
  %735 = load ptr, ptr %11, align 8, !tbaa !5
  %736 = getelementptr inbounds i32, ptr %735, i64 0
  %737 = load i32, ptr %736, align 4, !tbaa !9
  %738 = load ptr, ptr %11, align 8, !tbaa !5
  %739 = getelementptr inbounds i32, ptr %738, i64 1
  %740 = load i32, ptr %739, align 4, !tbaa !9
  %741 = load i32, ptr %17, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %733, i32 noundef %734, i32 noundef %737, i32 noundef %740, ptr noundef @.str.435, i32 noundef %741, i1 noundef zeroext false)
  br label %1975

742:                                              ; preds = %144
  %743 = load i32, ptr %8, align 4, !tbaa !9
  %744 = load i32, ptr %9, align 4, !tbaa !9
  %745 = load ptr, ptr %11, align 8, !tbaa !5
  %746 = getelementptr inbounds i32, ptr %745, i64 0
  %747 = load i32, ptr %746, align 4, !tbaa !9
  %748 = load ptr, ptr %11, align 8, !tbaa !5
  %749 = getelementptr inbounds i32, ptr %748, i64 1
  %750 = load i32, ptr %749, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %743, i32 noundef %744, i32 noundef %747, i32 noundef %750, ptr noundef @.str.435)
  br label %1975

751:                                              ; preds = %144
  %752 = load i32, ptr %8, align 4, !tbaa !9
  %753 = load i32, ptr %9, align 4, !tbaa !9
  %754 = load ptr, ptr %11, align 8, !tbaa !5
  %755 = getelementptr inbounds i32, ptr %754, i64 0
  %756 = load i32, ptr %755, align 4, !tbaa !9
  %757 = load ptr, ptr %11, align 8, !tbaa !5
  %758 = getelementptr inbounds i32, ptr %757, i64 1
  %759 = load i32, ptr %758, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %752, i32 noundef %753, i32 noundef %756, i32 noundef %759, ptr noundef @.str.429)
  br label %1975

760:                                              ; preds = %144
  %761 = load i32, ptr %8, align 4, !tbaa !9
  %762 = load i32, ptr %9, align 4, !tbaa !9
  %763 = load ptr, ptr %11, align 8, !tbaa !5
  %764 = getelementptr inbounds i32, ptr %763, i64 0
  %765 = load i32, ptr %764, align 4, !tbaa !9
  %766 = load ptr, ptr %11, align 8, !tbaa !5
  %767 = getelementptr inbounds i32, ptr %766, i64 1
  %768 = load i32, ptr %767, align 4, !tbaa !9
  %769 = load i32, ptr %18, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %761, i32 noundef %762, i32 noundef %765, i32 noundef %768, ptr noundef @.str.429, i32 noundef %769, i1 noundef zeroext false)
  br label %1975

770:                                              ; preds = %144
  %771 = load i32, ptr %8, align 4, !tbaa !9
  %772 = load i32, ptr %9, align 4, !tbaa !9
  %773 = load ptr, ptr %11, align 8, !tbaa !5
  %774 = getelementptr inbounds i32, ptr %773, i64 0
  %775 = load i32, ptr %774, align 4, !tbaa !9
  %776 = load ptr, ptr %11, align 8, !tbaa !5
  %777 = getelementptr inbounds i32, ptr %776, i64 1
  %778 = load i32, ptr %777, align 4, !tbaa !9
  %779 = load i32, ptr %17, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %771, i32 noundef %772, i32 noundef %775, i32 noundef %778, ptr noundef @.str.429, i32 noundef %779, i1 noundef zeroext false)
  br label %1975

780:                                              ; preds = %144
  %781 = load i32, ptr %8, align 4, !tbaa !9
  %782 = load i32, ptr %9, align 4, !tbaa !9
  %783 = load ptr, ptr %11, align 8, !tbaa !5
  %784 = getelementptr inbounds i32, ptr %783, i64 0
  %785 = load i32, ptr %784, align 4, !tbaa !9
  %786 = load ptr, ptr %11, align 8, !tbaa !5
  %787 = getelementptr inbounds i32, ptr %786, i64 1
  %788 = load i32, ptr %787, align 4, !tbaa !9
  %789 = load ptr, ptr %11, align 8, !tbaa !5
  %790 = getelementptr inbounds i32, ptr %789, i64 2
  %791 = load i32, ptr %790, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %781, i32 noundef %782, i32 noundef %785, i32 noundef %788, i32 noundef %791, ptr noundef @.str.1107)
  br label %1975

792:                                              ; preds = %144
  %793 = load i32, ptr %8, align 4, !tbaa !9
  %794 = load i32, ptr %9, align 4, !tbaa !9
  %795 = load ptr, ptr %11, align 8, !tbaa !5
  %796 = getelementptr inbounds i32, ptr %795, i64 0
  %797 = load i32, ptr %796, align 4, !tbaa !9
  %798 = load ptr, ptr %11, align 8, !tbaa !5
  %799 = getelementptr inbounds i32, ptr %798, i64 1
  %800 = load i32, ptr %799, align 4, !tbaa !9
  %801 = load ptr, ptr %11, align 8, !tbaa !5
  %802 = getelementptr inbounds i32, ptr %801, i64 2
  %803 = load i32, ptr %802, align 4, !tbaa !9
  %804 = load i32, ptr %18, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL25emit_trinary_func_op_castEjjjjjPKcNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %793, i32 noundef %794, i32 noundef %797, i32 noundef %800, i32 noundef %803, ptr noundef @.str.1107, i32 noundef %804)
  br label %1975

805:                                              ; preds = %144
  %806 = load i32, ptr %8, align 4, !tbaa !9
  %807 = load i32, ptr %9, align 4, !tbaa !9
  %808 = load ptr, ptr %11, align 8, !tbaa !5
  %809 = getelementptr inbounds i32, ptr %808, i64 0
  %810 = load i32, ptr %809, align 4, !tbaa !9
  %811 = load ptr, ptr %11, align 8, !tbaa !5
  %812 = getelementptr inbounds i32, ptr %811, i64 1
  %813 = load i32, ptr %812, align 4, !tbaa !9
  %814 = load ptr, ptr %11, align 8, !tbaa !5
  %815 = getelementptr inbounds i32, ptr %814, i64 2
  %816 = load i32, ptr %815, align 4, !tbaa !9
  %817 = load i32, ptr %17, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL25emit_trinary_func_op_castEjjjjjPKcNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %806, i32 noundef %807, i32 noundef %810, i32 noundef %813, i32 noundef %816, ptr noundef @.str.1107, i32 noundef %817)
  br label %1975

818:                                              ; preds = %144
  %819 = load i32, ptr %8, align 4, !tbaa !9
  %820 = load i32, ptr %9, align 4, !tbaa !9
  %821 = load ptr, ptr %11, align 8, !tbaa !5
  %822 = getelementptr inbounds i32, ptr %821, i64 0
  %823 = load i32, ptr %822, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %819, i32 noundef %820, i32 noundef %823, ptr noundef @.str.465)
  br label %1975

824:                                              ; preds = %144
  %825 = load i32, ptr %8, align 4, !tbaa !9
  %826 = load i32, ptr %9, align 4, !tbaa !9
  %827 = load ptr, ptr %11, align 8, !tbaa !5
  %828 = getelementptr inbounds i32, ptr %827, i64 0
  %829 = load i32, ptr %828, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %825, i32 noundef %826, i32 noundef %829, ptr noundef @.str.364)
  br label %1975

830:                                              ; preds = %144
  %831 = load i32, ptr %8, align 4, !tbaa !9
  %832 = load i32, ptr %9, align 4, !tbaa !9
  %833 = load ptr, ptr %11, align 8, !tbaa !5
  %834 = getelementptr inbounds i32, ptr %833, i64 0
  %835 = load i32, ptr %834, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %831, i32 noundef %832, i32 noundef %835, ptr noundef @.str.470)
  br label %1975

836:                                              ; preds = %144
  %837 = load i32, ptr %8, align 4, !tbaa !9
  %838 = load i32, ptr %9, align 4, !tbaa !9
  %839 = load ptr, ptr %11, align 8, !tbaa !5
  %840 = getelementptr inbounds i32, ptr %839, i64 0
  %841 = load i32, ptr %840, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %837, i32 noundef %838, i32 noundef %841, ptr noundef @.str.345)
  br label %1975

842:                                              ; preds = %144
  %843 = load i32, ptr %8, align 4, !tbaa !9
  %844 = load i32, ptr %9, align 4, !tbaa !9
  %845 = load ptr, ptr %11, align 8, !tbaa !5
  %846 = getelementptr inbounds i32, ptr %845, i64 0
  %847 = load i32, ptr %846, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %843, i32 noundef %844, i32 noundef %847, ptr noundef @.str.341)
  br label %1975

848:                                              ; preds = %144
  %849 = load i32, ptr %8, align 4, !tbaa !9
  %850 = load i32, ptr %9, align 4, !tbaa !9
  %851 = load ptr, ptr %11, align 8, !tbaa !5
  %852 = getelementptr inbounds i32, ptr %851, i64 0
  %853 = load i32, ptr %852, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %849, i32 noundef %850, i32 noundef %853, ptr noundef @.str.347)
  br label %1975

854:                                              ; preds = %144
  %855 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %131)
  br i1 %855, label %862, label %856

856:                                              ; preds = %854
  %857 = load i32, ptr %8, align 4, !tbaa !9
  %858 = load i32, ptr %9, align 4, !tbaa !9
  %859 = load ptr, ptr %11, align 8, !tbaa !5
  %860 = getelementptr inbounds i32, ptr %859, i64 0
  %861 = load i32, ptr %860, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %857, i32 noundef %858, i32 noundef %861, ptr noundef @.str.466)
  br label %901

862:                                              ; preds = %854
  call void @llvm.lifetime.start.p0(i64 1, ptr %63) #8
  %863 = load ptr, ptr %11, align 8, !tbaa !5
  %864 = getelementptr inbounds i32, ptr %863, i64 0
  %865 = load i32, ptr %864, align 4, !tbaa !9
  %866 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %865)
  %867 = zext i1 %866 to i8
  store i8 %867, ptr %63, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %64) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %65) #8
  %868 = load ptr, ptr %11, align 8, !tbaa !5
  %869 = getelementptr inbounds i32, ptr %868, i64 0
  %870 = load i32, ptr %869, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %870, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #8
  %871 = load ptr, ptr %11, align 8, !tbaa !5
  %872 = getelementptr inbounds i32, ptr %871, i64 0
  %873 = load i32, ptr %872, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %873, i1 noundef zeroext true)
          to label %874 unwind label %887

874:                                              ; preds = %862
  invoke void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_S1_S9_RA9_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %64, ptr noundef nonnull align 1 dereferenceable(6) @.str.1108, ptr noundef nonnull align 8 dereferenceable(32) %65, ptr noundef nonnull align 1 dereferenceable(10) @.str.1109, ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 1 dereferenceable(9) @.str.1110)
          to label %875 unwind label %891

875:                                              ; preds = %874
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #8
  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
  %876 = load i32, ptr %8, align 4, !tbaa !9
  %877 = load i32, ptr %9, align 4, !tbaa !9
  %878 = load i8, ptr %63, align 1, !tbaa !15, !range !17, !noundef !18
  %879 = trunc i8 %878 to i1
  %880 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %876, i32 noundef %877, ptr noundef nonnull align 8 dereferenceable(32) %64, i1 noundef zeroext %879, i1 noundef zeroext false)
          to label %881 unwind label %896

881:                                              ; preds = %875
  %882 = load i32, ptr %9, align 4, !tbaa !9
  %883 = load ptr, ptr %11, align 8, !tbaa !5
  %884 = getelementptr inbounds i32, ptr %883, i64 0
  %885 = load i32, ptr %884, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %882, i32 noundef %885)
          to label %886 unwind label %896

886:                                              ; preds = %881
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %63) #8
  br label %901

887:                                              ; preds = %862
  %888 = landingpad { ptr, i32 }
          cleanup
  %889 = extractvalue { ptr, i32 } %888, 0
  store ptr %889, ptr %14, align 8
  %890 = extractvalue { ptr, i32 } %888, 1
  store i32 %890, ptr %15, align 4
  br label %895

891:                                              ; preds = %874
  %892 = landingpad { ptr, i32 }
          cleanup
  %893 = extractvalue { ptr, i32 } %892, 0
  store ptr %893, ptr %14, align 8
  %894 = extractvalue { ptr, i32 } %892, 1
  store i32 %894, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  br label %895

895:                                              ; preds = %891, %887
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #8
  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 %900

896:                                              ; preds = %881, %875
  %897 = landingpad { ptr, i32 }
          cleanup
  %898 = extractvalue { ptr, i32 } %897, 0
  store ptr %898, ptr %14, align 8
  %899 = extractvalue { ptr, i32 } %897, 1
  store i32 %899, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %64) #8
  br label %900

900:                                              ; preds = %896, %895
  call void @llvm.lifetime.end.p0(i64 32, ptr %64) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %63) #8
  br label %1976

901:                                              ; preds = %886, %856
  br label %1975

902:                                              ; preds = %144
  %903 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %131)
  br i1 %903, label %910, label %904

904:                                              ; preds = %902
  %905 = load i32, ptr %8, align 4, !tbaa !9
  %906 = load i32, ptr %9, align 4, !tbaa !9
  %907 = load ptr, ptr %11, align 8, !tbaa !5
  %908 = getelementptr inbounds i32, ptr %907, i64 0
  %909 = load i32, ptr %908, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %905, i32 noundef %906, i32 noundef %909, ptr noundef @.str.365)
  br label %949

910:                                              ; preds = %902
  call void @llvm.lifetime.start.p0(i64 1, ptr %67) #8
  %911 = load ptr, ptr %11, align 8, !tbaa !5
  %912 = getelementptr inbounds i32, ptr %911, i64 0
  %913 = load i32, ptr %912, align 4, !tbaa !9
  %914 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %913)
  %915 = zext i1 %914 to i8
  store i8 %915, ptr %67, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %68) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %69) #8
  %916 = load ptr, ptr %11, align 8, !tbaa !5
  %917 = getelementptr inbounds i32, ptr %916, i64 0
  %918 = load i32, ptr %917, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %69, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %918, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %70) #8
  %919 = load ptr, ptr %11, align 8, !tbaa !5
  %920 = getelementptr inbounds i32, ptr %919, i64 0
  %921 = load i32, ptr %920, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %921, i1 noundef zeroext true)
          to label %922 unwind label %935

922:                                              ; preds = %910
  invoke void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_S1_S9_RA9_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 1 dereferenceable(6) @.str.1108, ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 1 dereferenceable(10) @.str.1111, ptr noundef nonnull align 8 dereferenceable(32) %70, ptr noundef nonnull align 1 dereferenceable(9) @.str.1110)
          to label %923 unwind label %939

923:                                              ; preds = %922
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #8
  %924 = load i32, ptr %8, align 4, !tbaa !9
  %925 = load i32, ptr %9, align 4, !tbaa !9
  %926 = load i8, ptr %67, align 1, !tbaa !15, !range !17, !noundef !18
  %927 = trunc i8 %926 to i1
  %928 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %924, i32 noundef %925, ptr noundef nonnull align 8 dereferenceable(32) %68, i1 noundef zeroext %927, i1 noundef zeroext false)
          to label %929 unwind label %944

929:                                              ; preds = %923
  %930 = load i32, ptr %9, align 4, !tbaa !9
  %931 = load ptr, ptr %11, align 8, !tbaa !5
  %932 = getelementptr inbounds i32, ptr %931, i64 0
  %933 = load i32, ptr %932, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %930, i32 noundef %933)
          to label %934 unwind label %944

934:                                              ; preds = %929
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %67) #8
  br label %949

935:                                              ; preds = %910
  %936 = landingpad { ptr, i32 }
          cleanup
  %937 = extractvalue { ptr, i32 } %936, 0
  store ptr %937, ptr %14, align 8
  %938 = extractvalue { ptr, i32 } %936, 1
  store i32 %938, ptr %15, align 4
  br label %943

939:                                              ; preds = %922
  %940 = landingpad { ptr, i32 }
          cleanup
  %941 = extractvalue { ptr, i32 } %940, 0
  store ptr %941, ptr %14, align 8
  %942 = extractvalue { ptr, i32 } %940, 1
  store i32 %942, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  br label %943

943:                                              ; preds = %939, %935
  call void @llvm.lifetime.end.p0(i64 32, ptr %70) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %69) #8
  br label %948

944:                                              ; preds = %929, %923
  %945 = landingpad { ptr, i32 }
          cleanup
  %946 = extractvalue { ptr, i32 } %945, 0
  store ptr %946, ptr %14, align 8
  %947 = extractvalue { ptr, i32 } %945, 1
  store i32 %947, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  br label %948

948:                                              ; preds = %944, %943
  call void @llvm.lifetime.end.p0(i64 32, ptr %68) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %67) #8
  br label %1976

949:                                              ; preds = %934, %904
  br label %1975

950:                                              ; preds = %144
  %951 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %131)
  br i1 %951, label %958, label %952

952:                                              ; preds = %950
  %953 = load i32, ptr %8, align 4, !tbaa !9
  %954 = load i32, ptr %9, align 4, !tbaa !9
  %955 = load ptr, ptr %11, align 8, !tbaa !5
  %956 = getelementptr inbounds i32, ptr %955, i64 0
  %957 = load i32, ptr %956, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %953, i32 noundef %954, i32 noundef %957, ptr noundef @.str.471)
  br label %1074

958:                                              ; preds = %950
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #8
  %959 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %131, i32 0, i32 31
  %960 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %959, ptr noundef nonnull align 4 dereferenceable(4) %9)
  store ptr %960, ptr %71, align 8, !tbaa !5
  %961 = load ptr, ptr %71, align 8, !tbaa !5
  %962 = load i32, ptr %961, align 4, !tbaa !9
  %963 = icmp ne i32 %962, 0
  br i1 %963, label %983, label %964

964:                                              ; preds = %958
  %965 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %131, i32 0, i32 1
  %966 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %965, i32 noundef 2)
  %967 = load ptr, ptr %71, align 8, !tbaa !5
  store i32 %966, ptr %967, align 4, !tbaa !9
  %968 = load i32, ptr %9, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %72, i32 noundef %968)
  %969 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %72, i32 0, i32 0
  %970 = load i32, ptr %969, align 4
  %971 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 %970, i32 noundef 0)
  br i1 %971, label %972, label %982

972:                                              ; preds = %964
  %973 = load ptr, ptr %71, align 8, !tbaa !5
  %974 = load i32, ptr %973, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %73, i32 noundef %974)
  %975 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %73, i32 0, i32 0
  %976 = load i32, ptr %975, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 %976, i32 noundef 0, i32 noundef 0)
  %977 = load ptr, ptr %71, align 8, !tbaa !5
  %978 = load i32, ptr %977, align 4, !tbaa !9
  %979 = add i32 %978, 1
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %74, i32 noundef %979)
  %980 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %74, i32 0, i32 0
  %981 = load i32, ptr %980, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 %981, i32 noundef 0, i32 noundef 0)
  br label %982

982:                                              ; preds = %972, %964
  br label %983

983:                                              ; preds = %982, %958
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #8
  %984 = load ptr, ptr %71, align 8, !tbaa !5
  %985 = load i32, ptr %984, align 4, !tbaa !9
  store i32 %985, ptr %75, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #8
  %986 = load ptr, ptr %71, align 8, !tbaa !5
  %987 = load i32, ptr %986, align 4, !tbaa !9
  %988 = add i32 %987, 1
  store i32 %988, ptr %76, align 4, !tbaa !9
  %989 = load i32, ptr %8, align 4, !tbaa !9
  %990 = load i32, ptr %75, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %77) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %78) #8
  %991 = load ptr, ptr %11, align 8, !tbaa !5
  %992 = getelementptr inbounds i32, ptr %991, i64 0
  %993 = load i32, ptr %992, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %78, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %993, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA5_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull align 1 dereferenceable(5) @.str.1112, ptr noundef nonnull align 8 dereferenceable(32) %78, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %994 unwind label %1031

994:                                              ; preds = %983
  %995 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %989, i32 noundef %990, ptr noundef nonnull align 8 dereferenceable(32) %77, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %996 unwind label %1035

996:                                              ; preds = %994
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #8
  %997 = load i32, ptr %8, align 4, !tbaa !9
  %998 = load i32, ptr %76, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %79) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %80) #8
  %999 = load ptr, ptr %11, align 8, !tbaa !5
  %1000 = getelementptr inbounds i32, ptr %999, i64 0
  %1001 = load i32, ptr %1000, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %80, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1001, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %79, ptr noundef nonnull align 1 dereferenceable(6) @.str.1113, ptr noundef nonnull align 8 dereferenceable(32) %80, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %1002 unwind label %1040

1002:                                             ; preds = %996
  %1003 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %997, i32 noundef %998, ptr noundef nonnull align 8 dereferenceable(32) %79, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %1004 unwind label %1044

1004:                                             ; preds = %1002
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #8
  %1005 = load i32, ptr %75, align 4, !tbaa !9
  %1006 = load ptr, ptr %11, align 8, !tbaa !5
  %1007 = getelementptr inbounds i32, ptr %1006, i64 0
  %1008 = load i32, ptr %1007, align 4, !tbaa !9
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1005, i32 noundef %1008)
  %1009 = load i32, ptr %76, align 4, !tbaa !9
  %1010 = load ptr, ptr %11, align 8, !tbaa !5
  %1011 = getelementptr inbounds i32, ptr %1010, i64 0
  %1012 = load i32, ptr %1011, align 4, !tbaa !9
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1009, i32 noundef %1012)
  call void @llvm.lifetime.start.p0(i64 32, ptr %81) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %82) #8
  %1013 = load i32, ptr %75, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %82, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1013, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %83) #8
  %1014 = load i32, ptr %76, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %83, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1014, i1 noundef zeroext true)
          to label %1015 unwind label %1049

1015:                                             ; preds = %1004
  call void @llvm.lifetime.start.p0(i64 32, ptr %84) #8
  %1016 = load i32, ptr %75, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %84, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1016, i1 noundef zeroext true)
          to label %1017 unwind label %1053

1017:                                             ; preds = %1015
  call void @llvm.lifetime.start.p0(i64 32, ptr %85) #8
  %1018 = load i32, ptr %76, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %85, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1018, i1 noundef zeroext true)
          to label %1019 unwind label %1057

1019:                                             ; preds = %1017
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_S9_RA6_S1_S9_SB_S9_S3_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %81, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %82, ptr noundef nonnull align 1 dereferenceable(4) @.str.975, ptr noundef nonnull align 8 dereferenceable(32) %83, ptr noundef nonnull align 1 dereferenceable(6) @.str.1114, ptr noundef nonnull align 8 dereferenceable(32) %84, ptr noundef nonnull align 1 dereferenceable(4) @.str.1102, ptr noundef nonnull align 8 dereferenceable(32) %85, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %1020 unwind label %1061

1020:                                             ; preds = %1019
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #8
  %1021 = load i32, ptr %8, align 4, !tbaa !9
  %1022 = load i32, ptr %9, align 4, !tbaa !9
  %1023 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1021, i32 noundef %1022, ptr noundef nonnull align 8 dereferenceable(32) %81, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %1024 unwind label %1068

1024:                                             ; preds = %1020
  %1025 = load i32, ptr %9, align 4, !tbaa !9
  %1026 = load i32, ptr %75, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1025, i32 noundef %1026)
          to label %1027 unwind label %1068

1027:                                             ; preds = %1024
  %1028 = load i32, ptr %9, align 4, !tbaa !9
  %1029 = load i32, ptr %76, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1028, i32 noundef %1029)
          to label %1030 unwind label %1068

1030:                                             ; preds = %1027
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #8
  br label %1074

1031:                                             ; preds = %983
  %1032 = landingpad { ptr, i32 }
          cleanup
  %1033 = extractvalue { ptr, i32 } %1032, 0
  store ptr %1033, ptr %14, align 8
  %1034 = extractvalue { ptr, i32 } %1032, 1
  store i32 %1034, ptr %15, align 4
  br label %1039

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

1039:                                             ; preds = %1035, %1031
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %78) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %77) #8
  br label %1073

1040:                                             ; preds = %996
  %1041 = landingpad { ptr, i32 }
          cleanup
  %1042 = extractvalue { ptr, i32 } %1041, 0
  store ptr %1042, ptr %14, align 8
  %1043 = extractvalue { ptr, i32 } %1041, 1
  store i32 %1043, ptr %15, align 4
  br label %1048

1044:                                             ; preds = %1002
  %1045 = landingpad { ptr, i32 }
          cleanup
  %1046 = extractvalue { ptr, i32 } %1045, 0
  store ptr %1046, ptr %14, align 8
  %1047 = extractvalue { ptr, i32 } %1045, 1
  store i32 %1047, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %79) #8
  br label %1048

1048:                                             ; preds = %1044, %1040
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %80) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %80) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %79) #8
  br label %1073

1049:                                             ; preds = %1004
  %1050 = landingpad { ptr, i32 }
          cleanup
  %1051 = extractvalue { ptr, i32 } %1050, 0
  store ptr %1051, ptr %14, align 8
  %1052 = extractvalue { ptr, i32 } %1050, 1
  store i32 %1052, ptr %15, align 4
  br label %1067

1053:                                             ; preds = %1015
  %1054 = landingpad { ptr, i32 }
          cleanup
  %1055 = extractvalue { ptr, i32 } %1054, 0
  store ptr %1055, ptr %14, align 8
  %1056 = extractvalue { ptr, i32 } %1054, 1
  store i32 %1056, ptr %15, align 4
  br label %1066

1057:                                             ; preds = %1017
  %1058 = landingpad { ptr, i32 }
          cleanup
  %1059 = extractvalue { ptr, i32 } %1058, 0
  store ptr %1059, ptr %14, align 8
  %1060 = extractvalue { ptr, i32 } %1058, 1
  store i32 %1060, ptr %15, align 4
  br label %1065

1061:                                             ; preds = %1019
  %1062 = landingpad { ptr, i32 }
          cleanup
  %1063 = extractvalue { ptr, i32 } %1062, 0
  store ptr %1063, ptr %14, align 8
  %1064 = extractvalue { ptr, i32 } %1062, 1
  store i32 %1064, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %85) #8
  br label %1065

1065:                                             ; preds = %1061, %1057
  call void @llvm.lifetime.end.p0(i64 32, ptr %85) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %84) #8
  br label %1066

1066:                                             ; preds = %1065, %1053
  call void @llvm.lifetime.end.p0(i64 32, ptr %84) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %83) #8
  br label %1067

1067:                                             ; preds = %1066, %1049
  call void @llvm.lifetime.end.p0(i64 32, ptr %83) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %82) #8
  br label %1072

1068:                                             ; preds = %1027, %1024, %1020
  %1069 = landingpad { ptr, i32 }
          cleanup
  %1070 = extractvalue { ptr, i32 } %1069, 0
  store ptr %1070, ptr %14, align 8
  %1071 = extractvalue { ptr, i32 } %1069, 1
  store i32 %1071, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  br label %1072

1072:                                             ; preds = %1068, %1067
  call void @llvm.lifetime.end.p0(i64 32, ptr %81) #8
  br label %1073

1073:                                             ; preds = %1072, %1048, %1039
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #8
  br label %1976

1074:                                             ; preds = %1030, %952
  br label %1975

1075:                                             ; preds = %144
  %1076 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %131)
  br i1 %1076, label %1083, label %1077

1077:                                             ; preds = %1075
  %1078 = load i32, ptr %8, align 4, !tbaa !9
  %1079 = load i32, ptr %9, align 4, !tbaa !9
  %1080 = load ptr, ptr %11, align 8, !tbaa !5
  %1081 = getelementptr inbounds i32, ptr %1080, i64 0
  %1082 = load i32, ptr %1081, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1078, i32 noundef %1079, i32 noundef %1082, ptr noundef @.str.346)
  br label %1089

1083:                                             ; preds = %1075
  %1084 = load i32, ptr %8, align 4, !tbaa !9
  %1085 = load i32, ptr %9, align 4, !tbaa !9
  %1086 = load ptr, ptr %11, align 8, !tbaa !5
  %1087 = getelementptr inbounds i32, ptr %1086, i64 0
  %1088 = load i32, ptr %1087, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL23emit_emulated_ahyper_opEjjj10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1084, i32 noundef %1085, i32 noundef %1088, i32 noundef 22)
  br label %1089

1089:                                             ; preds = %1083, %1077
  br label %1975

1090:                                             ; preds = %144
  %1091 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %131)
  br i1 %1091, label %1098, label %1092

1092:                                             ; preds = %1090
  %1093 = load i32, ptr %8, align 4, !tbaa !9
  %1094 = load i32, ptr %9, align 4, !tbaa !9
  %1095 = load ptr, ptr %11, align 8, !tbaa !5
  %1096 = getelementptr inbounds i32, ptr %1095, i64 0
  %1097 = load i32, ptr %1096, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1093, i32 noundef %1094, i32 noundef %1097, ptr noundef @.str.342)
  br label %1104

1098:                                             ; preds = %1090
  %1099 = load i32, ptr %8, align 4, !tbaa !9
  %1100 = load i32, ptr %9, align 4, !tbaa !9
  %1101 = load ptr, ptr %11, align 8, !tbaa !5
  %1102 = getelementptr inbounds i32, ptr %1101, i64 0
  %1103 = load i32, ptr %1102, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL23emit_emulated_ahyper_opEjjj10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1099, i32 noundef %1100, i32 noundef %1103, i32 noundef 23)
  br label %1104

1104:                                             ; preds = %1098, %1092
  br label %1975

1105:                                             ; preds = %144
  %1106 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %131)
  br i1 %1106, label %1113, label %1107

1107:                                             ; preds = %1105
  %1108 = load i32, ptr %8, align 4, !tbaa !9
  %1109 = load i32, ptr %9, align 4, !tbaa !9
  %1110 = load ptr, ptr %11, align 8, !tbaa !5
  %1111 = getelementptr inbounds i32, ptr %1110, i64 0
  %1112 = load i32, ptr %1111, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1108, i32 noundef %1109, i32 noundef %1112, ptr noundef @.str.348)
  br label %1119

1113:                                             ; preds = %1105
  %1114 = load i32, ptr %8, align 4, !tbaa !9
  %1115 = load i32, ptr %9, align 4, !tbaa !9
  %1116 = load ptr, ptr %11, align 8, !tbaa !5
  %1117 = getelementptr inbounds i32, ptr %1116, i64 0
  %1118 = load i32, ptr %1117, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL23emit_emulated_ahyper_opEjjj10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1114, i32 noundef %1115, i32 noundef %1118, i32 noundef 24)
  br label %1119

1119:                                             ; preds = %1113, %1107
  br label %1975

1120:                                             ; preds = %144
  %1121 = load i32, ptr %8, align 4, !tbaa !9
  %1122 = load i32, ptr %9, align 4, !tbaa !9
  %1123 = load ptr, ptr %11, align 8, !tbaa !5
  %1124 = getelementptr inbounds i32, ptr %1123, i64 0
  %1125 = load i32, ptr %1124, align 4, !tbaa !9
  %1126 = load ptr, ptr %11, align 8, !tbaa !5
  %1127 = getelementptr inbounds i32, ptr %1126, i64 1
  %1128 = load i32, ptr %1127, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1121, i32 noundef %1122, i32 noundef %1125, i32 noundef %1128, ptr noundef @.str.347)
  br label %1975

1129:                                             ; preds = %144
  %1130 = load i32, ptr %8, align 4, !tbaa !9
  %1131 = load i32, ptr %9, align 4, !tbaa !9
  %1132 = load ptr, ptr %11, align 8, !tbaa !5
  %1133 = getelementptr inbounds i32, ptr %1132, i64 0
  %1134 = load i32, ptr %1133, align 4, !tbaa !9
  %1135 = load ptr, ptr %11, align 8, !tbaa !5
  %1136 = getelementptr inbounds i32, ptr %1135, i64 1
  %1137 = load i32, ptr %1136, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1130, i32 noundef %1131, i32 noundef %1134, i32 noundef %1137, ptr noundef @.str.458)
  br label %1975

1138:                                             ; preds = %144
  %1139 = load i32, ptr %8, align 4, !tbaa !9
  %1140 = load i32, ptr %9, align 4, !tbaa !9
  %1141 = load ptr, ptr %11, align 8, !tbaa !5
  %1142 = getelementptr inbounds i32, ptr %1141, i64 0
  %1143 = load i32, ptr %1142, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1139, i32 noundef %1140, i32 noundef %1143, ptr noundef @.str.381)
  br label %1975

1144:                                             ; preds = %144
  %1145 = load i32, ptr %8, align 4, !tbaa !9
  %1146 = load i32, ptr %9, align 4, !tbaa !9
  %1147 = load ptr, ptr %11, align 8, !tbaa !5
  %1148 = getelementptr inbounds i32, ptr %1147, i64 0
  %1149 = load i32, ptr %1148, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1145, i32 noundef %1146, i32 noundef %1149, ptr noundef @.str.426)
  br label %1975

1150:                                             ; preds = %144
  %1151 = load i32, ptr %8, align 4, !tbaa !9
  %1152 = load i32, ptr %9, align 4, !tbaa !9
  %1153 = load ptr, ptr %11, align 8, !tbaa !5
  %1154 = getelementptr inbounds i32, ptr %1153, i64 0
  %1155 = load i32, ptr %1154, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1151, i32 noundef %1152, i32 noundef %1155, ptr noundef @.str.382)
  br label %1975

1156:                                             ; preds = %144
  %1157 = load i32, ptr %8, align 4, !tbaa !9
  %1158 = load i32, ptr %9, align 4, !tbaa !9
  %1159 = load ptr, ptr %11, align 8, !tbaa !5
  %1160 = getelementptr inbounds i32, ptr %1159, i64 0
  %1161 = load i32, ptr %1160, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1157, i32 noundef %1158, i32 noundef %1161, ptr noundef @.str.427)
  br label %1975

1162:                                             ; preds = %144
  %1163 = load i32, ptr %8, align 4, !tbaa !9
  %1164 = load i32, ptr %9, align 4, !tbaa !9
  %1165 = load ptr, ptr %11, align 8, !tbaa !5
  %1166 = getelementptr inbounds i32, ptr %1165, i64 0
  %1167 = load i32, ptr %1166, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1163, i32 noundef %1164, i32 noundef %1167, ptr noundef @.str.468)
  br label %1975

1168:                                             ; preds = %144
  %1169 = load i32, ptr %8, align 4, !tbaa !9
  %1170 = load i32, ptr %9, align 4, !tbaa !9
  %1171 = load ptr, ptr %11, align 8, !tbaa !5
  %1172 = getelementptr inbounds i32, ptr %1171, i64 0
  %1173 = load i32, ptr %1172, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1169, i32 noundef %1170, i32 noundef %1173, ptr noundef @.str.419)
  br label %1975

1174:                                             ; preds = %144
  call void @llvm.lifetime.start.p0(i64 8, ptr %86) #8
  %1175 = load ptr, ptr %11, align 8, !tbaa !5
  %1176 = getelementptr inbounds i32, ptr %1175, i64 0
  %1177 = load i32, ptr %1176, align 4, !tbaa !9
  %1178 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1177)
  store ptr %1178, ptr %86, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %87) #8
  %1179 = load ptr, ptr %86, align 8, !tbaa !5
  %1180 = icmp ne ptr %1179, null
  br i1 %1180, label %1181, label %1186

1181:                                             ; preds = %1174
  %1182 = load ptr, ptr %86, align 8, !tbaa !5
  %1183 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1182, i32 0, i32 6
  %1184 = load i8, ptr %1183, align 1, !tbaa !145, !range !17, !noundef !18
  %1185 = trunc i8 %1184 to i1
  br label %1186

1186:                                             ; preds = %1181, %1174
  %1187 = phi i1 [ false, %1174 ], [ %1185, %1181 ]
  %1188 = zext i1 %1187 to i8
  store i8 %1188, ptr %87, align 1, !tbaa !15
  %1189 = load i8, ptr %87, align 1, !tbaa !15, !range !17, !noundef !18
  %1190 = trunc i8 %1189 to i1
  br i1 %1190, label %1191, label %1194

1191:                                             ; preds = %1186
  %1192 = load ptr, ptr %86, align 8, !tbaa !5
  %1193 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1192, i32 0, i32 6
  store i8 0, ptr %1193, align 1, !tbaa !145
  br label %1194

1194:                                             ; preds = %1191, %1186
  %1195 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %131, i32 0, i32 9
  %1196 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %1195, i32 0, i32 0
  %1197 = load i32, ptr %1196, align 4, !tbaa !142
  %1198 = icmp ult i32 %1197, 150
  br i1 %1198, label %1199, label %1270

1199:                                             ; preds = %1194
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #8
  %1200 = load ptr, ptr %11, align 8, !tbaa !5
  %1201 = getelementptr inbounds i32, ptr %1200, i64 0
  %1202 = load i32, ptr %1201, align 4, !tbaa !9
  %1203 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1202)
  store ptr %1203, ptr %88, align 8, !tbaa !5
  %1204 = load ptr, ptr %88, align 8, !tbaa !5
  %1205 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1204, i32 0, i32 4
  %1206 = load i32, ptr %1205, align 8, !tbaa !147
  %1207 = icmp uge i32 %1206, 2
  br i1 %1207, label %1208, label %1213

1208:                                             ; preds = %1199
  %1209 = load ptr, ptr %88, align 8, !tbaa !5
  %1210 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1209, i32 0, i32 4
  %1211 = load i32, ptr %1210, align 8, !tbaa !147
  %1212 = icmp ule i32 %1211, 4
  br label %1213

1213:                                             ; preds = %1208, %1199
  %1214 = phi i1 [ false, %1199 ], [ %1212, %1208 ]
  br i1 %1214, label %1215, label %1216

1215:                                             ; preds = %1213
  br label %1218

1216:                                             ; preds = %1213
  call void @__assert_fail(ptr noundef @.str.1115, ptr noundef @.str.11, i32 noundef 8773, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj) #10
  unreachable

1217:                                             ; No predecessors!
  br label %1218

1218:                                             ; preds = %1217, %1215
  %1219 = load ptr, ptr %88, align 8, !tbaa !5
  %1220 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1219, i32 0, i32 4
  %1221 = load i32, ptr %1220, align 8, !tbaa !147
  %1222 = load ptr, ptr %88, align 8, !tbaa !5
  %1223 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1222, i32 0, i32 5
  %1224 = load i32, ptr %1223, align 4, !tbaa !148
  %1225 = icmp eq i32 %1221, %1224
  br i1 %1225, label %1226, label %1227

1226:                                             ; preds = %1218
  br label %1229

1227:                                             ; preds = %1218
  call void @__assert_fail(ptr noundef @.str.1116, ptr noundef @.str.11, i32 noundef 8774, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj) #10
  unreachable

1228:                                             ; No predecessors!
  br label %1229

1229:                                             ; preds = %1228, %1226
  %1230 = load ptr, ptr %88, align 8, !tbaa !5
  %1231 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1230, i32 0, i32 2
  %1232 = load i32, ptr %1231, align 8, !tbaa !126
  %1233 = icmp ne i32 %1232, 13
  br i1 %1233, label %1234, label %1241

1234:                                             ; preds = %1229
  %1235 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1235, ptr noundef @.str.1117)
          to label %1236 unwind label %1237

1236:                                             ; preds = %1234
  call void @__cxa_throw(ptr %1235, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1237:                                             ; preds = %1234
  %1238 = landingpad { ptr, i32 }
          cleanup
  %1239 = extractvalue { ptr, i32 } %1238, 0
  store ptr %1239, ptr %14, align 8
  %1240 = extractvalue { ptr, i32 } %1238, 1
  store i32 %1240, ptr %15, align 4
  call void @__cxa_free_exception(ptr %1235) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %87) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #8
  br label %1976

1241:                                             ; preds = %1229
  call void @llvm.lifetime.start.p0(i64 1, ptr %89) #8
  %1242 = load i32, ptr %9, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %90, i32 noundef %1242)
  %1243 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %90, i32 0, i32 0
  %1244 = load i32, ptr %1243, align 4
  %1245 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 %1244, i32 noundef 0)
  %1246 = zext i1 %1245 to i8
  store i8 %1246, ptr %89, align 1, !tbaa !15
  %1247 = load ptr, ptr %88, align 8, !tbaa !5
  %1248 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1247, i32 0, i32 4
  %1249 = load i32, ptr %1248, align 8, !tbaa !147
  %1250 = sub i32 %1249, 2
  %1251 = shl i32 8, %1250
  %1252 = load i8, ptr %89, align 1, !tbaa !15, !range !17, !noundef !18
  %1253 = trunc i8 %1252 to i1
  call void @_ZN11spirv_cross12CompilerGLSL16require_polyfillENS0_8PolyfillEb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1251, i1 noundef zeroext %1253)
  %1254 = load i32, ptr %8, align 4, !tbaa !9
  %1255 = load i32, ptr %9, align 4, !tbaa !9
  %1256 = load ptr, ptr %11, align 8, !tbaa !5
  %1257 = getelementptr inbounds i32, ptr %1256, i64 0
  %1258 = load i32, ptr %1257, align 4, !tbaa !9
  %1259 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %131, i32 0, i32 9
  %1260 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %1259, i32 0, i32 1
  %1261 = load i8, ptr %1260, align 4, !tbaa !19, !range !17, !noundef !18
  %1262 = trunc i8 %1261 to i1
  br i1 %1262, label %1263, label %1266

1263:                                             ; preds = %1241
  %1264 = load i8, ptr %89, align 1, !tbaa !15, !range !17, !noundef !18
  %1265 = trunc i8 %1264 to i1
  br label %1266

1266:                                             ; preds = %1263, %1241
  %1267 = phi i1 [ false, %1241 ], [ %1265, %1263 ]
  %1268 = zext i1 %1267 to i64
  %1269 = select i1 %1267, ptr @.str.1118, ptr @.str.1119
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1254, i32 noundef %1255, i32 noundef %1258, ptr noundef %1269)
  call void @llvm.lifetime.end.p0(i64 1, ptr %89) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #8
  br label %1276

1270:                                             ; preds = %1194
  %1271 = load i32, ptr %8, align 4, !tbaa !9
  %1272 = load i32, ptr %9, align 4, !tbaa !9
  %1273 = load ptr, ptr %11, align 8, !tbaa !5
  %1274 = getelementptr inbounds i32, ptr %1273, i64 0
  %1275 = load i32, ptr %1274, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1271, i32 noundef %1272, i32 noundef %1275, ptr noundef @.str.1120)
  br label %1276

1276:                                             ; preds = %1270, %1266
  %1277 = load i8, ptr %87, align 1, !tbaa !15, !range !17, !noundef !18
  %1278 = trunc i8 %1277 to i1
  br i1 %1278, label %1279, label %1282

1279:                                             ; preds = %1276
  %1280 = load ptr, ptr %86, align 8, !tbaa !5
  %1281 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1280, i32 0, i32 6
  store i8 1, ptr %1281, align 1, !tbaa !145
  br label %1282

1282:                                             ; preds = %1279, %1276
  call void @llvm.lifetime.end.p0(i64 1, ptr %87) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %86) #8
  br label %1975

1283:                                             ; preds = %144
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #8
  %1284 = load ptr, ptr %11, align 8, !tbaa !5
  %1285 = getelementptr inbounds i32, ptr %1284, i64 0
  %1286 = load i32, ptr %1285, align 4, !tbaa !9
  %1287 = call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1286)
  store ptr %1287, ptr %91, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %92) #8
  %1288 = load ptr, ptr %91, align 8, !tbaa !5
  %1289 = icmp ne ptr %1288, null
  br i1 %1289, label %1290, label %1295

1290:                                             ; preds = %1283
  %1291 = load ptr, ptr %91, align 8, !tbaa !5
  %1292 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1291, i32 0, i32 6
  %1293 = load i8, ptr %1292, align 1, !tbaa !145, !range !17, !noundef !18
  %1294 = trunc i8 %1293 to i1
  br label %1295

1295:                                             ; preds = %1290, %1283
  %1296 = phi i1 [ false, %1283 ], [ %1294, %1290 ]
  %1297 = zext i1 %1296 to i8
  store i8 %1297, ptr %92, align 1, !tbaa !15
  %1298 = load i8, ptr %92, align 1, !tbaa !15, !range !17, !noundef !18
  %1299 = trunc i8 %1298 to i1
  br i1 %1299, label %1300, label %1303

1300:                                             ; preds = %1295
  %1301 = load ptr, ptr %91, align 8, !tbaa !5
  %1302 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1301, i32 0, i32 6
  store i8 0, ptr %1302, align 1, !tbaa !145
  br label %1303

1303:                                             ; preds = %1300, %1295
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #8
  store ptr @.str.418, ptr %93, align 8, !tbaa !5
  %1304 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %131, i32 0, i32 9
  %1305 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %1304, i32 0, i32 0
  %1306 = load i32, ptr %1305, align 4, !tbaa !142
  %1307 = icmp ult i32 %1306, 140
  br i1 %1307, label %1308, label %1372

1308:                                             ; preds = %1303
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #8
  %1309 = load i32, ptr %8, align 4, !tbaa !9
  %1310 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1309)
  store ptr %1310, ptr %94, align 8, !tbaa !5
  %1311 = load ptr, ptr %94, align 8, !tbaa !5
  %1312 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1311, i32 0, i32 4
  %1313 = load i32, ptr %1312, align 8, !tbaa !147
  %1314 = icmp uge i32 %1313, 2
  br i1 %1314, label %1315, label %1320

1315:                                             ; preds = %1308
  %1316 = load ptr, ptr %94, align 8, !tbaa !5
  %1317 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1316, i32 0, i32 4
  %1318 = load i32, ptr %1317, align 8, !tbaa !147
  %1319 = icmp ule i32 %1318, 4
  br label %1320

1320:                                             ; preds = %1315, %1308
  %1321 = phi i1 [ false, %1308 ], [ %1319, %1315 ]
  br i1 %1321, label %1322, label %1323

1322:                                             ; preds = %1320
  br label %1325

1323:                                             ; preds = %1320
  call void @__assert_fail(ptr noundef @.str.1115, ptr noundef @.str.11, i32 noundef 8807, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj) #10
  unreachable

1324:                                             ; No predecessors!
  br label %1325

1325:                                             ; preds = %1324, %1322
  %1326 = load ptr, ptr %94, align 8, !tbaa !5
  %1327 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1326, i32 0, i32 4
  %1328 = load i32, ptr %1327, align 8, !tbaa !147
  %1329 = load ptr, ptr %94, align 8, !tbaa !5
  %1330 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1329, i32 0, i32 5
  %1331 = load i32, ptr %1330, align 4, !tbaa !148
  %1332 = icmp eq i32 %1328, %1331
  br i1 %1332, label %1333, label %1334

1333:                                             ; preds = %1325
  br label %1336

1334:                                             ; preds = %1325
  call void @__assert_fail(ptr noundef @.str.1116, ptr noundef @.str.11, i32 noundef 8808, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj) #10
  unreachable

1335:                                             ; No predecessors!
  br label %1336

1336:                                             ; preds = %1335, %1333
  %1337 = load ptr, ptr %94, align 8, !tbaa !5
  %1338 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1337, i32 0, i32 2
  %1339 = load i32, ptr %1338, align 8, !tbaa !126
  %1340 = icmp ne i32 %1339, 13
  br i1 %1340, label %1341, label %1348

1341:                                             ; preds = %1336
  %1342 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1342, ptr noundef @.str.1121)
          to label %1343 unwind label %1344

1343:                                             ; preds = %1341
  call void @__cxa_throw(ptr %1342, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1344:                                             ; preds = %1341
  %1345 = landingpad { ptr, i32 }
          cleanup
  %1346 = extractvalue { ptr, i32 } %1345, 0
  store ptr %1346, ptr %14, align 8
  %1347 = extractvalue { ptr, i32 } %1345, 1
  store i32 %1347, ptr %15, align 4
  call void @__cxa_free_exception(ptr %1342) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #8
  br label %1409

1348:                                             ; preds = %1336
  call void @llvm.lifetime.start.p0(i64 1, ptr %95) #8
  %1349 = load i32, ptr %9, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %96, i32 noundef %1349)
  %1350 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %96, i32 0, i32 0
  %1351 = load i32, ptr %1350, align 4
  %1352 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 %1351, i32 noundef 0)
  %1353 = zext i1 %1352 to i8
  store i8 %1353, ptr %95, align 1, !tbaa !15
  %1354 = load ptr, ptr %94, align 8, !tbaa !5
  %1355 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1354, i32 0, i32 4
  %1356 = load i32, ptr %1355, align 8, !tbaa !147
  %1357 = sub i32 %1356, 2
  %1358 = shl i32 64, %1357
  %1359 = load i8, ptr %95, align 1, !tbaa !15, !range !17, !noundef !18
  %1360 = trunc i8 %1359 to i1
  call void @_ZN11spirv_cross12CompilerGLSL16require_polyfillENS0_8PolyfillEb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1358, i1 noundef zeroext %1360)
  %1361 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %131, i32 0, i32 9
  %1362 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %1361, i32 0, i32 1
  %1363 = load i8, ptr %1362, align 4, !tbaa !19, !range !17, !noundef !18
  %1364 = trunc i8 %1363 to i1
  br i1 %1364, label %1365, label %1368

1365:                                             ; preds = %1348
  %1366 = load i8, ptr %95, align 1, !tbaa !15, !range !17, !noundef !18
  %1367 = trunc i8 %1366 to i1
  br label %1368

1368:                                             ; preds = %1365, %1348
  %1369 = phi i1 [ false, %1348 ], [ %1367, %1365 ]
  %1370 = zext i1 %1369 to i64
  %1371 = select i1 %1369, ptr @.str.1122, ptr @.str.1123
  store ptr %1371, ptr %93, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 1, ptr %95) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #8
  br label %1372

1372:                                             ; preds = %1368, %1303
  call void @llvm.lifetime.start.p0(i64 1, ptr %97) #8
  %1373 = load ptr, ptr %11, align 8, !tbaa !5
  %1374 = getelementptr inbounds i32, ptr %1373, i64 0
  %1375 = load i32, ptr %1374, align 4, !tbaa !9
  %1376 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1375)
  %1377 = zext i1 %1376 to i8
  store i8 %1377, ptr %97, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #8
  %1378 = load i32, ptr %8, align 4, !tbaa !9
  %1379 = load i32, ptr %9, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %99) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %100) #8
  %1380 = load ptr, ptr %11, align 8, !tbaa !5
  %1381 = getelementptr inbounds i32, ptr %1380, i64 0
  %1382 = load i32, ptr %1381, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %100, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1382, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EEESB_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %99, ptr noundef nonnull align 8 dereferenceable(8) %93, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %100, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %1383 unwind label %1399

1383:                                             ; preds = %1372
  %1384 = load i8, ptr %97, align 1, !tbaa !15, !range !17, !noundef !18
  %1385 = trunc i8 %1384 to i1
  %1386 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1378, i32 noundef %1379, ptr noundef nonnull align 8 dereferenceable(32) %99, i1 noundef zeroext %1385, i1 noundef zeroext false)
          to label %1387 unwind label %1403

1387:                                             ; preds = %1383
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #8
  store ptr %1386, ptr %98, align 8, !tbaa !5
  %1388 = load i32, ptr %9, align 4, !tbaa !9
  %1389 = load ptr, ptr %11, align 8, !tbaa !5
  %1390 = getelementptr inbounds i32, ptr %1389, i64 0
  %1391 = load i32, ptr %1390, align 4, !tbaa !9
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1388, i32 noundef %1391)
  %1392 = load i8, ptr %92, align 1, !tbaa !15, !range !17, !noundef !18
  %1393 = trunc i8 %1392 to i1
  br i1 %1393, label %1394, label %1408

1394:                                             ; preds = %1387
  %1395 = load ptr, ptr %98, align 8, !tbaa !5
  %1396 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1395, i32 0, i32 6
  store i8 1, ptr %1396, align 1, !tbaa !145
  %1397 = load ptr, ptr %91, align 8, !tbaa !5
  %1398 = getelementptr inbounds %"struct.spirv_cross::SPIRExpression", ptr %1397, i32 0, i32 6
  store i8 1, ptr %1398, align 1, !tbaa !145
  br label %1408

1399:                                             ; preds = %1372
  %1400 = landingpad { ptr, i32 }
          cleanup
  %1401 = extractvalue { ptr, i32 } %1400, 0
  store ptr %1401, ptr %14, align 8
  %1402 = extractvalue { ptr, i32 } %1400, 1
  store i32 %1402, ptr %15, align 4
  br label %1407

1403:                                             ; preds = %1383
  %1404 = landingpad { ptr, i32 }
          cleanup
  %1405 = extractvalue { ptr, i32 } %1404, 0
  store ptr %1405, ptr %14, align 8
  %1406 = extractvalue { ptr, i32 } %1404, 1
  store i32 %1406, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %99) #8
  br label %1407

1407:                                             ; preds = %1403, %1399
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %100) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %100) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %99) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %97) #8
  br label %1409

1408:                                             ; preds = %1394, %1387
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %97) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #8
  br label %1975

1409:                                             ; preds = %1407, %1344
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %92) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #8
  br label %1976

1410:                                             ; preds = %144, %144
  %1411 = load i32, ptr %8, align 4, !tbaa !9
  %1412 = load i32, ptr %9, align 4, !tbaa !9
  %1413 = load ptr, ptr %11, align 8, !tbaa !5
  %1414 = getelementptr inbounds i32, ptr %1413, i64 0
  %1415 = load i32, ptr %1414, align 4, !tbaa !9
  %1416 = load ptr, ptr %11, align 8, !tbaa !5
  %1417 = getelementptr inbounds i32, ptr %1416, i64 1
  %1418 = load i32, ptr %1417, align 4, !tbaa !9
  %1419 = load ptr, ptr %11, align 8, !tbaa !5
  %1420 = getelementptr inbounds i32, ptr %1419, i64 2
  %1421 = load i32, ptr %1420, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL11emit_mix_opEjjjjj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1411, i32 noundef %1412, i32 noundef %1415, i32 noundef %1418, i32 noundef %1421)
  br label %1975

1422:                                             ; preds = %144
  %1423 = load i32, ptr %8, align 4, !tbaa !9
  %1424 = load i32, ptr %9, align 4, !tbaa !9
  %1425 = load ptr, ptr %11, align 8, !tbaa !5
  %1426 = getelementptr inbounds i32, ptr %1425, i64 0
  %1427 = load i32, ptr %1426, align 4, !tbaa !9
  %1428 = load ptr, ptr %11, align 8, !tbaa !5
  %1429 = getelementptr inbounds i32, ptr %1428, i64 1
  %1430 = load i32, ptr %1429, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1423, i32 noundef %1424, i32 noundef %1427, i32 noundef %1430, ptr noundef @.str.469)
  br label %1975

1431:                                             ; preds = %144
  %1432 = load i32, ptr %8, align 4, !tbaa !9
  %1433 = load i32, ptr %9, align 4, !tbaa !9
  %1434 = load ptr, ptr %11, align 8, !tbaa !5
  %1435 = getelementptr inbounds i32, ptr %1434, i64 0
  %1436 = load i32, ptr %1435, align 4, !tbaa !9
  %1437 = load ptr, ptr %11, align 8, !tbaa !5
  %1438 = getelementptr inbounds i32, ptr %1437, i64 1
  %1439 = load i32, ptr %1438, align 4, !tbaa !9
  %1440 = load ptr, ptr %11, align 8, !tbaa !5
  %1441 = getelementptr inbounds i32, ptr %1440, i64 2
  %1442 = load i32, ptr %1441, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1432, i32 noundef %1433, i32 noundef %1436, i32 noundef %1439, i32 noundef %1442, ptr noundef @.str.467)
  br label %1975

1443:                                             ; preds = %144
  %1444 = load ptr, ptr %11, align 8, !tbaa !5
  %1445 = getelementptr inbounds i32, ptr %1444, i64 1
  %1446 = load i32, ptr %1445, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL26register_call_out_argumentEj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1446)
  %1447 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %131, i32 0, i32 15
  %1448 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %1447, ptr noundef nonnull align 4 dereferenceable(4) %9)
  %1449 = getelementptr inbounds { ptr, i8 }, ptr %101, i32 0, i32 0
  %1450 = extractvalue { ptr, i8 } %1448, 0
  store ptr %1450, ptr %1449, align 8
  %1451 = getelementptr inbounds { ptr, i8 }, ptr %101, i32 0, i32 1
  %1452 = extractvalue { ptr, i8 } %1448, 1
  store i8 %1452, ptr %1451, align 8
  %1453 = load i32, ptr %8, align 4, !tbaa !9
  %1454 = load i32, ptr %9, align 4, !tbaa !9
  %1455 = load ptr, ptr %11, align 8, !tbaa !5
  %1456 = getelementptr inbounds i32, ptr %1455, i64 0
  %1457 = load i32, ptr %1456, align 4, !tbaa !9
  %1458 = load ptr, ptr %11, align 8, !tbaa !5
  %1459 = getelementptr inbounds i32, ptr %1458, i64 1
  %1460 = load i32, ptr %1459, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1453, i32 noundef %1454, i32 noundef %1457, i32 noundef %1460, ptr noundef @.str.393)
  br label %1975

1461:                                             ; preds = %144
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #8
  %1462 = load i32, ptr %8, align 4, !tbaa !9
  %1463 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1462)
  store ptr %1463, ptr %102, align 8, !tbaa !5
  %1464 = load i32, ptr %8, align 4, !tbaa !9
  %1465 = load i32, ptr %9, align 4, !tbaa !9
  %1466 = call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1464, i32 noundef %1465)
  call void @llvm.lifetime.start.p0(i64 32, ptr %103) #8
  %1467 = load i32, ptr %9, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %103, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1467, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %104) #8
  %1468 = load ptr, ptr %102, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %104, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %1468, i32 noundef 0)
          to label %1469 unwind label %1479

1469:                                             ; preds = %1461
  call void @llvm.lifetime.start.p0(i64 32, ptr %105) #8
  %1470 = load ptr, ptr %11, align 8, !tbaa !5
  %1471 = getelementptr inbounds i32, ptr %1470, i64 0
  %1472 = load i32, ptr %1471, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %105, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1472, i1 noundef zeroext true)
          to label %1473 unwind label %1483

1473:                                             ; preds = %1469
  call void @llvm.lifetime.start.p0(i64 32, ptr %106) #8
  %1474 = load i32, ptr %9, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %106, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1474, i1 noundef zeroext true)
          to label %1475 unwind label %1487

1475:                                             ; preds = %1473
  call void @llvm.lifetime.start.p0(i64 32, ptr %107) #8
  %1476 = load ptr, ptr %102, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %107, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %1476, i32 noundef 1)
          to label %1477 unwind label %1491

1477:                                             ; preds = %1475
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_RA7_S8_S7_RA3_S8_S7_SA_S7_SG_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(32) %103, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %104, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 1 dereferenceable(7) @.str.1124, ptr noundef nonnull align 8 dereferenceable(32) %105, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %106, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %107, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %1478 unwind label %1495

1478:                                             ; preds = %1477
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %107) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %106) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %105) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #8
  br label %1975

1479:                                             ; preds = %1461
  %1480 = landingpad { ptr, i32 }
          cleanup
  %1481 = extractvalue { ptr, i32 } %1480, 0
  store ptr %1481, ptr %14, align 8
  %1482 = extractvalue { ptr, i32 } %1480, 1
  store i32 %1482, ptr %15, align 4
  br label %1502

1483:                                             ; preds = %1469
  %1484 = landingpad { ptr, i32 }
          cleanup
  %1485 = extractvalue { ptr, i32 } %1484, 0
  store ptr %1485, ptr %14, align 8
  %1486 = extractvalue { ptr, i32 } %1484, 1
  store i32 %1486, ptr %15, align 4
  br label %1501

1487:                                             ; preds = %1473
  %1488 = landingpad { ptr, i32 }
          cleanup
  %1489 = extractvalue { ptr, i32 } %1488, 0
  store ptr %1489, ptr %14, align 8
  %1490 = extractvalue { ptr, i32 } %1488, 1
  store i32 %1490, ptr %15, align 4
  br label %1500

1491:                                             ; preds = %1475
  %1492 = landingpad { ptr, i32 }
          cleanup
  %1493 = extractvalue { ptr, i32 } %1492, 0
  store ptr %1493, ptr %14, align 8
  %1494 = extractvalue { ptr, i32 } %1492, 1
  store i32 %1494, ptr %15, align 4
  br label %1499

1495:                                             ; preds = %1477
  %1496 = landingpad { ptr, i32 }
          cleanup
  %1497 = extractvalue { ptr, i32 } %1496, 0
  store ptr %1497, ptr %14, align 8
  %1498 = extractvalue { ptr, i32 } %1496, 1
  store i32 %1498, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %107) #8
  br label %1499

1499:                                             ; preds = %1495, %1491
  call void @llvm.lifetime.end.p0(i64 32, ptr %107) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #8
  br label %1500

1500:                                             ; preds = %1499, %1487
  call void @llvm.lifetime.end.p0(i64 32, ptr %106) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %105) #8
  br label %1501

1501:                                             ; preds = %1500, %1483
  call void @llvm.lifetime.end.p0(i64 32, ptr %105) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %104) #8
  br label %1502

1502:                                             ; preds = %1501, %1479
  call void @llvm.lifetime.end.p0(i64 32, ptr %104) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %103) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #8
  br label %1976

1503:                                             ; preds = %144
  call void @llvm.lifetime.start.p0(i64 1, ptr %108) #8
  %1504 = load ptr, ptr %11, align 8, !tbaa !5
  %1505 = getelementptr inbounds i32, ptr %1504, i64 0
  %1506 = load i32, ptr %1505, align 4, !tbaa !9
  %1507 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1506)
  br i1 %1507, label %1508, label %1513

1508:                                             ; preds = %1503
  %1509 = load ptr, ptr %11, align 8, !tbaa !5
  %1510 = getelementptr inbounds i32, ptr %1509, i64 1
  %1511 = load i32, ptr %1510, align 4, !tbaa !9
  %1512 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1511)
  br label %1513

1513:                                             ; preds = %1508, %1503
  %1514 = phi i1 [ false, %1503 ], [ %1512, %1508 ]
  %1515 = zext i1 %1514 to i8
  store i8 %1515, ptr %108, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 32, ptr %109) #8
  %1516 = load ptr, ptr %11, align 8, !tbaa !5
  %1517 = getelementptr inbounds i32, ptr %1516, i64 0
  %1518 = load i32, ptr %1517, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %109, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1518, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr %110) #8
  %1519 = load ptr, ptr %11, align 8, !tbaa !5
  %1520 = getelementptr inbounds i32, ptr %1519, i64 1
  %1521 = load i32, ptr %1520, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %110, ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1521, i1 noundef zeroext true)
          to label %1522 unwind label %1539

1522:                                             ; preds = %1513
  call void @llvm.lifetime.start.p0(i64 8, ptr %111) #8
  %1523 = load ptr, ptr %11, align 8, !tbaa !5
  %1524 = getelementptr inbounds i32, ptr %1523, i64 1
  %1525 = load i32, ptr %1524, align 4, !tbaa !9
  %1526 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1525)
          to label %1527 unwind label %1543

1527:                                             ; preds = %1522
  store ptr %1526, ptr %111, align 8, !tbaa !5
  %1528 = load ptr, ptr %111, align 8, !tbaa !5
  %1529 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1528, i32 0, i32 2
  %1530 = load i32, ptr %1529, align 8, !tbaa !126
  %1531 = icmp ne i32 %1530, 7
  br i1 %1531, label %1532, label %1561

1532:                                             ; preds = %1527
  call void @llvm.lifetime.start.p0(i64 336, ptr %112) #8
  %1533 = load ptr, ptr %111, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %112, ptr noundef nonnull align 8 dereferenceable(336) %1533)
          to label %1534 unwind label %1547

1534:                                             ; preds = %1532
  %1535 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %112, i32 0, i32 2
  store i32 7, ptr %1535, align 8, !tbaa !126
  call void @llvm.lifetime.start.p0(i64 32, ptr %113) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr %114) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %114, ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(336) %112)
          to label %1536 unwind label %1551

1536:                                             ; preds = %1534
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRS6_S9_EEES6_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %113, ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %110, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %1537 unwind label %1555

1537:                                             ; preds = %1536
  %1538 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %110, ptr noundef nonnull align 8 dereferenceable(32) %113) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %113) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %112) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr %112) #8
  br label %1561

1539:                                             ; preds = %1513
  %1540 = landingpad { ptr, i32 }
          cleanup
  %1541 = extractvalue { ptr, i32 } %1540, 0
  store ptr %1541, ptr %14, align 8
  %1542 = extractvalue { ptr, i32 } %1540, 1
  store i32 %1542, ptr %15, align 4
  br label %1589

1543:                                             ; preds = %1522
  %1544 = landingpad { ptr, i32 }
          cleanup
  %1545 = extractvalue { ptr, i32 } %1544, 0
  store ptr %1545, ptr %14, align 8
  %1546 = extractvalue { ptr, i32 } %1544, 1
  store i32 %1546, ptr %15, align 4
  br label %1588

1547:                                             ; preds = %1532
  %1548 = landingpad { ptr, i32 }
          cleanup
  %1549 = extractvalue { ptr, i32 } %1548, 0
  store ptr %1549, ptr %14, align 8
  %1550 = extractvalue { ptr, i32 } %1548, 1
  store i32 %1550, ptr %15, align 4
  br label %1560

1551:                                             ; preds = %1534
  %1552 = landingpad { ptr, i32 }
          cleanup
  %1553 = extractvalue { ptr, i32 } %1552, 0
  store ptr %1553, ptr %14, align 8
  %1554 = extractvalue { ptr, i32 } %1552, 1
  store i32 %1554, ptr %15, align 4
  br label %1559

1555:                                             ; preds = %1536
  %1556 = landingpad { ptr, i32 }
          cleanup
  %1557 = extractvalue { ptr, i32 } %1556, 0
  store ptr %1557, ptr %14, align 8
  %1558 = extractvalue { ptr, i32 } %1556, 1
  store i32 %1558, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #8
  br label %1559

1559:                                             ; preds = %1555, %1551
  call void @llvm.lifetime.end.p0(i64 32, ptr %114) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %113) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %112) #8
  br label %1560

1560:                                             ; preds = %1559, %1547
  call void @llvm.lifetime.end.p0(i64 336, ptr %112) #8
  br label %1588

1561:                                             ; preds = %1537, %1527
  call void @llvm.lifetime.start.p0(i64 32, ptr %115) #8
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SA_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %115, ptr noundef nonnull align 1 dereferenceable(7) @.str.1125, ptr noundef nonnull align 8 dereferenceable(32) %109, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %110, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %1562 unwind label %1579

1562:                                             ; preds = %1561
  %1563 = load i32, ptr %8, align 4, !tbaa !9
  %1564 = load i32, ptr %9, align 4, !tbaa !9
  %1565 = load i8, ptr %108, align 1, !tbaa !15, !range !17, !noundef !18
  %1566 = trunc i8 %1565 to i1
  %1567 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1563, i32 noundef %1564, ptr noundef nonnull align 8 dereferenceable(32) %115, i1 noundef zeroext %1566, i1 noundef zeroext false)
          to label %1568 unwind label %1583

1568:                                             ; preds = %1562
  %1569 = load i32, ptr %9, align 4, !tbaa !9
  %1570 = load ptr, ptr %11, align 8, !tbaa !5
  %1571 = getelementptr inbounds i32, ptr %1570, i64 0
  %1572 = load i32, ptr %1571, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1569, i32 noundef %1572)
          to label %1573 unwind label %1583

1573:                                             ; preds = %1568
  %1574 = load i32, ptr %9, align 4, !tbaa !9
  %1575 = load ptr, ptr %11, align 8, !tbaa !5
  %1576 = getelementptr inbounds i32, ptr %1575, i64 1
  %1577 = load i32, ptr %1576, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1574, i32 noundef %1577)
          to label %1578 unwind label %1583

1578:                                             ; preds = %1573
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %115) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %108) #8
  br label %1975

1579:                                             ; preds = %1561
  %1580 = landingpad { ptr, i32 }
          cleanup
  %1581 = extractvalue { ptr, i32 } %1580, 0
  store ptr %1581, ptr %14, align 8
  %1582 = extractvalue { ptr, i32 } %1580, 1
  store i32 %1582, ptr %15, align 4
  br label %1587

1583:                                             ; preds = %1573, %1568, %1562
  %1584 = landingpad { ptr, i32 }
          cleanup
  %1585 = extractvalue { ptr, i32 } %1584, 0
  store ptr %1585, ptr %14, align 8
  %1586 = extractvalue { ptr, i32 } %1584, 1
  store i32 %1586, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %115) #8
  br label %1587

1587:                                             ; preds = %1583, %1579
  call void @llvm.lifetime.end.p0(i64 32, ptr %115) #8
  br label %1588

1588:                                             ; preds = %1587, %1560, %1543
  call void @llvm.lifetime.end.p0(i64 8, ptr %111) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %110) #8
  br label %1589

1589:                                             ; preds = %1588, %1539
  call void @llvm.lifetime.end.p0(i64 32, ptr %110) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %109) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %109) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %108) #8
  br label %1976

1590:                                             ; preds = %144
  %1591 = load i32, ptr %8, align 4, !tbaa !9
  %1592 = load i32, ptr %9, align 4, !tbaa !9
  %1593 = load ptr, ptr %11, align 8, !tbaa !5
  %1594 = getelementptr inbounds i32, ptr %1593, i64 0
  %1595 = load i32, ptr %1594, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1591, i32 noundef %1592, i32 noundef %1595, ptr noundef @.str.453)
  br label %1975

1596:                                             ; preds = %144
  %1597 = load i32, ptr %8, align 4, !tbaa !9
  %1598 = load i32, ptr %9, align 4, !tbaa !9
  %1599 = load ptr, ptr %11, align 8, !tbaa !5
  %1600 = getelementptr inbounds i32, ptr %1599, i64 0
  %1601 = load i32, ptr %1600, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1597, i32 noundef %1598, i32 noundef %1601, ptr noundef @.str.457)
  br label %1975

1602:                                             ; preds = %144
  %1603 = load i32, ptr %8, align 4, !tbaa !9
  %1604 = load i32, ptr %9, align 4, !tbaa !9
  %1605 = load ptr, ptr %11, align 8, !tbaa !5
  %1606 = getelementptr inbounds i32, ptr %1605, i64 0
  %1607 = load i32, ptr %1606, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1603, i32 noundef %1604, i32 noundef %1607, ptr noundef @.str.452)
  br label %1975

1608:                                             ; preds = %144
  %1609 = load i32, ptr %8, align 4, !tbaa !9
  %1610 = load i32, ptr %9, align 4, !tbaa !9
  %1611 = load ptr, ptr %11, align 8, !tbaa !5
  %1612 = getelementptr inbounds i32, ptr %1611, i64 0
  %1613 = load i32, ptr %1612, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1609, i32 noundef %1610, i32 noundef %1613, ptr noundef @.str.456)
  br label %1975

1614:                                             ; preds = %144
  %1615 = load i32, ptr %8, align 4, !tbaa !9
  %1616 = load i32, ptr %9, align 4, !tbaa !9
  %1617 = load ptr, ptr %11, align 8, !tbaa !5
  %1618 = getelementptr inbounds i32, ptr %1617, i64 0
  %1619 = load i32, ptr %1618, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1615, i32 noundef %1616, i32 noundef %1619, ptr noundef @.str.449)
  br label %1975

1620:                                             ; preds = %144
  %1621 = load i32, ptr %8, align 4, !tbaa !9
  %1622 = load i32, ptr %9, align 4, !tbaa !9
  %1623 = load ptr, ptr %11, align 8, !tbaa !5
  %1624 = getelementptr inbounds i32, ptr %1623, i64 0
  %1625 = load i32, ptr %1624, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1621, i32 noundef %1622, i32 noundef %1625, ptr noundef @.str.504)
  br label %1975

1626:                                             ; preds = %144
  %1627 = load i32, ptr %8, align 4, !tbaa !9
  %1628 = load i32, ptr %9, align 4, !tbaa !9
  %1629 = load ptr, ptr %11, align 8, !tbaa !5
  %1630 = getelementptr inbounds i32, ptr %1629, i64 0
  %1631 = load i32, ptr %1630, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1627, i32 noundef %1628, i32 noundef %1631, ptr noundef @.str.508)
  br label %1975

1632:                                             ; preds = %144
  %1633 = load i32, ptr %8, align 4, !tbaa !9
  %1634 = load i32, ptr %9, align 4, !tbaa !9
  %1635 = load ptr, ptr %11, align 8, !tbaa !5
  %1636 = getelementptr inbounds i32, ptr %1635, i64 0
  %1637 = load i32, ptr %1636, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1633, i32 noundef %1634, i32 noundef %1637, ptr noundef @.str.503)
  br label %1975

1638:                                             ; preds = %144
  %1639 = load i32, ptr %8, align 4, !tbaa !9
  %1640 = load i32, ptr %9, align 4, !tbaa !9
  %1641 = load ptr, ptr %11, align 8, !tbaa !5
  %1642 = getelementptr inbounds i32, ptr %1641, i64 0
  %1643 = load i32, ptr %1642, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1639, i32 noundef %1640, i32 noundef %1643, ptr noundef @.str.507)
  br label %1975

1644:                                             ; preds = %144
  %1645 = load i32, ptr %8, align 4, !tbaa !9
  %1646 = load i32, ptr %9, align 4, !tbaa !9
  %1647 = load ptr, ptr %11, align 8, !tbaa !5
  %1648 = getelementptr inbounds i32, ptr %1647, i64 0
  %1649 = load i32, ptr %1648, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1645, i32 noundef %1646, i32 noundef %1649, ptr noundef @.str.500)
  br label %1975

1650:                                             ; preds = %144
  %1651 = load i32, ptr %8, align 4, !tbaa !9
  %1652 = load i32, ptr %9, align 4, !tbaa !9
  %1653 = load ptr, ptr %11, align 8, !tbaa !5
  %1654 = getelementptr inbounds i32, ptr %1653, i64 0
  %1655 = load i32, ptr %1654, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1651, i32 noundef %1652, i32 noundef %1655, ptr noundef @.str.448)
  br label %1975

1656:                                             ; preds = %144
  %1657 = load i32, ptr %8, align 4, !tbaa !9
  %1658 = load i32, ptr %9, align 4, !tbaa !9
  %1659 = load ptr, ptr %11, align 8, !tbaa !5
  %1660 = getelementptr inbounds i32, ptr %1659, i64 0
  %1661 = load i32, ptr %1660, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1657, i32 noundef %1658, i32 noundef %1661, ptr noundef @.str.499)
  br label %1975

1662:                                             ; preds = %144
  %1663 = load i32, ptr %8, align 4, !tbaa !9
  %1664 = load i32, ptr %9, align 4, !tbaa !9
  %1665 = load ptr, ptr %11, align 8, !tbaa !5
  %1666 = getelementptr inbounds i32, ptr %1665, i64 0
  %1667 = load i32, ptr %1666, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1663, i32 noundef %1664, i32 noundef %1667, ptr noundef @.str.423)
  br label %1975

1668:                                             ; preds = %144
  %1669 = load i32, ptr %8, align 4, !tbaa !9
  %1670 = load i32, ptr %9, align 4, !tbaa !9
  %1671 = load ptr, ptr %11, align 8, !tbaa !5
  %1672 = getelementptr inbounds i32, ptr %1671, i64 0
  %1673 = load i32, ptr %1672, align 4, !tbaa !9
  %1674 = load ptr, ptr %11, align 8, !tbaa !5
  %1675 = getelementptr inbounds i32, ptr %1674, i64 1
  %1676 = load i32, ptr %1675, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1669, i32 noundef %1670, i32 noundef %1673, i32 noundef %1676, ptr noundef @.str.374)
  br label %1975

1677:                                             ; preds = %144
  %1678 = load i32, ptr %8, align 4, !tbaa !9
  %1679 = load i32, ptr %9, align 4, !tbaa !9
  %1680 = load ptr, ptr %11, align 8, !tbaa !5
  %1681 = getelementptr inbounds i32, ptr %1680, i64 0
  %1682 = load i32, ptr %1681, align 4, !tbaa !9
  %1683 = load ptr, ptr %11, align 8, !tbaa !5
  %1684 = getelementptr inbounds i32, ptr %1683, i64 1
  %1685 = load i32, ptr %1684, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1678, i32 noundef %1679, i32 noundef %1682, i32 noundef %1685, ptr noundef @.str.366)
  br label %1975

1686:                                             ; preds = %144
  %1687 = load i32, ptr %8, align 4, !tbaa !9
  %1688 = load i32, ptr %9, align 4, !tbaa !9
  %1689 = load ptr, ptr %11, align 8, !tbaa !5
  %1690 = getelementptr inbounds i32, ptr %1689, i64 0
  %1691 = load i32, ptr %1690, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1687, i32 noundef %1688, i32 noundef %1691, ptr noundef @.str.444)
  br label %1975

1692:                                             ; preds = %144
  %1693 = load i32, ptr %8, align 4, !tbaa !9
  %1694 = load i32, ptr %9, align 4, !tbaa !9
  %1695 = load ptr, ptr %11, align 8, !tbaa !5
  %1696 = getelementptr inbounds i32, ptr %1695, i64 0
  %1697 = load i32, ptr %1696, align 4, !tbaa !9
  %1698 = load ptr, ptr %11, align 8, !tbaa !5
  %1699 = getelementptr inbounds i32, ptr %1698, i64 1
  %1700 = load i32, ptr %1699, align 4, !tbaa !9
  %1701 = load ptr, ptr %11, align 8, !tbaa !5
  %1702 = getelementptr inbounds i32, ptr %1701, i64 2
  %1703 = load i32, ptr %1702, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1693, i32 noundef %1694, i32 noundef %1697, i32 noundef %1700, i32 noundef %1703, ptr noundef @.str.383)
  br label %1975

1704:                                             ; preds = %144
  %1705 = load i32, ptr %8, align 4, !tbaa !9
  %1706 = load i32, ptr %9, align 4, !tbaa !9
  %1707 = load ptr, ptr %11, align 8, !tbaa !5
  %1708 = getelementptr inbounds i32, ptr %1707, i64 0
  %1709 = load i32, ptr %1708, align 4, !tbaa !9
  %1710 = load ptr, ptr %11, align 8, !tbaa !5
  %1711 = getelementptr inbounds i32, ptr %1710, i64 1
  %1712 = load i32, ptr %1711, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1705, i32 noundef %1706, i32 noundef %1709, i32 noundef %1712, ptr noundef @.str.460)
  br label %1975

1713:                                             ; preds = %144
  %1714 = load i32, ptr %8, align 4, !tbaa !9
  %1715 = load i32, ptr %9, align 4, !tbaa !9
  %1716 = load ptr, ptr %11, align 8, !tbaa !5
  %1717 = getelementptr inbounds i32, ptr %1716, i64 0
  %1718 = load i32, ptr %1717, align 4, !tbaa !9
  %1719 = load ptr, ptr %11, align 8, !tbaa !5
  %1720 = getelementptr inbounds i32, ptr %1719, i64 1
  %1721 = load i32, ptr %1720, align 4, !tbaa !9
  %1722 = load ptr, ptr %11, align 8, !tbaa !5
  %1723 = getelementptr inbounds i32, ptr %1722, i64 2
  %1724 = load i32, ptr %1723, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1714, i32 noundef %1715, i32 noundef %1718, i32 noundef %1721, i32 noundef %1724, ptr noundef @.str.461)
  br label %1975

1725:                                             ; preds = %144
  %1726 = load i32, ptr %8, align 4, !tbaa !9
  %1727 = load i32, ptr %9, align 4, !tbaa !9
  %1728 = load ptr, ptr %11, align 8, !tbaa !5
  %1729 = getelementptr inbounds i32, ptr %1728, i64 0
  %1730 = load i32, ptr %1729, align 4, !tbaa !9
  %1731 = load ptr, ptr %11, align 8, !tbaa !5
  %1732 = getelementptr inbounds i32, ptr %1731, i64 0
  %1733 = load i32, ptr %1732, align 4, !tbaa !9
  %1734 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1733)
  %1735 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1734, i32 0, i32 2
  %1736 = load i32, ptr %1735, align 8, !tbaa !126
  %1737 = load i32, ptr %17, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1726, i32 noundef %1727, i32 noundef %1730, ptr noundef @.str.384, i32 noundef %1736, i32 noundef %1737)
  br label %1975

1738:                                             ; preds = %144
  %1739 = load i32, ptr %8, align 4, !tbaa !9
  %1740 = load i32, ptr %9, align 4, !tbaa !9
  %1741 = load ptr, ptr %11, align 8, !tbaa !5
  %1742 = getelementptr inbounds i32, ptr %1741, i64 0
  %1743 = load i32, ptr %1742, align 4, !tbaa !9
  %1744 = load i32, ptr %17, align 4, !tbaa !13
  %1745 = load i32, ptr %17, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1739, i32 noundef %1740, i32 noundef %1743, ptr noundef @.str.385, i32 noundef %1744, i32 noundef %1745)
  br label %1975

1746:                                             ; preds = %144
  %1747 = load i32, ptr %8, align 4, !tbaa !9
  %1748 = load i32, ptr %9, align 4, !tbaa !9
  %1749 = load ptr, ptr %11, align 8, !tbaa !5
  %1750 = getelementptr inbounds i32, ptr %1749, i64 0
  %1751 = load i32, ptr %1750, align 4, !tbaa !9
  %1752 = load i32, ptr %18, align 4, !tbaa !13
  %1753 = load i32, ptr %17, align 4, !tbaa !13
  call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1747, i32 noundef %1748, i32 noundef %1751, ptr noundef @.str.385, i32 noundef %1752, i32 noundef %1753)
  br label %1975

1754:                                             ; preds = %144
  %1755 = load i32, ptr %8, align 4, !tbaa !9
  %1756 = load i32, ptr %9, align 4, !tbaa !9
  %1757 = load ptr, ptr %11, align 8, !tbaa !5
  %1758 = getelementptr inbounds i32, ptr %1757, i64 0
  %1759 = load i32, ptr %1758, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1755, i32 noundef %1756, i32 noundef %1759, ptr noundef @.str.416)
  br label %1975

1760:                                             ; preds = %144
  %1761 = load i32, ptr %8, align 4, !tbaa !9
  %1762 = load i32, ptr %9, align 4, !tbaa !9
  %1763 = load ptr, ptr %11, align 8, !tbaa !5
  %1764 = getelementptr inbounds i32, ptr %1763, i64 0
  %1765 = load i32, ptr %1764, align 4, !tbaa !9
  %1766 = load ptr, ptr %11, align 8, !tbaa !5
  %1767 = getelementptr inbounds i32, ptr %1766, i64 1
  %1768 = load i32, ptr %1767, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1761, i32 noundef %1762, i32 noundef %1765, i32 noundef %1768, ptr noundef @.str.417)
  br label %1975

1769:                                             ; preds = %144
  %1770 = load i32, ptr %8, align 4, !tbaa !9
  %1771 = load i32, ptr %9, align 4, !tbaa !9
  %1772 = load ptr, ptr %11, align 8, !tbaa !5
  %1773 = getelementptr inbounds i32, ptr %1772, i64 0
  %1774 = load i32, ptr %1773, align 4, !tbaa !9
  %1775 = load ptr, ptr %11, align 8, !tbaa !5
  %1776 = getelementptr inbounds i32, ptr %1775, i64 1
  %1777 = load i32, ptr %1776, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1770, i32 noundef %1771, i32 noundef %1774, i32 noundef %1777, ptr noundef @.str.415)
  br label %1975

1778:                                             ; preds = %144, %144
  %1779 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %131, i32 0, i32 9
  %1780 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %1779, i32 0, i32 4
  %1781 = load i8, ptr %1780, align 4, !tbaa !149, !range !17, !noundef !18
  %1782 = trunc i8 %1781 to i1
  br i1 %1782, label %1783, label %1863

1783:                                             ; preds = %1778
  call void @llvm.lifetime.start.p0(i64 32, ptr %116) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %117) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %117) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %116, ptr noundef @.str.1126, ptr noundef nonnull align 1 dereferenceable(1) %117)
          to label %1784 unwind label %1795

1784:                                             ; preds = %1783
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(32) %116)
          to label %1785 unwind label %1799

1785:                                             ; preds = %1784
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %117) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %118) #8
  %1786 = load i32, ptr %9, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %119, i32 noundef %1786)
  %1787 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %119, i32 0, i32 0
  %1788 = load i32, ptr %1787, align 4
  %1789 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 %1788, i32 noundef 0)
  %1790 = zext i1 %1789 to i8
  store i8 %1790, ptr %118, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %120) #8
  store i32 0, ptr %120, align 4, !tbaa !150
  %1791 = load i32, ptr %8, align 4, !tbaa !9
  %1792 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1791)
  %1793 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1792, i32 0, i32 3
  %1794 = load i32, ptr %1793, align 4, !tbaa !152
  switch i32 %1794, label %1819 [
    i32 16, label %1804
    i32 32, label %1809
    i32 64, label %1814
  ]

1795:                                             ; preds = %1783
  %1796 = landingpad { ptr, i32 }
          cleanup
  %1797 = extractvalue { ptr, i32 } %1796, 0
  store ptr %1797, ptr %14, align 8
  %1798 = extractvalue { ptr, i32 } %1796, 1
  store i32 %1798, ptr %15, align 4
  br label %1803

1799:                                             ; preds = %1784
  %1800 = landingpad { ptr, i32 }
          cleanup
  %1801 = extractvalue { ptr, i32 } %1800, 0
  store ptr %1801, ptr %14, align 8
  %1802 = extractvalue { ptr, i32 } %1800, 1
  store i32 %1802, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %116) #8
  br label %1803

1803:                                             ; preds = %1799, %1795
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %117) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %117) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %116) #8
  br label %1976

1804:                                             ; preds = %1785
  %1805 = load i32, ptr %13, align 4, !tbaa !11
  %1806 = icmp eq i32 %1805, 79
  %1807 = zext i1 %1806 to i64
  %1808 = select i1 %1806, i32 512, i32 4096
  store i32 %1808, ptr %120, align 4, !tbaa !150
  br label %1826

1809:                                             ; preds = %1785
  %1810 = load i32, ptr %13, align 4, !tbaa !11
  %1811 = icmp eq i32 %1810, 79
  %1812 = zext i1 %1811 to i64
  %1813 = select i1 %1811, i32 1024, i32 8192
  store i32 %1813, ptr %120, align 4, !tbaa !150
  br label %1826

1814:                                             ; preds = %1785
  %1815 = load i32, ptr %13, align 4, !tbaa !11
  %1816 = icmp eq i32 %1815, 79
  %1817 = zext i1 %1816 to i64
  %1818 = select i1 %1816, i32 2048, i32 16384
  store i32 %1818, ptr %120, align 4, !tbaa !150
  br label %1826

1819:                                             ; preds = %1785
  %1820 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1820, ptr noundef @.str.1127)
          to label %1821 unwind label %1822

1821:                                             ; preds = %1819
  call void @__cxa_throw(ptr %1820, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1822:                                             ; preds = %1819
  %1823 = landingpad { ptr, i32 }
          cleanup
  %1824 = extractvalue { ptr, i32 } %1823, 0
  store ptr %1824, ptr %14, align 8
  %1825 = extractvalue { ptr, i32 } %1823, 1
  store i32 %1825, ptr %15, align 4
  call void @__cxa_free_exception(ptr %1820) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %120) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %118) #8
  br label %1976

1826:                                             ; preds = %1814, %1809, %1804
  %1827 = load i32, ptr %120, align 4, !tbaa !150
  %1828 = load i8, ptr %118, align 1, !tbaa !15, !range !17, !noundef !18
  %1829 = trunc i8 %1828 to i1
  call void @_ZN11spirv_cross12CompilerGLSL16require_polyfillENS0_8PolyfillEb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1827, i1 noundef zeroext %1829)
  %1830 = load i8, ptr %118, align 1, !tbaa !15, !range !17, !noundef !18
  %1831 = trunc i8 %1830 to i1
  br i1 %1831, label %1832, label %1834

1832:                                             ; preds = %1826
  %1833 = load i32, ptr %120, align 4, !tbaa !150
  call void @_ZN11spirv_cross12CompilerGLSL16require_polyfillENS0_8PolyfillEb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1833, i1 noundef zeroext false)
  br label %1834

1834:                                             ; preds = %1832, %1826
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #8
  %1835 = load i8, ptr %118, align 1, !tbaa !15, !range !17, !noundef !18
  %1836 = trunc i8 %1835 to i1
  br i1 %1836, label %1837, label %1845

1837:                                             ; preds = %1834
  %1838 = load i32, ptr %13, align 4, !tbaa !11
  %1839 = icmp eq i32 %1838, 79
  br i1 %1839, label %1840, label %1841

1840:                                             ; preds = %1837
  br label %1842

1841:                                             ; preds = %1837
  br label %1842

1842:                                             ; preds = %1841, %1840
  %1843 = phi ptr [ @.str.1128, %1840 ], [ @.str.1129, %1841 ]
  %1844 = getelementptr inbounds [15 x i8], ptr %1843, i64 0, i64 0
  store ptr %1844, ptr %121, align 8, !tbaa !5
  br label %1853

1845:                                             ; preds = %1834
  %1846 = load i32, ptr %13, align 4, !tbaa !11
  %1847 = icmp eq i32 %1846, 79
  br i1 %1847, label %1848, label %1849

1848:                                             ; preds = %1845
  br label %1850

1849:                                             ; preds = %1845
  br label %1850

1850:                                             ; preds = %1849, %1848
  %1851 = phi ptr [ @.str.920, %1848 ], [ @.str.921, %1849 ]
  %1852 = getelementptr inbounds [8 x i8], ptr %1851, i64 0, i64 0
  store ptr %1852, ptr %121, align 8, !tbaa !5
  br label %1853

1853:                                             ; preds = %1850, %1842
  %1854 = load i32, ptr %8, align 4, !tbaa !9
  %1855 = load i32, ptr %9, align 4, !tbaa !9
  %1856 = load ptr, ptr %11, align 8, !tbaa !5
  %1857 = getelementptr inbounds i32, ptr %1856, i64 0
  %1858 = load i32, ptr %1857, align 4, !tbaa !9
  %1859 = load ptr, ptr %11, align 8, !tbaa !5
  %1860 = getelementptr inbounds i32, ptr %1859, i64 1
  %1861 = load i32, ptr %1860, align 4, !tbaa !9
  %1862 = load ptr, ptr %121, align 8, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1854, i32 noundef %1855, i32 noundef %1858, i32 noundef %1861, ptr noundef %1862)
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %120) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %118) #8
  br label %1873

1863:                                             ; preds = %1778
  %1864 = load i32, ptr %8, align 4, !tbaa !9
  %1865 = load i32, ptr %9, align 4, !tbaa !9
  %1866 = load ptr, ptr %11, align 8, !tbaa !5
  %1867 = getelementptr inbounds i32, ptr %1866, i64 0
  %1868 = load i32, ptr %1867, align 4, !tbaa !9
  %1869 = load ptr, ptr %11, align 8, !tbaa !5
  %1870 = getelementptr inbounds i32, ptr %1869, i64 1
  %1871 = load i32, ptr %1870, align 4, !tbaa !9
  %1872 = load i32, ptr %13, align 4, !tbaa !11
  call void @_ZN11spirv_cross12CompilerGLSL15emit_nminmax_opEjjjj10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1864, i32 noundef %1865, i32 noundef %1868, i32 noundef %1871, i32 noundef %1872)
  br label %1873

1873:                                             ; preds = %1863, %1853
  br label %1975

1874:                                             ; preds = %144
  %1875 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %131, i32 0, i32 9
  %1876 = getelementptr inbounds %"struct.spirv_cross::CompilerGLSL::Options", ptr %1875, i32 0, i32 4
  %1877 = load i8, ptr %1876, align 4, !tbaa !149, !range !17, !noundef !18
  %1878 = trunc i8 %1877 to i1
  br i1 %1878, label %1879, label %1934

1879:                                             ; preds = %1874
  call void @llvm.lifetime.start.p0(i64 32, ptr %122) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %123) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %123) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %122, ptr noundef @.str.1126, ptr noundef nonnull align 1 dereferenceable(1) %123)
          to label %1880 unwind label %1891

1880:                                             ; preds = %1879
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 8 dereferenceable(32) %122)
          to label %1881 unwind label %1895

1881:                                             ; preds = %1880
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %123) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %123) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %122) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr %124) #8
  %1882 = load i32, ptr %9, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %125, i32 noundef %1882)
  %1883 = getelementptr inbounds %"class.spirv_cross::TypedID.280", ptr %125, i32 0, i32 0
  %1884 = load i32, ptr %1883, align 4
  %1885 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 %1884, i32 noundef 0)
  %1886 = zext i1 %1885 to i8
  store i8 %1886, ptr %124, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %126) #8
  store i32 0, ptr %126, align 4, !tbaa !150
  %1887 = load i32, ptr %8, align 4, !tbaa !9
  %1888 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %131, i32 noundef %1887)
  %1889 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %1888, i32 0, i32 3
  %1890 = load i32, ptr %1889, align 4, !tbaa !152
  switch i32 %1890, label %1903 [
    i32 16, label %1900
    i32 32, label %1901
    i32 64, label %1902
  ]

1891:                                             ; preds = %1879
  %1892 = landingpad { ptr, i32 }
          cleanup
  %1893 = extractvalue { ptr, i32 } %1892, 0
  store ptr %1893, ptr %14, align 8
  %1894 = extractvalue { ptr, i32 } %1892, 1
  store i32 %1894, ptr %15, align 4
  br label %1899

1895:                                             ; preds = %1880
  %1896 = landingpad { ptr, i32 }
          cleanup
  %1897 = extractvalue { ptr, i32 } %1896, 0
  store ptr %1897, ptr %14, align 8
  %1898 = extractvalue { ptr, i32 } %1896, 1
  store i32 %1898, ptr %15, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %122) #8
  br label %1899

1899:                                             ; preds = %1895, %1891
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %123) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %123) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %122) #8
  br label %1976

1900:                                             ; preds = %1881
  store i32 32768, ptr %126, align 4, !tbaa !150
  br label %1910

1901:                                             ; preds = %1881
  store i32 65536, ptr %126, align 4, !tbaa !150
  br label %1910

1902:                                             ; preds = %1881
  store i32 131072, ptr %126, align 4, !tbaa !150
  br label %1910

1903:                                             ; preds = %1881
  %1904 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %1904, ptr noundef @.str.1127)
          to label %1905 unwind label %1906

1905:                                             ; preds = %1903
  call void @__cxa_throw(ptr %1904, ptr @_ZTIN11spirv_cross13CompilerErrorE, ptr @_ZNSt13runtime_errorD2Ev) #9
  unreachable

1906:                                             ; preds = %1903
  %1907 = landingpad { ptr, i32 }
          cleanup
  %1908 = extractvalue { ptr, i32 } %1907, 0
  store ptr %1908, ptr %14, align 8
  %1909 = extractvalue { ptr, i32 } %1907, 1
  store i32 %1909, ptr %15, align 4
  call void @__cxa_free_exception(ptr %1904) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %124) #8
  br label %1976

1910:                                             ; preds = %1902, %1901, %1900
  %1911 = load i32, ptr %126, align 4, !tbaa !150
  %1912 = load i8, ptr %124, align 1, !tbaa !15, !range !17, !noundef !18
  %1913 = trunc i8 %1912 to i1
  call void @_ZN11spirv_cross12CompilerGLSL16require_polyfillENS0_8PolyfillEb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1911, i1 noundef zeroext %1913)
  %1914 = load i8, ptr %124, align 1, !tbaa !15, !range !17, !noundef !18
  %1915 = trunc i8 %1914 to i1
  br i1 %1915, label %1916, label %1918

1916:                                             ; preds = %1910
  %1917 = load i32, ptr %126, align 4, !tbaa !150
  call void @_ZN11spirv_cross12CompilerGLSL16require_polyfillENS0_8PolyfillEb(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1917, i1 noundef zeroext false)
  br label %1918

1918:                                             ; preds = %1916, %1910
  %1919 = load i32, ptr %8, align 4, !tbaa !9
  %1920 = load i32, ptr %9, align 4, !tbaa !9
  %1921 = load ptr, ptr %11, align 8, !tbaa !5
  %1922 = getelementptr inbounds i32, ptr %1921, i64 0
  %1923 = load i32, ptr %1922, align 4, !tbaa !9
  %1924 = load ptr, ptr %11, align 8, !tbaa !5
  %1925 = getelementptr inbounds i32, ptr %1924, i64 1
  %1926 = load i32, ptr %1925, align 4, !tbaa !9
  %1927 = load ptr, ptr %11, align 8, !tbaa !5
  %1928 = getelementptr inbounds i32, ptr %1927, i64 2
  %1929 = load i32, ptr %1928, align 4, !tbaa !9
  %1930 = load i8, ptr %124, align 1, !tbaa !15, !range !17, !noundef !18
  %1931 = trunc i8 %1930 to i1
  %1932 = zext i1 %1931 to i64
  %1933 = select i1 %1931, ptr @.str.1130, ptr @.str.922
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1919, i32 noundef %1920, i32 noundef %1923, i32 noundef %1926, i32 noundef %1929, ptr noundef %1933)
  call void @llvm.lifetime.end.p0(i64 4, ptr %126) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %124) #8
  br label %1973

1934:                                             ; preds = %1874
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #8
  %1935 = getelementptr inbounds %"class.spirv_cross::CompilerGLSL", ptr %131, i32 0, i32 31
  call void @llvm.lifetime.start.p0(i64 4, ptr %128) #8
  %1936 = load i32, ptr %9, align 4, !tbaa !9
  %1937 = or i32 %1936, 536870912
  store i32 %1937, ptr %128, align 4, !tbaa !9
  %1938 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %1935, ptr noundef nonnull align 4 dereferenceable(4) %128)
  call void @llvm.lifetime.end.p0(i64 4, ptr %128) #8
  store ptr %1938, ptr %127, align 8, !tbaa !5
  %1939 = load ptr, ptr %127, align 8, !tbaa !5
  %1940 = load i32, ptr %1939, align 4, !tbaa !9
  %1941 = icmp ne i32 %1940, 0
  br i1 %1941, label %1946, label %1942

1942:                                             ; preds = %1934
  %1943 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %131, i32 0, i32 1
  %1944 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %1943, i32 noundef 1)
  %1945 = load ptr, ptr %127, align 8, !tbaa !5
  store i32 %1944, ptr %1945, align 4, !tbaa !9
  br label %1946

1946:                                             ; preds = %1942, %1934
  %1947 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %131, i32 0, i32 1
  %1948 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1947, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %129) #8
  %1949 = load i32, ptr %9, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %129, i32 noundef %1949)
  %1950 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1948, ptr noundef nonnull align 4 dereferenceable(4) %129)
  %1951 = getelementptr inbounds %"class.spirv_cross::Compiler", ptr %131, i32 0, i32 1
  %1952 = getelementptr inbounds %"class.spirv_cross::ParsedIR", ptr %1951, i32 0, i32 3
  call void @llvm.lifetime.start.p0(i64 4, ptr %130) #8
  %1953 = load ptr, ptr %127, align 8, !tbaa !5
  %1954 = load i32, ptr %1953, align 4, !tbaa !9
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %130, i32 noundef %1954)
  %1955 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %1952, ptr noundef nonnull align 4 dereferenceable(4) %130)
  %1956 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488) %1955, ptr noundef nonnull align 8 dereferenceable(488) %1950)
  call void @llvm.lifetime.end.p0(i64 4, ptr %130) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %129) #8
  %1957 = load i32, ptr %8, align 4, !tbaa !9
  %1958 = load ptr, ptr %127, align 8, !tbaa !5
  %1959 = load i32, ptr %1958, align 4, !tbaa !9
  %1960 = load ptr, ptr %11, align 8, !tbaa !5
  %1961 = getelementptr inbounds i32, ptr %1960, i64 0
  %1962 = load i32, ptr %1961, align 4, !tbaa !9
  %1963 = load ptr, ptr %11, align 8, !tbaa !5
  %1964 = getelementptr inbounds i32, ptr %1963, i64 1
  %1965 = load i32, ptr %1964, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL15emit_nminmax_opEjjjj10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1957, i32 noundef %1959, i32 noundef %1962, i32 noundef %1965, i32 noundef 80)
  %1966 = load i32, ptr %8, align 4, !tbaa !9
  %1967 = load i32, ptr %9, align 4, !tbaa !9
  %1968 = load ptr, ptr %127, align 8, !tbaa !5
  %1969 = load i32, ptr %1968, align 4, !tbaa !9
  %1970 = load ptr, ptr %11, align 8, !tbaa !5
  %1971 = getelementptr inbounds i32, ptr %1970, i64 2
  %1972 = load i32, ptr %1971, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL15emit_nminmax_opEjjjj10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %131, i32 noundef %1966, i32 noundef %1967, i32 noundef %1969, i32 noundef %1972, i32 noundef 79)
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #8
  br label %1973

1973:                                             ; preds = %1946, %1918
  br label %1975

1974:                                             ; preds = %144
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA26_KcRjEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %131, ptr noundef nonnull align 1 dereferenceable(26) @.str.1131, ptr noundef nonnull align 4 dereferenceable(4) %10)
  br label %1975

1975:                                             ; preds = %1974, %1973, %1873, %1769, %1760, %1754, %1746, %1738, %1725, %1713, %1704, %1692, %1686, %1677, %1668, %1662, %1656, %1650, %1644, %1638, %1632, %1626, %1620, %1614, %1608, %1602, %1596, %1590, %1578, %1478, %1443, %1431, %1422, %1410, %1408, %1282, %1168, %1162, %1156, %1150, %1144, %1138, %1129, %1120, %1119, %1104, %1089, %1074, %949, %901, %848, %842, %836, %830, %824, %818, %805, %792, %780, %770, %760, %751, %742, %732, %722, %720, %578, %494, %380, %374, %368, %362, %356, %350, %342, %336, %328, %327, %251, %212
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  ret void

1976:                                             ; preds = %1906, %1899, %1822, %1803, %1589, %1502, %1409, %1237, %1073, %948, %900, %721, %577, %481, %326, %246, %242, %211
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  br label %1977

1977:                                             ; preds = %1976, %140
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  br label %1978

1978:                                             ; preds = %1977
  %1979 = load ptr, ptr %14, align 8
  %1980 = load i32, ptr %15, align 4
  %1981 = insertvalue { ptr, i32 } poison, ptr %1979, 0
  %1982 = insertvalue { ptr, i32 } %1981, i32 %1980, 1
  resume { ptr, i32 } %1982
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZL23is_unsigned_glsl_opcode10GLSLstd450(i32 noundef) #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_S9_S3_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(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(7)) #2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_S1_S9_RA9_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(9)) #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_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(2)) #2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixEOj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"_ZTS10GLSLstd450", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"_ZTSN11spirv_cross8SPIRType8BaseTypeE", !7, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"bool", !7, i64 0}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = !{!20, !16, i64 7640}
!20 = !{!"_ZTSN11spirv_cross12CompilerGLSLE", !21, i64 0, !6, i64 3176, !85, i64 3184, !16, i64 3272, !88, i64 3280, !6, i64 7616, !6, i64 7624, !16, i64 7632, !16, 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, !16, i64 8184, !101, i64 8192, !10, i64 8416, !67, i64 8424, !67, i64 8480, !67, i64 8536, !102, i64 8592, !104, i64 8648, !105, i64 8656, !50, i64 8712, !50, i64 8992, !105, i64 9272, !107, i64 9328, !10, i64 9384, !10, i64 9388, !10, i64 9392, !16, i64 9396, !16, i64 9397, !110, i64 9400, !110, i64 9424, !114, i64 9448, !118, i64 9472, !105, i64 9496, !67, i64 9552, !67, i64 9608, !7, i64 9664, !122, i64 9672, !67, i64 9728, !6, i64 9784, !124, i64 9792}
!21 = !{!"_ZTSN11spirv_cross8CompilerE", !22, i64 8, !69, i64 1928, !69, i64 1984, !6, i64 2040, !6, i64 2048, !10, i64 2056, !72, i64 2064, !16, i64 2120, !67, i64 2128, !16, i64 2184, !16, 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, !10, i64 2808, !10, i64 2812, !16, i64 2816, !67, i64 2824, !16, i64 2880, !16, i64 2881, !10, i64 2884, !79, i64 2888, !69, i64 2944, !81, i64 3000, !67, i64 3056, !16, 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, !10, i64 1756, !10, 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", !6, 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", !6, i64 0, !6, i64 8, !6, i64 16}
!33 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7VariantELm8EEE", !34, i64 0, !35, i64 16, !36, i64 24}
!34 = !{!"_ZTSN11spirv_cross10VectorViewINS_7VariantEEE", !6, 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", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!39 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, 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", !6, 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", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!47 = !{!"_ZTSN11spirv_cross11SmallVectorIN3spv10CapabilityELm8EEE", !48, i64 0, !35, i64 16, !49, i64 24}
!48 = !{!"_ZTSN11spirv_cross10VectorViewIN3spv10CapabilityEEE", !6, 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", !6, 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", !6, 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", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, 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", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!60 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE4EEE", !10, i64 0}
!61 = !{!"_ZTSN11spirv_cross8ParsedIR6SourceE", !10, i64 0, !16, i64 4, !16, i64 5, !16, 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", !6, 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", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!69 = !{!"_ZTSN11spirv_cross11SmallVectorIjLm8EEE", !70, i64 0, !35, i64 16, !71, i64 24}
!70 = !{!"_ZTSN11spirv_cross10VectorViewIjEE", !6, 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", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!74 = !{!"_ZTSN11spirv_cross11SmallVectorINS_20CombinedImageSamplerELm8EEE", !75, i64 0, !35, i64 16, !76, i64 24}
!75 = !{!"_ZTSN11spirv_cross10VectorViewINS_20CombinedImageSamplerEEE", !6, i64 0, !35, i64 8}
!76 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_20CombinedImageSamplerELm8EEE", !7, i64 0}
!77 = !{!"_ZTSSt8functionIFvRKN11spirv_cross8SPIRTypeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERS9_EE", !78, i64 0, !6, i64 24}
!78 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, 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", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, 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", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, 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", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!85 = !{!"_ZTSN11spirv_cross11SmallVectorIPNS_9SPIRBlockELm8EEE", !86, i64 0, !35, i64 16, !87, i64 24}
!86 = !{!"_ZTSN11spirv_cross10VectorViewIPNS_9SPIRBlockEEE", !6, 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", !6, 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", !6, i64 0, !35, i64 8}
!92 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_12StringStreamILm4096ELm4096EE6BufferELm8EEE", !7, i64 0}
!93 = !{!"_ZTSN11spirv_cross12CompilerGLSL7OptionsE", !10, i64 0, !16, i64 4, !16, i64 5, !10, 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, !10, i64 24, !94, i64 28, !95, i64 32}
!94 = !{!"_ZTSN11spirv_cross12CompilerGLSL7Options13VertexOptionsE", !16, i64 0, !16, i64 1, !16, 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", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, 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", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!101 = !{!"_ZTSN11spirv_cross12CompilerGLSL17BackendVariationsE", !64, i64 0, !64, i64 32, !64, 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, !14, 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}
!102 = !{!"_ZTSSt13unordered_mapIjbSt4hashIjESt8equal_toIjESaISt4pairIKjbEEE", !103, i64 0}
!103 = !{!"_ZTSSt10_HashtableIjSt4pairIKjbESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!104 = !{!"_ZTSN11spirv_cross12CompilerGLSL27ShaderSubgroupSupportHelperE", !10, i64 0}
!105 = !{!"_ZTSSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEE", !106, i64 0}
!106 = !{!"_ZTSSt10_HashtableIjSt4pairIKjjESaIS2_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS4_18_Mod_range_hashingENS4_20_Default_ranged_hashENS4_20_Prime_rehash_policyENS4_17_Hashtable_traitsILb0ELb0ELb1EEEE", !6, i64 0, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!107 = !{!"_ZTSN11spirv_cross11SmallVectorINS_7TypedIDILNS_5TypesE1EEELm8EEE", !108, i64 0, !35, i64 16, !109, i64 24}
!108 = !{!"_ZTSN11spirv_cross10VectorViewINS_7TypedIDILNS_5TypesE1EEEEE", !6, i64 0, !35, i64 8}
!109 = !{!"_ZTSN11spirv_cross13AlignedBufferINS_7TypedIDILNS_5TypesE1EEELm8EEE", !7, i64 0}
!110 = !{!"_ZTSSt6vectorIN11spirv_cross8PlsRemapESaIS1_EE", !111, i64 0}
!111 = !{!"_ZTSSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE", !112, i64 0}
!112 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE12_Vector_implE", !113, i64 0}
!113 = !{!"_ZTSNSt12_Vector_baseIN11spirv_cross8PlsRemapESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!114 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE", !115, i64 0}
!115 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !116, i64 0}
!116 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !117, i64 0}
!117 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!118 = !{!"_ZTSSt6vectorISt4pairIjbESaIS1_EE", !119, i64 0}
!119 = !{!"_ZTSSt12_Vector_baseISt4pairIjbESaIS1_EE", !120, i64 0}
!120 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE12_Vector_implE", !121, i64 0}
!121 = !{!"_ZTSNSt12_Vector_baseISt4pairIjbESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!122 = !{!"_ZTSSt13unordered_setIN11spirv_cross21LocationComponentPairENS0_14InternalHasherESt8equal_toIS1_ESaIS1_EE", !123, i64 0}
!123 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!124 = !{!"_ZTSSt13unordered_mapIjN11spirv_cross11SmallVectorINS0_7TypedIDILNS0_5TypesE3EEELm8EEESt4hashIjESt8equal_toIjESaISt4pairIKjS5_EEE", !125, i64 0}
!125 = !{!"_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, !35, i64 8, !39, i64 16, !35, i64 24, !40, i64 32, !6, i64 48}
!126 = !{!127, !14, i64 16}
!127 = !{!"_ZTSN11spirv_cross8SPIRTypeE", !128, i64 0, !130, i64 12, !14, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !69, i64 32, !131, i64 88, !10, i64 120, !16, i64 124, !16, i64 125, !134, i64 128, !107, i64 136, !69, i64 192, !135, i64 248, !136, i64 272, !136, i64 276, !97, i64 280}
!128 = !{!"_ZTSN11spirv_cross8IVariantE", !129, i64 8}
!129 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE0EEE", !10, i64 0}
!130 = !{!"_ZTSN3spv2OpE", !7, i64 0}
!131 = !{!"_ZTSN11spirv_cross11SmallVectorIbLm8EEE", !132, i64 0, !35, i64 16, !133, i64 24}
!132 = !{!"_ZTSN11spirv_cross10VectorViewIbEE", !6, i64 0, !35, i64 8}
!133 = !{!"_ZTSN11spirv_cross13AlignedBufferIbLm8EEE", !7, i64 0}
!134 = !{!"_ZTSN3spv12StorageClassE", !7, i64 0}
!135 = !{!"_ZTSN11spirv_cross8SPIRType9ImageTypeE", !136, i64 0, !137, i64 4, !16, i64 8, !16, i64 9, !16, i64 10, !10, i64 12, !138, i64 16, !139, i64 20}
!136 = !{!"_ZTSN11spirv_cross7TypedIDILNS_5TypesE1EEE", !10, i64 0}
!137 = !{!"_ZTSN3spv3DimE", !7, i64 0}
!138 = !{!"_ZTSN3spv11ImageFormatE", !7, i64 0}
!139 = !{!"_ZTSN3spv15AccessQualifierE", !7, i64 0}
!140 = !{!141, !141, i64 0}
!141 = !{!"vtable pointer", !8, i64 0}
!142 = !{!20, !10, i64 7636}
!143 = distinct !{!143, !144}
!144 = !{!"llvm.loop.mustprogress"}
!145 = !{!146, !16, i64 57}
!146 = !{!"_ZTSN11spirv_cross14SPIRExpressionE", !128, i64 0, !129, i64 12, !64, i64 16, !136, i64 48, !129, i64 52, !16, i64 56, !16, i64 57, !16, i64 58, !16, i64 59, !42, i64 64, !42, i64 120, !42, i64 176, !10, i64 232}
!147 = !{!127, !10, i64 24}
!148 = !{!127, !10, i64 28}
!149 = !{!20, !16, i64 7648}
!150 = !{!151, !151, i64 0}
!151 = !{!"_ZTSN11spirv_cross12CompilerGLSL8PolyfillE", !7, i64 0}
!152 = !{!127, !10, i64 20}


; 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.std::allocator.71" = type { i8 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.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.11 = external hidden unnamed_addr constant [90 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.185 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.298 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.335 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.340 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.341 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.342 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.345 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.346 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.347 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.348 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.363 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.364 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.365 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.366 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.367 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.374 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.381 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.382 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.383 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.384 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.385 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.390 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.391 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.392 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.393 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.415 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.416 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.417 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.418 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.419 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.423 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.426 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.427 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.429 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.435 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.438 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.444 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.448 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.449 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.452 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.453 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.456 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.457 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.458 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.459 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.460 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.461 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.462 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.463 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.464 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.465 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.466 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.467 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.468 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.469 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.470 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.471 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.494 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.499 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.500 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.503 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.504 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.507 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.508 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.719 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.751 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.920 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.921 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.922 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.955 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.975 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.976 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1016 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1100 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.1101 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1102 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1103 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1104 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.1105 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.1106 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1107 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1108 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1109 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1110 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1111 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.1112 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1113 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1114 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1115 = external hidden unnamed_addr constant [39 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj = external hidden unnamed_addr constant [111 x i8], align 1
@.str.1116 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.1117 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.1118 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1119 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1120 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.1121 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.1122 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1123 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1124 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1125 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1126 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.1127 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.1128 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1129 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1130 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.1131 = external hidden unnamed_addr constant [26 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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848)) local_unnamed_addr #5 align 2

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

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

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

declare noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920), i32 noundef) local_unnamed_addr #6

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(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) local_unnamed_addr #2 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 #7 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 #2 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 #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488), ptr noundef nonnull align 8 dereferenceable(488)) local_unnamed_addr #7 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 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 #2 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_cross12CompilerGLSL22to_unpacked_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 #2 align 2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef) local_unnamed_addr #7

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRPKcRA2_S1_NSt7__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 #2

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK11spirv_cross12CompilerGLSL20get_remapped_glsl_opE10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848), i32 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %4, i32 noundef %5) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::allocator.71", align 1
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"struct.spirv_cross::SPIRType", 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 %"struct.spirv_cross::SPIRType", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"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 %"struct.spirv_cross::SPIRType", 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.spirv_cross::TypedID.280", align 4
  %51 = alloca %"class.spirv_cross::TypedID.280", align 4
  %52 = alloca %"class.spirv_cross::TypedID.280", align 4
  %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.spirv_cross::TypedID.280", align 4
  %63 = alloca ptr, align 8
  %64 = alloca %"class.spirv_cross::TypedID.280", align 4
  %65 = alloca %"class.std::__cxx11::basic_string", align 8
  %66 = alloca %"class.std::__cxx11::basic_string", align 8
  %67 = alloca %"class.std::__cxx11::basic_string", align 8
  %68 = alloca %"class.std::__cxx11::basic_string", align 8
  %69 = alloca %"class.std::__cxx11::basic_string", align 8
  %70 = alloca %"class.std::__cxx11::basic_string", align 8
  %71 = alloca %"class.std::__cxx11::basic_string", align 8
  %72 = alloca %"class.std::__cxx11::basic_string", align 8
  %73 = alloca %"class.std::__cxx11::basic_string", align 8
  %74 = alloca %"struct.spirv_cross::SPIRType", align 8
  %75 = alloca %"class.std::__cxx11::basic_string", align 8
  %76 = alloca %"class.std::__cxx11::basic_string", align 8
  %77 = alloca %"class.std::__cxx11::basic_string", align 8
  %78 = alloca %"class.std::__cxx11::basic_string", align 8
  %79 = alloca %"class.std::allocator.71", align 1
  %80 = alloca %"class.spirv_cross::TypedID.280", align 4
  %81 = alloca %"class.std::__cxx11::basic_string", align 8
  %82 = alloca %"class.std::allocator.71", align 1
  %83 = alloca %"class.spirv_cross::TypedID.280", align 4
  %84 = alloca i32, align 4
  %85 = alloca %"class.spirv_cross::TypedID.280", align 4
  %86 = alloca %"class.spirv_cross::TypedID.280", align 4
  store i32 %2, ptr %7, align 4, !tbaa !5
  store i32 %3, ptr %8, align 4, !tbaa !5
  %87 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %87, label %88, label %95

88:                                               ; preds = %6
  %89 = tail call noundef zeroext i1 @_ZL23is_unsigned_glsl_opcode10GLSLstd450(i32 noundef %3)
  br i1 %89, label %90, label %95

90:                                               ; preds = %88
  %91 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %91, ptr noundef nonnull @.str.1100)
          to label %92 unwind label %93

92:                                               ; preds = %90
  tail call void @__cxa_throw(ptr nonnull %91, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

93:                                               ; preds = %90
  %94 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %91) #8
  br label %999

95:                                               ; preds = %88, %6
  %96 = tail call noundef i32 @_ZNK11spirv_cross12CompilerGLSL38get_integer_width_for_glsl_instructionE10GLSLstd450PKjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3, ptr noundef %4, i32 noundef %5)
  %97 = tail call noundef i32 @_ZN11spirv_crossL18to_signed_basetypeEj(i32 noundef %96)
  %98 = tail call noundef i32 @_ZN11spirv_crossL20to_unsigned_basetypeEj(i32 noundef %96)
  %99 = tail call noundef i32 @_ZNK11spirv_cross12CompilerGLSL20get_remapped_glsl_opE10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %3)
  switch i32 %99, label %997 [
    i32 1, label %100
    i32 2, label %131
    i32 3, label %154
    i32 5, label %198
    i32 4, label %200
    i32 7, label %202
    i32 6, label %204
    i32 8, label %206
    i32 9, label %208
    i32 10, label %210
    i32 11, label %212
    i32 12, label %214
    i32 50, label %216
    i32 35, label %272
    i32 36, label %320
    i32 38, label %408
    i32 39, label %412
    i32 37, label %416
    i32 40, label %420
    i32 41, label %424
    i32 42, label %428
    i32 43, label %432
    i32 44, label %438
    i32 45, label %444
    i32 13, label %450
    i32 14, label %452
    i32 15, label %454
    i32 16, label %456
    i32 17, label %458
    i32 18, label %460
    i32 19, label %462
    i32 20, label %486
    i32 21, label %510
    i32 22, label %577
    i32 23, label %582
    i32 24, label %587
    i32 25, label %592
    i32 26, label %596
    i32 27, label %600
    i32 28, label %602
    i32 29, label %604
    i32 30, label %606
    i32 31, label %608
    i32 32, label %610
    i32 33, label %612
    i32 34, label %660
    i32 46, label %721
    i32 47, label %721
    i32 48, label %727
    i32 49, label %731
    i32 51, label %737
    i32 52, label %745
    i32 53, label %769
    i32 54, label %823
    i32 55, label %825
    i32 56, label %827
    i32 57, label %829
    i32 58, label %831
    i32 63, label %833
    i32 64, label %835
    i32 60, label %837
    i32 61, label %839
    i32 62, label %841
    i32 59, label %843
    i32 65, label %845
    i32 66, label %847
    i32 67, label %849
    i32 68, label %853
    i32 69, label %857
    i32 70, label %859
    i32 71, label %865
    i32 72, label %869
    i32 73, label %875
    i32 74, label %880
    i32 75, label %882
    i32 76, label %884
    i32 77, label %886
    i32 78, label %890
    i32 79, label %894
    i32 80, label %894
    i32 81, label %939
  ]

100:                                              ; preds = %95
  %101 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %101, label %104, label %102

102:                                              ; preds = %100
  %103 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %103, ptr noundef nonnull @.str.462)
  br label %998

104:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #8
  %105 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %105, i1 noundef zeroext true)
  %106 = load i32, ptr %4, align 4, !tbaa !5
  %107 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %106)
          to label %108 unwind label %120

108:                                              ; preds = %104
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %107)
          to label %109 unwind label %122

109:                                              ; preds = %108
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_S9_S3_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 1 dereferenceable(7) @.str.1101, ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 1 dereferenceable(4) @.str.1102, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 1 dereferenceable(7) @.str.1103)
          to label %110 unwind label %124

110:                                              ; preds = %109
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  %111 = load i32, ptr %4, align 4, !tbaa !5
  %112 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %111)
          to label %113 unwind label %127

113:                                              ; preds = %110
  %114 = load i32, ptr %7, align 4, !tbaa !5
  %115 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %114, ptr noundef nonnull align 8 dereferenceable(32) %10, i1 noundef zeroext %112, i1 noundef zeroext false)
          to label %116 unwind label %127

116:                                              ; preds = %113
  %117 = load i32, ptr %7, align 4, !tbaa !5
  %118 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %117, i32 noundef %118)
          to label %119 unwind label %127

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

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

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

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

126:                                              ; preds = %124, %122
  %.pn548 = phi { ptr, i32 } [ %125, %124 ], [ %123, %122 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #8
  br label %129

127:                                              ; preds = %116, %113, %110
  %128 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #8
  br label %129

129:                                              ; preds = %127, %126
  %.pn550 = phi { ptr, i32 } [ %128, %127 ], [ %.pn548, %126 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #8
  br label %130

130:                                              ; preds = %129, %120
  %.pn550.pn = phi { ptr, i32 } [ %.pn550, %129 ], [ %121, %120 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #8
  br label %999

131:                                              ; preds = %95
  %132 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %132, label %135, label %133

133:                                              ; preds = %131
  %134 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %134, ptr noundef nonnull @.str.463)
  br label %998

135:                                              ; preds = %131
  %136 = getelementptr inbounds i8, ptr %0, i64 7640
  %137 = load i8, ptr %136, align 8, !tbaa !9, !range !119, !noundef !120
  %138 = trunc nuw i8 %137 to i1
  br i1 %138, label %149, label %139

139:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull @.str.185, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %140 unwind label %144

140:                                              ; preds = %139
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %141 unwind label %146

141:                                              ; preds = %140
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #8
  %142 = load i32, ptr %7, align 4, !tbaa !5
  %143 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %142, i32 noundef %143, ptr noundef nonnull @.str.462)
  br label %998

144:                                              ; preds = %139
  %145 = landingpad { ptr, i32 }
          cleanup
  br label %148

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

148:                                              ; preds = %146, %144
  %.pn546 = phi { ptr, i32 } [ %147, %146 ], [ %145, %144 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #8
  br label %999

149:                                              ; preds = %135
  %150 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %150, ptr noundef nonnull @.str.1104)
          to label %151 unwind label %152

151:                                              ; preds = %149
  tail call void @__cxa_throw(ptr nonnull %150, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

152:                                              ; preds = %149
  %153 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %150) #8
  br label %999

154:                                              ; preds = %95
  %155 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  %156 = load i32, ptr %4, align 4, !tbaa !5
  br i1 %155, label %158, label %157

157:                                              ; preds = %154
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %156, ptr noundef nonnull @.str.494)
  br label %998

158:                                              ; preds = %154
  %159 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %156)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #8
  %160 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %160, i1 noundef zeroext true)
  %161 = load i32, ptr %4, align 4, !tbaa !5
  %162 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %161)
          to label %163 unwind label %181

163:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %15) #8
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %15, ptr noundef nonnull align 8 dereferenceable(336) %162)
          to label %164 unwind label %183

164:                                              ; preds = %163
  %165 = getelementptr inbounds i8, ptr %15, i64 16
  store i32 7, ptr %165, align 8, !tbaa !121
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #8
  %166 = load ptr, ptr %0, align 8, !tbaa !135
  %167 = getelementptr inbounds i8, ptr %166, i64 152
  %168 = load ptr, ptr %167, align 8
  invoke void %168(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %162, i32 noundef 0)
          to label %169 unwind label %185

169:                                              ; preds = %164
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #8
  %170 = load ptr, ptr %0, align 8, !tbaa !135
  %171 = getelementptr inbounds i8, ptr %170, i64 152
  %172 = load ptr, ptr %171, align 8
  invoke void %172(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %15, i32 noundef 0)
          to label %173 unwind label %187

173:                                              ; preds = %169
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS6_S9_RS6_RA3_S7_EEES6_DpOT_(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 align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull align 1 dereferenceable(3) @.str.1016)
          to label %174 unwind label %189

174:                                              ; preds = %173
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #8
  %175 = load i32, ptr %7, align 4, !tbaa !5
  %176 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %175, ptr noundef nonnull align 8 dereferenceable(32) %16, i1 noundef zeroext %159, i1 noundef zeroext false)
          to label %177 unwind label %193

177:                                              ; preds = %174
  %178 = load i32, ptr %7, align 4, !tbaa !5
  %179 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %178, i32 noundef %179)
          to label %180 unwind label %193

180:                                              ; preds = %177
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %15) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %15) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  br label %998

181:                                              ; preds = %158
  %182 = landingpad { ptr, i32 }
          cleanup
  br label %197

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

185:                                              ; preds = %164
  %186 = landingpad { ptr, i32 }
          cleanup
  br label %192

187:                                              ; preds = %169
  %188 = landingpad { ptr, i32 }
          cleanup
  br label %191

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

191:                                              ; preds = %189, %187
  %.pn539 = phi { ptr, i32 } [ %190, %189 ], [ %188, %187 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #8
  br label %192

192:                                              ; preds = %191, %185
  %.pn539.pn = phi { ptr, i32 } [ %.pn539, %191 ], [ %186, %185 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #8
  br label %195

193:                                              ; preds = %177, %174
  %194 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #8
  br label %195

195:                                              ; preds = %193, %192
  %.pn542 = phi { ptr, i32 } [ %194, %193 ], [ %.pn539.pn, %192 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %15) #8
  br label %196

196:                                              ; preds = %195, %183
  %.pn542.pn = phi { ptr, i32 } [ %.pn542, %195 ], [ %184, %183 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %15) #8
  br label %197

197:                                              ; preds = %196, %181
  %.pn542.pn.pn = phi { ptr, i32 } [ %.pn542.pn, %196 ], [ %182, %181 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #8
  br label %999

198:                                              ; preds = %95
  %199 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %199, ptr noundef nonnull @.str.340, i32 noundef %97, i32 noundef %97)
  br label %998

200:                                              ; preds = %95
  %201 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %201, ptr noundef nonnull @.str.340)
  br label %998

202:                                              ; preds = %95
  %203 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %203, ptr noundef nonnull @.str.464, i32 noundef %97, i32 noundef %97)
  br label %998

204:                                              ; preds = %95
  %205 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %205, ptr noundef nonnull @.str.464)
  br label %998

206:                                              ; preds = %95
  %207 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %207, ptr noundef nonnull @.str.390)
  br label %998

208:                                              ; preds = %95
  %209 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %209, ptr noundef nonnull @.str.363)
  br label %998

210:                                              ; preds = %95
  %211 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %211, ptr noundef nonnull @.str.392)
  br label %998

212:                                              ; preds = %95
  %213 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %213, ptr noundef nonnull @.str.459)
  br label %998

214:                                              ; preds = %95
  %215 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %215, ptr noundef nonnull @.str.367)
  br label %998

216:                                              ; preds = %95
  %217 = getelementptr inbounds i8, ptr %0, i64 7636
  %218 = getelementptr inbounds i8, ptr %0, i64 7640
  %219 = load i8, ptr %218, align 8, !tbaa !9, !range !119, !noundef !120
  %220 = trunc nuw i8 %219 to i1
  %221 = load i32, ptr %217, align 4
  %or.cond566.v = select i1 %220, i32 320, i32 400
  %or.cond566 = icmp ult i32 %221, %or.cond566.v
  br i1 %or.cond566, label %222, label %266

222:                                              ; preds = %216
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %19) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #8
  %223 = load i32, ptr %4, align 4, !tbaa !5
  call 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) %0, i32 noundef %223, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #8
  %224 = getelementptr inbounds i8, ptr %4, i64 4
  %225 = load i32, ptr %224, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %21, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %225, i1 noundef zeroext true)
          to label %226 unwind label %247

226:                                              ; preds = %222
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %22) #8
  %227 = getelementptr inbounds i8, ptr %4, i64 8
  %228 = load i32, ptr %227, align 4, !tbaa !5
  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) %0, i32 noundef %228, i1 noundef zeroext true)
          to label %229 unwind label %249

229:                                              ; preds = %226
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS6_S9_S6_EEES6_DpOT_(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 align 1 dereferenceable(4) @.str.976, ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 1 dereferenceable(4) @.str.1102, ptr noundef nonnull align 8 dereferenceable(32) %22)
          to label %230 unwind label %251

230:                                              ; preds = %229
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #8
  %231 = load i32, ptr %7, align 4, !tbaa !5
  %232 = load i32, ptr %4, align 4, !tbaa !5
  %233 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %232)
          to label %234 unwind label %255

234:                                              ; preds = %230
  br i1 %233, label %235, label %242

235:                                              ; preds = %234
  %236 = load i32, ptr %224, align 4, !tbaa !5
  %237 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %236)
          to label %238 unwind label %255

238:                                              ; preds = %235
  br i1 %237, label %239, label %242

239:                                              ; preds = %238
  %240 = load i32, ptr %227, align 4, !tbaa !5
  %241 = invoke noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %240)
          to label %242 unwind label %255

242:                                              ; preds = %239, %238, %234
  %243 = phi i1 [ false, %238 ], [ false, %234 ], [ %241, %239 ]
  %244 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %231, ptr noundef nonnull align 8 dereferenceable(32) %19, i1 noundef zeroext %243, i1 noundef zeroext false)
          to label %.preheader.preheader unwind label %255

.preheader.preheader:                             ; preds = %242
  %245 = load i32, ptr %7, align 4, !tbaa !5
  %246 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %245, i32 noundef %246)
          to label %.preheader.1 unwind label %262

247:                                              ; preds = %222
  %248 = landingpad { ptr, i32 }
          cleanup
  br label %254

249:                                              ; preds = %226
  %250 = landingpad { ptr, i32 }
          cleanup
  br label %253

251:                                              ; preds = %229
  %252 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %253

253:                                              ; preds = %251, %249
  %.pn533 = phi { ptr, i32 } [ %252, %251 ], [ %250, %249 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %22) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #8
  br label %254

254:                                              ; preds = %253, %247
  %.pn533.pn = phi { ptr, i32 } [ %.pn533, %253 ], [ %248, %247 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #8
  br label %265

255:                                              ; preds = %242, %239, %235, %230
  %256 = landingpad { ptr, i32 }
          cleanup
  br label %264

.preheader.1:                                     ; preds = %.preheader.preheader
  %257 = load i32, ptr %7, align 4, !tbaa !5
  %258 = load i32, ptr %224, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %257, i32 noundef %258)
          to label %.preheader.2 unwind label %262

.preheader.2:                                     ; preds = %.preheader.1
  %259 = load i32, ptr %7, align 4, !tbaa !5
  %260 = load i32, ptr %227, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %259, i32 noundef %260)
          to label %261 unwind label %262

261:                                              ; preds = %.preheader.2
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #8
  br label %998

262:                                              ; preds = %.preheader.2, %.preheader.1, %.preheader.preheader
  %263 = landingpad { ptr, i32 }
          cleanup
  br label %264

264:                                              ; preds = %262, %255
  %.pn536 = phi { ptr, i32 } [ %263, %262 ], [ %256, %255 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #8
  br label %265

265:                                              ; preds = %264, %254
  %.pn536.pn = phi { ptr, i32 } [ %.pn536, %264 ], [ %.pn533.pn, %254 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %19) #8
  br label %999

266:                                              ; preds = %216
  %267 = load i32, ptr %4, align 4, !tbaa !5
  %268 = getelementptr inbounds i8, ptr %4, i64 4
  %269 = load i32, ptr %268, align 4, !tbaa !5
  %270 = getelementptr inbounds i8, ptr %4, i64 8
  %271 = load i32, ptr %270, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %267, i32 noundef %269, i32 noundef %271, ptr noundef nonnull @.str.391)
  br label %998

272:                                              ; preds = %95
  %273 = getelementptr inbounds i8, ptr %4, i64 4
  %274 = load i32, ptr %273, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL26register_call_out_argumentEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %274)
  %275 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %275, label %282, label %276

276:                                              ; preds = %272
  %277 = getelementptr inbounds i8, ptr %0, i64 2400
  %278 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %277, ptr noundef nonnull align 4 dereferenceable(4) %7)
  %279 = load i32, ptr %7, align 4, !tbaa !5
  %280 = load i32, ptr %4, align 4, !tbaa !5
  %281 = load i32, ptr %273, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %279, i32 noundef %280, i32 noundef %281, ptr noundef nonnull @.str.438)
  br label %998

282:                                              ; preds = %272
  %283 = load i32, ptr %273, align 4, !tbaa !5
  %284 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %283)
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %23) #8
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %23, ptr noundef nonnull align 8 dereferenceable(336) %284)
  %285 = getelementptr inbounds i8, ptr %23, i64 16
  store i32 7, ptr %285, align 8, !tbaa !121
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #8
  %286 = load i32, ptr %273, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %286, i1 noundef zeroext true)
          to label %287 unwind label %303

287:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #8
  %288 = load ptr, ptr %0, align 8, !tbaa !135
  %289 = getelementptr inbounds i8, ptr %288, i64 152
  %290 = load ptr, ptr %289, align 8
  invoke void %290(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %284, i32 noundef 0)
          to label %291 unwind label %305

291:                                              ; preds = %287
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #8
  %292 = load ptr, ptr %0, align 8, !tbaa !135
  %293 = getelementptr inbounds i8, ptr %292, i64 152
  %294 = load ptr, ptr %293, align 8
  invoke void %294(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %23, i32 noundef 0)
          to label %295 unwind label %307

295:                                              ; preds = %291
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #8
  %296 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %27, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %296, i1 noundef zeroext true)
          to label %297 unwind label %309

297:                                              ; preds = %295
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_KcS7_RA2_S8_S7_SC_S7_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %25, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull align 1 dereferenceable(4) @.str.1105)
          to label %298 unwind label %311

298:                                              ; preds = %297
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  %299 = load i32, ptr %7, align 4, !tbaa !5
  %300 = load i32, ptr %4, align 4, !tbaa !5
  %301 = load i32, ptr %273, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL14emit_binary_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %299, i32 noundef %300, i32 noundef %301, ptr noundef nonnull @.str.955)
          to label %302 unwind label %317

302:                                              ; preds = %298
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %23) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %23) #8
  br label %998

303:                                              ; preds = %282
  %304 = landingpad { ptr, i32 }
          cleanup
  br label %316

305:                                              ; preds = %287
  %306 = landingpad { ptr, i32 }
          cleanup
  br label %315

307:                                              ; preds = %291
  %308 = landingpad { ptr, i32 }
          cleanup
  br label %314

309:                                              ; preds = %295
  %310 = landingpad { ptr, i32 }
          cleanup
  br label %313

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

313:                                              ; preds = %311, %309
  %.pn526 = phi { ptr, i32 } [ %312, %311 ], [ %310, %309 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  br label %314

314:                                              ; preds = %313, %307
  %.pn526.pn = phi { ptr, i32 } [ %.pn526, %313 ], [ %308, %307 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  br label %315

315:                                              ; preds = %314, %305
  %.pn526.pn.pn = phi { ptr, i32 } [ %.pn526.pn, %314 ], [ %306, %305 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  br label %316

316:                                              ; preds = %315, %303
  %.pn526.pn.pn.pn = phi { ptr, i32 } [ %.pn526.pn.pn, %315 ], [ %304, %303 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  br label %319

317:                                              ; preds = %298
  %318 = landingpad { ptr, i32 }
          cleanup
  br label %319

319:                                              ; preds = %317, %316
  %.pn531 = phi { ptr, i32 } [ %318, %317 ], [ %.pn526.pn.pn.pn, %316 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %23) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %23) #8
  br label %999

320:                                              ; preds = %95
  %321 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %322 = tail call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2)
  %323 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %323, label %346, label %324

324:                                              ; preds = %320
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %28) #8
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %321, i32 noundef 0)
          to label %325 unwind label %332

325:                                              ; preds = %324
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %30) #8
  %326 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %30, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %326, i1 noundef zeroext true)
          to label %327 unwind label %334

327:                                              ; preds = %325
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %31) #8
  %328 = load i32, ptr %7, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %31, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %328, i1 noundef zeroext true)
          to label %329 unwind label %336

329:                                              ; preds = %327
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %32, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %321, i32 noundef 1)
          to label %330 unwind label %338

330:                                              ; preds = %329
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_RA6_S8_S7_RA3_S8_S7_SA_S7_SG_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 1 dereferenceable(6) @.str.1106, ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %331 unwind label %340

331:                                              ; preds = %330
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #8
  br label %998

332:                                              ; preds = %324
  %333 = landingpad { ptr, i32 }
          cleanup
  br label %345

334:                                              ; preds = %325
  %335 = landingpad { ptr, i32 }
          cleanup
  br label %344

336:                                              ; preds = %327
  %337 = landingpad { ptr, i32 }
          cleanup
  br label %343

338:                                              ; preds = %329
  %339 = landingpad { ptr, i32 }
          cleanup
  br label %342

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

342:                                              ; preds = %340, %338
  %.pn507 = phi { ptr, i32 } [ %341, %340 ], [ %339, %338 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  br label %343

343:                                              ; preds = %342, %336
  %.pn507.pn = phi { ptr, i32 } [ %.pn507, %342 ], [ %337, %336 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %31) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #8
  br label %344

344:                                              ; preds = %343, %334
  %.pn507.pn.pn = phi { ptr, i32 } [ %.pn507.pn, %343 ], [ %335, %334 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %30) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #8
  br label %345

345:                                              ; preds = %344, %332
  %.pn507.pn.pn.pn = phi { ptr, i32 } [ %.pn507.pn.pn, %344 ], [ %333, %332 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %28) #8
  br label %999

346:                                              ; preds = %320
  %347 = load i32, ptr %4, align 4, !tbaa !5
  %348 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %347)
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %33) #8
  call void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %33, ptr noundef nonnull align 8 dereferenceable(336) %348)
  %349 = getelementptr inbounds i8, ptr %33, i64 16
  store i32 7, ptr %349, align 8, !tbaa !121
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #8
  %350 = load i32, ptr %7, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %350, i1 noundef zeroext true)
          to label %351 unwind label %373

351:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %35, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %321, i32 noundef 1)
          to label %352 unwind label %375

352:                                              ; preds = %351
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #8
  %353 = load ptr, ptr %0, align 8, !tbaa !135
  %354 = getelementptr inbounds i8, ptr %353, i64 152
  %355 = load ptr, ptr %354, align 8
  invoke void %355(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %36, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %348, i32 noundef 0)
          to label %356 unwind label %377

356:                                              ; preds = %352
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #8
  %357 = load ptr, ptr %0, align 8, !tbaa !135
  %358 = getelementptr inbounds i8, ptr %357, i64 152
  %359 = load ptr, ptr %358, align 8
  invoke void %359(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %37, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %33, i32 noundef 0)
          to label %360 unwind label %379

360:                                              ; preds = %356
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #8
  %361 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %38, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %361, i1 noundef zeroext true)
          to label %362 unwind label %381

362:                                              ; preds = %360
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_S7_SA_S7_SA_S7_SC_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %36, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 1 dereferenceable(4) @.str.1105)
          to label %363 unwind label %383

363:                                              ; preds = %362
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #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 nonnull %37) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #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 nonnull %35) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #8
  %364 = load i32, ptr %7, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %39, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %364, i1 noundef zeroext true)
          to label %365 unwind label %390

365:                                              ; preds = %363
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %40, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %321, i32 noundef 0)
          to label %366 unwind label %392

366:                                              ; preds = %365
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %41) #8
  %367 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %41, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %367, i1 noundef zeroext true)
          to label %368 unwind label %394

368:                                              ; preds = %366
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %42) #8
  %369 = load i32, ptr %7, align 4, !tbaa !5
  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) %0, i32 noundef %369, i1 noundef zeroext true)
          to label %370 unwind label %396

370:                                              ; preds = %368
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %43) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %43, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %321, i32 noundef 1)
          to label %371 unwind label %398

371:                                              ; preds = %370
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_S7_SC_S7_SA_S7_SA_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 1 dereferenceable(4) @.str.975, ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 1 dereferenceable(2) @.str.298)
          to label %372 unwind label %400

372:                                              ; preds = %371
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %43) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #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 nonnull %40) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %33) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %33) #8
  br label %998

373:                                              ; preds = %346
  %374 = landingpad { ptr, i32 }
          cleanup
  br label %389

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

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

379:                                              ; preds = %356
  %380 = landingpad { ptr, i32 }
          cleanup
  br label %386

381:                                              ; preds = %360
  %382 = landingpad { ptr, i32 }
          cleanup
  br label %385

383:                                              ; preds = %362
  %384 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  br label %385

385:                                              ; preds = %383, %381
  %.pn512 = phi { ptr, i32 } [ %384, %383 ], [ %382, %381 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  br label %386

386:                                              ; preds = %385, %379
  %.pn512.pn = phi { ptr, i32 } [ %.pn512, %385 ], [ %380, %379 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %36) #8
  br label %387

387:                                              ; preds = %386, %377
  %.pn512.pn.pn = phi { ptr, i32 } [ %.pn512.pn, %386 ], [ %378, %377 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #8
  br label %388

388:                                              ; preds = %387, %375
  %.pn512.pn.pn.pn = phi { ptr, i32 } [ %.pn512.pn.pn, %387 ], [ %376, %375 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  br label %389

389:                                              ; preds = %388, %373
  %.pn512.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn512.pn.pn.pn, %388 ], [ %374, %373 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #8
  br label %407

390:                                              ; preds = %363
  %391 = landingpad { ptr, i32 }
          cleanup
  br label %406

392:                                              ; preds = %365
  %393 = landingpad { ptr, i32 }
          cleanup
  br label %405

394:                                              ; preds = %366
  %395 = landingpad { ptr, i32 }
          cleanup
  br label %404

396:                                              ; preds = %368
  %397 = landingpad { ptr, i32 }
          cleanup
  br label %403

398:                                              ; preds = %370
  %399 = landingpad { ptr, i32 }
          cleanup
  br label %402

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

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

403:                                              ; preds = %402, %396
  %.pn518.pn = phi { ptr, i32 } [ %.pn518, %402 ], [ %397, %396 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %42) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #8
  br label %404

404:                                              ; preds = %403, %394
  %.pn518.pn.pn = phi { ptr, i32 } [ %.pn518.pn, %403 ], [ %395, %394 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %41) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %40) #8
  br label %405

405:                                              ; preds = %404, %392
  %.pn518.pn.pn.pn = phi { ptr, i32 } [ %.pn518.pn.pn, %404 ], [ %393, %392 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  br label %406

406:                                              ; preds = %405, %390
  %.pn518.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn518.pn.pn.pn, %405 ], [ %391, %390 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #8
  br label %407

407:                                              ; preds = %406, %389
  %.pn518.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn518.pn.pn.pn.pn, %406 ], [ %.pn512.pn.pn.pn.pn, %389 ]
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %33) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %33) #8
  br label %999

408:                                              ; preds = %95
  %409 = load i32, ptr %4, align 4, !tbaa !5
  %410 = getelementptr inbounds i8, ptr %4, i64 4
  %411 = load i32, ptr %410, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %409, i32 noundef %411, ptr noundef nonnull @.str.435, i32 noundef %98, i1 noundef zeroext false)
  br label %998

412:                                              ; preds = %95
  %413 = load i32, ptr %4, align 4, !tbaa !5
  %414 = getelementptr inbounds i8, ptr %4, i64 4
  %415 = load i32, ptr %414, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %413, i32 noundef %415, ptr noundef nonnull @.str.435, i32 noundef %97, i1 noundef zeroext false)
  br label %998

416:                                              ; preds = %95
  %417 = load i32, ptr %4, align 4, !tbaa !5
  %418 = getelementptr inbounds i8, ptr %4, i64 4
  %419 = load i32, ptr %418, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %417, i32 noundef %419, ptr noundef nonnull @.str.435)
  br label %998

420:                                              ; preds = %95
  %421 = load i32, ptr %4, align 4, !tbaa !5
  %422 = getelementptr inbounds i8, ptr %4, i64 4
  %423 = load i32, ptr %422, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %421, i32 noundef %423, ptr noundef nonnull @.str.429)
  br label %998

424:                                              ; preds = %95
  %425 = load i32, ptr %4, align 4, !tbaa !5
  %426 = getelementptr inbounds i8, ptr %4, i64 4
  %427 = load i32, ptr %426, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %425, i32 noundef %427, ptr noundef nonnull @.str.429, i32 noundef %98, i1 noundef zeroext false)
  br label %998

428:                                              ; preds = %95
  %429 = load i32, ptr %4, align 4, !tbaa !5
  %430 = getelementptr inbounds i8, ptr %4, i64 4
  %431 = load i32, ptr %430, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL24emit_binary_func_op_castEjjjjPKcNS_8SPIRType8BaseTypeEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %429, i32 noundef %431, ptr noundef nonnull @.str.429, i32 noundef %97, i1 noundef zeroext false)
  br label %998

432:                                              ; preds = %95
  %433 = load i32, ptr %4, align 4, !tbaa !5
  %434 = getelementptr inbounds i8, ptr %4, i64 4
  %435 = load i32, ptr %434, align 4, !tbaa !5
  %436 = getelementptr inbounds i8, ptr %4, i64 8
  %437 = load i32, ptr %436, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %433, i32 noundef %435, i32 noundef %437, ptr noundef nonnull @.str.1107)
  br label %998

438:                                              ; preds = %95
  %439 = load i32, ptr %4, align 4, !tbaa !5
  %440 = getelementptr inbounds i8, ptr %4, i64 4
  %441 = load i32, ptr %440, align 4, !tbaa !5
  %442 = getelementptr inbounds i8, ptr %4, i64 8
  %443 = load i32, ptr %442, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL25emit_trinary_func_op_castEjjjjjPKcNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %439, i32 noundef %441, i32 noundef %443, ptr noundef nonnull @.str.1107, i32 noundef %98)
  br label %998

444:                                              ; preds = %95
  %445 = load i32, ptr %4, align 4, !tbaa !5
  %446 = getelementptr inbounds i8, ptr %4, i64 4
  %447 = load i32, ptr %446, align 4, !tbaa !5
  %448 = getelementptr inbounds i8, ptr %4, i64 8
  %449 = load i32, ptr %448, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL25emit_trinary_func_op_castEjjjjjPKcNS_8SPIRType8BaseTypeE(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %445, i32 noundef %447, i32 noundef %449, ptr noundef nonnull @.str.1107, i32 noundef %97)
  br label %998

450:                                              ; preds = %95
  %451 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %451, ptr noundef nonnull @.str.465)
  br label %998

452:                                              ; preds = %95
  %453 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %453, ptr noundef nonnull @.str.364)
  br label %998

454:                                              ; preds = %95
  %455 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %455, ptr noundef nonnull @.str.470)
  br label %998

456:                                              ; preds = %95
  %457 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %457, ptr noundef nonnull @.str.345)
  br label %998

458:                                              ; preds = %95
  %459 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %459, ptr noundef nonnull @.str.341)
  br label %998

460:                                              ; preds = %95
  %461 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %461, ptr noundef nonnull @.str.347)
  br label %998

462:                                              ; preds = %95
  %463 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  %464 = load i32, ptr %4, align 4, !tbaa !5
  br i1 %463, label %466, label %465

465:                                              ; preds = %462
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %464, ptr noundef nonnull @.str.466)
  br label %998

466:                                              ; preds = %462
  %467 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %464)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %44) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %45) #8
  %468 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %45, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %468, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %46) #8
  %469 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %46, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %469, i1 noundef zeroext true)
          to label %470 unwind label %478

470:                                              ; preds = %466
  invoke void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_S1_S9_RA9_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %44, ptr noundef nonnull align 1 dereferenceable(6) @.str.1108, ptr noundef nonnull align 8 dereferenceable(32) %45, ptr noundef nonnull align 1 dereferenceable(10) @.str.1109, ptr noundef nonnull align 8 dereferenceable(32) %46, ptr noundef nonnull align 1 dereferenceable(9) @.str.1110)
          to label %471 unwind label %480

471:                                              ; preds = %470
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #8
  %472 = load i32, ptr %7, align 4, !tbaa !5
  %473 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %472, ptr noundef nonnull align 8 dereferenceable(32) %44, i1 noundef zeroext %467, i1 noundef zeroext false)
          to label %474 unwind label %483

474:                                              ; preds = %471
  %475 = load i32, ptr %7, align 4, !tbaa !5
  %476 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %475, i32 noundef %476)
          to label %477 unwind label %483

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

478:                                              ; preds = %466
  %479 = landingpad { ptr, i32 }
          cleanup
  br label %482

480:                                              ; preds = %470
  %481 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %46) #8
  br label %482

482:                                              ; preds = %480, %478
  %.pn503 = phi { ptr, i32 } [ %481, %480 ], [ %479, %478 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %46) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %45) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %45) #8
  br label %485

483:                                              ; preds = %474, %471
  %484 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #8
  br label %485

485:                                              ; preds = %483, %482
  %.pn505 = phi { ptr, i32 } [ %484, %483 ], [ %.pn503, %482 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %44) #8
  br label %999

486:                                              ; preds = %95
  %487 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  %488 = load i32, ptr %4, align 4, !tbaa !5
  br i1 %487, label %490, label %489

489:                                              ; preds = %486
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %488, ptr noundef nonnull @.str.365)
  br label %998

490:                                              ; preds = %486
  %491 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %488)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %47) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %48) #8
  %492 = load i32, ptr %4, align 4, !tbaa !5
  call 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) %0, i32 noundef %492, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %49) #8
  %493 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %49, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %493, i1 noundef zeroext true)
          to label %494 unwind label %502

494:                                              ; preds = %490
  invoke void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_S1_S9_RA9_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %47, ptr noundef nonnull align 1 dereferenceable(6) @.str.1108, ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 1 dereferenceable(10) @.str.1111, ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(9) @.str.1110)
          to label %495 unwind label %504

495:                                              ; preds = %494
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %49) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %48) #8
  %496 = load i32, ptr %7, align 4, !tbaa !5
  %497 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %496, ptr noundef nonnull align 8 dereferenceable(32) %47, i1 noundef zeroext %491, i1 noundef zeroext false)
          to label %498 unwind label %507

498:                                              ; preds = %495
  %499 = load i32, ptr %7, align 4, !tbaa !5
  %500 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %499, i32 noundef %500)
          to label %501 unwind label %507

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

502:                                              ; preds = %490
  %503 = landingpad { ptr, i32 }
          cleanup
  br label %506

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

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

507:                                              ; preds = %498, %495
  %508 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  br label %509

509:                                              ; preds = %507, %506
  %.pn501 = phi { ptr, i32 } [ %508, %507 ], [ %.pn499, %506 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %47) #8
  br label %999

510:                                              ; preds = %95
  %511 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  br i1 %511, label %514, label %512

512:                                              ; preds = %510
  %513 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %513, ptr noundef nonnull @.str.471)
  br label %998

514:                                              ; preds = %510
  %515 = getelementptr inbounds i8, ptr %0, i64 9272
  %516 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixERS5_(ptr noundef nonnull align 8 dereferenceable(56) %515, ptr noundef nonnull align 4 dereferenceable(4) %7)
  %517 = load i32, ptr %516, align 4, !tbaa !5
  %.not487 = icmp eq i32 %517, 0
  br i1 %.not487, label %518, label %529

518:                                              ; preds = %514
  %519 = getelementptr inbounds i8, ptr %0, i64 8
  %520 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %519, i32 noundef 2)
  store i32 %520, ptr %516, align 4, !tbaa !5
  %521 = load i32, ptr %7, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %50, i32 noundef %521)
  %522 = load i32, ptr %50, align 4
  %523 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %522, i32 noundef 0)
  %.pre569 = load i32, ptr %516, align 4, !tbaa !5
  br i1 %523, label %524, label %529

524:                                              ; preds = %518
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %51, i32 noundef %.pre569)
  %525 = load i32, ptr %51, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %525, i32 noundef 0, i32 noundef 0)
  %526 = load i32, ptr %516, align 4, !tbaa !5
  %527 = add i32 %526, 1
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %52, i32 noundef %527)
  %528 = load i32, ptr %52, align 4
  call void @_ZN11spirv_cross8Compiler14set_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %528, i32 noundef 0, i32 noundef 0)
  %.pre = load i32, ptr %516, align 4, !tbaa !5
  br label %529

529:                                              ; preds = %518, %524, %514
  %530 = phi i32 [ %.pre569, %518 ], [ %.pre, %524 ], [ %517, %514 ]
  %531 = add i32 %530, 1
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %53) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %54) #8
  %532 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %54, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %532, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA5_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %53, ptr noundef nonnull align 1 dereferenceable(5) @.str.1112, ptr noundef nonnull align 8 dereferenceable(32) %54, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %533 unwind label %553

533:                                              ; preds = %529
  %534 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %530, ptr noundef nonnull align 8 dereferenceable(32) %53, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %535 unwind label %555

535:                                              ; preds = %533
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #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 nonnull %54) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %55) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %56) #8
  %536 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %56, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %536, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %55, ptr noundef nonnull align 1 dereferenceable(6) @.str.1113, ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %537 unwind label %558

537:                                              ; preds = %535
  %538 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %531, ptr noundef nonnull align 8 dereferenceable(32) %55, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %539 unwind label %560

539:                                              ; preds = %537
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #8
  %540 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %530, i32 noundef %540)
  %541 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %531, i32 noundef %541)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %57) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %58) #8
  call void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %58, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %530, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %59) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %59, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %531, i1 noundef zeroext true)
          to label %542 unwind label %563

542:                                              ; preds = %539
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %60) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %60, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %530, i1 noundef zeroext true)
          to label %543 unwind label %565

543:                                              ; preds = %542
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %61) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_enclosed_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %61, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %531, i1 noundef zeroext true)
          to label %544 unwind label %567

544:                                              ; preds = %543
  invoke void @_ZN11spirv_cross4joinIJRA2_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_S9_RA6_S1_S9_SB_S9_S3_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %57, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %58, ptr noundef nonnull align 1 dereferenceable(4) @.str.975, ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 1 dereferenceable(6) @.str.1114, ptr noundef nonnull align 8 dereferenceable(32) %60, ptr noundef nonnull align 1 dereferenceable(4) @.str.1102, ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %545 unwind label %569

545:                                              ; preds = %544
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #8
  %546 = load i32, ptr %7, align 4, !tbaa !5
  %547 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %546, ptr noundef nonnull align 8 dereferenceable(32) %57, i1 noundef zeroext true, i1 noundef zeroext false)
          to label %548 unwind label %574

548:                                              ; preds = %545
  %549 = load i32, ptr %7, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %549, i32 noundef %530)
          to label %550 unwind label %574

550:                                              ; preds = %548
  %551 = load i32, ptr %7, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %551, i32 noundef %531)
          to label %552 unwind label %574

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

553:                                              ; preds = %529
  %554 = landingpad { ptr, i32 }
          cleanup
  br label %557

555:                                              ; preds = %533
  %556 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #8
  br label %557

557:                                              ; preds = %555, %553
  %.pn488 = phi { ptr, i32 } [ %556, %555 ], [ %554, %553 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %54) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %54) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %53) #8
  br label %999

558:                                              ; preds = %535
  %559 = landingpad { ptr, i32 }
          cleanup
  br label %562

560:                                              ; preds = %537
  %561 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #8
  br label %562

562:                                              ; preds = %560, %558
  %.pn490 = phi { ptr, i32 } [ %561, %560 ], [ %559, %558 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %56) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %55) #8
  br label %999

563:                                              ; preds = %539
  %564 = landingpad { ptr, i32 }
          cleanup
  br label %573

565:                                              ; preds = %542
  %566 = landingpad { ptr, i32 }
          cleanup
  br label %572

567:                                              ; preds = %543
  %568 = landingpad { ptr, i32 }
          cleanup
  br label %571

569:                                              ; preds = %544
  %570 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  br label %571

571:                                              ; preds = %569, %567
  %.pn492 = phi { ptr, i32 } [ %570, %569 ], [ %568, %567 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %61) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %60) #8
  br label %572

572:                                              ; preds = %571, %565
  %.pn492.pn = phi { ptr, i32 } [ %.pn492, %571 ], [ %566, %565 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %60) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #8
  br label %573

573:                                              ; preds = %572, %563
  %.pn492.pn.pn = phi { ptr, i32 } [ %.pn492.pn, %572 ], [ %564, %563 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %59) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %58) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %58) #8
  br label %576

574:                                              ; preds = %550, %548, %545
  %575 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #8
  br label %576

576:                                              ; preds = %574, %573
  %.pn496 = phi { ptr, i32 } [ %575, %574 ], [ %.pn492.pn.pn, %573 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %57) #8
  br label %999

577:                                              ; preds = %95
  %578 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  %579 = load i32, ptr %4, align 4, !tbaa !5
  br i1 %578, label %581, label %580

580:                                              ; preds = %577
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %579, ptr noundef nonnull @.str.346)
  br label %998

581:                                              ; preds = %577
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_emulated_ahyper_opEjjj10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %579, i32 noundef 22)
  br label %998

582:                                              ; preds = %95
  %583 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  %584 = load i32, ptr %4, align 4, !tbaa !5
  br i1 %583, label %586, label %585

585:                                              ; preds = %582
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %584, ptr noundef nonnull @.str.342)
  br label %998

586:                                              ; preds = %582
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_emulated_ahyper_opEjjj10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %584, i32 noundef 23)
  br label %998

587:                                              ; preds = %95
  %588 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL9is_legacyEv(ptr noundef nonnull align 8 dereferenceable(9848) %0)
  %589 = load i32, ptr %4, align 4, !tbaa !5
  br i1 %588, label %591, label %590

590:                                              ; preds = %587
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %589, ptr noundef nonnull @.str.348)
  br label %998

591:                                              ; preds = %587
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_emulated_ahyper_opEjjj10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %589, i32 noundef 24)
  br label %998

592:                                              ; preds = %95
  %593 = load i32, ptr %4, align 4, !tbaa !5
  %594 = getelementptr inbounds i8, ptr %4, i64 4
  %595 = load i32, ptr %594, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %593, i32 noundef %595, ptr noundef nonnull @.str.347)
  br label %998

596:                                              ; preds = %95
  %597 = load i32, ptr %4, align 4, !tbaa !5
  %598 = getelementptr inbounds i8, ptr %4, i64 4
  %599 = load i32, ptr %598, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %597, i32 noundef %599, ptr noundef nonnull @.str.458)
  br label %998

600:                                              ; preds = %95
  %601 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %601, ptr noundef nonnull @.str.381)
  br label %998

602:                                              ; preds = %95
  %603 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %603, ptr noundef nonnull @.str.426)
  br label %998

604:                                              ; preds = %95
  %605 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %605, ptr noundef nonnull @.str.382)
  br label %998

606:                                              ; preds = %95
  %607 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %607, ptr noundef nonnull @.str.427)
  br label %998

608:                                              ; preds = %95
  %609 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %609, ptr noundef nonnull @.str.468)
  br label %998

610:                                              ; preds = %95
  %611 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %611, ptr noundef nonnull @.str.419)
  br label %998

612:                                              ; preds = %95
  %613 = load i32, ptr %4, align 4, !tbaa !5
  %614 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %613)
  %.not485 = icmp eq ptr %614, null
  br i1 %.not485, label %.thread, label %615

615:                                              ; preds = %612
  %616 = getelementptr inbounds i8, ptr %614, i64 57
  %617 = load i8, ptr %616, align 1, !tbaa !137, !range !119, !noundef !120
  %618 = trunc nuw i8 %617 to i1
  br i1 %618, label %619, label %.thread

619:                                              ; preds = %615
  store i8 0, ptr %616, align 1, !tbaa !137
  br label %.thread

.thread:                                          ; preds = %612, %619, %615
  %620 = phi i1 [ true, %619 ], [ false, %615 ], [ false, %612 ]
  %621 = getelementptr inbounds i8, ptr %0, i64 7636
  %622 = load i32, ptr %621, align 4, !tbaa !139
  %623 = icmp ult i32 %622, 150
  %624 = load i32, ptr %4, align 4, !tbaa !5
  br i1 %623, label %625, label %656

625:                                              ; preds = %.thread
  %626 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %624)
  %627 = getelementptr inbounds i8, ptr %626, i64 24
  %628 = load i32, ptr %627, align 8, !tbaa !140
  %629 = add i32 %628, -2
  %or.cond561 = icmp ult i32 %629, 3
  br i1 %or.cond561, label %630, label %.critedge

.critedge:                                        ; preds = %625
  tail call void @__assert_fail(ptr noundef nonnull @.str.1115, ptr noundef nonnull @.str.11, i32 noundef 8773, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj) #10
  unreachable

630:                                              ; preds = %625
  %631 = getelementptr inbounds i8, ptr %626, i64 28
  %632 = load i32, ptr %631, align 4, !tbaa !141
  %633 = icmp eq i32 %628, %632
  br i1 %633, label %635, label %634

634:                                              ; preds = %630
  tail call void @__assert_fail(ptr noundef nonnull @.str.1116, ptr noundef nonnull @.str.11, i32 noundef 8774, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj) #10
  unreachable

635:                                              ; preds = %630
  %636 = getelementptr inbounds i8, ptr %626, i64 16
  %637 = load i32, ptr %636, align 8, !tbaa !121
  %.not486 = icmp eq i32 %637, 13
  br i1 %.not486, label %643, label %638

638:                                              ; preds = %635
  %639 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %639, ptr noundef nonnull @.str.1117)
          to label %640 unwind label %641

640:                                              ; preds = %638
  tail call void @__cxa_throw(ptr nonnull %639, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

641:                                              ; preds = %638
  %642 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %639) #8
  br label %999

643:                                              ; preds = %635
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %62, i32 noundef %2)
  %644 = load i32, ptr %62, align 4
  %645 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %644, i32 noundef 0)
  %646 = load i32, ptr %627, align 8, !tbaa !140
  %647 = add i32 %646, -2
  %648 = shl i32 8, %647
  call void @_ZN11spirv_cross12CompilerGLSL16require_polyfillENS0_8PolyfillEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %648, i1 noundef zeroext %645)
  %649 = load i32, ptr %7, align 4, !tbaa !5
  %650 = load i32, ptr %4, align 4, !tbaa !5
  %651 = getelementptr inbounds i8, ptr %0, i64 7640
  %652 = load i8, ptr %651, align 8, !tbaa !9, !range !119, !noundef !120
  %653 = trunc nuw i8 %652 to i1
  %654 = and i1 %645, %653
  %655 = select i1 %654, ptr @.str.1118, ptr @.str.1119
  call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %649, i32 noundef %650, ptr noundef nonnull %655)
  br label %657

656:                                              ; preds = %.thread
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %624, ptr noundef nonnull @.str.1120)
  br label %657

657:                                              ; preds = %656, %643
  br i1 %620, label %658, label %998

658:                                              ; preds = %657
  %659 = getelementptr inbounds i8, ptr %614, i64 57
  store i8 1, ptr %659, align 1, !tbaa !137
  br label %998

660:                                              ; preds = %95
  %661 = load i32, ptr %4, align 4, !tbaa !5
  %662 = tail call noundef ptr @_ZN11spirv_cross8Compiler9maybe_getINS_14SPIRExpressionEEEPT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %661)
  %.not479 = icmp eq ptr %662, null
  br i1 %.not479, label %.thread565, label %663

663:                                              ; preds = %660
  %664 = getelementptr inbounds i8, ptr %662, i64 57
  %665 = load i8, ptr %664, align 1, !tbaa !137, !range !119, !noundef !120
  %666 = trunc nuw i8 %665 to i1
  br i1 %666, label %667, label %.thread565

667:                                              ; preds = %663
  store i8 0, ptr %664, align 1, !tbaa !137
  br label %.thread565

.thread565:                                       ; preds = %660, %667, %663
  %668 = phi i1 [ true, %667 ], [ false, %663 ], [ false, %660 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %63) #8
  store ptr @.str.418, ptr %63, align 8, !tbaa !142
  %669 = getelementptr inbounds i8, ptr %0, i64 7636
  %670 = load i32, ptr %669, align 4, !tbaa !139
  %671 = icmp ult i32 %670, 140
  br i1 %671, label %672, label %701

672:                                              ; preds = %.thread565
  %673 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %674 = getelementptr inbounds i8, ptr %673, i64 24
  %675 = load i32, ptr %674, align 8, !tbaa !140
  %676 = add i32 %675, -2
  %or.cond562 = icmp ult i32 %676, 3
  br i1 %or.cond562, label %677, label %.critedge2

.critedge2:                                       ; preds = %672
  tail call void @__assert_fail(ptr noundef nonnull @.str.1115, ptr noundef nonnull @.str.11, i32 noundef 8807, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj) #10
  unreachable

677:                                              ; preds = %672
  %678 = getelementptr inbounds i8, ptr %673, i64 28
  %679 = load i32, ptr %678, align 4, !tbaa !141
  %680 = icmp eq i32 %675, %679
  br i1 %680, label %682, label %681

681:                                              ; preds = %677
  tail call void @__assert_fail(ptr noundef nonnull @.str.1116, ptr noundef nonnull @.str.11, i32 noundef 8808, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL12emit_glsl_opEjjjPKjj) #10
  unreachable

682:                                              ; preds = %677
  %683 = getelementptr inbounds i8, ptr %673, i64 16
  %684 = load i32, ptr %683, align 8, !tbaa !121
  %.not480 = icmp eq i32 %684, 13
  br i1 %.not480, label %690, label %685

685:                                              ; preds = %682
  %686 = tail call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %686, ptr noundef nonnull @.str.1121)
          to label %687 unwind label %688

687:                                              ; preds = %685
  tail call void @__cxa_throw(ptr nonnull %686, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

688:                                              ; preds = %685
  %689 = landingpad { ptr, i32 }
          cleanup
  tail call void @__cxa_free_exception(ptr %686) #8
  br label %720

690:                                              ; preds = %682
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %64, i32 noundef %2)
  %691 = load i32, ptr %64, align 4
  %692 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %691, i32 noundef 0)
  %693 = load i32, ptr %674, align 8, !tbaa !140
  %694 = add i32 %693, -2
  %695 = shl i32 64, %694
  call void @_ZN11spirv_cross12CompilerGLSL16require_polyfillENS0_8PolyfillEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %695, i1 noundef zeroext %692)
  %696 = getelementptr inbounds i8, ptr %0, i64 7640
  %697 = load i8, ptr %696, align 8, !tbaa !9, !range !119, !noundef !120
  %698 = trunc nuw i8 %697 to i1
  %699 = and i1 %692, %698
  %700 = select i1 %699, ptr @.str.1122, ptr @.str.1123
  store ptr %700, ptr %63, align 8, !tbaa !142
  br label %701

701:                                              ; preds = %690, %.thread565
  %702 = load i32, ptr %4, align 4, !tbaa !5
  %703 = call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %702)
  %704 = load i32, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %65) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %66) #8
  %705 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %66, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %705, i1 noundef zeroext true)
  invoke void @_ZN11spirv_cross4joinIJRPKcRA2_S1_NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES5_EEESB_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %65, ptr noundef nonnull align 8 dereferenceable(8) %63, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %66, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %706 unwind label %714

706:                                              ; preds = %701
  %707 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %704, ptr noundef nonnull align 8 dereferenceable(32) %65, i1 noundef zeroext %703, i1 noundef zeroext false)
          to label %708 unwind label %716

708:                                              ; preds = %706
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #8
  %709 = load i32, ptr %7, align 4, !tbaa !5
  %710 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %709, i32 noundef %710)
  br i1 %668, label %711, label %719

711:                                              ; preds = %708
  %712 = getelementptr inbounds i8, ptr %707, i64 57
  store i8 1, ptr %712, align 1, !tbaa !137
  %713 = getelementptr inbounds i8, ptr %662, i64 57
  store i8 1, ptr %713, align 1, !tbaa !137
  br label %719

714:                                              ; preds = %701
  %715 = landingpad { ptr, i32 }
          cleanup
  br label %718

716:                                              ; preds = %706
  %717 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %65) #8
  br label %718

718:                                              ; preds = %716, %714
  %.pn481 = phi { ptr, i32 } [ %717, %716 ], [ %715, %714 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %66) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %65) #8
  br label %720

719:                                              ; preds = %711, %708
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #8
  br label %998

720:                                              ; preds = %718, %688
  %.pn483 = phi { ptr, i32 } [ %689, %688 ], [ %.pn481, %718 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %63) #8
  br label %999

721:                                              ; preds = %95, %95
  %722 = load i32, ptr %4, align 4, !tbaa !5
  %723 = getelementptr inbounds i8, ptr %4, i64 4
  %724 = load i32, ptr %723, align 4, !tbaa !5
  %725 = getelementptr inbounds i8, ptr %4, i64 8
  %726 = load i32, ptr %725, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL11emit_mix_opEjjjjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %722, i32 noundef %724, i32 noundef %726)
  br label %998

727:                                              ; preds = %95
  %728 = load i32, ptr %4, align 4, !tbaa !5
  %729 = getelementptr inbounds i8, ptr %4, i64 4
  %730 = load i32, ptr %729, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %728, i32 noundef %730, ptr noundef nonnull @.str.469)
  br label %998

731:                                              ; preds = %95
  %732 = load i32, ptr %4, align 4, !tbaa !5
  %733 = getelementptr inbounds i8, ptr %4, i64 4
  %734 = load i32, ptr %733, align 4, !tbaa !5
  %735 = getelementptr inbounds i8, ptr %4, i64 8
  %736 = load i32, ptr %735, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %732, i32 noundef %734, i32 noundef %736, ptr noundef nonnull @.str.467)
  br label %998

737:                                              ; preds = %95
  %738 = getelementptr inbounds i8, ptr %4, i64 4
  %739 = load i32, ptr %738, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL26register_call_out_argumentEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %739)
  %740 = getelementptr inbounds i8, ptr %0, i64 2400
  %741 = call { ptr, i8 } @_ZNSt13unordered_setIjSt4hashIjESt8equal_toIjESaIjEE6insertERKj(ptr noundef nonnull align 8 dereferenceable(56) %740, ptr noundef nonnull align 4 dereferenceable(4) %7)
  %742 = load i32, ptr %7, align 4, !tbaa !5
  %743 = load i32, ptr %4, align 4, !tbaa !5
  %744 = load i32, ptr %738, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %742, i32 noundef %743, i32 noundef %744, ptr noundef nonnull @.str.393)
  br label %998

745:                                              ; preds = %95
  %746 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %747 = tail call noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL39emit_uninitialized_temporary_expressionEjj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %67) #8
  call void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %67, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %2, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %68) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %68, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %746, i32 noundef 0)
          to label %748 unwind label %755

748:                                              ; preds = %745
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %69) #8
  %749 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %69, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %749, i1 noundef zeroext true)
          to label %750 unwind label %757

750:                                              ; preds = %748
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %70) #8
  %751 = load i32, ptr %7, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL13to_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %70, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %751, i1 noundef zeroext true)
          to label %752 unwind label %759

752:                                              ; preds = %750
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %71) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL14to_member_nameB5cxx11ERKNS_8SPIRTypeEj(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %71, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %746, i32 noundef 1)
          to label %753 unwind label %761

753:                                              ; preds = %752
  invoke void @_ZN11spirv_cross12CompilerGLSL9statementIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcS7_RA4_S8_RA7_S8_S7_RA3_S8_S7_SA_S7_SG_EEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %67, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %68, ptr noundef nonnull align 1 dereferenceable(4) @.str.335, ptr noundef nonnull align 1 dereferenceable(7) @.str.1124, ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %70, ptr noundef nonnull align 1 dereferenceable(2) @.str.719, ptr noundef nonnull align 8 dereferenceable(32) %71, ptr noundef nonnull align 1 dereferenceable(3) @.str.751)
          to label %754 unwind label %763

754:                                              ; preds = %753
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #8
  br label %998

755:                                              ; preds = %745
  %756 = landingpad { ptr, i32 }
          cleanup
  br label %768

757:                                              ; preds = %748
  %758 = landingpad { ptr, i32 }
          cleanup
  br label %767

759:                                              ; preds = %750
  %760 = landingpad { ptr, i32 }
          cleanup
  br label %766

761:                                              ; preds = %752
  %762 = landingpad { ptr, i32 }
          cleanup
  br label %765

763:                                              ; preds = %753
  %764 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %71) #8
  br label %765

765:                                              ; preds = %763, %761
  %.pn474 = phi { ptr, i32 } [ %764, %763 ], [ %762, %761 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %71) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %70) #8
  br label %766

766:                                              ; preds = %765, %759
  %.pn474.pn = phi { ptr, i32 } [ %.pn474, %765 ], [ %760, %759 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %70) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #8
  br label %767

767:                                              ; preds = %766, %757
  %.pn474.pn.pn = phi { ptr, i32 } [ %.pn474.pn, %766 ], [ %758, %757 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %69) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %68) #8
  br label %768

768:                                              ; preds = %767, %755
  %.pn474.pn.pn.pn = phi { ptr, i32 } [ %.pn474.pn.pn, %767 ], [ %756, %755 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %68) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %67) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %67) #8
  br label %999

769:                                              ; preds = %95
  %770 = load i32, ptr %4, align 4, !tbaa !5
  %771 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %770)
  br i1 %771, label %772, label %776

772:                                              ; preds = %769
  %773 = getelementptr inbounds i8, ptr %4, i64 4
  %774 = load i32, ptr %773, align 4, !tbaa !5
  %775 = tail call noundef zeroext i1 @_ZNK11spirv_cross12CompilerGLSL14should_forwardEj(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %774)
  br label %776

776:                                              ; preds = %772, %769
  %777 = phi i1 [ false, %769 ], [ %775, %772 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %72) #8
  %778 = load i32, ptr %4, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %72, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %778, i1 noundef zeroext true)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %73) #8
  %779 = getelementptr inbounds i8, ptr %4, i64 4
  %780 = load i32, ptr %779, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL22to_unpacked_expressionB5cxx11Ejb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %73, ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %780, i1 noundef zeroext true)
          to label %781 unwind label %793

781:                                              ; preds = %776
  %782 = load i32, ptr %779, align 4, !tbaa !5
  %783 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %782)
          to label %784 unwind label %795

784:                                              ; preds = %781
  %785 = getelementptr inbounds i8, ptr %783, i64 16
  %786 = load i32, ptr %785, align 8, !tbaa !121
  %.not466 = icmp eq i32 %786, 7
  br i1 %.not466, label %805, label %787

787:                                              ; preds = %784
  call void @llvm.lifetime.start.p0(i64 336, ptr nonnull %74) #8
  invoke void @_ZN11spirv_cross8SPIRTypeC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(336) %74, ptr noundef nonnull align 8 dereferenceable(336) %783)
          to label %788 unwind label %797

788:                                              ; preds = %787
  %789 = getelementptr inbounds i8, ptr %74, i64 16
  store i32 7, ptr %789, align 8, !tbaa !121
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %75) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %76) #8
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %76, ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(336) %74)
          to label %790 unwind label %799

790:                                              ; preds = %788
  invoke void @_ZN11spirv_cross4joinIJNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_KcRS6_S9_EEES6_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %75, ptr noundef nonnull align 8 dereferenceable(32) %76, ptr noundef nonnull align 1 dereferenceable(2) @.str.718, ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %791 unwind label %801

791:                                              ; preds = %790
  %792 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %76) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %75) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %74) #8
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %74) #8
  br label %805

793:                                              ; preds = %776
  %794 = landingpad { ptr, i32 }
          cleanup
  br label %822

795:                                              ; preds = %781
  %796 = landingpad { ptr, i32 }
          cleanup
  br label %821

797:                                              ; preds = %787
  %798 = landingpad { ptr, i32 }
          cleanup
  br label %804

799:                                              ; preds = %788
  %800 = landingpad { ptr, i32 }
          cleanup
  br label %803

801:                                              ; preds = %790
  %802 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %76) #8
  br label %803

803:                                              ; preds = %801, %799
  %.pn467 = phi { ptr, i32 } [ %802, %801 ], [ %800, %799 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %76) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %75) #8
  call void @_ZN11spirv_cross8SPIRTypeD2Ev(ptr noundef nonnull align 8 dereferenceable(336) %74) #8
  br label %804

804:                                              ; preds = %803, %797
  %.pn467.pn = phi { ptr, i32 } [ %.pn467, %803 ], [ %798, %797 ]
  call void @llvm.lifetime.end.p0(i64 336, ptr nonnull %74) #8
  br label %821

805:                                              ; preds = %791, %784
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %77) #8
  invoke void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA3_S1_SA_RA2_S1_EEES9_DpOT_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %77, ptr noundef nonnull align 1 dereferenceable(7) @.str.1125, ptr noundef nonnull align 8 dereferenceable(32) %72, ptr noundef nonnull align 1 dereferenceable(3) @.str.177, ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull align 1 dereferenceable(2) @.str.135)
          to label %806 unwind label %816

806:                                              ; preds = %805
  %807 = load i32, ptr %7, align 4, !tbaa !5
  %808 = invoke noundef nonnull align 8 dereferenceable(236) ptr @_ZN11spirv_cross12CompilerGLSL7emit_opEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %807, ptr noundef nonnull align 8 dereferenceable(32) %77, i1 noundef zeroext %777, i1 noundef zeroext false)
          to label %809 unwind label %818

809:                                              ; preds = %806
  %810 = load i32, ptr %7, align 4, !tbaa !5
  %811 = load i32, ptr %4, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %810, i32 noundef %811)
          to label %812 unwind label %818

812:                                              ; preds = %809
  %813 = load i32, ptr %7, align 4, !tbaa !5
  %814 = load i32, ptr %779, align 4, !tbaa !5
  invoke void @_ZN11spirv_cross8Compiler31inherit_expression_dependenciesEjj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %813, i32 noundef %814)
          to label %815 unwind label %818

815:                                              ; preds = %812
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #8
  br label %998

816:                                              ; preds = %805
  %817 = landingpad { ptr, i32 }
          cleanup
  br label %820

818:                                              ; preds = %812, %809, %806
  %819 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %77) #8
  br label %820

820:                                              ; preds = %818, %816
  %.pn470 = phi { ptr, i32 } [ %819, %818 ], [ %817, %816 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %77) #8
  br label %821

821:                                              ; preds = %820, %804, %795
  %.pn470.pn = phi { ptr, i32 } [ %.pn470, %820 ], [ %.pn467.pn, %804 ], [ %796, %795 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  br label %822

822:                                              ; preds = %821, %793
  %.pn470.pn.pn = phi { ptr, i32 } [ %.pn470.pn, %821 ], [ %794, %793 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %72) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %72) #8
  br label %999

823:                                              ; preds = %95
  %824 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %824, ptr noundef nonnull @.str.453)
  br label %998

825:                                              ; preds = %95
  %826 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %826, ptr noundef nonnull @.str.457)
  br label %998

827:                                              ; preds = %95
  %828 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %828, ptr noundef nonnull @.str.452)
  br label %998

829:                                              ; preds = %95
  %830 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %830, ptr noundef nonnull @.str.456)
  br label %998

831:                                              ; preds = %95
  %832 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %832, ptr noundef nonnull @.str.449)
  br label %998

833:                                              ; preds = %95
  %834 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %834, ptr noundef nonnull @.str.504)
  br label %998

835:                                              ; preds = %95
  %836 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %836, ptr noundef nonnull @.str.508)
  br label %998

837:                                              ; preds = %95
  %838 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %838, ptr noundef nonnull @.str.503)
  br label %998

839:                                              ; preds = %95
  %840 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %840, ptr noundef nonnull @.str.507)
  br label %998

841:                                              ; preds = %95
  %842 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %842, ptr noundef nonnull @.str.500)
  br label %998

843:                                              ; preds = %95
  %844 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %844, ptr noundef nonnull @.str.448)
  br label %998

845:                                              ; preds = %95
  %846 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %846, ptr noundef nonnull @.str.499)
  br label %998

847:                                              ; preds = %95
  %848 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %848, ptr noundef nonnull @.str.423)
  br label %998

849:                                              ; preds = %95
  %850 = load i32, ptr %4, align 4, !tbaa !5
  %851 = getelementptr inbounds i8, ptr %4, i64 4
  %852 = load i32, ptr %851, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %850, i32 noundef %852, ptr noundef nonnull @.str.374)
  br label %998

853:                                              ; preds = %95
  %854 = load i32, ptr %4, align 4, !tbaa !5
  %855 = getelementptr inbounds i8, ptr %4, i64 4
  %856 = load i32, ptr %855, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %854, i32 noundef %856, ptr noundef nonnull @.str.366)
  br label %998

857:                                              ; preds = %95
  %858 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %858, ptr noundef nonnull @.str.444)
  br label %998

859:                                              ; preds = %95
  %860 = load i32, ptr %4, align 4, !tbaa !5
  %861 = getelementptr inbounds i8, ptr %4, i64 4
  %862 = load i32, ptr %861, align 4, !tbaa !5
  %863 = getelementptr inbounds i8, ptr %4, i64 8
  %864 = load i32, ptr %863, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %860, i32 noundef %862, i32 noundef %864, ptr noundef nonnull @.str.383)
  br label %998

865:                                              ; preds = %95
  %866 = load i32, ptr %4, align 4, !tbaa !5
  %867 = getelementptr inbounds i8, ptr %4, i64 4
  %868 = load i32, ptr %867, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %866, i32 noundef %868, ptr noundef nonnull @.str.460)
  br label %998

869:                                              ; preds = %95
  %870 = load i32, ptr %4, align 4, !tbaa !5
  %871 = getelementptr inbounds i8, ptr %4, i64 4
  %872 = load i32, ptr %871, align 4, !tbaa !5
  %873 = getelementptr inbounds i8, ptr %4, i64 8
  %874 = load i32, ptr %873, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %870, i32 noundef %872, i32 noundef %874, ptr noundef nonnull @.str.461)
  br label %998

875:                                              ; preds = %95
  %876 = load i32, ptr %4, align 4, !tbaa !5
  %877 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %876)
  %878 = getelementptr inbounds i8, ptr %877, i64 16
  %879 = load i32, ptr %878, align 8, !tbaa !121
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %876, ptr noundef nonnull @.str.384, i32 noundef %879, i32 noundef %97)
  br label %998

880:                                              ; preds = %95
  %881 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %881, ptr noundef nonnull @.str.385, i32 noundef %97, i32 noundef %97)
  br label %998

882:                                              ; preds = %95
  %883 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL23emit_unary_func_op_castEjjjPKcNS_8SPIRType8BaseTypeES4_(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %883, ptr noundef nonnull @.str.385, i32 noundef %98, i32 noundef %97)
  br label %998

884:                                              ; preds = %95
  %885 = load i32, ptr %4, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL18emit_unary_func_opEjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %885, ptr noundef nonnull @.str.416)
  br label %998

886:                                              ; preds = %95
  %887 = load i32, ptr %4, align 4, !tbaa !5
  %888 = getelementptr inbounds i8, ptr %4, i64 4
  %889 = load i32, ptr %888, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %887, i32 noundef %889, ptr noundef nonnull @.str.417)
  br label %998

890:                                              ; preds = %95
  %891 = load i32, ptr %4, align 4, !tbaa !5
  %892 = getelementptr inbounds i8, ptr %4, i64 4
  %893 = load i32, ptr %892, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %891, i32 noundef %893, ptr noundef nonnull @.str.415)
  br label %998

894:                                              ; preds = %95, %95
  %895 = getelementptr inbounds i8, ptr %0, i64 7648
  %896 = load i8, ptr %895, align 8, !tbaa !143, !range !119, !noundef !120
  %897 = trunc nuw i8 %896 to i1
  br i1 %897, label %898, label %935

898:                                              ; preds = %894
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %78) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %79) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %79) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %78, ptr noundef nonnull @.str.1126, ptr noundef nonnull align 1 dereferenceable(1) %79)
          to label %899 unwind label %907

899:                                              ; preds = %898
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %78)
          to label %900 unwind label %909

900:                                              ; preds = %899
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %79) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %79) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %78) #8
  %901 = load i32, ptr %7, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %80, i32 noundef %901)
  %902 = load i32, ptr %80, align 4
  %903 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %902, i32 noundef 0)
  %904 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %905 = getelementptr inbounds i8, ptr %904, i64 20
  %906 = load i32, ptr %905, align 4, !tbaa !144
  switch i32 %906, label %921 [
    i32 16, label %912
    i32 32, label %915
    i32 64, label %918
  ]

907:                                              ; preds = %898
  %908 = landingpad { ptr, i32 }
          cleanup
  br label %911

909:                                              ; preds = %899
  %910 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #8
  br label %911

911:                                              ; preds = %909, %907
  %.pn464 = phi { ptr, i32 } [ %910, %909 ], [ %908, %907 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %79) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %79) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %78) #8
  br label %999

912:                                              ; preds = %900
  %913 = icmp eq i32 %99, 79
  %914 = select i1 %913, i32 512, i32 4096
  br label %926

915:                                              ; preds = %900
  %916 = icmp eq i32 %99, 79
  %917 = select i1 %916, i32 1024, i32 8192
  br label %926

918:                                              ; preds = %900
  %919 = icmp eq i32 %99, 79
  %920 = select i1 %919, i32 2048, i32 16384
  br label %926

921:                                              ; preds = %900
  %922 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %922, ptr noundef nonnull @.str.1127)
          to label %923 unwind label %924

923:                                              ; preds = %921
  call void @__cxa_throw(ptr nonnull %922, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

924:                                              ; preds = %921
  %925 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %922) #8
  br label %999

926:                                              ; preds = %918, %915, %912
  %.0397 = phi i32 [ %920, %918 ], [ %917, %915 ], [ %914, %912 ]
  call void @_ZN11spirv_cross12CompilerGLSL16require_polyfillENS0_8PolyfillEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %.0397, i1 noundef zeroext %903)
  br i1 %903, label %927, label %.critedge564

927:                                              ; preds = %926
  call void @_ZN11spirv_cross12CompilerGLSL16require_polyfillENS0_8PolyfillEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %.0397, i1 noundef zeroext false)
  %928 = icmp eq i32 %99, 79
  %.str.1128..str.1129 = select i1 %928, ptr @.str.1128, ptr @.str.1129
  br label %930

.critedge564:                                     ; preds = %926
  %929 = icmp eq i32 %99, 79
  %.str.920..str.921 = select i1 %929, ptr @.str.920, ptr @.str.921
  br label %930

930:                                              ; preds = %.critedge564, %927
  %.0396 = phi ptr [ %.str.1128..str.1129, %927 ], [ %.str.920..str.921, %.critedge564 ]
  %931 = load i32, ptr %7, align 4, !tbaa !5
  %932 = load i32, ptr %4, align 4, !tbaa !5
  %933 = getelementptr inbounds i8, ptr %4, i64 4
  %934 = load i32, ptr %933, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL19emit_binary_func_opEjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %931, i32 noundef %932, i32 noundef %934, ptr noundef nonnull %.0396)
  br label %998

935:                                              ; preds = %894
  %936 = load i32, ptr %4, align 4, !tbaa !5
  %937 = getelementptr inbounds i8, ptr %4, i64 4
  %938 = load i32, ptr %937, align 4, !tbaa !5
  tail call void @_ZN11spirv_cross12CompilerGLSL15emit_nminmax_opEjjjj10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %2, i32 noundef %936, i32 noundef %938, i32 noundef %99)
  br label %998

939:                                              ; preds = %95
  %940 = getelementptr inbounds i8, ptr %0, i64 7648
  %941 = load i8, ptr %940, align 8, !tbaa !143, !range !119, !noundef !120
  %942 = trunc nuw i8 %941 to i1
  br i1 %942, label %943, label %974

943:                                              ; preds = %939
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %81) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %82) #8
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %82) #8
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %81, ptr noundef nonnull @.str.1126, ptr noundef nonnull align 1 dereferenceable(1) %82)
          to label %944 unwind label %952

944:                                              ; preds = %943
  invoke void @_ZN11spirv_cross12CompilerGLSL26require_extension_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 8 dereferenceable(32) %81)
          to label %945 unwind label %954

945:                                              ; preds = %944
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %82) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %81) #8
  %946 = load i32, ptr %7, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %83, i32 noundef %946)
  %947 = load i32, ptr %83, align 4
  %948 = call noundef zeroext i1 @_ZNK11spirv_cross8Compiler14has_decorationENS_7TypedIDILNS_5TypesE0EEEN3spv10DecorationE(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 %947, i32 noundef 0)
  %949 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZN11spirv_cross8Compiler3getINS_8SPIRTypeEEERT_j(ptr noundef nonnull align 8 dereferenceable(3176) %0, i32 noundef %1)
  %950 = getelementptr inbounds i8, ptr %949, i64 20
  %951 = load i32, ptr %950, align 4, !tbaa !144
  switch i32 %951, label %959 [
    i32 16, label %964
    i32 32, label %957
    i32 64, label %958
  ]

952:                                              ; preds = %943
  %953 = landingpad { ptr, i32 }
          cleanup
  br label %956

954:                                              ; preds = %944
  %955 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  br label %956

956:                                              ; preds = %954, %952
  %.pn = phi { ptr, i32 } [ %955, %954 ], [ %953, %952 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %82) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %82) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %81) #8
  br label %999

957:                                              ; preds = %945
  br label %964

958:                                              ; preds = %945
  br label %964

959:                                              ; preds = %945
  %960 = call ptr @__cxa_allocate_exception(i64 16) #8
  invoke void @_ZN11spirv_cross13CompilerErrorC2EPKc(ptr noundef nonnull align 8 dereferenceable(16) %960, ptr noundef nonnull @.str.1127)
          to label %961 unwind label %962

961:                                              ; preds = %959
  call void @__cxa_throw(ptr nonnull %960, ptr nonnull @_ZTIN11spirv_cross13CompilerErrorE, ptr nonnull @_ZNSt13runtime_errorD2Ev) #9
  unreachable

962:                                              ; preds = %959
  %963 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %960) #8
  br label %999

964:                                              ; preds = %945, %958, %957
  %.0 = phi i32 [ 131072, %958 ], [ 65536, %957 ], [ 32768, %945 ]
  call void @_ZN11spirv_cross12CompilerGLSL16require_polyfillENS0_8PolyfillEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %.0, i1 noundef zeroext %948)
  br i1 %948, label %965, label %966

965:                                              ; preds = %964
  call void @_ZN11spirv_cross12CompilerGLSL16require_polyfillENS0_8PolyfillEb(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %.0, i1 noundef zeroext false)
  br label %966

966:                                              ; preds = %965, %964
  %967 = phi ptr [ @.str.1130, %965 ], [ @.str.922, %964 ]
  %968 = load i32, ptr %7, align 4, !tbaa !5
  %969 = load i32, ptr %4, align 4, !tbaa !5
  %970 = getelementptr inbounds i8, ptr %4, i64 4
  %971 = load i32, ptr %970, align 4, !tbaa !5
  %972 = getelementptr inbounds i8, ptr %4, i64 8
  %973 = load i32, ptr %972, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL20emit_trinary_func_opEjjjjjPKc(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %968, i32 noundef %969, i32 noundef %971, i32 noundef %973, ptr noundef nonnull %967)
  br label %998

974:                                              ; preds = %939
  %975 = getelementptr inbounds i8, ptr %0, i64 9272
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %84) #8
  %976 = or i32 %2, 536870912
  store i32 %976, ptr %84, align 4, !tbaa !5
  %977 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixEOj(ptr noundef nonnull align 8 dereferenceable(56) %975, ptr noundef nonnull align 4 dereferenceable(4) %84)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %84) #8
  %978 = load i32, ptr %977, align 4, !tbaa !5
  %.not = icmp eq i32 %978, 0
  br i1 %.not, label %979, label %982

979:                                              ; preds = %974
  %980 = getelementptr inbounds i8, ptr %0, i64 8
  %981 = call noundef i32 @_ZN11spirv_cross8ParsedIR17increase_bound_byEj(ptr noundef nonnull align 8 dereferenceable(1920) %980, i32 noundef 1)
  store i32 %981, ptr %977, align 4, !tbaa !5
  br label %982

982:                                              ; preds = %979, %974
  %983 = getelementptr inbounds i8, ptr %0, i64 256
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %85) #8
  %984 = load i32, ptr %7, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %85, i32 noundef %984)
  %985 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %983, ptr noundef nonnull align 4 dereferenceable(4) %85)
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %86) #8
  %986 = load i32, ptr %977, align 4, !tbaa !5
  call void @_ZN11spirv_cross7TypedIDILNS_5TypesE0EEC2Ej(ptr noundef nonnull align 4 dereferenceable(4) %86, i32 noundef %986)
  %987 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZNSt13unordered_mapIN11spirv_cross7TypedIDILNS0_5TypesE0EEENS0_4MetaESt4hashIS3_ESt8equal_toIS3_ESaISt4pairIKS3_S4_EEEixEOS3_(ptr noundef nonnull align 8 dereferenceable(56) %983, ptr noundef nonnull align 4 dereferenceable(4) %86)
  %988 = call noundef nonnull align 8 dereferenceable(488) ptr @_ZN11spirv_cross4MetaaSERKS0_(ptr noundef nonnull align 8 dereferenceable(488) %987, ptr noundef nonnull align 8 dereferenceable(488) %985)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %86) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %85) #8
  %989 = load i32, ptr %977, align 4, !tbaa !5
  %990 = load i32, ptr %4, align 4, !tbaa !5
  %991 = getelementptr inbounds i8, ptr %4, i64 4
  %992 = load i32, ptr %991, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL15emit_nminmax_opEjjjj10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %989, i32 noundef %990, i32 noundef %992, i32 noundef 80)
  %993 = load i32, ptr %7, align 4, !tbaa !5
  %994 = load i32, ptr %977, align 4, !tbaa !5
  %995 = getelementptr inbounds i8, ptr %4, i64 8
  %996 = load i32, ptr %995, align 4, !tbaa !5
  call void @_ZN11spirv_cross12CompilerGLSL15emit_nminmax_opEjjjj10GLSLstd450(ptr noundef nonnull align 8 dereferenceable(9848) %0, i32 noundef %1, i32 noundef %993, i32 noundef %994, i32 noundef %996, i32 noundef 79)
  br label %998

997:                                              ; preds = %95
  call void @_ZN11spirv_cross12CompilerGLSL9statementIJRA26_KcRjEEEvDpOT_(ptr noundef nonnull align 8 dereferenceable(9848) %0, ptr noundef nonnull align 1 dereferenceable(26) @.str.1131, ptr noundef nonnull align 4 dereferenceable(4) %8)
  br label %998

998:                                              ; preds = %657, %658, %331, %372, %966, %982, %930, %935, %590, %591, %585, %586, %580, %581, %512, %552, %489, %501, %465, %477, %276, %302, %261, %266, %157, %180, %133, %141, %102, %119, %997, %890, %886, %884, %882, %880, %875, %869, %865, %859, %857, %853, %849, %847, %845, %843, %841, %839, %837, %835, %833, %831, %829, %827, %825, %823, %815, %754, %737, %731, %727, %721, %719, %610, %608, %606, %604, %602, %600, %596, %592, %460, %458, %456, %454, %452, %450, %444, %438, %432, %428, %424, %420, %416, %412, %408, %214, %212, %210, %208, %206, %204, %202, %200, %198
  ret void

999:                                              ; preds = %130, %148, %152, %197, %265, %319, %485, %509, %641, %720, %768, %822, %911, %924, %956, %962, %407, %345, %576, %562, %557, %93
  %.pn555 = phi { ptr, i32 } [ %94, %93 ], [ %963, %962 ], [ %.pn, %956 ], [ %925, %924 ], [ %.pn464, %911 ], [ %.pn470.pn.pn, %822 ], [ %.pn474.pn.pn.pn, %768 ], [ %.pn483, %720 ], [ %642, %641 ], [ %.pn501, %509 ], [ %.pn505, %485 ], [ %.pn531, %319 ], [ %.pn536.pn, %265 ], [ %.pn542.pn.pn, %197 ], [ %153, %152 ], [ %.pn546, %148 ], [ %.pn550.pn, %130 ], [ %.pn518.pn.pn.pn.pn.pn, %407 ], [ %.pn507.pn.pn.pn, %345 ], [ %.pn496, %576 ], [ %.pn490, %562 ], [ %.pn488, %557 ]
  resume { ptr, i32 } %.pn555
}

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef zeroext i1 @_ZL23is_unsigned_glsl_opcode10GLSLstd450(i32 noundef) local_unnamed_addr #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA7_KcRNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA4_S1_S9_S3_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(4), ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(7)) local_unnamed_addr #2

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA10_S1_S9_RA9_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(9)) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross4joinIJRA6_KcNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERA2_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(2)) local_unnamed_addr #2

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt13unordered_mapIjjSt4hashIjESt8equal_toIjESaISt4pairIKjjEEEixEOj(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

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

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

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

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


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