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

; 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.15" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.19 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.19 = type { i64, [8 x i8] }
%"struct.glslang::TSourceLoc" = type { ptr, i32, i32, i32 }
%"class.glslang::TPpToken" = type <{ %"struct.glslang::TSourceLoc", i8, [7 x i8], %union.anon.63, [1025 x i8], [7 x i8] }>
%union.anon.63 = type { double }
%"class.glslang::TVector.175" = type { %"class.std::vector.176" }
%"class.std::vector.176" = type { %"struct.std::_Vector_base.177" }
%"struct.std::_Vector_base.177" = type { %"struct.std::_Vector_base<char, glslang::pool_allocator<char>>::_Vector_impl" }
%"struct.std::_Vector_base<char, glslang::pool_allocator<char>>::_Vector_impl" = type { %"class.glslang::pool_allocator.12", %"struct.std::_Vector_base<char, glslang::pool_allocator<char>>::_Vector_impl_data" }
%"class.glslang::pool_allocator.12" = type { ptr }
%"struct.std::_Vector_base<char, glslang::pool_allocator<char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.glslang::TPpContext" = type <{ ptr, %"class.glslang::TMap", %"class.glslang::TStringAtomMap", ptr, i32, [4 x i8], ptr, ptr, i32, i32, i32, [4 x i8], ptr, i32, [65 x i8], [3 x i8], i32, [4 x i8], %"class.std::vector.13", i8, i8, [6 x i8], ptr, i8, [7 x i8], %"class.std::__cxx11::basic_string.15", %"class.std::stack", %"class.std::__cxx11::basic_string.15", %"class.std::__cxx11::basic_istringstream", i8, [7 x i8] }>
%"class.glslang::TMap" = type { %"class.std::map" }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<int, std::pair<const int, glslang::TPpContext::MacroSymbol>, std::_Select1st<std::pair<const int, glslang::TPpContext::MacroSymbol>>, std::less<int>, glslang::pool_allocator<std::pair<const int, glslang::TPpContext::MacroSymbol>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<int, std::pair<const int, glslang::TPpContext::MacroSymbol>, std::_Select1st<std::pair<const int, glslang::TPpContext::MacroSymbol>>, std::less<int>, glslang::pool_allocator<std::pair<const int, glslang::TPpContext::MacroSymbol>>>::_Rb_tree_impl" = type { %"class.glslang::pool_allocator.4", [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.glslang::pool_allocator.4" = type { ptr }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.glslang::TStringAtomMap" = type { %"class.glslang::TUnorderedMap", %"class.glslang::TVector.8", i32, %"class.std::__cxx11::basic_string" }
%"class.glslang::TUnorderedMap" = type { %"class.std::unordered_map" }
%"class.std::unordered_map" = type { %"class.std::_Hashtable" }
%"class.std::_Hashtable" = type { %"struct.std::__detail::_Hashtable_alloc", ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hashtable_alloc" = type { %"struct.std::__detail::_Hashtable_ebo_helper.6" }
%"struct.std::__detail::_Hashtable_ebo_helper.6" = type { %"class.glslang::pool_allocator.7" }
%"class.glslang::pool_allocator.7" = type { ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }
%"class.glslang::TVector.8" = type { %"class.std::vector.9" }
%"class.std::vector.9" = type { %"struct.std::_Vector_base.10" }
%"struct.std::_Vector_base.10" = type { %"struct.std::_Vector_base<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>> *, glslang::pool_allocator<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>> *>>::_Vector_impl" }
%"struct.std::_Vector_base<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>> *, glslang::pool_allocator<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>> *>>::_Vector_impl" = type { %"class.glslang::pool_allocator.11", %"struct.std::_Vector_base<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>> *, glslang::pool_allocator<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>> *>>::_Vector_impl_data" }
%"class.glslang::pool_allocator.11" = type { ptr }
%"struct.std::_Vector_base<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>> *, glslang::pool_allocator<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>> *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>::_Alloc_hider" = type { %"class.glslang::pool_allocator.12", ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::vector.13" = type { %"struct.std::_Vector_base.14" }
%"struct.std::_Vector_base.14" = type { %"struct.std::_Vector_base<glslang::TPpContext::tInput *, std::allocator<glslang::TPpContext::tInput *>>::_Vector_impl" }
%"struct.std::_Vector_base<glslang::TPpContext::tInput *, std::allocator<glslang::TPpContext::tInput *>>::_Vector_impl" = type { %"struct.std::_Vector_base<glslang::TPpContext::tInput *, std::allocator<glslang::TPpContext::tInput *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<glslang::TPpContext::tInput *, std::allocator<glslang::TPpContext::tInput *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::stack" = type { %"class.std::deque" }
%"class.std::deque" = type { %"class.std::_Deque_base" }
%"class.std::_Deque_base" = type { %"struct.std::_Deque_base<glslang::TShader::Includer::IncludeResult *, std::allocator<glslang::TShader::Includer::IncludeResult *>>::_Deque_impl" }
%"struct.std::_Deque_base<glslang::TShader::Includer::IncludeResult *, std::allocator<glslang::TShader::Includer::IncludeResult *>>::_Deque_impl" = type { %"struct.std::_Deque_base<glslang::TShader::Includer::IncludeResult *, std::allocator<glslang::TShader::Includer::IncludeResult *>>::_Deque_impl_data" }
%"struct.std::_Deque_base<glslang::TShader::Includer::IncludeResult *, std::allocator<glslang::TShader::Includer::IncludeResult *>>::_Deque_impl_data" = type { ptr, i64, %"struct.std::_Deque_iterator", %"struct.std::_Deque_iterator" }
%"struct.std::_Deque_iterator" = type { ptr, ptr, ptr, ptr }
%"class.std::__cxx11::basic_istringstream" = type { %"class.std::basic_istream.base", %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ios" }
%"class.std::basic_istream.base" = type { ptr, i64 }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string.15" }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.glslang::TParseVersions" = type { ptr, i8, i32, ptr, i32, i32, %"struct.glslang::SpvVersion", ptr, %"class.glslang::TMap.23", %"class.glslang::TMap.28", i32, i32, ptr }
%"struct.glslang::SpvVersion" = type <{ i32, i32, i32, i32, i8, [3 x i8] }>
%"class.glslang::TMap.23" = type { %"class.std::map.24" }
%"class.std::map.24" = type { %"class.std::_Rb_tree.25" }
%"class.std::_Rb_tree.25" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, glslang::TExtensionBehavior>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, glslang::TExtensionBehavior>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>>, glslang::pool_allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, glslang::TExtensionBehavior>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, glslang::TExtensionBehavior>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, glslang::TExtensionBehavior>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>>, glslang::pool_allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, glslang::TExtensionBehavior>>>::_Rb_tree_impl" = type { %"class.glslang::pool_allocator.26", [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.glslang::pool_allocator.26" = type { ptr }
%"class.glslang::TMap.28" = type { %"class.std::map.29" }
%"class.std::map.29" = type { %"class.std::_Rb_tree.30" }
%"class.std::_Rb_tree.30" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, unsigned int>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, unsigned int>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>>, glslang::pool_allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, unsigned int>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, unsigned int>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, unsigned int>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>>, glslang::pool_allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, glslang::pool_allocator<char>>, unsigned int>>>::_Rb_tree_impl" = type { %"class.glslang::pool_allocator.31", [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.glslang::pool_allocator.31" = type { ptr }
%"struct.glslang::TPpContext::MacroSymbol" = type <{ %"class.glslang::TVector", %"class.glslang::TPpContext::TokenStream", i8, [7 x i8] }>
%"class.glslang::TVector" = type { %"class.std::vector" }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<int, glslang::pool_allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, glslang::pool_allocator<int>>::_Vector_impl" = type { %"class.glslang::pool_allocator", %"struct.std::_Vector_base<int, glslang::pool_allocator<int>>::_Vector_impl_data" }
%"class.glslang::pool_allocator" = type { ptr }
%"struct.std::_Vector_base<int, glslang::pool_allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.glslang::TPpContext::TokenStream" = type { %"class.glslang::TVector.0", i64 }
%"class.glslang::TVector.0" = type { %"class.std::vector.1" }
%"class.std::vector.1" = type { %"struct.std::_Vector_base.2" }
%"struct.std::_Vector_base.2" = type { %"struct.std::_Vector_base<glslang::TPpContext::TokenStream::Token, glslang::pool_allocator<glslang::TPpContext::TokenStream::Token>>::_Vector_impl" }
%"struct.std::_Vector_base<glslang::TPpContext::TokenStream::Token, glslang::pool_allocator<glslang::TPpContext::TokenStream::Token>>::_Vector_impl" = type { %"class.glslang::pool_allocator.3", %"struct.std::_Vector_base<glslang::TPpContext::TokenStream::Token, glslang::pool_allocator<glslang::TPpContext::TokenStream::Token>>::_Vector_impl_data" }
%"class.glslang::pool_allocator.3" = type { ptr }
%"struct.std::_Vector_base<glslang::TPpContext::TokenStream::Token, glslang::pool_allocator<glslang::TPpContext::TokenStream::Token>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.glslang::TPpContext::tMacroInput" = type <{ %"class.glslang::TPpContext::tInput", ptr, %"class.glslang::TVector.171", %"class.glslang::TVector.171", i8, i8, [6 x i8] }>
%"class.glslang::TPpContext::tInput" = type { ptr, i8, ptr }
%"class.glslang::TVector.171" = type { %"class.std::vector.172" }
%"class.std::vector.172" = type { %"struct.std::_Vector_base.173" }
%"struct.std::_Vector_base.173" = type { %"struct.std::_Vector_base<glslang::TPpContext::TokenStream *, glslang::pool_allocator<glslang::TPpContext::TokenStream *>>::_Vector_impl" }
%"struct.std::_Vector_base<glslang::TPpContext::TokenStream *, glslang::pool_allocator<glslang::TPpContext::TokenStream *>>::_Vector_impl" = type { %"class.glslang::pool_allocator.174", %"struct.std::_Vector_base<glslang::TPpContext::TokenStream *, glslang::pool_allocator<glslang::TPpContext::TokenStream *>>::_Vector_impl_data" }
%"class.glslang::pool_allocator.174" = type { ptr }
%"struct.std::_Vector_base<glslang::TPpContext::TokenStream *, glslang::pool_allocator<glslang::TPpContext::TokenStream *>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@.str.39 = external hidden unnamed_addr constant [3 x i8], align 1
@_ZN7glslangL36E_GL_GOOGLE_cpp_style_line_directiveE = external hidden constant ptr, align 8
@.str.72 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [23 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: mustprogress uwtable
declare dso_local noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921), ptr noundef) #1 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32)) #3 align 2

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

declare void @_ZN7glslang10TPpContext11TokenStream8putTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, ptr noundef) #4

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144), i32 noundef) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7glslang10TPpContext11TokenStream5resetEv(ptr noundef nonnull align 8 dereferenceable(40)) #3 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK7glslang14TParseVersions13isReadingHLSLEv(ptr noundef nonnull align 8 dereferenceable(192)) #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7glslang10TPpContext11MacroExpandEPNS_8TPpTokenEbb(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef %1, i1 noundef zeroext %2, i1 noundef zeroext %3) #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca i8, align 1
  %9 = alloca i8, align 1
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %"class.std::__cxx11::basic_string.15", align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca %"struct.glslang::TSourceLoc", align 8
  %18 = alloca %"class.glslang::TPpToken", align 8
  %19 = alloca i32, align 4
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i8, align 1
  %24 = alloca %"class.glslang::TVector.175", align 8
  %25 = alloca i8, align 1
  %26 = alloca i8, align 1
  %27 = alloca i32, align 4
  %28 = alloca i64, align 8
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  %29 = zext i1 %2 to i8
  store i8 %29, ptr %8, align 1, !tbaa !9
  %30 = zext i1 %3 to i8
  store i8 %30, ptr %9, align 1, !tbaa !9
  %31 = load ptr, ptr %6, align 8
  %32 = load ptr, ptr %7, align 8, !tbaa !5
  %33 = getelementptr inbounds %"class.glslang::TPpToken", ptr %32, i32 0, i32 1
  store i8 0, ptr %33, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  %34 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 2
  %35 = load ptr, ptr %7, align 8, !tbaa !5
  %36 = getelementptr inbounds %"class.glslang::TPpToken", ptr %35, i32 0, i32 4
  %37 = getelementptr inbounds [1025 x i8], ptr %36, i64 0, i64 0
  %38 = call noundef i32 @_ZNK7glslang14TStringAtomMap7getAtomEPKc(ptr noundef nonnull align 8 dereferenceable(144) %34, ptr noundef %37)
  store i32 %38, ptr %10, align 4, !tbaa !15
  %39 = load i32, ptr %10, align 4, !tbaa !15
  switch i32 %39, label %108 [
    i32 179, label %40
    i32 180, label %62
    i32 181, label %93
  ]

40:                                               ; preds = %4
  %41 = load ptr, ptr %7, align 8, !tbaa !5
  %42 = getelementptr inbounds %"class.glslang::TPpToken", ptr %41, i32 0, i32 3
  %43 = load i32, ptr %42, align 8, !tbaa !16
  %44 = icmp eq i32 %43, 0
  br i1 %44, label %45, label %53

45:                                               ; preds = %40
  %46 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 12
  %47 = load ptr, ptr %46, align 8, !tbaa !17
  %48 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7glslang14TParseVersions13getCurrentLocEv(ptr noundef nonnull align 8 dereferenceable(192) %47)
  %49 = getelementptr inbounds %"struct.glslang::TSourceLoc", ptr %48, i32 0, i32 2
  %50 = load i32, ptr %49, align 4, !tbaa !67
  %51 = load ptr, ptr %7, align 8, !tbaa !5
  %52 = getelementptr inbounds %"class.glslang::TPpToken", ptr %51, i32 0, i32 3
  store i32 %50, ptr %52, align 8, !tbaa !16
  br label %53

53:                                               ; preds = %45, %40
  %54 = load ptr, ptr %7, align 8, !tbaa !5
  %55 = getelementptr inbounds %"class.glslang::TPpToken", ptr %54, i32 0, i32 4
  %56 = getelementptr inbounds [1025 x i8], ptr %55, i64 0, i64 0
  %57 = load ptr, ptr %7, align 8, !tbaa !5
  %58 = getelementptr inbounds %"class.glslang::TPpToken", ptr %57, i32 0, i32 3
  %59 = load i32, ptr %58, align 8, !tbaa !16
  %60 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %56, i64 noundef 1025, ptr noundef @.str.72, i32 noundef %59) #8
  %61 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN7glslang10TPpContext10UngetTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %31, i32 noundef 152, ptr noundef %61)
  store i32 2, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %591

62:                                               ; preds = %4
  %63 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 12
  %64 = load ptr, ptr %63, align 8, !tbaa !17
  %65 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7glslang14TParseVersions13getCurrentLocEv(ptr noundef nonnull align 8 dereferenceable(192) %64)
  %66 = getelementptr inbounds %"struct.glslang::TSourceLoc", ptr %65, i32 0, i32 0
  %67 = load ptr, ptr %66, align 8, !tbaa !68
  %68 = icmp ne ptr %67, null
  br i1 %68, label %69, label %77

69:                                               ; preds = %62
  %70 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 12
  %71 = load ptr, ptr %70, align 8, !tbaa !17
  %72 = load ptr, ptr %7, align 8, !tbaa !5
  %73 = getelementptr inbounds %"class.glslang::TPpToken", ptr %72, i32 0, i32 0
  %74 = load ptr, ptr %71, align 8, !tbaa !69
  %75 = getelementptr inbounds ptr, ptr %74, i64 6
  %76 = load ptr, ptr %75, align 8
  call void %76(ptr noundef nonnull align 8 dereferenceable(192) %71, ptr noundef nonnull align 8 dereferenceable(24) %73, i32 noundef 1, ptr noundef @_ZN7glslangL36E_GL_GOOGLE_cpp_style_line_directiveE, ptr noundef @.str.73)
  br label %77

77:                                               ; preds = %69, %62
  %78 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 12
  %79 = load ptr, ptr %78, align 8, !tbaa !17
  %80 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7glslang14TParseVersions13getCurrentLocEv(ptr noundef nonnull align 8 dereferenceable(192) %79)
  %81 = getelementptr inbounds %"struct.glslang::TSourceLoc", ptr %80, i32 0, i32 1
  %82 = load i32, ptr %81, align 8, !tbaa !71
  %83 = load ptr, ptr %7, align 8, !tbaa !5
  %84 = getelementptr inbounds %"class.glslang::TPpToken", ptr %83, i32 0, i32 3
  store i32 %82, ptr %84, align 8, !tbaa !16
  %85 = load ptr, ptr %7, align 8, !tbaa !5
  %86 = getelementptr inbounds %"class.glslang::TPpToken", ptr %85, i32 0, i32 4
  %87 = getelementptr inbounds [1025 x i8], ptr %86, i64 0, i64 0
  call void @llvm.lifetime.start.p0(i64 32, ptr %12) #8
  %88 = load ptr, ptr %7, align 8, !tbaa !5
  %89 = getelementptr inbounds %"class.glslang::TPpToken", ptr %88, i32 0, i32 0
  call void @_ZNK7glslang10TSourceLoc18getStringNameOrNumB5cxx11Eb(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string.15") align 8 %12, ptr noundef nonnull align 8 dereferenceable(24) %89, i1 noundef zeroext true)
  %90 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  %91 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %87, i64 noundef 1025, ptr noundef @.str.39, ptr noundef %90) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %12) #8
  %92 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN7glslang10TPpContext10UngetTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %31, i32 noundef 152, ptr noundef %92)
  store i32 2, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %591

93:                                               ; preds = %4
  %94 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 12
  %95 = load ptr, ptr %94, align 8, !tbaa !17
  %96 = getelementptr inbounds %"class.glslang::TParseVersions", ptr %95, i32 0, i32 4
  %97 = load i32, ptr %96, align 8, !tbaa !72
  %98 = load ptr, ptr %7, align 8, !tbaa !5
  %99 = getelementptr inbounds %"class.glslang::TPpToken", ptr %98, i32 0, i32 3
  store i32 %97, ptr %99, align 8, !tbaa !16
  %100 = load ptr, ptr %7, align 8, !tbaa !5
  %101 = getelementptr inbounds %"class.glslang::TPpToken", ptr %100, i32 0, i32 4
  %102 = getelementptr inbounds [1025 x i8], ptr %101, i64 0, i64 0
  %103 = load ptr, ptr %7, align 8, !tbaa !5
  %104 = getelementptr inbounds %"class.glslang::TPpToken", ptr %103, i32 0, i32 3
  %105 = load i32, ptr %104, align 8, !tbaa !16
  %106 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %102, i64 noundef 1025, ptr noundef @.str.72, i32 noundef %105) #8
  %107 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN7glslang10TPpContext10UngetTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %31, i32 noundef 152, ptr noundef %107)
  store i32 2, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %591

108:                                              ; preds = %4
  br label %109

109:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %110 = load i32, ptr %10, align 4, !tbaa !15
  %111 = icmp eq i32 %110, 0
  br i1 %111, label %112, label %113

112:                                              ; preds = %109
  br label %116

113:                                              ; preds = %109
  %114 = load i32, ptr %10, align 4, !tbaa !15
  %115 = call noundef ptr @_ZN7glslang10TPpContext14lookupMacroDefEi(ptr noundef nonnull align 8 dereferenceable(921) %31, i32 noundef %114)
  br label %116

116:                                              ; preds = %113, %112
  %117 = phi ptr [ null, %112 ], [ %115, %113 ]
  store ptr %117, ptr %13, align 8, !tbaa !5
  %118 = load ptr, ptr %13, align 8, !tbaa !5
  %119 = icmp ne ptr %118, null
  br i1 %119, label %120, label %129

120:                                              ; preds = %116
  %121 = load ptr, ptr %13, align 8, !tbaa !5
  %122 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %121, i32 0, i32 2
  %123 = load i8, ptr %122, align 8
  %124 = lshr i8 %123, 1
  %125 = and i8 %124, 1
  %126 = zext i8 %125 to i32
  %127 = icmp ne i32 %126, 0
  br i1 %127, label %128, label %129

128:                                              ; preds = %120
  store i32 0, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %589

129:                                              ; preds = %120, %116
  %130 = load ptr, ptr %13, align 8, !tbaa !5
  %131 = icmp eq ptr %130, null
  br i1 %131, label %140, label %132

132:                                              ; preds = %129
  %133 = load ptr, ptr %13, align 8, !tbaa !5
  %134 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %133, i32 0, i32 2
  %135 = load i8, ptr %134, align 8
  %136 = lshr i8 %135, 2
  %137 = and i8 %136, 1
  %138 = zext i8 %137 to i32
  %139 = icmp ne i32 %138, 0
  br i1 %139, label %140, label %144

140:                                              ; preds = %132, %129
  %141 = load i8, ptr %8, align 1, !tbaa !9, !range !90, !noundef !91
  %142 = trunc i8 %141 to i1
  br i1 %142, label %144, label %143

143:                                              ; preds = %140
  store i32 0, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %589

144:                                              ; preds = %140, %132
  %145 = load ptr, ptr %13, align 8, !tbaa !5
  %146 = icmp eq ptr %145, null
  br i1 %146, label %155, label %147

147:                                              ; preds = %144
  %148 = load ptr, ptr %13, align 8, !tbaa !5
  %149 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %148, i32 0, i32 2
  %150 = load i8, ptr %149, align 8
  %151 = lshr i8 %150, 2
  %152 = and i8 %151, 1
  %153 = zext i8 %152 to i32
  %154 = icmp ne i32 %153, 0
  br i1 %154, label %155, label %165

155:                                              ; preds = %147, %144
  %156 = load i8, ptr %8, align 1, !tbaa !9, !range !90, !noundef !91
  %157 = trunc i8 %156 to i1
  br i1 %157, label %158, label %165

158:                                              ; preds = %155
  %159 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 24) #9
  invoke void @_ZN7glslang10TPpContext10tZeroInputC2EPS0_(ptr noundef nonnull align 8 dereferenceable(24) %159, ptr noundef %31)
          to label %160 unwind label %161

160:                                              ; preds = %158
  call void @_ZN7glslang10TPpContext9pushInputEPNS0_6tInputE(ptr noundef nonnull align 8 dereferenceable(921) %31, ptr noundef %159)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %589

161:                                              ; preds = %158
  %162 = landingpad { ptr, i32 }
          cleanup
  %163 = extractvalue { ptr, i32 } %162, 0
  store ptr %163, ptr %14, align 8
  %164 = extractvalue { ptr, i32 } %162, 1
  store i32 %164, ptr %15, align 4
  call void @_ZdlPvm(ptr noundef %159, i64 noundef 24) #10
  br label %590

165:                                              ; preds = %155, %147
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %166 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 104) #9
  invoke void @_ZN7glslang10TPpContext11tMacroInputC2EPS0_(ptr noundef nonnull align 8 dereferenceable(98) %166, ptr noundef %31)
          to label %167 unwind label %189

167:                                              ; preds = %165
  store ptr %166, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #8
  %168 = load ptr, ptr %7, align 8, !tbaa !5
  %169 = getelementptr inbounds %"class.glslang::TPpToken", ptr %168, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %17, ptr align 8 %169, i64 24, i1 false), !tbaa.struct !92
  %170 = load ptr, ptr %13, align 8, !tbaa !5
  %171 = load ptr, ptr %16, align 8, !tbaa !5
  %172 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %171, i32 0, i32 1
  store ptr %170, ptr %172, align 8, !tbaa !93
  %173 = load ptr, ptr %13, align 8, !tbaa !5
  %174 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %173, i32 0, i32 2
  %175 = load i8, ptr %174, align 8
  %176 = and i8 %175, 1
  %177 = zext i8 %176 to i32
  %178 = icmp ne i32 %177, 0
  br i1 %178, label %179, label %578

179:                                              ; preds = %167
  call void @llvm.lifetime.start.p0(i64 1072, ptr %18) #8
  call void @_ZN7glslang8TPpTokenC2Ev(ptr noundef nonnull align 8 dereferenceable(1065) %18)
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  %180 = call noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %31, ptr noundef %18)
  store i32 %180, ptr %19, align 4, !tbaa !15
  %181 = load i8, ptr %9, align 1, !tbaa !9, !range !90, !noundef !91
  %182 = trunc i8 %181 to i1
  br i1 %182, label %183, label %194

183:                                              ; preds = %179
  br label %184

184:                                              ; preds = %187, %183
  %185 = load i32, ptr %19, align 4, !tbaa !15
  %186 = icmp eq i32 %185, 10
  br i1 %186, label %187, label %193

187:                                              ; preds = %184
  %188 = call noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %31, ptr noundef %18)
  store i32 %188, ptr %19, align 4, !tbaa !15
  br label %184, !llvm.loop !102

189:                                              ; preds = %165
  %190 = landingpad { ptr, i32 }
          cleanup
  %191 = extractvalue { ptr, i32 } %190, 0
  store ptr %191, ptr %14, align 8
  %192 = extractvalue { ptr, i32 } %190, 1
  store i32 %192, ptr %15, align 4
  call void @_ZdlPvm(ptr noundef %166, i64 noundef 104) #10
  br label %588

193:                                              ; preds = %184
  br label %194

194:                                              ; preds = %193, %179
  %195 = load i32, ptr %19, align 4, !tbaa !15
  %196 = icmp ne i32 %195, 40
  br i1 %196, label %197, label %206

197:                                              ; preds = %194
  %198 = load i32, ptr %19, align 4, !tbaa !15
  call void @_ZN7glslang10TPpContext10UngetTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %31, i32 noundef %198, ptr noundef %18)
  %199 = load ptr, ptr %16, align 8, !tbaa !5
  %200 = icmp eq ptr %199, null
  br i1 %200, label %205, label %201

201:                                              ; preds = %197
  %202 = load ptr, ptr %199, align 8, !tbaa !69
  %203 = getelementptr inbounds ptr, ptr %202, i64 1
  %204 = load ptr, ptr %203, align 8
  call void %204(ptr noundef nonnull align 8 dereferenceable(98) %199) #8
  br label %205

205:                                              ; preds = %201, %197
  store i32 0, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %574

206:                                              ; preds = %194
  %207 = load ptr, ptr %16, align 8, !tbaa !5
  %208 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %207, i32 0, i32 2
  %209 = load ptr, ptr %16, align 8, !tbaa !5
  %210 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %209, i32 0, i32 1
  %211 = load ptr, ptr %210, align 8, !tbaa !93
  %212 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %211, i32 0, i32 0
  %213 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %212) #8
  call void @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32) %208, i64 noundef %213)
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  store i64 0, ptr %20, align 8, !tbaa !104
  br label %214

214:                                              ; preds = %230, %206
  %215 = load i64, ptr %20, align 8, !tbaa !104
  %216 = load ptr, ptr %16, align 8, !tbaa !5
  %217 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %216, i32 0, i32 1
  %218 = load ptr, ptr %217, align 8, !tbaa !93
  %219 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %218, i32 0, i32 0
  %220 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %219) #8
  %221 = icmp ult i64 %215, %220
  br i1 %221, label %223, label %222

222:                                              ; preds = %214
  store i32 5, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %237

223:                                              ; preds = %214
  %224 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 40) #9
  invoke void @_ZN7glslang10TPpContext11TokenStreamC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %224)
          to label %225 unwind label %233

225:                                              ; preds = %223
  %226 = load ptr, ptr %16, align 8, !tbaa !5
  %227 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %226, i32 0, i32 2
  %228 = load i64, ptr %20, align 8, !tbaa !104
  %229 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %227, i64 noundef %228) #8
  store ptr %224, ptr %229, align 8, !tbaa !5
  br label %230

230:                                              ; preds = %225
  %231 = load i64, ptr %20, align 8, !tbaa !104
  %232 = add i64 %231, 1
  store i64 %232, ptr %20, align 8, !tbaa !104
  br label %214, !llvm.loop !105

233:                                              ; preds = %223
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %14, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %15, align 4
  call void @_ZdlPvm(ptr noundef %224, i64 noundef 40) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %577

237:                                              ; preds = %222
  %238 = load ptr, ptr %16, align 8, !tbaa !5
  %239 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %238, i32 0, i32 3
  %240 = load ptr, ptr %16, align 8, !tbaa !5
  %241 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %240, i32 0, i32 1
  %242 = load ptr, ptr %241, align 8, !tbaa !93
  %243 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %242, i32 0, i32 0
  %244 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %243) #8
  call void @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32) %239, i64 noundef %244)
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  store i64 0, ptr %21, align 8, !tbaa !104
  br label %245

245:                                              ; preds = %259, %237
  %246 = load i64, ptr %21, align 8, !tbaa !104
  %247 = load ptr, ptr %16, align 8, !tbaa !5
  %248 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %247, i32 0, i32 1
  %249 = load ptr, ptr %248, align 8, !tbaa !93
  %250 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %249, i32 0, i32 0
  %251 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %250) #8
  %252 = icmp ult i64 %246, %251
  br i1 %252, label %254, label %253

253:                                              ; preds = %245
  store i32 8, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %262

254:                                              ; preds = %245
  %255 = load ptr, ptr %16, align 8, !tbaa !5
  %256 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %255, i32 0, i32 3
  %257 = load i64, ptr %21, align 8, !tbaa !104
  %258 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %256, i64 noundef %257) #8
  store ptr null, ptr %258, align 8, !tbaa !5
  br label %259

259:                                              ; preds = %254
  %260 = load i64, ptr %21, align 8, !tbaa !104
  %261 = add i64 %260, 1
  store i64 %261, ptr %21, align 8, !tbaa !104
  br label %245, !llvm.loop !106

262:                                              ; preds = %253
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  store i64 0, ptr %22, align 8, !tbaa !104
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #8
  store i8 0, ptr %23, align 1, !tbaa !9
  br label %263

263:                                              ; preds = %449, %262
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #8
  call void @_ZN7glslang7TVectorIcEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24)
  br label %264

264:                                              ; preds = %425, %320, %263
  br label %265

265:                                              ; preds = %264
  %266 = load ptr, ptr %7, align 8, !tbaa !5
  %267 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %31, ptr noundef %266)
          to label %268 unwind label %292

268:                                              ; preds = %265
  store i32 %267, ptr %19, align 4, !tbaa !15
  %269 = load i32, ptr %19, align 4, !tbaa !15
  %270 = icmp eq i32 %269, -1
  br i1 %270, label %274, label %271

271:                                              ; preds = %268
  %272 = load i32, ptr %19, align 4, !tbaa !15
  %273 = icmp eq i32 %272, -3
  br i1 %273, label %274, label %296

274:                                              ; preds = %271, %268
  %275 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 12
  %276 = load ptr, ptr %275, align 8, !tbaa !17
  %277 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 2
  %278 = load i32, ptr %10, align 4, !tbaa !15
  %279 = invoke noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %277, i32 noundef %278)
          to label %280 unwind label %292

280:                                              ; preds = %274
  %281 = load ptr, ptr %276, align 8, !tbaa !69
  %282 = getelementptr inbounds ptr, ptr %281, i64 44
  %283 = load ptr, ptr %282, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %283(ptr noundef nonnull align 8 dereferenceable(1176) %276, ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef @.str.74, ptr noundef @.str.75, ptr noundef %279)
          to label %284 unwind label %292

284:                                              ; preds = %280
  %285 = load ptr, ptr %16, align 8, !tbaa !5
  %286 = icmp eq ptr %285, null
  br i1 %286, label %291, label %287

287:                                              ; preds = %284
  %288 = load ptr, ptr %285, align 8, !tbaa !69
  %289 = getelementptr inbounds ptr, ptr %288, i64 1
  %290 = load ptr, ptr %289, align 8
  call void %290(ptr noundef nonnull align 8 dereferenceable(98) %285) #8
  br label %291

291:                                              ; preds = %287, %284
  store i32 1, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %446

292:                                              ; preds = %417, %408, %400, %377, %332, %324, %308, %302, %280, %274, %265
  %293 = landingpad { ptr, i32 }
          cleanup
  %294 = extractvalue { ptr, i32 } %293, 0
  store ptr %294, ptr %14, align 8
  %295 = extractvalue { ptr, i32 } %293, 1
  store i32 %295, ptr %15, align 4
  br label %474

296:                                              ; preds = %271
  %297 = load i32, ptr %19, align 4, !tbaa !15
  %298 = icmp eq i32 %297, 10
  br i1 %298, label %299, label %321

299:                                              ; preds = %296
  %300 = load i8, ptr %9, align 1, !tbaa !9, !range !90, !noundef !91
  %301 = trunc i8 %300 to i1
  br i1 %301, label %320, label %302

302:                                              ; preds = %299
  %303 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 12
  %304 = load ptr, ptr %303, align 8, !tbaa !17
  %305 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 2
  %306 = load i32, ptr %10, align 4, !tbaa !15
  %307 = invoke noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %305, i32 noundef %306)
          to label %308 unwind label %292

308:                                              ; preds = %302
  %309 = load ptr, ptr %304, align 8, !tbaa !69
  %310 = getelementptr inbounds ptr, ptr %309, i64 44
  %311 = load ptr, ptr %310, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %311(ptr noundef nonnull align 8 dereferenceable(1176) %304, ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef @.str.76, ptr noundef @.str.75, ptr noundef %307)
          to label %312 unwind label %292

312:                                              ; preds = %308
  %313 = load ptr, ptr %16, align 8, !tbaa !5
  %314 = icmp eq ptr %313, null
  br i1 %314, label %319, label %315

315:                                              ; preds = %312
  %316 = load ptr, ptr %313, align 8, !tbaa !69
  %317 = getelementptr inbounds ptr, ptr %316, i64 1
  %318 = load ptr, ptr %317, align 8
  call void %318(ptr noundef nonnull align 8 dereferenceable(98) %313) #8
  br label %319

319:                                              ; preds = %315, %312
  store i32 1, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %446

320:                                              ; preds = %299
  br label %264, !llvm.loop !107

321:                                              ; preds = %296
  %322 = load i32, ptr %19, align 4, !tbaa !15
  %323 = icmp eq i32 %322, 35
  br i1 %323, label %324, label %344

324:                                              ; preds = %321
  %325 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 12
  %326 = load ptr, ptr %325, align 8, !tbaa !17
  %327 = load ptr, ptr %7, align 8, !tbaa !5
  %328 = getelementptr inbounds %"class.glslang::TPpToken", ptr %327, i32 0, i32 0
  %329 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 2
  %330 = load i32, ptr %10, align 4, !tbaa !15
  %331 = invoke noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %329, i32 noundef %330)
          to label %332 unwind label %292

332:                                              ; preds = %324
  %333 = load ptr, ptr %326, align 8, !tbaa !69
  %334 = getelementptr inbounds ptr, ptr %333, i64 44
  %335 = load ptr, ptr %334, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %335(ptr noundef nonnull align 8 dereferenceable(1176) %326, ptr noundef nonnull align 8 dereferenceable(24) %328, ptr noundef @.str.77, ptr noundef @.str.75, ptr noundef %331)
          to label %336 unwind label %292

336:                                              ; preds = %332
  %337 = load ptr, ptr %16, align 8, !tbaa !5
  %338 = icmp eq ptr %337, null
  br i1 %338, label %343, label %339

339:                                              ; preds = %336
  %340 = load ptr, ptr %337, align 8, !tbaa !69
  %341 = getelementptr inbounds ptr, ptr %340, i64 1
  %342 = load ptr, ptr %341, align 8
  call void %342(ptr noundef nonnull align 8 dereferenceable(98) %337) #8
  br label %343

343:                                              ; preds = %339, %336
  store i32 1, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %446

344:                                              ; preds = %321
  %345 = load ptr, ptr %16, align 8, !tbaa !5
  %346 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %345, i32 0, i32 1
  %347 = load ptr, ptr %346, align 8, !tbaa !93
  %348 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %347, i32 0, i32 0
  %349 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %348) #8
  %350 = icmp eq i64 %349, 0
  br i1 %350, label %351, label %355

351:                                              ; preds = %344
  %352 = load i32, ptr %19, align 4, !tbaa !15
  %353 = icmp ne i32 %352, 41
  br i1 %353, label %354, label %355

354:                                              ; preds = %351
  br label %426

355:                                              ; preds = %351, %344
  %356 = call noundef i64 @_ZNKSt6vectorIcN7glslang14pool_allocatorIcEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  %357 = icmp eq i64 %356, 0
  br i1 %357, label %358, label %365

358:                                              ; preds = %355
  %359 = load i32, ptr %19, align 4, !tbaa !15
  %360 = icmp eq i32 %359, 44
  br i1 %360, label %364, label %361

361:                                              ; preds = %358
  %362 = load i32, ptr %19, align 4, !tbaa !15
  %363 = icmp eq i32 %362, 41
  br i1 %363, label %364, label %365

364:                                              ; preds = %361, %358
  br label %426

365:                                              ; preds = %361, %355
  %366 = load i32, ptr %19, align 4, !tbaa !15
  %367 = icmp eq i32 %366, 40
  br i1 %367, label %368, label %374

368:                                              ; preds = %365
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #8
  store i8 41, ptr %25, align 1, !tbaa !16
  invoke void @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEE9push_backEOc(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %369 unwind label %370

369:                                              ; preds = %368
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #8
  br label %400

370:                                              ; preds = %368
  %371 = landingpad { ptr, i32 }
          cleanup
  %372 = extractvalue { ptr, i32 } %371, 0
  store ptr %372, ptr %14, align 8
  %373 = extractvalue { ptr, i32 } %371, 1
  store i32 %373, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #8
  br label %474

374:                                              ; preds = %365
  %375 = load i32, ptr %19, align 4, !tbaa !15
  %376 = icmp eq i32 %375, 123
  br i1 %376, label %377, label %388

377:                                              ; preds = %374
  %378 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 12
  %379 = load ptr, ptr %378, align 8, !tbaa !17
  %380 = invoke noundef zeroext i1 @_ZNK7glslang14TParseVersions13isReadingHLSLEv(ptr noundef nonnull align 8 dereferenceable(192) %379)
          to label %381 unwind label %292

381:                                              ; preds = %377
  br i1 %380, label %382, label %388

382:                                              ; preds = %381
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #8
  store i8 125, ptr %26, align 1, !tbaa !16
  invoke void @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEE9push_backEOc(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 1 dereferenceable(1) %26)
          to label %383 unwind label %384

383:                                              ; preds = %382
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #8
  br label %399

384:                                              ; preds = %382
  %385 = landingpad { ptr, i32 }
          cleanup
  %386 = extractvalue { ptr, i32 } %385, 0
  store ptr %386, ptr %14, align 8
  %387 = extractvalue { ptr, i32 } %385, 1
  store i32 %387, ptr %15, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #8
  br label %474

388:                                              ; preds = %381, %374
  %389 = call noundef i64 @_ZNKSt6vectorIcN7glslang14pool_allocatorIcEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  %390 = icmp ugt i64 %389, 0
  br i1 %390, label %391, label %398

391:                                              ; preds = %388
  %392 = load i32, ptr %19, align 4, !tbaa !15
  %393 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEE4backEv(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  %394 = load i8, ptr %393, align 1, !tbaa !16
  %395 = sext i8 %394 to i32
  %396 = icmp eq i32 %392, %395
  br i1 %396, label %397, label %398

397:                                              ; preds = %391
  call void @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  br label %398

398:                                              ; preds = %397, %391, %388
  br label %399

399:                                              ; preds = %398, %383
  br label %400

400:                                              ; preds = %399, %369
  %401 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 2
  %402 = load ptr, ptr %7, align 8, !tbaa !5
  %403 = getelementptr inbounds %"class.glslang::TPpToken", ptr %402, i32 0, i32 4
  %404 = getelementptr inbounds [1025 x i8], ptr %403, i64 0, i64 0
  %405 = invoke noundef i32 @_ZNK7glslang14TStringAtomMap7getAtomEPKc(ptr noundef nonnull align 8 dereferenceable(144) %401, ptr noundef %404)
          to label %406 unwind label %292

406:                                              ; preds = %400
  %407 = icmp eq i32 %405, 179
  br i1 %407, label %408, label %417

408:                                              ; preds = %406
  %409 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 12
  %410 = load ptr, ptr %409, align 8, !tbaa !17
  %411 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7glslang14TParseVersions13getCurrentLocEv(ptr noundef nonnull align 8 dereferenceable(192) %410)
          to label %412 unwind label %292

412:                                              ; preds = %408
  %413 = getelementptr inbounds %"struct.glslang::TSourceLoc", ptr %411, i32 0, i32 2
  %414 = load i32, ptr %413, align 4, !tbaa !67
  %415 = load ptr, ptr %7, align 8, !tbaa !5
  %416 = getelementptr inbounds %"class.glslang::TPpToken", ptr %415, i32 0, i32 3
  store i32 %414, ptr %416, align 8, !tbaa !16
  br label %417

417:                                              ; preds = %412, %406
  %418 = load ptr, ptr %16, align 8, !tbaa !5
  %419 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %418, i32 0, i32 2
  %420 = load i64, ptr %22, align 8, !tbaa !104
  %421 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %419, i64 noundef %420) #8
  %422 = load ptr, ptr %421, align 8, !tbaa !5
  %423 = load i32, ptr %19, align 4, !tbaa !15
  %424 = load ptr, ptr %7, align 8, !tbaa !5
  invoke void @_ZN7glslang10TPpContext11TokenStream8putTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40) %422, i32 noundef %423, ptr noundef %424)
          to label %425 unwind label %292

425:                                              ; preds = %417
  store i8 1, ptr %23, align 1, !tbaa !9
  br label %264, !llvm.loop !107

426:                                              ; preds = %364, %354
  %427 = load i32, ptr %19, align 4, !tbaa !15
  %428 = icmp eq i32 %427, 41
  br i1 %428, label %429, label %443

429:                                              ; preds = %426
  %430 = load ptr, ptr %16, align 8, !tbaa !5
  %431 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %430, i32 0, i32 1
  %432 = load ptr, ptr %431, align 8, !tbaa !93
  %433 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %432, i32 0, i32 0
  %434 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %433) #8
  %435 = icmp eq i64 %434, 1
  br i1 %435, label %436, label %440

436:                                              ; preds = %429
  %437 = load i8, ptr %23, align 1, !tbaa !9, !range !90, !noundef !91
  %438 = trunc i8 %437 to i1
  br i1 %438, label %440, label %439

439:                                              ; preds = %436
  store i32 11, ptr %11, align 4
  br label %446

440:                                              ; preds = %436, %429
  %441 = load i64, ptr %22, align 8, !tbaa !104
  %442 = add i64 %441, 1
  store i64 %442, ptr %22, align 8, !tbaa !104
  store i32 11, ptr %11, align 4
  br label %446

443:                                              ; preds = %426
  %444 = load i64, ptr %22, align 8, !tbaa !104
  %445 = add i64 %444, 1
  store i64 %445, ptr %22, align 8, !tbaa !104
  store i32 0, ptr %11, align 4
  br label %446

446:                                              ; preds = %443, %440, %439, %343, %319, %291
  call void @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  %447 = load i32, ptr %11, align 4
  switch i32 %447, label %573 [
    i32 0, label %448
    i32 11, label %457
  ]

448:                                              ; preds = %446
  br label %449

449:                                              ; preds = %448
  %450 = load i64, ptr %22, align 8, !tbaa !104
  %451 = load ptr, ptr %16, align 8, !tbaa !5
  %452 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %451, i32 0, i32 1
  %453 = load ptr, ptr %452, align 8, !tbaa !93
  %454 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %453, i32 0, i32 0
  %455 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %454) #8
  %456 = icmp ult i64 %450, %455
  br i1 %456, label %263, label %457, !llvm.loop !108

457:                                              ; preds = %449, %446
  %458 = load i64, ptr %22, align 8, !tbaa !104
  %459 = load ptr, ptr %16, align 8, !tbaa !5
  %460 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %459, i32 0, i32 1
  %461 = load ptr, ptr %460, align 8, !tbaa !93
  %462 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %461, i32 0, i32 0
  %463 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %462) #8
  %464 = icmp ult i64 %458, %463
  br i1 %464, label %465, label %475

465:                                              ; preds = %457
  %466 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 12
  %467 = load ptr, ptr %466, align 8, !tbaa !17
  %468 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 2
  %469 = load i32, ptr %10, align 4, !tbaa !15
  %470 = call noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %468, i32 noundef %469)
  %471 = load ptr, ptr %467, align 8, !tbaa !69
  %472 = getelementptr inbounds ptr, ptr %471, i64 44
  %473 = load ptr, ptr %472, align 8
  call void (ptr, ptr, ptr, ptr, ptr, ...) %473(ptr noundef nonnull align 8 dereferenceable(1176) %467, ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef @.str.78, ptr noundef @.str.75, ptr noundef %470)
  br label %545

474:                                              ; preds = %384, %370, %292
  call void @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %577

475:                                              ; preds = %457
  %476 = load i32, ptr %19, align 4, !tbaa !15
  %477 = icmp ne i32 %476, 41
  br i1 %477, label %478, label %544

478:                                              ; preds = %475
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  store i32 0, ptr %27, align 4, !tbaa !15
  br label %479

479:                                              ; preds = %512, %478
  %480 = load i32, ptr %19, align 4, !tbaa !15
  %481 = icmp ne i32 %480, -1
  br i1 %481, label %482, label %490

482:                                              ; preds = %479
  %483 = load i32, ptr %27, align 4, !tbaa !15
  %484 = icmp sgt i32 %483, 0
  br i1 %484, label %488, label %485

485:                                              ; preds = %482
  %486 = load i32, ptr %19, align 4, !tbaa !15
  %487 = icmp ne i32 %486, 41
  br label %488

488:                                              ; preds = %485, %482
  %489 = phi i1 [ true, %482 ], [ %487, %485 ]
  br label %490

490:                                              ; preds = %488, %479
  %491 = phi i1 [ false, %479 ], [ %489, %488 ]
  br i1 %491, label %492, label %513

492:                                              ; preds = %490
  %493 = load i32, ptr %19, align 4, !tbaa !15
  %494 = icmp eq i32 %493, 41
  br i1 %494, label %498, label %495

495:                                              ; preds = %492
  %496 = load i32, ptr %19, align 4, !tbaa !15
  %497 = icmp eq i32 %496, 125
  br i1 %497, label %498, label %501

498:                                              ; preds = %495, %492
  %499 = load i32, ptr %27, align 4, !tbaa !15
  %500 = add nsw i32 %499, -1
  store i32 %500, ptr %27, align 4, !tbaa !15
  br label %501

501:                                              ; preds = %498, %495
  %502 = load ptr, ptr %7, align 8, !tbaa !5
  %503 = call noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %31, ptr noundef %502)
  store i32 %503, ptr %19, align 4, !tbaa !15
  %504 = load i32, ptr %19, align 4, !tbaa !15
  %505 = icmp eq i32 %504, 40
  br i1 %505, label %509, label %506

506:                                              ; preds = %501
  %507 = load i32, ptr %19, align 4, !tbaa !15
  %508 = icmp eq i32 %507, 123
  br i1 %508, label %509, label %512

509:                                              ; preds = %506, %501
  %510 = load i32, ptr %27, align 4, !tbaa !15
  %511 = add nsw i32 %510, 1
  store i32 %511, ptr %27, align 4, !tbaa !15
  br label %512

512:                                              ; preds = %509, %506
  br label %479, !llvm.loop !109

513:                                              ; preds = %490
  %514 = load i32, ptr %19, align 4, !tbaa !15
  %515 = icmp eq i32 %514, -1
  br i1 %515, label %516, label %532

516:                                              ; preds = %513
  %517 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 12
  %518 = load ptr, ptr %517, align 8, !tbaa !17
  %519 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 2
  %520 = load i32, ptr %10, align 4, !tbaa !15
  %521 = call noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %519, i32 noundef %520)
  %522 = load ptr, ptr %518, align 8, !tbaa !69
  %523 = getelementptr inbounds ptr, ptr %522, i64 44
  %524 = load ptr, ptr %523, align 8
  call void (ptr, ptr, ptr, ptr, ptr, ...) %524(ptr noundef nonnull align 8 dereferenceable(1176) %518, ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef @.str.74, ptr noundef @.str.75, ptr noundef %521)
  %525 = load ptr, ptr %16, align 8, !tbaa !5
  %526 = icmp eq ptr %525, null
  br i1 %526, label %531, label %527

527:                                              ; preds = %516
  %528 = load ptr, ptr %525, align 8, !tbaa !69
  %529 = getelementptr inbounds ptr, ptr %528, i64 1
  %530 = load ptr, ptr %529, align 8
  call void %530(ptr noundef nonnull align 8 dereferenceable(98) %525) #8
  br label %531

531:                                              ; preds = %527, %516
  store i32 1, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %541

532:                                              ; preds = %513
  %533 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 12
  %534 = load ptr, ptr %533, align 8, !tbaa !17
  %535 = getelementptr inbounds %"class.glslang::TPpContext", ptr %31, i32 0, i32 2
  %536 = load i32, ptr %10, align 4, !tbaa !15
  %537 = call noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %535, i32 noundef %536)
  %538 = load ptr, ptr %534, align 8, !tbaa !69
  %539 = getelementptr inbounds ptr, ptr %538, i64 44
  %540 = load ptr, ptr %539, align 8
  call void (ptr, ptr, ptr, ptr, ptr, ...) %540(ptr noundef nonnull align 8 dereferenceable(1176) %534, ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef @.str.79, ptr noundef @.str.75, ptr noundef %537)
  store i32 0, ptr %11, align 4
  br label %541

541:                                              ; preds = %532, %531
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  %542 = load i32, ptr %11, align 4
  switch i32 %542, label %573 [
    i32 0, label %543
  ]

543:                                              ; preds = %541
  br label %544

544:                                              ; preds = %543, %475
  br label %545

545:                                              ; preds = %544, %465
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  store i64 0, ptr %28, align 8, !tbaa !104
  br label %546

546:                                              ; preds = %569, %545
  %547 = load i64, ptr %28, align 8, !tbaa !104
  %548 = load ptr, ptr %16, align 8, !tbaa !5
  %549 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %548, i32 0, i32 1
  %550 = load ptr, ptr %549, align 8, !tbaa !93
  %551 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %550, i32 0, i32 0
  %552 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %551) #8
  %553 = icmp ult i64 %547, %552
  br i1 %553, label %555, label %554

554:                                              ; preds = %546
  store i32 17, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %572

555:                                              ; preds = %546
  %556 = load ptr, ptr %16, align 8, !tbaa !5
  %557 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %556, i32 0, i32 2
  %558 = load i64, ptr %28, align 8, !tbaa !104
  %559 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %557, i64 noundef %558) #8
  %560 = load ptr, ptr %559, align 8, !tbaa !5
  %561 = load ptr, ptr %7, align 8, !tbaa !5
  %562 = load i8, ptr %9, align 1, !tbaa !9, !range !90, !noundef !91
  %563 = trunc i8 %562 to i1
  %564 = call noundef ptr @_ZN7glslang10TPpContext15PrescanMacroArgERNS0_11TokenStreamEPNS_8TPpTokenEb(ptr noundef nonnull align 8 dereferenceable(921) %31, ptr noundef nonnull align 8 dereferenceable(40) %560, ptr noundef %561, i1 noundef zeroext %563)
  %565 = load ptr, ptr %16, align 8, !tbaa !5
  %566 = getelementptr inbounds %"class.glslang::TPpContext::tMacroInput", ptr %565, i32 0, i32 3
  %567 = load i64, ptr %28, align 8, !tbaa !104
  %568 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %566, i64 noundef %567) #8
  store ptr %564, ptr %568, align 8, !tbaa !5
  br label %569

569:                                              ; preds = %555
  %570 = load i64, ptr %28, align 8, !tbaa !104
  %571 = add i64 %570, 1
  store i64 %571, ptr %28, align 8, !tbaa !104
  br label %546, !llvm.loop !110

572:                                              ; preds = %554
  store i32 0, ptr %11, align 4
  br label %573

573:                                              ; preds = %572, %541, %446
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %574

574:                                              ; preds = %573, %205
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 1072, ptr %18) #8
  %575 = load i32, ptr %11, align 4
  switch i32 %575, label %587 [
    i32 0, label %576
  ]

576:                                              ; preds = %574
  br label %578

577:                                              ; preds = %474, %233
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 1072, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #8
  br label %588

578:                                              ; preds = %576, %167
  %579 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN7glslang10TPpContext9pushInputEPNS0_6tInputE(ptr noundef nonnull align 8 dereferenceable(921) %31, ptr noundef %579)
  %580 = load ptr, ptr %13, align 8, !tbaa !5
  %581 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %580, i32 0, i32 2
  %582 = load i8, ptr %581, align 8
  %583 = and i8 %582, -3
  %584 = or i8 %583, 2
  store i8 %584, ptr %581, align 8
  %585 = load ptr, ptr %13, align 8, !tbaa !5
  %586 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %585, i32 0, i32 1
  call void @_ZN7glslang10TPpContext11TokenStream5resetEv(ptr noundef nonnull align 8 dereferenceable(40) %586)
  store i32 2, ptr %5, align 4
  store i32 1, ptr %11, align 4
  br label %587

587:                                              ; preds = %578, %574
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  br label %589

588:                                              ; preds = %577, %189
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  br label %590

589:                                              ; preds = %587, %160, %143, %128
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  br label %591

590:                                              ; preds = %588, %161
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  br label %593

591:                                              ; preds = %589, %93, %77, %53
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  %592 = load i32, ptr %5, align 4
  ret i32 %592

593:                                              ; preds = %590
  %594 = load ptr, ptr %14, align 8
  %595 = load i32, ptr %15, align 4
  %596 = insertvalue { ptr, i32 } poison, ptr %594, 0
  %597 = insertvalue { ptr, i32 } %596, i32 %595, 1
  resume { ptr, i32 } %597
}

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

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

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

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #5

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #6

; Function Attrs: nounwind
declare i32 @snprintf(ptr noundef, i64 noundef, ptr noundef, ...) #7

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN7glslang10TPpContext15PrescanMacroArgERNS0_11TokenStreamEPNS_8TPpTokenEb(ptr noundef nonnull align 8 dereferenceable(921), ptr noundef nonnull align 8 dereferenceable(40), ptr noundef, i1 noundef zeroext) #1 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7glslang14TParseVersions13getCurrentLocEv(ptr noundef nonnull align 8 dereferenceable(192)) #1 align 2

declare void @_ZN7glslang10TPpContext10UngetTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921), i32 noundef, ptr noundef) #4

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIcN7glslang14pool_allocatorIcEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32)) #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEE4backEv(ptr noundef nonnull align 8 dereferenceable(32)) #3 align 2

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "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 = { nobuiltin allocsize(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 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind "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 = { builtin allocsize(0) }
attributes #10 = { builtin 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 = !{!"bool", !7, i64 0}
!11 = !{!12, !10, i64 24}
!12 = !{!"_ZTSN7glslang8TPpTokenE", !13, i64 0, !10, i64 24, !7, i64 32, !7, i64 40}
!13 = !{!"_ZTSN7glslang10TSourceLocE", !6, i64 0, !14, i64 8, !14, i64 12, !14, i64 16}
!14 = !{!"int", !7, i64 0}
!15 = !{!14, !14, i64 0}
!16 = !{!7, !7, i64 0}
!17 = !{!18, !6, i64 256}
!18 = !{!"_ZTSN7glslang10TPpContextE", !19, i64 8, !30, i64 64, !6, i64 208, !14, i64 216, !6, i64 224, !6, i64 232, !14, i64 240, !14, i64 244, !14, i64 248, !6, i64 256, !14, i64 264, !7, i64 268, !14, i64 336, !49, i64 344, !10, i64 368, !10, i64 369, !6, i64 376, !10, i64 384, !53, i64 392, !55, i64 424, !53, i64 504, !61, i64 536, !10, i64 920}
!19 = !{!"_ZTSN7glslang4TMapIiNS_10TPpContext11MacroSymbolESt4lessIiEEE", !20, i64 0}
!20 = !{!"_ZTSSt3mapIiN7glslang10TPpContext11MacroSymbolESt4lessIiENS0_14pool_allocatorISt4pairIKiS2_EEEE", !21, i64 0}
!21 = !{!"_ZTSSt8_Rb_treeIiSt4pairIKiN7glslang10TPpContext11MacroSymbolEESt10_Select1stIS5_ESt4lessIiENS2_14pool_allocatorIS5_EEE", !22, i64 0}
!22 = !{!"_ZTSNSt8_Rb_treeIiSt4pairIKiN7glslang10TPpContext11MacroSymbolEESt10_Select1stIS5_ESt4lessIiENS2_14pool_allocatorIS5_EEE13_Rb_tree_implIS9_Lb1EEE", !23, i64 0, !24, i64 8, !26, i64 16}
!23 = !{!"_ZTSN7glslang14pool_allocatorISt13_Rb_tree_nodeISt4pairIKiNS_10TPpContext11MacroSymbolEEEEE", !6, i64 0}
!24 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIiEE", !25, i64 0}
!25 = !{!"_ZTSSt4lessIiE"}
!26 = !{!"_ZTSSt15_Rb_tree_header", !27, i64 0, !29, i64 32}
!27 = !{!"_ZTSSt18_Rb_tree_node_base", !28, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!28 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!29 = !{!"long", !7, i64 0}
!30 = !{!"_ZTSN7glslang14TStringAtomMapE", !31, i64 0, !40, i64 64, !14, i64 96, !46, i64 104}
!31 = !{!"_ZTSN7glslang13TUnorderedMapINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEEiSt4hashIS7_ESt8equal_toIS7_EEE", !32, i64 0}
!32 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEEiSt4hashIS7_ESt8equal_toIS7_ENS5_ISt4pairIKS7_iEEEE", !33, i64 0}
!33 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEESt4pairIKS7_iENS5_ISA_EENSt8__detail10_Select1stESt8equal_toIS7_ESt4hashIS7_ENSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb1ELb0ELb1EEEE", !34, i64 0, !6, i64 8, !29, i64 16, !37, i64 24, !29, i64 32, !38, i64 40, !6, i64 56}
!34 = !{!"_ZTSNSt8__detail16_Hashtable_allocIN7glslang14pool_allocatorINS_10_Hash_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS2_IcEEEEiELb1EEEEEEE", !35, i64 0}
!35 = !{!"_ZTSNSt8__detail21_Hashtable_ebo_helperILi0EN7glslang14pool_allocatorINS_10_Hash_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS2_IcEEEEiELb1EEEEELb0EEE", !36, i64 0}
!36 = !{!"_ZTSN7glslang14pool_allocatorINSt8__detail10_Hash_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_IcEEEEiELb1EEEEE", !6, i64 0}
!37 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!38 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !39, i64 0, !29, i64 8}
!39 = !{!"float", !7, i64 0}
!40 = !{!"_ZTSN7glslang7TVectorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEEEE", !41, i64 0}
!41 = !{!"_ZTSSt6vectorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE", !42, i64 0}
!42 = !{!"_ZTSSt12_Vector_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE12_Vector_implE", !44, i64 0, !45, i64 8}
!44 = !{!"_ZTSN7glslang14pool_allocatorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_IcEEEEEE", !6, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!46 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEE", !47, i64 0, !29, i64 16, !7, i64 24}
!47 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEE12_Alloc_hiderE", !48, i64 0, !6, i64 8}
!48 = !{!"_ZTSN7glslang14pool_allocatorIcEE", !6, i64 0}
!49 = !{!"_ZTSSt6vectorIPN7glslang10TPpContext6tInputESaIS3_EE", !50, i64 0}
!50 = !{!"_ZTSSt12_Vector_baseIPN7glslang10TPpContext6tInputESaIS3_EE", !51, i64 0}
!51 = !{!"_ZTSNSt12_Vector_baseIPN7glslang10TPpContext6tInputESaIS3_EE12_Vector_implE", !52, i64 0}
!52 = !{!"_ZTSNSt12_Vector_baseIPN7glslang10TPpContext6tInputESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!53 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !54, i64 0, !29, i64 8, !7, i64 16}
!54 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!55 = !{!"_ZTSSt5stackIPN7glslang7TShader8Includer13IncludeResultESt5dequeIS4_SaIS4_EEE", !56, i64 0}
!56 = !{!"_ZTSSt5dequeIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE", !57, i64 0}
!57 = !{!"_ZTSSt11_Deque_baseIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE", !58, i64 0}
!58 = !{!"_ZTSNSt11_Deque_baseIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE11_Deque_implE", !59, i64 0}
!59 = !{!"_ZTSNSt11_Deque_baseIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE16_Deque_impl_dataE", !6, i64 0, !29, i64 8, !60, i64 16, !60, i64 48}
!60 = !{!"_ZTSSt15_Deque_iteratorIPN7glslang7TShader8Includer13IncludeResultERS4_PS4_E", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!61 = !{!"_ZTSNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE", !62, i64 0, !63, i64 16}
!62 = !{!"_ZTSSi", !29, i64 8}
!63 = !{!"_ZTSNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE", !64, i64 0, !66, i64 64, !53, i64 72}
!64 = !{!"_ZTSSt15basic_streambufIcSt11char_traitsIcEE", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !65, i64 56}
!65 = !{!"_ZTSSt6locale", !6, i64 0}
!66 = !{!"_ZTSSt13_Ios_Openmode", !7, i64 0}
!67 = !{!13, !14, i64 12}
!68 = !{!13, !6, i64 0}
!69 = !{!70, !70, i64 0}
!70 = !{!"vtable pointer", !8, i64 0}
!71 = !{!13, !14, i64 8}
!72 = !{!73, !14, i64 24}
!73 = !{!"_ZTSN7glslang14TParseVersionsE", !10, i64 8, !74, i64 12, !6, i64 16, !14, i64 24, !75, i64 28, !76, i64 32, !6, i64 56, !77, i64 64, !84, i64 120, !89, i64 176, !14, i64 180, !6, i64 184}
!74 = !{!"_ZTS8EProfile", !7, i64 0}
!75 = !{!"_ZTS11EShLanguage", !7, i64 0}
!76 = !{!"_ZTSN7glslang10SpvVersionE", !14, i64 0, !14, i64 4, !14, i64 8, !14, i64 12, !10, i64 16}
!77 = !{!"_ZTSN7glslang4TMapINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEENS_18TExtensionBehaviorESt4lessIS7_EEE", !78, i64 0}
!78 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS4_18TExtensionBehaviorESt4lessIS7_ENS5_ISt4pairIKS7_S8_EEEE", !79, i64 0}
!79 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEESt4pairIKS7_NS4_18TExtensionBehaviorEESt10_Select1stISB_ESt4lessIS7_ENS5_ISB_EEE", !80, i64 0}
!80 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEESt4pairIKS7_NS4_18TExtensionBehaviorEESt10_Select1stISB_ESt4lessIS7_ENS5_ISB_EEE13_Rb_tree_implISF_Lb1EEE", !81, i64 0, !82, i64 8, !26, i64 16}
!81 = !{!"_ZTSN7glslang14pool_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_IcEEEENS_18TExtensionBehaviorEEEEE", !6, i64 0}
!82 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEEEE", !83, i64 0}
!83 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEEE"}
!84 = !{!"_ZTSN7glslang4TMapINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEEjSt4lessIS7_EEE", !85, i64 0}
!85 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEEjSt4lessIS7_ENS5_ISt4pairIKS7_jEEEE", !86, i64 0}
!86 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEESt4pairIKS7_jESt10_Select1stISA_ESt4lessIS7_ENS5_ISA_EEE", !87, i64 0}
!87 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEESt4pairIKS7_jESt10_Select1stISA_ESt4lessIS7_ENS5_ISA_EEE13_Rb_tree_implISE_Lb1EEE", !88, i64 0, !82, i64 8, !26, i64 16}
!88 = !{!"_ZTSN7glslang14pool_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_IcEEEEjEEEE", !6, i64 0}
!89 = !{!"_ZTS11EShMessages", !7, i64 0}
!90 = !{i8 0, i8 2}
!91 = !{}
!92 = !{i64 0, i64 8, !5, i64 8, i64 4, !15, i64 12, i64 4, !15, i64 16, i64 4, !15}
!93 = !{!94, !6, i64 24}
!94 = !{!"_ZTSN7glslang10TPpContext11tMacroInputE", !95, i64 0, !6, i64 24, !96, i64 32, !96, i64 64, !10, i64 96, !10, i64 97}
!95 = !{!"_ZTSN7glslang10TPpContext6tInputE", !10, i64 8, !6, i64 16}
!96 = !{!"_ZTSN7glslang7TVectorIPNS_10TPpContext11TokenStreamEEE", !97, i64 0}
!97 = !{!"_ZTSSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEE", !98, i64 0}
!98 = !{!"_ZTSSt12_Vector_baseIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEE", !99, i64 0}
!99 = !{!"_ZTSNSt12_Vector_baseIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEE12_Vector_implE", !100, i64 0, !101, i64 8}
!100 = !{!"_ZTSN7glslang14pool_allocatorIPNS_10TPpContext11TokenStreamEEE", !6, i64 0}
!101 = !{!"_ZTSNSt12_Vector_baseIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!102 = distinct !{!102, !103}
!103 = !{!"llvm.loop.mustprogress"}
!104 = !{!29, !29, i64 0}
!105 = distinct !{!105, !103}
!106 = distinct !{!106, !103}
!107 = distinct !{!107, !103}
!108 = distinct !{!108, !103}
!109 = distinct !{!109, !103}
!110 = distinct !{!110, !103}


; 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.15" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.19 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.19 = type { i64, [8 x i8] }
%"struct.glslang::TSourceLoc" = type { ptr, i32, i32, i32 }
%"class.glslang::TPpToken" = type <{ %"struct.glslang::TSourceLoc", i8, [7 x i8], %union.anon.63, [1025 x i8], [7 x i8] }>
%union.anon.63 = type { double }
%"class.glslang::TVector.175" = type { %"class.std::vector.176" }
%"class.std::vector.176" = type { %"struct.std::_Vector_base.177" }
%"struct.std::_Vector_base.177" = type { %"struct.std::_Vector_base<char, glslang::pool_allocator<char>>::_Vector_impl" }
%"struct.std::_Vector_base<char, glslang::pool_allocator<char>>::_Vector_impl" = type { %"class.glslang::pool_allocator.12", %"struct.std::_Vector_base<char, glslang::pool_allocator<char>>::_Vector_impl_data" }
%"class.glslang::pool_allocator.12" = type { ptr }
%"struct.std::_Vector_base<char, glslang::pool_allocator<char>>::_Vector_impl_data" = type { ptr, ptr, ptr }

@.str.39 = external hidden unnamed_addr constant [3 x i8], align 1
@_ZN7glslangL36E_GL_GOOGLE_cpp_style_line_directiveE = external hidden constant ptr, align 8
@.str.72 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.73 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.75 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [23 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 uwtable
declare dso_local noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921), ptr noundef) local_unnamed_addr #1 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3 align 2

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

declare void @_ZN7glslang10TPpContext11TokenStream8putTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef, ptr noundef) local_unnamed_addr #4

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144), i32 noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7glslang10TPpContext11TokenStream5resetEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #3 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK7glslang14TParseVersions13isReadingHLSLEv(ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7glslang10TPpContext11MacroExpandEPNS_8TPpTokenEbb(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef %1, i1 noundef zeroext %2, i1 noundef zeroext %3) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %5 = alloca %"class.std::__cxx11::basic_string.15", align 8
  %6 = alloca %"struct.glslang::TSourceLoc", align 8
  %7 = alloca %"class.glslang::TPpToken", align 8
  %8 = alloca %"class.glslang::TVector.175", align 8
  %9 = alloca i8, align 1
  %10 = alloca i8, align 1
  %11 = getelementptr inbounds i8, ptr %1, i64 24
  store i8 0, ptr %11, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %0, i64 64
  %13 = getelementptr inbounds i8, ptr %1, i64 40
  %14 = tail call noundef i32 @_ZNK7glslang14TStringAtomMap7getAtomEPKc(ptr noundef nonnull align 8 dereferenceable(144) %12, ptr noundef nonnull %13)
  switch i32 %14, label %53 [
    i32 179, label %15
    i32 180, label %28
    i32 181, label %46
    i32 0, label %.thread
  ]

15:                                               ; preds = %4
  %16 = getelementptr inbounds i8, ptr %1, i64 32
  %17 = load i32, ptr %16, align 8, !tbaa !13
  %18 = icmp eq i32 %17, 0
  br i1 %18, label %19, label %25

19:                                               ; preds = %15
  %20 = getelementptr inbounds i8, ptr %0, i64 256
  %21 = load ptr, ptr %20, align 8, !tbaa !14
  %22 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7glslang14TParseVersions13getCurrentLocEv(ptr noundef nonnull align 8 dereferenceable(192) %21)
  %23 = getelementptr inbounds i8, ptr %22, i64 12
  %24 = load i32, ptr %23, align 4, !tbaa !64
  store i32 %24, ptr %16, align 8, !tbaa !13
  br label %25

25:                                               ; preds = %19, %15
  %26 = phi i32 [ %24, %19 ], [ %17, %15 ]
  %27 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %13, i64 noundef 1025, ptr noundef nonnull @.str.72, i32 noundef %26) #8
  tail call void @_ZN7glslang10TPpContext10UngetTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, i32 noundef 152, ptr noundef nonnull %1)
  br label %221

28:                                               ; preds = %4
  %29 = getelementptr inbounds i8, ptr %0, i64 256
  %30 = load ptr, ptr %29, align 8, !tbaa !14
  %31 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7glslang14TParseVersions13getCurrentLocEv(ptr noundef nonnull align 8 dereferenceable(192) %30)
  %32 = load ptr, ptr %31, align 8, !tbaa !65
  %.not = icmp eq ptr %32, null
  br i1 %.not, label %38, label %33

33:                                               ; preds = %28
  %34 = load ptr, ptr %29, align 8, !tbaa !14
  %35 = load ptr, ptr %34, align 8, !tbaa !66
  %36 = getelementptr inbounds i8, ptr %35, i64 48
  %37 = load ptr, ptr %36, align 8
  tail call void %37(ptr noundef nonnull align 8 dereferenceable(192) %34, ptr noundef nonnull align 8 dereferenceable(24) %1, i32 noundef 1, ptr noundef nonnull @_ZN7glslangL36E_GL_GOOGLE_cpp_style_line_directiveE, ptr noundef nonnull @.str.73)
  br label %38

38:                                               ; preds = %33, %28
  %39 = load ptr, ptr %29, align 8, !tbaa !14
  %40 = tail call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7glslang14TParseVersions13getCurrentLocEv(ptr noundef nonnull align 8 dereferenceable(192) %39)
  %41 = getelementptr inbounds i8, ptr %40, i64 8
  %42 = load i32, ptr %41, align 8, !tbaa !68
  %43 = getelementptr inbounds i8, ptr %1, i64 32
  store i32 %42, ptr %43, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #8
  call void @_ZNK7glslang10TSourceLoc18getStringNameOrNumB5cxx11Eb(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string.15") align 8 %5, ptr noundef nonnull align 8 dereferenceable(24) %1, i1 noundef zeroext true)
  %44 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %5) #8
  %45 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %13, i64 noundef 1025, ptr noundef nonnull @.str.39, ptr noundef %44) #8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #8
  call void @_ZN7glslang10TPpContext10UngetTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, i32 noundef 152, ptr noundef nonnull %1)
  br label %221

46:                                               ; preds = %4
  %47 = getelementptr inbounds i8, ptr %0, i64 256
  %48 = load ptr, ptr %47, align 8, !tbaa !14
  %49 = getelementptr inbounds i8, ptr %48, i64 24
  %50 = load i32, ptr %49, align 8, !tbaa !69
  %51 = getelementptr inbounds i8, ptr %1, i64 32
  store i32 %50, ptr %51, align 8, !tbaa !13
  %52 = tail call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %13, i64 noundef 1025, ptr noundef nonnull @.str.72, i32 noundef %50) #8
  tail call void @_ZN7glslang10TPpContext10UngetTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, i32 noundef 152, ptr noundef nonnull %1)
  br label %221

53:                                               ; preds = %4
  %54 = tail call noundef ptr @_ZN7glslang10TPpContext14lookupMacroDefEi(ptr noundef nonnull align 8 dereferenceable(921) %0, i32 noundef %14)
  %.not161 = icmp eq ptr %54, null
  br i1 %.not161, label %.thread, label %55

55:                                               ; preds = %53
  %56 = getelementptr inbounds i8, ptr %54, i64 72
  %57 = load i8, ptr %56, align 8
  %58 = and i8 %57, 2
  %.not162 = icmp eq i8 %58, 0
  br i1 %.not162, label %59, label %221

59:                                               ; preds = %55
  %60 = and i8 %57, 4
  %.not163 = icmp eq i8 %60, 0
  %brmerge = or i1 %.not163, %2
  br i1 %brmerge, label %61, label %221

.thread:                                          ; preds = %4, %53
  br i1 %2, label %62, label %221

61:                                               ; preds = %59
  %.not164 = icmp ne i8 %60, 0
  %brmerge176.not = and i1 %.not164, %2
  br i1 %brmerge176.not, label %62, label %64

62:                                               ; preds = %.thread, %61
  %63 = tail call noalias noundef nonnull dereferenceable(24) ptr @_Znwm(i64 noundef 24) #9
  tail call void @_ZN7glslang10TPpContext10tZeroInputC2EPS0_(ptr noundef nonnull align 8 dereferenceable(24) %63, ptr noundef nonnull %0)
  tail call void @_ZN7glslang10TPpContext9pushInputEPNS0_6tInputE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef nonnull %63)
  br label %221

64:                                               ; preds = %61
  %65 = tail call noalias noundef nonnull dereferenceable(104) ptr @_Znwm(i64 noundef 104) #9
  invoke void @_ZN7glslang10TPpContext11tMacroInputC2EPS0_(ptr noundef nonnull align 8 dereferenceable(98) %65, ptr noundef nonnull %0)
          to label %66 unwind label %74

66:                                               ; preds = %64
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull align 8 dereferenceable(24) %1, i64 24, i1 false), !tbaa.struct !87
  %67 = getelementptr inbounds i8, ptr %65, i64 24
  store ptr %54, ptr %67, align 8, !tbaa !90
  %68 = load i8, ptr %56, align 8
  %69 = and i8 %68, 1
  %.not165 = icmp eq i8 %69, 0
  br i1 %.not165, label %215, label %70

70:                                               ; preds = %66
  call void @llvm.lifetime.start.p0(i64 1072, ptr nonnull %7) #8
  call void @_ZN7glslang8TPpTokenC2Ev(ptr noundef nonnull align 8 dereferenceable(1065) %7)
  %71 = call noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef nonnull %7)
  %72 = icmp eq i32 %71, 10
  %or.cond12 = and i1 %72, %3
  br i1 %or.cond12, label %.preheader208, label %.loopexit209

.preheader208:                                    ; preds = %70, %.preheader208
  %73 = call noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef nonnull %7)
  %.old11 = icmp eq i32 %73, 10
  br i1 %.old11, label %.preheader208, label %.loopexit209

74:                                               ; preds = %64
  %75 = landingpad { ptr, i32 }
          cleanup
  tail call void @_ZdlPvm(ptr noundef nonnull %65, i64 noundef 104) #10
  br label %220

.loopexit209:                                     ; preds = %.preheader208, %70
  %.0139 = phi i32 [ %71, %70 ], [ %73, %.preheader208 ]
  %.not166 = icmp eq i32 %.0139, 40
  br i1 %.not166, label %79, label %.thread195

.thread195:                                       ; preds = %.loopexit209
  call void @_ZN7glslang10TPpContext10UngetTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, i32 noundef %.0139, ptr noundef nonnull %7)
  %76 = load ptr, ptr %65, align 8, !tbaa !66
  %77 = getelementptr inbounds i8, ptr %76, i64 8
  %78 = load ptr, ptr %77, align 8
  call void %78(ptr noundef nonnull align 8 dereferenceable(98) %65) #8
  call void @llvm.lifetime.end.p0(i64 1072, ptr nonnull %7) #8
  br label %219

79:                                               ; preds = %.loopexit209
  %80 = getelementptr inbounds i8, ptr %65, i64 32
  %81 = load ptr, ptr %67, align 8, !tbaa !90
  %82 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %81) #8
  call void @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32) %80, i64 noundef %82)
  %83 = load ptr, ptr %67, align 8, !tbaa !90
  %84 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %83) #8
  %.not253 = icmp eq i64 %84, 0
  br i1 %.not253, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %91, %79
  %85 = getelementptr inbounds i8, ptr %65, i64 64
  %86 = load ptr, ptr %67, align 8, !tbaa !90
  %87 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %86) #8
  call void @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEE6resizeEm(ptr noundef nonnull align 8 dereferenceable(32) %85, i64 noundef %87)
  %88 = load ptr, ptr %67, align 8, !tbaa !90
  %89 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %88) #8
  %.not254 = icmp eq i64 %89, 0
  br i1 %.not254, label %.preheader206, label %.lr.ph239

.lr.ph:                                           ; preds = %79, %91
  %.0138236 = phi i64 [ %93, %91 ], [ 0, %79 ]
  %90 = call noalias noundef nonnull dereferenceable(40) ptr @_Znwm(i64 noundef 40) #9
  invoke void @_ZN7glslang10TPpContext11TokenStreamC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %90)
          to label %91 unwind label %97

91:                                               ; preds = %.lr.ph
  %92 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %80, i64 noundef %.0138236) #8
  store ptr %90, ptr %92, align 8, !tbaa !88
  %93 = add nuw i64 %.0138236, 1
  %94 = load ptr, ptr %67, align 8, !tbaa !90
  %95 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %94) #8
  %96 = icmp ult i64 %93, %95
  br i1 %96, label %.lr.ph, label %._crit_edge, !llvm.loop !99

97:                                               ; preds = %.lr.ph
  %98 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %90, i64 noundef 40) #10
  br label %214

.preheader206:                                    ; preds = %.lr.ph239, %._crit_edge
  %99 = getelementptr inbounds i8, ptr %0, i64 256
  %100 = getelementptr inbounds i8, ptr %1, i64 32
  br label %106

.lr.ph239:                                        ; preds = %._crit_edge, %.lr.ph239
  %.0137237 = phi i64 [ %102, %.lr.ph239 ], [ 0, %._crit_edge ]
  %101 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %85, i64 noundef %.0137237) #8
  store ptr null, ptr %101, align 8, !tbaa !88
  %102 = add nuw i64 %.0137237, 1
  %103 = load ptr, ptr %67, align 8, !tbaa !90
  %104 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %103) #8
  %105 = icmp ult i64 %102, %104
  br i1 %105, label %.lr.ph239, label %.preheader206, !llvm.loop !101

106:                                              ; preds = %.preheader206, %170
  %.0135 = phi i64 [ %171, %170 ], [ 0, %.preheader206 ]
  %.0133 = phi i1 [ %.1134.ph, %170 ], [ false, %.preheader206 ]
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #8
  call void @_ZN7glslang7TVectorIcEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8)
  br label %.outer

.outer:                                           ; preds = %160, %106
  %.1134.ph = phi i1 [ true, %160 ], [ %.0133, %106 ]
  br i1 %3, label %.outer.split.us, label %.outer.split, !llvm.loop !102

.outer.split.us:                                  ; preds = %.outer, %110
  %107 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef %1)
          to label %108 unwind label %.loopexit.loopexit.split.us

108:                                              ; preds = %.outer.split.us
  %109 = and i32 %107, -3
  %or.cond.us = icmp eq i32 %109, -3
  br i1 %or.cond.us, label %.split.us.invoke, label %110

110:                                              ; preds = %108
  switch i32 %107, label %.split241.us [
    i32 10, label %.outer.split.us
    i32 35, label %.split244.us
  ]

.loopexit.loopexit.split.us:                      ; preds = %.outer.split.us
  %lpad.loopexit203.us = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit

.outer.split:                                     ; preds = %.outer
  %111 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef %1)
          to label %112 unwind label %.loopexit.loopexit.split

112:                                              ; preds = %.outer.split
  %113 = and i32 %111, -3
  %or.cond = icmp eq i32 %113, -3
  br i1 %or.cond, label %.split.us.invoke, label %121

.split.us.invoke:                                 ; preds = %112, %121, %108, %.split244.us
  %114 = phi ptr [ %1, %.split244.us ], [ %6, %108 ], [ %6, %121 ], [ %6, %112 ]
  %115 = phi ptr [ @.str.77, %.split244.us ], [ @.str.74, %108 ], [ @.str.74, %112 ], [ @.str.76, %121 ]
  %116 = load ptr, ptr %99, align 8, !tbaa !14
  %117 = call noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %12, i32 noundef %14)
  %118 = load ptr, ptr %116, align 8, !tbaa !66
  %119 = getelementptr inbounds i8, ptr %118, i64 352
  %120 = load ptr, ptr %119, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %120(ptr noundef nonnull align 8 dereferenceable(1176) %116, ptr noundef nonnull align 8 dereferenceable(24) %114, ptr noundef nonnull %115, ptr noundef nonnull @.str.75, ptr noundef %117)
          to label %.thread186 unwind label %.loopexit.split-lp

.loopexit.loopexit.split:                         ; preds = %.outer.split
  %lpad.loopexit203 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit

.loopexit.loopexit.split-lp:                      ; preds = %160, %154, %150
  %lpad.loopexit.split-lp204 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit

.loopexit.split-lp:                               ; preds = %.split.us.invoke
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit

121:                                              ; preds = %112
  switch i32 %111, label %.split241.us [
    i32 10, label %.split.us.invoke
    i32 35, label %.split244.us
  ]

.split244.us:                                     ; preds = %121, %110
  br label %.split.us.invoke

.split241.us:                                     ; preds = %110, %121
  %.us-phi242 = phi i32 [ %111, %121 ], [ %107, %110 ]
  %122 = load ptr, ptr %67, align 8, !tbaa !90
  %123 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %122) #8
  %124 = icmp eq i64 %123, 0
  %125 = icmp ne i32 %.us-phi242, 41
  %or.cond4 = and i1 %125, %124
  br i1 %or.cond4, label %170, label %126

126:                                              ; preds = %.split241.us
  %127 = call noundef i64 @_ZNKSt6vectorIcN7glslang14pool_allocatorIcEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  %128 = icmp eq i64 %127, 0
  br i1 %128, label %129, label %130

129:                                              ; preds = %126
  switch i32 %.us-phi242, label %142 [
    i32 123, label %135
    i32 40, label %131
    i32 41, label %.thread190
    i32 44, label %170
  ]

130:                                              ; preds = %126
  switch i32 %.us-phi242, label %142 [
    i32 40, label %131
    i32 123, label %135
  ]

131:                                              ; preds = %129, %130
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %9) #8
  store i8 41, ptr %9, align 1, !tbaa !13
  invoke void @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEE9push_backEOc(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(1) %9)
          to label %132 unwind label %133

132:                                              ; preds = %131
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #8
  br label %150

133:                                              ; preds = %131
  %134 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %9) #8
  br label %.loopexit

135:                                              ; preds = %129, %130
  %136 = load ptr, ptr %99, align 8, !tbaa !14
  %137 = call noundef zeroext i1 @_ZNK7glslang14TParseVersions13isReadingHLSLEv(ptr noundef nonnull align 8 dereferenceable(192) %136)
  br i1 %137, label %138, label %142

138:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #8
  store i8 125, ptr %10, align 1, !tbaa !13
  invoke void @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEE9push_backEOc(ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %139 unwind label %140

139:                                              ; preds = %138
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #8
  br label %150

140:                                              ; preds = %138
  %141 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #8
  br label %.loopexit

142:                                              ; preds = %129, %130, %135
  %143 = call noundef i64 @_ZNKSt6vectorIcN7glslang14pool_allocatorIcEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  %.not167 = icmp eq i64 %143, 0
  br i1 %.not167, label %150, label %144

144:                                              ; preds = %142
  %145 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEE4backEv(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  %146 = load i8, ptr %145, align 1, !tbaa !13
  %147 = sext i8 %146 to i32
  %148 = icmp eq i32 %.us-phi242, %147
  br i1 %148, label %149, label %150

149:                                              ; preds = %144
  call void @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEE8pop_backEv(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  br label %150

150:                                              ; preds = %139, %149, %144, %142, %132
  %151 = invoke noundef i32 @_ZNK7glslang14TStringAtomMap7getAtomEPKc(ptr noundef nonnull align 8 dereferenceable(144) %12, ptr noundef nonnull %13)
          to label %152 unwind label %.loopexit.loopexit.split-lp

152:                                              ; preds = %150
  %153 = icmp eq i32 %151, 179
  br i1 %153, label %154, label %160

154:                                              ; preds = %152
  %155 = load ptr, ptr %99, align 8, !tbaa !14
  %156 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7glslang14TParseVersions13getCurrentLocEv(ptr noundef nonnull align 8 dereferenceable(192) %155)
          to label %157 unwind label %.loopexit.loopexit.split-lp

157:                                              ; preds = %154
  %158 = getelementptr inbounds i8, ptr %156, i64 12
  %159 = load i32, ptr %158, align 4, !tbaa !64
  store i32 %159, ptr %100, align 8, !tbaa !13
  br label %160

160:                                              ; preds = %157, %152
  %161 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %80, i64 noundef %.0135) #8
  %162 = load ptr, ptr %161, align 8, !tbaa !88
  invoke void @_ZN7glslang10TPpContext11TokenStream8putTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40) %162, i32 noundef %.us-phi242, ptr noundef %1)
          to label %.outer unwind label %.loopexit.loopexit.split-lp, !llvm.loop !102

.thread190:                                       ; preds = %129
  %163 = load ptr, ptr %67, align 8, !tbaa !90
  %164 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %163) #8
  %165 = icmp ne i64 %164, 1
  %brmerge202 = select i1 %165, i1 true, i1 %.1134.ph
  %166 = zext i1 %brmerge202 to i64
  %.1136.ph = add i64 %.0135, %166
  call void @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #8
  br label %.loopexit207

.thread186:                                       ; preds = %.split.us.invoke
  %167 = load ptr, ptr %65, align 8, !tbaa !66
  %168 = getelementptr inbounds i8, ptr %167, i64 8
  %169 = load ptr, ptr %168, align 8
  call void %169(ptr noundef nonnull align 8 dereferenceable(98) %65) #8
  call void @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #8
  br label %.thread199

170:                                              ; preds = %.split241.us, %129
  %171 = add nuw i64 %.0135, 1
  call void @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #8
  %172 = load ptr, ptr %67, align 8, !tbaa !90
  %173 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %172) #8
  %174 = icmp ult i64 %171, %173
  br i1 %174, label %106, label %.loopexit207, !llvm.loop !103

.loopexit207:                                     ; preds = %170, %.thread190
  %.1136193 = phi i64 [ %.1136.ph, %.thread190 ], [ %171, %170 ]
  %175 = load ptr, ptr %67, align 8, !tbaa !90
  %176 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %175) #8
  %177 = icmp ult i64 %.1136193, %176
  br i1 %177, label %.sink.split, label %178

.loopexit:                                        ; preds = %.loopexit.split-lp, %.loopexit.loopexit.split, %.loopexit.loopexit.split.us, %.loopexit.loopexit.split-lp, %140, %133
  %.pn = phi { ptr, i32 } [ %134, %133 ], [ %141, %140 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ], [ %lpad.loopexit.split-lp204, %.loopexit.loopexit.split-lp ], [ %lpad.loopexit203, %.loopexit.loopexit.split ], [ %lpad.loopexit203.us, %.loopexit.loopexit.split.us ]
  call void @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #8
  br label %214

178:                                              ; preds = %.loopexit207
  switch i32 %.us-phi242, label %.lr.ph248 [
    i32 41, label %203
    i32 -1, label %.thread194
  ]

.lr.ph248:                                        ; preds = %178, %189
  %.0132247 = phi i32 [ %.2, %189 ], [ 0, %178 ]
  %.1140246 = phi i32 [ %186, %189 ], [ %.us-phi242, %178 ]
  %179 = icmp sgt i32 %.0132247, 0
  %180 = icmp ne i32 %.1140246, 41
  %181 = or i1 %180, %179
  br i1 %181, label %182, label %.sink.split

182:                                              ; preds = %.lr.ph248
  switch i32 %.1140246, label %185 [
    i32 125, label %183
    i32 41, label %183
  ]

183:                                              ; preds = %182, %182
  %184 = add nsw i32 %.0132247, -1
  br label %185

185:                                              ; preds = %182, %183
  %.1 = phi i32 [ %184, %183 ], [ %.0132247, %182 ]
  %186 = call noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef %1)
  switch i32 %186, label %189 [
    i32 123, label %187
    i32 40, label %187
  ]

187:                                              ; preds = %185, %185
  %188 = add nsw i32 %.1, 1
  br label %189

189:                                              ; preds = %185, %187
  %.2 = phi i32 [ %188, %187 ], [ %.1, %185 ]
  %.not170 = icmp eq i32 %186, -1
  br i1 %.not170, label %.thread194, label %.lr.ph248, !llvm.loop !104

.thread194:                                       ; preds = %189, %178
  %190 = load ptr, ptr %99, align 8, !tbaa !14
  %191 = call noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %12, i32 noundef %14)
  %192 = load ptr, ptr %190, align 8, !tbaa !66
  %193 = getelementptr inbounds i8, ptr %192, i64 352
  %194 = load ptr, ptr %193, align 8
  call void (ptr, ptr, ptr, ptr, ptr, ...) %194(ptr noundef nonnull align 8 dereferenceable(1176) %190, ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull @.str.74, ptr noundef nonnull @.str.75, ptr noundef %191)
  %195 = load ptr, ptr %65, align 8, !tbaa !66
  %196 = getelementptr inbounds i8, ptr %195, i64 8
  %197 = load ptr, ptr %196, align 8
  call void %197(ptr noundef nonnull align 8 dereferenceable(98) %65) #8
  br label %.thread199

.sink.split:                                      ; preds = %.lr.ph248, %.loopexit207
  %.str.79.sink = phi ptr [ @.str.78, %.loopexit207 ], [ @.str.79, %.lr.ph248 ]
  %198 = load ptr, ptr %99, align 8, !tbaa !14
  %199 = call noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %12, i32 noundef %14)
  %200 = load ptr, ptr %198, align 8, !tbaa !66
  %201 = getelementptr inbounds i8, ptr %200, i64 352
  %202 = load ptr, ptr %201, align 8
  call void (ptr, ptr, ptr, ptr, ptr, ...) %202(ptr noundef nonnull align 8 dereferenceable(1176) %198, ptr noundef nonnull align 8 dereferenceable(24) %6, ptr noundef nonnull %.str.79.sink, ptr noundef nonnull @.str.75, ptr noundef %199)
  br label %203

203:                                              ; preds = %.sink.split, %178
  %204 = load ptr, ptr %67, align 8, !tbaa !90
  %205 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %204) #8
  %.not255 = icmp eq i64 %205, 0
  br i1 %.not255, label %._crit_edge252, label %.lr.ph251

.lr.ph251:                                        ; preds = %203, %.lr.ph251
  %.0249 = phi i64 [ %210, %.lr.ph251 ], [ 0, %203 ]
  %206 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %80, i64 noundef %.0249) #8
  %207 = load ptr, ptr %206, align 8, !tbaa !88
  %208 = call noundef ptr @_ZN7glslang10TPpContext15PrescanMacroArgERNS0_11TokenStreamEPNS_8TPpTokenEb(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef nonnull align 8 dereferenceable(40) %207, ptr noundef %1, i1 noundef zeroext %3)
  %209 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %85, i64 noundef %.0249) #8
  store ptr %208, ptr %209, align 8, !tbaa !88
  %210 = add nuw i64 %.0249, 1
  %211 = load ptr, ptr %67, align 8, !tbaa !90
  %212 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %211) #8
  %213 = icmp ult i64 %210, %212
  br i1 %213, label %.lr.ph251, label %._crit_edge252, !llvm.loop !105

.thread199:                                       ; preds = %.thread186, %.thread194
  call void @llvm.lifetime.end.p0(i64 1072, ptr nonnull %7) #8
  br label %219

._crit_edge252:                                   ; preds = %.lr.ph251, %203
  call void @llvm.lifetime.end.p0(i64 1072, ptr nonnull %7) #8
  br label %215

214:                                              ; preds = %.loopexit, %97
  %.pn172 = phi { ptr, i32 } [ %98, %97 ], [ %.pn, %.loopexit ]
  call void @llvm.lifetime.end.p0(i64 1072, ptr nonnull %7) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #8
  br label %220

215:                                              ; preds = %._crit_edge252, %66
  call void @_ZN7glslang10TPpContext9pushInputEPNS0_6tInputE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef nonnull %65)
  %216 = load i8, ptr %56, align 8
  %217 = or i8 %216, 2
  store i8 %217, ptr %56, align 8
  %218 = getelementptr inbounds i8, ptr %54, i64 32
  call void @_ZN7glslang10TPpContext11TokenStream5resetEv(ptr noundef nonnull align 8 dereferenceable(40) %218)
  br label %219

219:                                              ; preds = %.thread199, %.thread195, %215
  %.6 = phi i32 [ 2, %215 ], [ 0, %.thread195 ], [ 1, %.thread199 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #8
  br label %221

220:                                              ; preds = %214, %74
  %.pn172.pn = phi { ptr, i32 } [ %.pn172, %214 ], [ %75, %74 ]
  resume { ptr, i32 } %.pn172.pn

221:                                              ; preds = %62, %219, %55, %59, %.thread, %46, %38, %25
  %.8 = phi i32 [ 2, %46 ], [ 2, %38 ], [ 2, %25 ], [ 3, %62 ], [ %.6, %219 ], [ 0, %55 ], [ 0, %59 ], [ 0, %.thread ]
  ret i32 %.8
}

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7glslang10TPpContext9pushInputEPNS0_6tInputE(ptr noundef nonnull align 8 dereferenceable(921), ptr noundef) local_unnamed_addr #1 align 2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #5

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noundef i32 @snprintf(ptr noalias nocapture noundef writeonly, i64 noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #7

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7glslang14TParseVersions13getCurrentLocEv(ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #1 align 2

declare void @_ZN7glslang10TPpContext10UngetTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921), i32 noundef, ptr noundef) local_unnamed_addr #4

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIcN7glslang14pool_allocatorIcEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNSt6vectorIcN7glslang14pool_allocatorIcEEE4backEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #3 align 2

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "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 = { nobuiltin allocsize(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 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { builtin allocsize(0) }
attributes #10 = { builtin 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, !12, i64 24}
!6 = !{!"_ZTSN7glslang8TPpTokenE", !7, i64 0, !12, i64 24, !9, i64 32, !9, i64 40}
!7 = !{!"_ZTSN7glslang10TSourceLocE", !8, i64 0, !11, i64 8, !11, i64 12, !11, i64 16}
!8 = !{!"any pointer", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"int", !9, i64 0}
!12 = !{!"bool", !9, i64 0}
!13 = !{!9, !9, i64 0}
!14 = !{!15, !8, i64 256}
!15 = !{!"_ZTSN7glslang10TPpContextE", !16, i64 8, !27, i64 64, !8, i64 208, !11, i64 216, !8, i64 224, !8, i64 232, !11, i64 240, !11, i64 244, !11, i64 248, !8, i64 256, !11, i64 264, !9, i64 268, !11, i64 336, !46, i64 344, !12, i64 368, !12, i64 369, !8, i64 376, !12, i64 384, !50, i64 392, !52, i64 424, !50, i64 504, !58, i64 536, !12, i64 920}
!16 = !{!"_ZTSN7glslang4TMapIiNS_10TPpContext11MacroSymbolESt4lessIiEEE", !17, i64 0}
!17 = !{!"_ZTSSt3mapIiN7glslang10TPpContext11MacroSymbolESt4lessIiENS0_14pool_allocatorISt4pairIKiS2_EEEE", !18, i64 0}
!18 = !{!"_ZTSSt8_Rb_treeIiSt4pairIKiN7glslang10TPpContext11MacroSymbolEESt10_Select1stIS5_ESt4lessIiENS2_14pool_allocatorIS5_EEE", !19, i64 0}
!19 = !{!"_ZTSNSt8_Rb_treeIiSt4pairIKiN7glslang10TPpContext11MacroSymbolEESt10_Select1stIS5_ESt4lessIiENS2_14pool_allocatorIS5_EEE13_Rb_tree_implIS9_Lb1EEE", !20, i64 0, !21, i64 8, !23, i64 16}
!20 = !{!"_ZTSN7glslang14pool_allocatorISt13_Rb_tree_nodeISt4pairIKiNS_10TPpContext11MacroSymbolEEEEE", !8, i64 0}
!21 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIiEE", !22, i64 0}
!22 = !{!"_ZTSSt4lessIiE"}
!23 = !{!"_ZTSSt15_Rb_tree_header", !24, i64 0, !26, i64 32}
!24 = !{!"_ZTSSt18_Rb_tree_node_base", !25, i64 0, !8, i64 8, !8, i64 16, !8, i64 24}
!25 = !{!"_ZTSSt14_Rb_tree_color", !9, i64 0}
!26 = !{!"long", !9, i64 0}
!27 = !{!"_ZTSN7glslang14TStringAtomMapE", !28, i64 0, !37, i64 64, !11, i64 96, !43, i64 104}
!28 = !{!"_ZTSN7glslang13TUnorderedMapINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEEiSt4hashIS7_ESt8equal_toIS7_EEE", !29, i64 0}
!29 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEEiSt4hashIS7_ESt8equal_toIS7_ENS5_ISt4pairIKS7_iEEEE", !30, i64 0}
!30 = !{!"_ZTSSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEESt4pairIKS7_iENS5_ISA_EENSt8__detail10_Select1stESt8equal_toIS7_ESt4hashIS7_ENSC_18_Mod_range_hashingENSC_20_Default_ranged_hashENSC_20_Prime_rehash_policyENSC_17_Hashtable_traitsILb1ELb0ELb1EEEE", !31, i64 0, !8, i64 8, !26, i64 16, !34, i64 24, !26, i64 32, !35, i64 40, !8, i64 56}
!31 = !{!"_ZTSNSt8__detail16_Hashtable_allocIN7glslang14pool_allocatorINS_10_Hash_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS2_IcEEEEiELb1EEEEEEE", !32, i64 0}
!32 = !{!"_ZTSNSt8__detail21_Hashtable_ebo_helperILi0EN7glslang14pool_allocatorINS_10_Hash_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS2_IcEEEEiELb1EEEEELb0EEE", !33, i64 0}
!33 = !{!"_ZTSN7glslang14pool_allocatorINSt8__detail10_Hash_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_IcEEEEiELb1EEEEE", !8, i64 0}
!34 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !8, i64 0}
!35 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !36, i64 0, !26, i64 8}
!36 = !{!"float", !9, i64 0}
!37 = !{!"_ZTSN7glslang7TVectorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEEEE", !38, i64 0}
!38 = !{!"_ZTSSt6vectorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE", !39, i64 0}
!39 = !{!"_ZTSSt12_Vector_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE", !40, i64 0}
!40 = !{!"_ZTSNSt12_Vector_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE12_Vector_implE", !41, i64 0, !42, i64 8}
!41 = !{!"_ZTSN7glslang14pool_allocatorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_IcEEEEEE", !8, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!43 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEE", !44, i64 0, !26, i64 16, !9, i64 24}
!44 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEE12_Alloc_hiderE", !45, i64 0, !8, i64 8}
!45 = !{!"_ZTSN7glslang14pool_allocatorIcEE", !8, i64 0}
!46 = !{!"_ZTSSt6vectorIPN7glslang10TPpContext6tInputESaIS3_EE", !47, i64 0}
!47 = !{!"_ZTSSt12_Vector_baseIPN7glslang10TPpContext6tInputESaIS3_EE", !48, i64 0}
!48 = !{!"_ZTSNSt12_Vector_baseIPN7glslang10TPpContext6tInputESaIS3_EE12_Vector_implE", !49, i64 0}
!49 = !{!"_ZTSNSt12_Vector_baseIPN7glslang10TPpContext6tInputESaIS3_EE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!50 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !51, i64 0, !26, i64 8, !9, i64 16}
!51 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !8, i64 0}
!52 = !{!"_ZTSSt5stackIPN7glslang7TShader8Includer13IncludeResultESt5dequeIS4_SaIS4_EEE", !53, i64 0}
!53 = !{!"_ZTSSt5dequeIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE", !54, i64 0}
!54 = !{!"_ZTSSt11_Deque_baseIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE", !55, i64 0}
!55 = !{!"_ZTSNSt11_Deque_baseIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE11_Deque_implE", !56, i64 0}
!56 = !{!"_ZTSNSt11_Deque_baseIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE16_Deque_impl_dataE", !8, i64 0, !26, i64 8, !57, i64 16, !57, i64 48}
!57 = !{!"_ZTSSt15_Deque_iteratorIPN7glslang7TShader8Includer13IncludeResultERS4_PS4_E", !8, i64 0, !8, i64 8, !8, i64 16, !8, i64 24}
!58 = !{!"_ZTSNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE", !59, i64 0, !60, i64 16}
!59 = !{!"_ZTSSi", !26, i64 8}
!60 = !{!"_ZTSNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE", !61, i64 0, !63, i64 64, !50, i64 72}
!61 = !{!"_ZTSSt15basic_streambufIcSt11char_traitsIcEE", !8, i64 8, !8, i64 16, !8, i64 24, !8, i64 32, !8, i64 40, !8, i64 48, !62, i64 56}
!62 = !{!"_ZTSSt6locale", !8, i64 0}
!63 = !{!"_ZTSSt13_Ios_Openmode", !9, i64 0}
!64 = !{!7, !11, i64 12}
!65 = !{!7, !8, i64 0}
!66 = !{!67, !67, i64 0}
!67 = !{!"vtable pointer", !10, i64 0}
!68 = !{!7, !11, i64 8}
!69 = !{!70, !11, i64 24}
!70 = !{!"_ZTSN7glslang14TParseVersionsE", !12, i64 8, !71, i64 12, !8, i64 16, !11, i64 24, !72, i64 28, !73, i64 32, !8, i64 56, !74, i64 64, !81, i64 120, !86, i64 176, !11, i64 180, !8, i64 184}
!71 = !{!"_ZTS8EProfile", !9, i64 0}
!72 = !{!"_ZTS11EShLanguage", !9, i64 0}
!73 = !{!"_ZTSN7glslang10SpvVersionE", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !12, i64 16}
!74 = !{!"_ZTSN7glslang4TMapINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEENS_18TExtensionBehaviorESt4lessIS7_EEE", !75, i64 0}
!75 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS4_18TExtensionBehaviorESt4lessIS7_ENS5_ISt4pairIKS7_S8_EEEE", !76, i64 0}
!76 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEESt4pairIKS7_NS4_18TExtensionBehaviorEESt10_Select1stISB_ESt4lessIS7_ENS5_ISB_EEE", !77, i64 0}
!77 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEESt4pairIKS7_NS4_18TExtensionBehaviorEESt10_Select1stISB_ESt4lessIS7_ENS5_ISB_EEE13_Rb_tree_implISF_Lb1EEE", !78, i64 0, !79, i64 8, !23, i64 16}
!78 = !{!"_ZTSN7glslang14pool_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_IcEEEENS_18TExtensionBehaviorEEEEE", !8, i64 0}
!79 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEEEE", !80, i64 0}
!80 = !{!"_ZTSSt4lessINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEEE"}
!81 = !{!"_ZTSN7glslang4TMapINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEEjSt4lessIS7_EEE", !82, i64 0}
!82 = !{!"_ZTSSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEEjSt4lessIS7_ENS5_ISt4pairIKS7_jEEEE", !83, i64 0}
!83 = !{!"_ZTSSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEESt4pairIKS7_jESt10_Select1stISA_ESt4lessIS7_ENS5_ISA_EEE", !84, i64 0}
!84 = !{!"_ZTSNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEESt4pairIKS7_jESt10_Select1stISA_ESt4lessIS7_ENS5_ISA_EEE13_Rb_tree_implISE_Lb1EEE", !85, i64 0, !79, i64 8, !23, i64 16}
!85 = !{!"_ZTSN7glslang14pool_allocatorISt13_Rb_tree_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_IcEEEEjEEEE", !8, i64 0}
!86 = !{!"_ZTS11EShMessages", !9, i64 0}
!87 = !{i64 0, i64 8, !88, i64 8, i64 4, !89, i64 12, i64 4, !89, i64 16, i64 4, !89}
!88 = !{!8, !8, i64 0}
!89 = !{!11, !11, i64 0}
!90 = !{!91, !8, i64 24}
!91 = !{!"_ZTSN7glslang10TPpContext11tMacroInputE", !92, i64 0, !8, i64 24, !93, i64 32, !93, i64 64, !12, i64 96, !12, i64 97}
!92 = !{!"_ZTSN7glslang10TPpContext6tInputE", !12, i64 8, !8, i64 16}
!93 = !{!"_ZTSN7glslang7TVectorIPNS_10TPpContext11TokenStreamEEE", !94, i64 0}
!94 = !{!"_ZTSSt6vectorIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEE", !95, i64 0}
!95 = !{!"_ZTSSt12_Vector_baseIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEE", !96, i64 0}
!96 = !{!"_ZTSNSt12_Vector_baseIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEE12_Vector_implE", !97, i64 0, !98, i64 8}
!97 = !{!"_ZTSN7glslang14pool_allocatorIPNS_10TPpContext11TokenStreamEEE", !8, i64 0}
!98 = !{!"_ZTSNSt12_Vector_baseIPN7glslang10TPpContext11TokenStreamENS0_14pool_allocatorIS3_EEE17_Vector_impl_dataE", !8, i64 0, !8, i64 8, !8, i64 16}
!99 = distinct !{!99, !100}
!100 = !{!"llvm.loop.mustprogress"}
!101 = distinct !{!101, !100}
!102 = distinct !{!102, !100}
!103 = distinct !{!103, !100}
!104 = distinct !{!104, !100}
!105 = distinct !{!105, !100}


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