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

%"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 }
%"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::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 }
%"class.glslang::pool_allocator.12" = type { 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_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] }
%"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 }

@.str = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [42 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7glslang10TPpContext9CPPdefineEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef %1) #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca %"struct.glslang::TPpContext::MacroSymbol", align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca %"struct.glslang::TSourceLoc", align 8
  %13 = alloca i32, align 4
  %14 = alloca i8, align 1
  %15 = alloca i64, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca i8, align 1
  %19 = alloca i32, align 4
  %20 = alloca %"class.glslang::TPpToken", align 8
  %21 = alloca %"class.glslang::TPpToken", align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %22 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 80, ptr %6) #7
  call void @_ZN7glslang10TPpContext11MacroSymbolC2Ev(ptr noundef nonnull align 8 dereferenceable(73) %6)
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  %23 = load ptr, ptr %5, align 8, !tbaa !5
  %24 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %22, ptr noundef %23)
          to label %25 unwind label %38

25:                                               ; preds = %2
  store i32 %24, ptr %7, align 4, !tbaa !9
  %26 = load i32, ptr %7, align 4, !tbaa !9
  %27 = icmp ne i32 %26, 162
  br i1 %27, label %28, label %42

28:                                               ; preds = %25
  %29 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 12
  %30 = load ptr, ptr %29, align 8, !tbaa !11
  %31 = load ptr, ptr %5, align 8, !tbaa !5
  %32 = getelementptr inbounds %"class.glslang::TPpToken", ptr %31, i32 0, i32 0
  %33 = load ptr, ptr %30, align 8, !tbaa !62
  %34 = getelementptr inbounds ptr, ptr %33, i64 44
  %35 = load ptr, ptr %34, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %35(ptr noundef nonnull align 8 dereferenceable(1176) %30, ptr noundef nonnull align 8 dereferenceable(24) %32, ptr noundef @.str, ptr noundef @.str.1, ptr noundef @.str.2)
          to label %36 unwind label %38

36:                                               ; preds = %28
  %37 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %37, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %397

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

42:                                               ; preds = %25
  %43 = load ptr, ptr %5, align 8, !tbaa !5
  %44 = getelementptr inbounds %"class.glslang::TPpToken", ptr %43, i32 0, i32 0
  %45 = getelementptr inbounds %"struct.glslang::TSourceLoc", ptr %44, i32 0, i32 1
  %46 = load i32, ptr %45, align 8, !tbaa !64
  %47 = icmp sge i32 %46, 0
  br i1 %47, label %48, label %60

48:                                               ; preds = %42
  %49 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 12
  %50 = load ptr, ptr %49, align 8, !tbaa !11
  %51 = load ptr, ptr %5, align 8, !tbaa !5
  %52 = getelementptr inbounds %"class.glslang::TPpToken", ptr %51, i32 0, i32 0
  %53 = load ptr, ptr %5, align 8, !tbaa !5
  %54 = getelementptr inbounds %"class.glslang::TPpToken", ptr %53, i32 0, i32 4
  %55 = getelementptr inbounds [1025 x i8], ptr %54, i64 0, i64 0
  %56 = load ptr, ptr %50, align 8, !tbaa !62
  %57 = getelementptr inbounds ptr, ptr %56, i64 52
  %58 = load ptr, ptr %57, align 8
  invoke void %58(ptr noundef nonnull align 8 dereferenceable(1176) %50, ptr noundef nonnull align 8 dereferenceable(24) %52, ptr noundef %55, ptr noundef @.str.1)
          to label %59 unwind label %38

59:                                               ; preds = %48
  br label %60

60:                                               ; preds = %59, %42
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  %61 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 2
  %62 = load ptr, ptr %5, align 8, !tbaa !5
  %63 = getelementptr inbounds %"class.glslang::TPpToken", ptr %62, i32 0, i32 4
  %64 = getelementptr inbounds [1025 x i8], ptr %63, i64 0, i64 0
  %65 = invoke noundef i32 @_ZN7glslang14TStringAtomMap10getAddAtomEPKc(ptr noundef nonnull align 8 dereferenceable(144) %61, ptr noundef %64)
          to label %66 unwind label %95

66:                                               ; preds = %60
  store i32 %65, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #7
  %67 = load ptr, ptr %5, align 8, !tbaa !5
  %68 = getelementptr inbounds %"class.glslang::TPpToken", ptr %67, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %12, ptr align 8 %68, i64 24, i1 false), !tbaa.struct !67
  %69 = load ptr, ptr %5, align 8, !tbaa !5
  %70 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %22, ptr noundef %69)
          to label %71 unwind label %99

71:                                               ; preds = %66
  store i32 %70, ptr %7, align 4, !tbaa !9
  %72 = load i32, ptr %7, align 4, !tbaa !9
  %73 = icmp eq i32 %72, 40
  br i1 %73, label %74, label %194

74:                                               ; preds = %71
  %75 = load ptr, ptr %5, align 8, !tbaa !5
  %76 = getelementptr inbounds %"class.glslang::TPpToken", ptr %75, i32 0, i32 1
  %77 = load i8, ptr %76, align 8, !tbaa !68, !range !69, !noundef !70
  %78 = trunc i8 %77 to i1
  br i1 %78, label %194, label %79

79:                                               ; preds = %74
  %80 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %6, i32 0, i32 2
  %81 = load i8, ptr %80, align 8
  %82 = and i8 %81, -2
  %83 = or i8 %82, 1
  store i8 %83, ptr %80, align 8
  br label %84

84:                                               ; preds = %172, %79
  %85 = load ptr, ptr %5, align 8, !tbaa !5
  %86 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %22, ptr noundef %85)
          to label %87 unwind label %99

87:                                               ; preds = %84
  store i32 %86, ptr %7, align 4, !tbaa !9
  %88 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %6, i32 0, i32 0
  %89 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %88) #7
  %90 = icmp eq i64 %89, 0
  br i1 %90, label %91, label %103

91:                                               ; preds = %87
  %92 = load i32, ptr %7, align 4, !tbaa !9
  %93 = icmp eq i32 %92, 41
  br i1 %93, label %94, label %103

94:                                               ; preds = %91
  br label %175

95:                                               ; preds = %60
  %96 = landingpad { ptr, i32 }
          cleanup
  %97 = extractvalue { ptr, i32 } %96, 0
  store ptr %97, ptr %8, align 8
  %98 = extractvalue { ptr, i32 } %96, 1
  store i32 %98, ptr %9, align 4
  br label %396

99:                                               ; preds = %240, %229, %225, %205, %190, %178, %106, %84, %66
  %100 = landingpad { ptr, i32 }
          cleanup
  %101 = extractvalue { ptr, i32 } %100, 0
  store ptr %101, ptr %8, align 8
  %102 = extractvalue { ptr, i32 } %100, 1
  store i32 %102, ptr %9, align 4
  br label %395

103:                                              ; preds = %91, %87
  %104 = load i32, ptr %7, align 4, !tbaa !9
  %105 = icmp ne i32 %104, 162
  br i1 %105, label %106, label %116

106:                                              ; preds = %103
  %107 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 12
  %108 = load ptr, ptr %107, align 8, !tbaa !11
  %109 = load ptr, ptr %5, align 8, !tbaa !5
  %110 = getelementptr inbounds %"class.glslang::TPpToken", ptr %109, i32 0, i32 0
  %111 = load ptr, ptr %108, align 8, !tbaa !62
  %112 = getelementptr inbounds ptr, ptr %111, i64 44
  %113 = load ptr, ptr %112, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %113(ptr noundef nonnull align 8 dereferenceable(1176) %108, ptr noundef nonnull align 8 dereferenceable(24) %110, ptr noundef @.str.3, ptr noundef @.str.1, ptr noundef @.str.2)
          to label %114 unwind label %99

114:                                              ; preds = %106
  %115 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %115, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %394

116:                                              ; preds = %103
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  %117 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 2
  %118 = load ptr, ptr %5, align 8, !tbaa !5
  %119 = getelementptr inbounds %"class.glslang::TPpToken", ptr %118, i32 0, i32 4
  %120 = getelementptr inbounds [1025 x i8], ptr %119, i64 0, i64 0
  %121 = invoke noundef i32 @_ZN7glslang14TStringAtomMap10getAddAtomEPKc(ptr noundef nonnull align 8 dereferenceable(144) %117, ptr noundef %120)
          to label %122 unwind label %129

122:                                              ; preds = %116
  store i32 %121, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #7
  store i8 0, ptr %14, align 1, !tbaa !71
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  store i64 0, ptr %15, align 8, !tbaa !72
  br label %123

123:                                              ; preds = %154, %122
  %124 = load i64, ptr %15, align 8, !tbaa !72
  %125 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %6, i32 0, i32 0
  %126 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %125) #7
  %127 = icmp ult i64 %124, %126
  br i1 %127, label %133, label %128

128:                                              ; preds = %123
  store i32 4, ptr %10, align 4
  br label %157

129:                                              ; preds = %116
  %130 = landingpad { ptr, i32 }
          cleanup
  %131 = extractvalue { ptr, i32 } %130, 0
  store ptr %131, ptr %8, align 8
  %132 = extractvalue { ptr, i32 } %130, 1
  store i32 %132, ptr %9, align 4
  br label %189

133:                                              ; preds = %123
  %134 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %6, i32 0, i32 0
  %135 = load i64, ptr %15, align 8, !tbaa !72
  %136 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiN7glslang14pool_allocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %134, i64 noundef %135) #7
  %137 = load i32, ptr %136, align 4, !tbaa !9
  %138 = load i32, ptr %13, align 4, !tbaa !9
  %139 = icmp eq i32 %137, %138
  br i1 %139, label %140, label %153

140:                                              ; preds = %133
  %141 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 12
  %142 = load ptr, ptr %141, align 8, !tbaa !11
  %143 = load ptr, ptr %5, align 8, !tbaa !5
  %144 = getelementptr inbounds %"class.glslang::TPpToken", ptr %143, i32 0, i32 0
  %145 = load ptr, ptr %142, align 8, !tbaa !62
  %146 = getelementptr inbounds ptr, ptr %145, i64 44
  %147 = load ptr, ptr %146, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %147(ptr noundef nonnull align 8 dereferenceable(1176) %142, ptr noundef nonnull align 8 dereferenceable(24) %144, ptr noundef @.str.4, ptr noundef @.str.1, ptr noundef @.str.2)
          to label %148 unwind label %149

148:                                              ; preds = %140
  store i8 1, ptr %14, align 1, !tbaa !71
  store i32 4, ptr %10, align 4
  br label %157

149:                                              ; preds = %140
  %150 = landingpad { ptr, i32 }
          cleanup
  %151 = extractvalue { ptr, i32 } %150, 0
  store ptr %151, ptr %8, align 8
  %152 = extractvalue { ptr, i32 } %150, 1
  store i32 %152, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  br label %188

153:                                              ; preds = %133
  br label %154

154:                                              ; preds = %153
  %155 = load i64, ptr %15, align 8, !tbaa !72
  %156 = add i64 %155, 1
  store i64 %156, ptr %15, align 8, !tbaa !72
  br label %123, !llvm.loop !73

157:                                              ; preds = %148, %128
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  br label %158

158:                                              ; preds = %157
  %159 = load i8, ptr %14, align 1, !tbaa !71, !range !69, !noundef !70
  %160 = trunc i8 %159 to i1
  br i1 %160, label %168, label %161

161:                                              ; preds = %158
  %162 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %6, i32 0, i32 0
  invoke void @_ZNSt6vectorIiN7glslang14pool_allocatorIiEEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(32) %162, ptr noundef nonnull align 4 dereferenceable(4) %13)
          to label %163 unwind label %164

163:                                              ; preds = %161
  br label %168

164:                                              ; preds = %168, %161
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %8, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %9, align 4
  br label %188

168:                                              ; preds = %163, %158
  %169 = load ptr, ptr %5, align 8, !tbaa !5
  %170 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %22, ptr noundef %169)
          to label %171 unwind label %164

171:                                              ; preds = %168
  store i32 %170, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %172

172:                                              ; preds = %171
  %173 = load i32, ptr %7, align 4, !tbaa !9
  %174 = icmp eq i32 %173, 44
  br i1 %174, label %84, label %175, !llvm.loop !75

175:                                              ; preds = %172, %94
  %176 = load i32, ptr %7, align 4, !tbaa !9
  %177 = icmp ne i32 %176, 41
  br i1 %177, label %178, label %190

178:                                              ; preds = %175
  %179 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 12
  %180 = load ptr, ptr %179, align 8, !tbaa !11
  %181 = load ptr, ptr %5, align 8, !tbaa !5
  %182 = getelementptr inbounds %"class.glslang::TPpToken", ptr %181, i32 0, i32 0
  %183 = load ptr, ptr %180, align 8, !tbaa !62
  %184 = getelementptr inbounds ptr, ptr %183, i64 44
  %185 = load ptr, ptr %184, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %185(ptr noundef nonnull align 8 dereferenceable(1176) %180, ptr noundef nonnull align 8 dereferenceable(24) %182, ptr noundef @.str.5, ptr noundef @.str.1, ptr noundef @.str.2)
          to label %186 unwind label %99

186:                                              ; preds = %178
  %187 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %187, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %394

188:                                              ; preds = %164, %149
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #7
  br label %189

189:                                              ; preds = %188, %129
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  br label %395

190:                                              ; preds = %175
  %191 = load ptr, ptr %5, align 8, !tbaa !5
  %192 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %22, ptr noundef %191)
          to label %193 unwind label %99

193:                                              ; preds = %190
  store i32 %192, ptr %7, align 4, !tbaa !9
  br label %216

194:                                              ; preds = %74, %71
  %195 = load i32, ptr %7, align 4, !tbaa !9
  %196 = icmp ne i32 %195, 10
  br i1 %196, label %197, label %215

197:                                              ; preds = %194
  %198 = load i32, ptr %7, align 4, !tbaa !9
  %199 = icmp ne i32 %198, -1
  br i1 %199, label %200, label %215

200:                                              ; preds = %197
  %201 = load ptr, ptr %5, align 8, !tbaa !5
  %202 = getelementptr inbounds %"class.glslang::TPpToken", ptr %201, i32 0, i32 1
  %203 = load i8, ptr %202, align 8, !tbaa !68, !range !69, !noundef !70
  %204 = trunc i8 %203 to i1
  br i1 %204, label %215, label %205

205:                                              ; preds = %200
  %206 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 12
  %207 = load ptr, ptr %206, align 8, !tbaa !11
  %208 = load ptr, ptr %5, align 8, !tbaa !5
  %209 = getelementptr inbounds %"class.glslang::TPpToken", ptr %208, i32 0, i32 0
  %210 = load ptr, ptr %207, align 8, !tbaa !62
  %211 = getelementptr inbounds ptr, ptr %210, i64 45
  %212 = load ptr, ptr %211, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %212(ptr noundef nonnull align 8 dereferenceable(1176) %207, ptr noundef nonnull align 8 dereferenceable(24) %209, ptr noundef @.str.6, ptr noundef @.str.1, ptr noundef @.str.2)
          to label %213 unwind label %99

213:                                              ; preds = %205
  %214 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %214, ptr %3, align 4
  store i32 1, ptr %10, align 4
  br label %394

215:                                              ; preds = %200, %197, %194
  br label %216

216:                                              ; preds = %215, %193
  br label %217

217:                                              ; preds = %244, %216
  %218 = load i32, ptr %7, align 4, !tbaa !9
  %219 = icmp ne i32 %218, 10
  br i1 %219, label %220, label %223

220:                                              ; preds = %217
  %221 = load i32, ptr %7, align 4, !tbaa !9
  %222 = icmp ne i32 %221, -1
  br label %223

223:                                              ; preds = %220, %217
  %224 = phi i1 [ false, %217 ], [ %222, %220 ]
  br i1 %224, label %225, label %245

225:                                              ; preds = %223
  %226 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %6, i32 0, i32 1
  %227 = load i32, ptr %7, align 4, !tbaa !9
  %228 = load ptr, ptr %5, align 8, !tbaa !5
  invoke void @_ZN7glslang10TPpContext11TokenStream8putTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40) %226, i32 noundef %227, ptr noundef %228)
          to label %229 unwind label %99

229:                                              ; preds = %225
  %230 = load ptr, ptr %5, align 8, !tbaa !5
  %231 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %22, ptr noundef %230)
          to label %232 unwind label %99

232:                                              ; preds = %229
  store i32 %231, ptr %7, align 4, !tbaa !9
  %233 = load i32, ptr %7, align 4, !tbaa !9
  %234 = icmp ne i32 %233, 10
  br i1 %234, label %235, label %244

235:                                              ; preds = %232
  %236 = load ptr, ptr %5, align 8, !tbaa !5
  %237 = getelementptr inbounds %"class.glslang::TPpToken", ptr %236, i32 0, i32 1
  %238 = load i8, ptr %237, align 8, !tbaa !68, !range !69, !noundef !70
  %239 = trunc i8 %238 to i1
  br i1 %239, label %240, label %244

240:                                              ; preds = %235
  %241 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %6, i32 0, i32 1
  %242 = load ptr, ptr %5, align 8, !tbaa !5
  invoke void @_ZN7glslang10TPpContext11TokenStream8putTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40) %241, i32 noundef 32, ptr noundef %242)
          to label %243 unwind label %99

243:                                              ; preds = %240
  br label %244

244:                                              ; preds = %243, %235, %232
  br label %217, !llvm.loop !76

245:                                              ; preds = %223
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  %246 = load i32, ptr %11, align 4, !tbaa !9
  %247 = invoke noundef ptr @_ZN7glslang10TPpContext14lookupMacroDefEi(ptr noundef nonnull align 8 dereferenceable(921) %22, i32 noundef %246)
          to label %248 unwind label %281

248:                                              ; preds = %245
  store ptr %247, ptr %16, align 8, !tbaa !5
  %249 = load ptr, ptr %16, align 8, !tbaa !5
  %250 = icmp ne ptr %249, null
  br i1 %250, label %251, label %389

251:                                              ; preds = %248
  %252 = load ptr, ptr %16, align 8, !tbaa !5
  %253 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %252, i32 0, i32 2
  %254 = load i8, ptr %253, align 8
  %255 = lshr i8 %254, 2
  %256 = and i8 %255, 1
  %257 = zext i8 %256 to i32
  %258 = icmp ne i32 %257, 0
  br i1 %258, label %385, label %259

259:                                              ; preds = %251
  %260 = load ptr, ptr %16, align 8, !tbaa !5
  %261 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %260, i32 0, i32 2
  %262 = load i8, ptr %261, align 8
  %263 = and i8 %262, 1
  %264 = zext i8 %263 to i32
  %265 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %6, i32 0, i32 2
  %266 = load i8, ptr %265, align 8
  %267 = and i8 %266, 1
  %268 = zext i8 %267 to i32
  %269 = icmp ne i32 %264, %268
  br i1 %269, label %270, label %285

270:                                              ; preds = %259
  %271 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 12
  %272 = load ptr, ptr %271, align 8, !tbaa !11
  %273 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 2
  %274 = load i32, ptr %11, align 4, !tbaa !9
  %275 = invoke noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %273, i32 noundef %274)
          to label %276 unwind label %281

276:                                              ; preds = %270
  %277 = load ptr, ptr %272, align 8, !tbaa !62
  %278 = getelementptr inbounds ptr, ptr %277, i64 44
  %279 = load ptr, ptr %278, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %279(ptr noundef nonnull align 8 dereferenceable(1176) %272, ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef @.str.7, ptr noundef @.str.1, ptr noundef %275)
          to label %280 unwind label %281

280:                                              ; preds = %276
  br label %384

281:                                              ; preds = %389, %385, %323, %320, %315, %309, %303, %298, %292, %276, %270, %245
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  store ptr %283, ptr %8, align 8
  %284 = extractvalue { ptr, i32 } %282, 1
  store i32 %284, ptr %9, align 4
  br label %393

285:                                              ; preds = %259
  %286 = load ptr, ptr %16, align 8, !tbaa !5
  %287 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %286, i32 0, i32 0
  %288 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %287) #7
  %289 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %6, i32 0, i32 0
  %290 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %289) #7
  %291 = icmp ne i64 %288, %290
  br i1 %291, label %292, label %303

292:                                              ; preds = %285
  %293 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 12
  %294 = load ptr, ptr %293, align 8, !tbaa !11
  %295 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 2
  %296 = load i32, ptr %11, align 4, !tbaa !9
  %297 = invoke noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %295, i32 noundef %296)
          to label %298 unwind label %281

298:                                              ; preds = %292
  %299 = load ptr, ptr %294, align 8, !tbaa !62
  %300 = getelementptr inbounds ptr, ptr %299, i64 44
  %301 = load ptr, ptr %300, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %301(ptr noundef nonnull align 8 dereferenceable(1176) %294, ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef @.str.8, ptr noundef @.str.1, ptr noundef %297)
          to label %302 unwind label %281

302:                                              ; preds = %298
  br label %383

303:                                              ; preds = %285
  %304 = load ptr, ptr %16, align 8, !tbaa !5
  %305 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %304, i32 0, i32 0
  %306 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %6, i32 0, i32 0
  %307 = invoke noundef zeroext i1 @_ZStneIiN7glslang14pool_allocatorIiEEEbRKSt6vectorIT_T0_ES8_(ptr noundef nonnull align 8 dereferenceable(32) %305, ptr noundef nonnull align 8 dereferenceable(32) %306)
          to label %308 unwind label %281

308:                                              ; preds = %303
  br i1 %307, label %309, label %320

309:                                              ; preds = %308
  %310 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 12
  %311 = load ptr, ptr %310, align 8, !tbaa !11
  %312 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 2
  %313 = load i32, ptr %11, align 4, !tbaa !9
  %314 = invoke noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %312, i32 noundef %313)
          to label %315 unwind label %281

315:                                              ; preds = %309
  %316 = load ptr, ptr %311, align 8, !tbaa !62
  %317 = getelementptr inbounds ptr, ptr %316, i64 44
  %318 = load ptr, ptr %317, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %318(ptr noundef nonnull align 8 dereferenceable(1176) %311, ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef @.str.9, ptr noundef @.str.1, ptr noundef %314)
          to label %319 unwind label %281

319:                                              ; preds = %315
  br label %320

320:                                              ; preds = %319, %308
  %321 = load ptr, ptr %16, align 8, !tbaa !5
  %322 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %321, i32 0, i32 1
  invoke void @_ZN7glslang10TPpContext11TokenStream5resetEv(ptr noundef nonnull align 8 dereferenceable(40) %322)
          to label %323 unwind label %281

323:                                              ; preds = %320
  %324 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %6, i32 0, i32 1
  invoke void @_ZN7glslang10TPpContext11TokenStream5resetEv(ptr noundef nonnull align 8 dereferenceable(40) %324)
          to label %325 unwind label %281

325:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr %18) #7
  store i8 1, ptr %18, align 1, !tbaa !71
  br label %326

326:                                              ; preds = %378, %325
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.start.p0(i64 1072, ptr %20) #7
  invoke void @_ZN7glslang8TPpTokenC2Ev(ptr noundef nonnull align 8 dereferenceable(1065) %20)
          to label %327 unwind label %348

327:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 1072, ptr %21) #7
  invoke void @_ZN7glslang8TPpTokenC2Ev(ptr noundef nonnull align 8 dereferenceable(1065) %21)
          to label %328 unwind label %352

328:                                              ; preds = %327
  %329 = load ptr, ptr %16, align 8, !tbaa !5
  %330 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %329, i32 0, i32 1
  %331 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 12
  %332 = load ptr, ptr %331, align 8, !tbaa !11
  %333 = invoke noundef i32 @_ZN7glslang10TPpContext11TokenStream8getTokenERNS_17TParseContextBaseEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40) %330, ptr noundef nonnull align 8 dereferenceable(1176) %332, ptr noundef %20)
          to label %334 unwind label %352

334:                                              ; preds = %328
  store i32 %333, ptr %19, align 4, !tbaa !9
  %335 = getelementptr inbounds %"struct.glslang::TPpContext::MacroSymbol", ptr %6, i32 0, i32 1
  %336 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 12
  %337 = load ptr, ptr %336, align 8, !tbaa !11
  %338 = invoke noundef i32 @_ZN7glslang10TPpContext11TokenStream8getTokenERNS_17TParseContextBaseEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40) %335, ptr noundef nonnull align 8 dereferenceable(1176) %337, ptr noundef %21)
          to label %339 unwind label %352

339:                                              ; preds = %334
  store i32 %338, ptr %17, align 4, !tbaa !9
  %340 = load i8, ptr %18, align 1, !tbaa !71, !range !69, !noundef !70
  %341 = trunc i8 %340 to i1
  br i1 %341, label %342, label %356

342:                                              ; preds = %339
  %343 = getelementptr inbounds %"class.glslang::TPpToken", ptr %20, i32 0, i32 1
  %344 = load i8, ptr %343, align 8, !tbaa !68, !range !69, !noundef !70
  %345 = trunc i8 %344 to i1
  %346 = getelementptr inbounds %"class.glslang::TPpToken", ptr %21, i32 0, i32 1
  %347 = zext i1 %345 to i8
  store i8 %347, ptr %346, align 8, !tbaa !68
  store i8 0, ptr %18, align 1, !tbaa !71
  br label %356

348:                                              ; preds = %326
  %349 = landingpad { ptr, i32 }
          cleanup
  %350 = extractvalue { ptr, i32 } %349, 0
  store ptr %350, ptr %8, align 8
  %351 = extractvalue { ptr, i32 } %349, 1
  store i32 %351, ptr %9, align 4
  br label %382

352:                                              ; preds = %369, %363, %360, %334, %328, %327
  %353 = landingpad { ptr, i32 }
          cleanup
  %354 = extractvalue { ptr, i32 } %353, 0
  store ptr %354, ptr %8, align 8
  %355 = extractvalue { ptr, i32 } %353, 1
  store i32 %355, ptr %9, align 4
  call void @llvm.lifetime.end.p0(i64 1072, ptr %21) #7
  br label %382

356:                                              ; preds = %342, %339
  %357 = load i32, ptr %19, align 4, !tbaa !9
  %358 = load i32, ptr %17, align 4, !tbaa !9
  %359 = icmp ne i32 %357, %358
  br i1 %359, label %363, label %360

360:                                              ; preds = %356
  %361 = invoke noundef zeroext i1 @_ZNK7glslang8TPpTokenneERKS0_(ptr noundef nonnull align 8 dereferenceable(1065) %20, ptr noundef nonnull align 8 dereferenceable(1065) %21)
          to label %362 unwind label %352

362:                                              ; preds = %360
  br i1 %361, label %363, label %374

363:                                              ; preds = %362, %356
  %364 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 12
  %365 = load ptr, ptr %364, align 8, !tbaa !11
  %366 = getelementptr inbounds %"class.glslang::TPpContext", ptr %22, i32 0, i32 2
  %367 = load i32, ptr %11, align 4, !tbaa !9
  %368 = invoke noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %366, i32 noundef %367)
          to label %369 unwind label %352

369:                                              ; preds = %363
  %370 = load ptr, ptr %365, align 8, !tbaa !62
  %371 = getelementptr inbounds ptr, ptr %370, i64 44
  %372 = load ptr, ptr %371, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %372(ptr noundef nonnull align 8 dereferenceable(1176) %365, ptr noundef nonnull align 8 dereferenceable(24) %12, ptr noundef @.str.10, ptr noundef @.str.1, ptr noundef %368)
          to label %373 unwind label %352

373:                                              ; preds = %369
  store i32 9, ptr %10, align 4
  br label %375

374:                                              ; preds = %362
  store i32 0, ptr %10, align 4
  br label %375

375:                                              ; preds = %374, %373
  call void @llvm.lifetime.end.p0(i64 1072, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 1072, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  %376 = load i32, ptr %10, align 4
  switch i32 %376, label %405 [
    i32 0, label %377
    i32 9, label %381
  ]

377:                                              ; preds = %375
  br label %378

378:                                              ; preds = %377
  %379 = load i32, ptr %17, align 4, !tbaa !9
  %380 = icmp ne i32 %379, -1
  br i1 %380, label %326, label %381, !llvm.loop !77

381:                                              ; preds = %378, %375
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  br label %383

382:                                              ; preds = %352, %348
  call void @llvm.lifetime.end.p0(i64 1072, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  br label %393

383:                                              ; preds = %381, %302
  br label %384

384:                                              ; preds = %383, %280
  br label %385

385:                                              ; preds = %384, %251
  %386 = load ptr, ptr %16, align 8, !tbaa !5
  %387 = invoke noundef nonnull align 8 dereferenceable(73) ptr @_ZN7glslang10TPpContext11MacroSymbolaSERKS1_(ptr noundef nonnull align 8 dereferenceable(73) %386, ptr noundef nonnull align 8 dereferenceable(73) %6)
          to label %388 unwind label %281

388:                                              ; preds = %385
  br label %392

389:                                              ; preds = %248
  %390 = load i32, ptr %11, align 4, !tbaa !9
  invoke void @_ZN7glslang10TPpContext11addMacroDefEiRNS0_11MacroSymbolE(ptr noundef nonnull align 8 dereferenceable(921) %22, i32 noundef %390, ptr noundef nonnull align 8 dereferenceable(73) %6)
          to label %391 unwind label %281

391:                                              ; preds = %389
  br label %392

392:                                              ; preds = %391, %388
  store i32 10, ptr %3, align 4
  store i32 1, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %394

393:                                              ; preds = %382, %281
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  br label %395

394:                                              ; preds = %392, %213, %186, %114
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  br label %397

395:                                              ; preds = %393, %189, %99
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #7
  br label %396

396:                                              ; preds = %395, %95
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  br label %399

397:                                              ; preds = %394, %36
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @_ZN7glslang10TPpContext11MacroSymbolD2Ev(ptr noundef nonnull align 8 dereferenceable(73) %6) #7
  call void @llvm.lifetime.end.p0(i64 80, ptr %6) #7
  %398 = load i32, ptr %3, align 4
  ret i32 %398

399:                                              ; preds = %396, %38
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  call void @_ZN7glslang10TPpContext11MacroSymbolD2Ev(ptr noundef nonnull align 8 dereferenceable(73) %6) #7
  call void @llvm.lifetime.end.p0(i64 80, ptr %6) #7
  br label %400

400:                                              ; preds = %399
  %401 = load ptr, ptr %8, align 8
  %402 = load i32, ptr %9, align 4
  %403 = insertvalue { ptr, i32 } poison, ptr %401, 0
  %404 = insertvalue { ptr, i32 } %403, i32 %402, 1
  resume { ptr, i32 } %404

405:                                              ; preds = %375
  unreachable
}

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7glslang10TPpContext11MacroSymbolC2Ev(ptr noundef nonnull align 8 dereferenceable(73)) unnamed_addr #0 align 2

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #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: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiN7glslang14pool_allocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef) #3 align 2

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

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

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) #0 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: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZStneIiN7glslang14pool_allocatorIiEEEbRKSt6vectorIT_T0_ES8_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #5

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

declare noundef i32 @_ZN7glslang10TPpContext11TokenStream8getTokenERNS_17TParseContextBaseEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(1176), ptr noundef) #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK7glslang8TPpTokenneERKS0_(ptr noundef nonnull align 8 dereferenceable(1065), ptr noundef nonnull align 8 dereferenceable(1065)) #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(73) ptr @_ZN7glslang10TPpContext11MacroSymbolaSERKS1_(ptr noundef nonnull align 8 dereferenceable(73), ptr noundef nonnull align 8 dereferenceable(73)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7glslang10TPpContext11addMacroDefEiRNS0_11MacroSymbolE(ptr noundef nonnull align 8 dereferenceable(921), i32 noundef, ptr noundef nonnull align 8 dereferenceable(73)) #0 align 2

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 256}
!12 = !{!"_ZTSN7glslang10TPpContextE", !13, i64 8, !24, i64 64, !6, i64 208, !10, i64 216, !6, i64 224, !6, i64 232, !10, i64 240, !10, i64 244, !10, i64 248, !6, i64 256, !10, i64 264, !7, i64 268, !10, i64 336, !43, i64 344, !47, i64 368, !47, i64 369, !6, i64 376, !47, i64 384, !48, i64 392, !50, i64 424, !48, i64 504, !56, i64 536, !47, i64 920}
!13 = !{!"_ZTSN7glslang4TMapIiNS_10TPpContext11MacroSymbolESt4lessIiEEE", !14, i64 0}
!14 = !{!"_ZTSSt3mapIiN7glslang10TPpContext11MacroSymbolESt4lessIiENS0_14pool_allocatorISt4pairIKiS2_EEEE", !15, i64 0}
!15 = !{!"_ZTSSt8_Rb_treeIiSt4pairIKiN7glslang10TPpContext11MacroSymbolEESt10_Select1stIS5_ESt4lessIiENS2_14pool_allocatorIS5_EEE", !16, i64 0}
!16 = !{!"_ZTSNSt8_Rb_treeIiSt4pairIKiN7glslang10TPpContext11MacroSymbolEESt10_Select1stIS5_ESt4lessIiENS2_14pool_allocatorIS5_EEE13_Rb_tree_implIS9_Lb1EEE", !17, i64 0, !18, i64 8, !20, i64 16}
!17 = !{!"_ZTSN7glslang14pool_allocatorISt13_Rb_tree_nodeISt4pairIKiNS_10TPpContext11MacroSymbolEEEEE", !6, i64 0}
!18 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIiEE", !19, i64 0}
!19 = !{!"_ZTSSt4lessIiE"}
!20 = !{!"_ZTSSt15_Rb_tree_header", !21, i64 0, !23, i64 32}
!21 = !{!"_ZTSSt18_Rb_tree_node_base", !22, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!22 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!23 = !{!"long", !7, i64 0}
!24 = !{!"_ZTSN7glslang14TStringAtomMapE", !25, i64 0, !34, i64 64, !10, i64 96, !40, i64 104}
!25 = !{!"_ZTSN7glslang13TUnorderedMapINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEEiSt4hashIS7_ESt8equal_toIS7_EEE", !26, i64 0}
!26 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEEiSt4hashIS7_ESt8equal_toIS7_ENS5_ISt4pairIKS7_iEEEE", !27, i64 0}
!27 = !{!"_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", !28, i64 0, !6, i64 8, !23, i64 16, !31, i64 24, !23, i64 32, !32, i64 40, !6, i64 56}
!28 = !{!"_ZTSNSt8__detail16_Hashtable_allocIN7glslang14pool_allocatorINS_10_Hash_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS2_IcEEEEiELb1EEEEEEE", !29, i64 0}
!29 = !{!"_ZTSNSt8__detail21_Hashtable_ebo_helperILi0EN7glslang14pool_allocatorINS_10_Hash_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS2_IcEEEEiELb1EEEEELb0EEE", !30, i64 0}
!30 = !{!"_ZTSN7glslang14pool_allocatorINSt8__detail10_Hash_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_IcEEEEiELb1EEEEE", !6, i64 0}
!31 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !6, i64 0}
!32 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !33, i64 0, !23, i64 8}
!33 = !{!"float", !7, i64 0}
!34 = !{!"_ZTSN7glslang7TVectorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEEEE", !35, i64 0}
!35 = !{!"_ZTSSt6vectorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE", !36, i64 0}
!36 = !{!"_ZTSSt12_Vector_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE12_Vector_implE", !38, i64 0, !39, i64 8}
!38 = !{!"_ZTSN7glslang14pool_allocatorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_IcEEEEEE", !6, i64 0}
!39 = !{!"_ZTSNSt12_Vector_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!40 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEE", !41, i64 0, !23, i64 16, !7, i64 24}
!41 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEE12_Alloc_hiderE", !42, i64 0, !6, i64 8}
!42 = !{!"_ZTSN7glslang14pool_allocatorIcEE", !6, i64 0}
!43 = !{!"_ZTSSt6vectorIPN7glslang10TPpContext6tInputESaIS3_EE", !44, i64 0}
!44 = !{!"_ZTSSt12_Vector_baseIPN7glslang10TPpContext6tInputESaIS3_EE", !45, i64 0}
!45 = !{!"_ZTSNSt12_Vector_baseIPN7glslang10TPpContext6tInputESaIS3_EE12_Vector_implE", !46, i64 0}
!46 = !{!"_ZTSNSt12_Vector_baseIPN7glslang10TPpContext6tInputESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!47 = !{!"bool", !7, i64 0}
!48 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !49, i64 0, !23, i64 8, !7, i64 16}
!49 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!50 = !{!"_ZTSSt5stackIPN7glslang7TShader8Includer13IncludeResultESt5dequeIS4_SaIS4_EEE", !51, i64 0}
!51 = !{!"_ZTSSt5dequeIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE", !52, i64 0}
!52 = !{!"_ZTSSt11_Deque_baseIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE", !53, i64 0}
!53 = !{!"_ZTSNSt11_Deque_baseIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE11_Deque_implE", !54, i64 0}
!54 = !{!"_ZTSNSt11_Deque_baseIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE16_Deque_impl_dataE", !6, i64 0, !23, i64 8, !55, i64 16, !55, i64 48}
!55 = !{!"_ZTSSt15_Deque_iteratorIPN7glslang7TShader8Includer13IncludeResultERS4_PS4_E", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!56 = !{!"_ZTSNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE", !57, i64 0, !58, i64 16}
!57 = !{!"_ZTSSi", !23, i64 8}
!58 = !{!"_ZTSNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE", !59, i64 0, !61, i64 64, !48, i64 72}
!59 = !{!"_ZTSSt15basic_streambufIcSt11char_traitsIcEE", !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !60, i64 56}
!60 = !{!"_ZTSSt6locale", !6, i64 0}
!61 = !{!"_ZTSSt13_Ios_Openmode", !7, i64 0}
!62 = !{!63, !63, i64 0}
!63 = !{!"vtable pointer", !8, i64 0}
!64 = !{!65, !10, i64 8}
!65 = !{!"_ZTSN7glslang8TPpTokenE", !66, i64 0, !47, i64 24, !7, i64 32, !7, i64 40}
!66 = !{!"_ZTSN7glslang10TSourceLocE", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16}
!67 = !{i64 0, i64 8, !5, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 4, !9}
!68 = !{!65, !47, i64 24}
!69 = !{i8 0, i8 2}
!70 = !{}
!71 = !{!47, !47, i64 0}
!72 = !{!23, !23, i64 0}
!73 = distinct !{!73, !74}
!74 = !{!"llvm.loop.mustprogress"}
!75 = distinct !{!75, !74}
!76 = distinct !{!76, !74}
!77 = distinct !{!77, !74}


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

%"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 }
%"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 }

@.str = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [1 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [42 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7glslang10TPpContext9CPPdefineEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef %1) local_unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"struct.glslang::TPpContext::MacroSymbol", align 8
  %4 = alloca %"struct.glslang::TSourceLoc", align 8
  %5 = alloca i32, align 4
  %6 = alloca %"class.glslang::TPpToken", align 8
  %7 = alloca %"class.glslang::TPpToken", align 8
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %3) #7
  call void @_ZN7glslang10TPpContext11MacroSymbolC2Ev(ptr noundef nonnull align 8 dereferenceable(73) %3)
  %8 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef %1)
          to label %9 unwind label %16

9:                                                ; preds = %2
  %.not = icmp eq i32 %8, 162
  br i1 %.not, label %18, label %10

10:                                               ; preds = %9
  %11 = getelementptr inbounds i8, ptr %0, i64 256
  %12 = load ptr, ptr %11, align 8, !tbaa !5
  %13 = load ptr, ptr %12, align 8, !tbaa !60
  %14 = getelementptr inbounds i8, ptr %13, i64 352
  %15 = load ptr, ptr %14, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %15(ptr noundef nonnull align 8 dereferenceable(1176) %12, ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2)
          to label %185 unwind label %16

16:                                               ; preds = %22, %10, %2
  %17 = landingpad { ptr, i32 }
          cleanup
  br label %186

18:                                               ; preds = %9
  %19 = getelementptr inbounds i8, ptr %1, i64 8
  %20 = load i32, ptr %19, align 8, !tbaa !62
  %21 = icmp sgt i32 %20, -1
  br i1 %21, label %22, label %29

22:                                               ; preds = %18
  %23 = getelementptr inbounds i8, ptr %0, i64 256
  %24 = load ptr, ptr %23, align 8, !tbaa !5
  %25 = getelementptr inbounds i8, ptr %1, i64 40
  %26 = load ptr, ptr %24, align 8, !tbaa !60
  %27 = getelementptr inbounds i8, ptr %26, i64 416
  %28 = load ptr, ptr %27, align 8
  invoke void %28(ptr noundef nonnull align 8 dereferenceable(1176) %24, ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull %25, ptr noundef nonnull @.str.1)
          to label %29 unwind label %16

29:                                               ; preds = %22, %18
  %30 = getelementptr inbounds i8, ptr %0, i64 64
  %31 = getelementptr inbounds i8, ptr %1, i64 40
  %32 = invoke noundef i32 @_ZN7glslang14TStringAtomMap10getAddAtomEPKc(ptr noundef nonnull align 8 dereferenceable(144) %30, ptr noundef nonnull %31)
          to label %33 unwind label %51

33:                                               ; preds = %29
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull align 8 dereferenceable(24) %1, i64 24, i1 false), !tbaa.struct !65
  %34 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef nonnull %1)
          to label %35 unwind label %.loopexit.split-lp120.loopexit.split-lp

35:                                               ; preds = %33
  switch i32 %34, label %._crit_edge [
    i32 40, label %36
    i32 -1, label %101
    i32 10, label %101
  ]

._crit_edge:                                      ; preds = %35
  %.phi.trans.insert = getelementptr inbounds i8, ptr %1, i64 24
  %.pre = load i8, ptr %.phi.trans.insert, align 8, !tbaa !68, !range !69
  br label %92

36:                                               ; preds = %35
  %37 = getelementptr inbounds i8, ptr %1, i64 24
  %38 = load i8, ptr %37, align 8, !tbaa !68, !range !69, !noundef !70
  %39 = trunc nuw i8 %38 to i1
  br i1 %39, label %92, label %40

40:                                               ; preds = %36
  %41 = getelementptr inbounds i8, ptr %3, i64 72
  %42 = load i8, ptr %41, align 8
  %43 = or i8 %42, 1
  store i8 %43, ptr %41, align 8
  %44 = getelementptr inbounds i8, ptr %0, i64 256
  br label %45

45:                                               ; preds = %84, %40
  %46 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef %1)
          to label %47 unwind label %.loopexit.split-lp120.loopexit

47:                                               ; preds = %45
  %48 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %3) #7
  %49 = icmp eq i64 %48, 0
  %50 = icmp eq i32 %46, 41
  %or.cond = and i1 %50, %49
  br i1 %or.cond, label %.thread, label %53

51:                                               ; preds = %29
  %52 = landingpad { ptr, i32 }
          cleanup
  br label %186

.loopexit119:                                     ; preds = %105, %106, %112
  %lpad.loopexit121 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp120

.loopexit.split-lp120.loopexit:                   ; preds = %45
  %lpad.loopexit124 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp120

.loopexit.split-lp120.loopexit.split-lp:          ; preds = %95, %.thread, %85, %54, %33
  %lpad.loopexit.split-lp125 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp120

53:                                               ; preds = %47
  %.not90 = icmp eq i32 %46, 162
  br i1 %.not90, label %59, label %54

54:                                               ; preds = %53
  %55 = load ptr, ptr %44, align 8, !tbaa !5
  %56 = load ptr, ptr %55, align 8, !tbaa !60
  %57 = getelementptr inbounds i8, ptr %56, i64 352
  %58 = load ptr, ptr %57, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %58(ptr noundef nonnull align 8 dereferenceable(1176) %55, ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2)
          to label %184 unwind label %.loopexit.split-lp120.loopexit.split-lp

59:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #7
  %60 = invoke noundef i32 @_ZN7glslang14TStringAtomMap10getAddAtomEPKc(ptr noundef nonnull align 8 dereferenceable(144) %30, ptr noundef nonnull %31)
          to label %61 unwind label %67

61:                                               ; preds = %59
  store i32 %60, ptr %5, align 4, !tbaa !67
  %62 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %3) #7
  %.not136 = icmp eq i64 %62, 0
  br i1 %.not136, label %.critedge, label %.lr.ph

63:                                               ; preds = %.lr.ph
  %64 = add nuw i64 %.074135, 1
  %65 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %3) #7
  %66 = icmp ult i64 %64, %65
  br i1 %66, label %.lr.ph, label %.critedge, !llvm.loop !71

67:                                               ; preds = %59
  %68 = landingpad { ptr, i32 }
          cleanup
  br label %90

.lr.ph:                                           ; preds = %61, %63
  %.074135 = phi i64 [ %64, %63 ], [ 0, %61 ]
  %69 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiN7glslang14pool_allocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(32) %3, i64 noundef %.074135) #7
  %70 = load i32, ptr %69, align 4, !tbaa !67
  %71 = load i32, ptr %5, align 4, !tbaa !67
  %72 = icmp eq i32 %70, %71
  br i1 %72, label %73, label %63

73:                                               ; preds = %.lr.ph
  %74 = load ptr, ptr %44, align 8, !tbaa !5
  %75 = load ptr, ptr %74, align 8, !tbaa !60
  %76 = getelementptr inbounds i8, ptr %75, i64 352
  %77 = load ptr, ptr %76, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %77(ptr noundef nonnull align 8 dereferenceable(1176) %74, ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2)
          to label %82 unwind label %78

78:                                               ; preds = %73
  %79 = landingpad { ptr, i32 }
          cleanup
  br label %90

.critedge:                                        ; preds = %63, %61
  invoke void @_ZNSt6vectorIiN7glslang14pool_allocatorIiEEE9push_backERKi(ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef nonnull align 4 dereferenceable(4) %5)
          to label %82 unwind label %80

80:                                               ; preds = %82, %.critedge
  %81 = landingpad { ptr, i32 }
          cleanup
  br label %90

82:                                               ; preds = %73, %.critedge
  %83 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef %1)
          to label %84 unwind label %80

84:                                               ; preds = %82
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  switch i32 %83, label %85 [
    i32 44, label %45
    i32 41, label %.thread
  ]

85:                                               ; preds = %84
  %86 = load ptr, ptr %44, align 8, !tbaa !5
  %87 = load ptr, ptr %86, align 8, !tbaa !60
  %88 = getelementptr inbounds i8, ptr %87, i64 352
  %89 = load ptr, ptr %88, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %89(ptr noundef nonnull align 8 dereferenceable(1176) %86, ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2)
          to label %184 unwind label %.loopexit.split-lp120.loopexit.split-lp

90:                                               ; preds = %78, %80, %67
  %.pn.pn = phi { ptr, i32 } [ %68, %67 ], [ %81, %80 ], [ %79, %78 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #7
  br label %.loopexit.split-lp120

.thread:                                          ; preds = %84, %47
  %91 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef %1)
          to label %101 unwind label %.loopexit.split-lp120.loopexit.split-lp

92:                                               ; preds = %._crit_edge, %36
  %93 = phi i8 [ %.pre, %._crit_edge ], [ %38, %36 ]
  %94 = trunc nuw i8 %93 to i1
  br i1 %94, label %101, label %95

95:                                               ; preds = %92
  %96 = getelementptr inbounds i8, ptr %0, i64 256
  %97 = load ptr, ptr %96, align 8, !tbaa !5
  %98 = load ptr, ptr %97, align 8, !tbaa !60
  %99 = getelementptr inbounds i8, ptr %98, i64 360
  %100 = load ptr, ptr %99, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %100(ptr noundef nonnull align 8 dereferenceable(1176) %97, ptr noundef nonnull align 8 dereferenceable(24) %1, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2)
          to label %184 unwind label %.loopexit.split-lp120.loopexit.split-lp

101:                                              ; preds = %35, %35, %.thread, %92
  %.170 = phi i32 [ %34, %92 ], [ %91, %.thread ], [ %34, %35 ], [ %34, %35 ]
  %102 = getelementptr inbounds i8, ptr %3, i64 32
  %103 = getelementptr inbounds i8, ptr %1, i64 24
  br label %104

104:                                              ; preds = %.backedge, %101
  %.2 = phi i32 [ %.170, %101 ], [ %107, %.backedge ]
  switch i32 %.2, label %105 [
    i32 -1, label %113
    i32 10, label %113
  ]

105:                                              ; preds = %104
  invoke void @_ZN7glslang10TPpContext11TokenStream8putTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40) %102, i32 noundef %.2, ptr noundef %1)
          to label %106 unwind label %.loopexit119

106:                                              ; preds = %105
  %107 = invoke noundef i32 @_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(921) %0, ptr noundef %1)
          to label %108 unwind label %.loopexit119

108:                                              ; preds = %106
  %.not104 = icmp eq i32 %107, 10
  br i1 %.not104, label %.backedge, label %109

109:                                              ; preds = %108
  %110 = load i8, ptr %103, align 8, !tbaa !68, !range !69, !noundef !70
  %111 = trunc nuw i8 %110 to i1
  br i1 %111, label %112, label %.backedge

112:                                              ; preds = %109
  invoke void @_ZN7glslang10TPpContext11TokenStream8putTokenEiPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40) %102, i32 noundef 32, ptr noundef nonnull %1)
          to label %.backedge unwind label %.loopexit119

.backedge:                                        ; preds = %112, %109, %108
  br label %104, !llvm.loop !73

113:                                              ; preds = %104, %104
  %114 = invoke noundef ptr @_ZN7glslang10TPpContext14lookupMacroDefEi(ptr noundef nonnull align 8 dereferenceable(921) %0, i32 noundef %32)
          to label %115 unwind label %125

115:                                              ; preds = %113
  %.not94 = icmp eq ptr %114, null
  br i1 %.not94, label %183, label %116

116:                                              ; preds = %115
  %117 = getelementptr inbounds i8, ptr %114, i64 72
  %118 = load i8, ptr %117, align 8
  %119 = and i8 %118, 4
  %.not95 = icmp eq i8 %119, 0
  br i1 %.not95, label %120, label %.loopexit118

120:                                              ; preds = %116
  %121 = getelementptr inbounds i8, ptr %3, i64 72
  %122 = load i8, ptr %121, align 8
  %123 = xor i8 %122, %118
  %124 = and i8 %123, 1
  %.not96 = icmp eq i8 %124, 0
  br i1 %.not96, label %127, label %.invoke

125:                                              ; preds = %.invoke, %183, %.loopexit118, %140, %137, %113
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp120

127:                                              ; preds = %120
  %128 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %114) #7
  %129 = call noundef i64 @_ZNKSt6vectorIiN7glslang14pool_allocatorIiEEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %3) #7
  %.not97 = icmp eq i64 %128, %129
  br i1 %.not97, label %137, label %.invoke

.invoke:                                          ; preds = %127, %120
  %130 = phi ptr [ @.str.7, %120 ], [ @.str.8, %127 ]
  %131 = getelementptr inbounds i8, ptr %0, i64 256
  %132 = load ptr, ptr %131, align 8, !tbaa !5
  %133 = call noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %30, i32 noundef %32)
  %134 = load ptr, ptr %132, align 8, !tbaa !60
  %135 = getelementptr inbounds i8, ptr %134, i64 352
  %136 = load ptr, ptr %135, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %136(ptr noundef nonnull align 8 dereferenceable(1176) %132, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull %130, ptr noundef nonnull @.str.1, ptr noundef %133)
          to label %.loopexit118 unwind label %125

137:                                              ; preds = %127
  %138 = invoke noundef zeroext i1 @_ZStneIiN7glslang14pool_allocatorIiEEEbRKSt6vectorIT_T0_ES8_(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 8 dereferenceable(32) %3)
          to label %139 unwind label %125

139:                                              ; preds = %137
  br i1 %138, label %140, label %.peel.begin

140:                                              ; preds = %139
  %141 = getelementptr inbounds i8, ptr %0, i64 256
  %142 = load ptr, ptr %141, align 8, !tbaa !5
  %143 = call noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %30, i32 noundef %32)
  %144 = load ptr, ptr %142, align 8, !tbaa !60
  %145 = getelementptr inbounds i8, ptr %144, i64 352
  %146 = load ptr, ptr %145, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %146(ptr noundef nonnull align 8 dereferenceable(1176) %142, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, ptr noundef %143)
          to label %.peel.begin unwind label %125

.peel.begin:                                      ; preds = %140, %139
  %147 = getelementptr inbounds i8, ptr %114, i64 32
  call void @_ZN7glslang10TPpContext11TokenStream5resetEv(ptr noundef nonnull align 8 dereferenceable(40) %147)
  call void @_ZN7glslang10TPpContext11TokenStream5resetEv(ptr noundef nonnull align 8 dereferenceable(40) %102)
  %148 = getelementptr inbounds i8, ptr %0, i64 256
  %149 = getelementptr inbounds i8, ptr %6, i64 24
  %150 = getelementptr inbounds i8, ptr %7, i64 24
  call void @llvm.lifetime.start.p0(i64 1072, ptr nonnull %6) #7
  invoke void @_ZN7glslang8TPpTokenC2Ev(ptr noundef nonnull align 8 dereferenceable(1065) %6)
          to label %151 unwind label %.loopexit.split-lp165

151:                                              ; preds = %.peel.begin
  call void @llvm.lifetime.start.p0(i64 1072, ptr nonnull %7) #7
  invoke void @_ZN7glslang8TPpTokenC2Ev(ptr noundef nonnull align 8 dereferenceable(1065) %7)
          to label %152 unwind label %.loopexit.loopexit.split-lp

152:                                              ; preds = %151
  %153 = load ptr, ptr %148, align 8, !tbaa !5
  %154 = invoke noundef i32 @_ZN7glslang10TPpContext11TokenStream8getTokenERNS_17TParseContextBaseEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40) %147, ptr noundef nonnull align 8 dereferenceable(1176) %153, ptr noundef nonnull %6)
          to label %155 unwind label %.loopexit.loopexit.split-lp

155:                                              ; preds = %152
  %156 = load ptr, ptr %148, align 8, !tbaa !5
  %157 = invoke noundef i32 @_ZN7glslang10TPpContext11TokenStream8getTokenERNS_17TParseContextBaseEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40) %102, ptr noundef nonnull align 8 dereferenceable(1176) %156, ptr noundef nonnull %7)
          to label %158 unwind label %.loopexit.loopexit.split-lp

158:                                              ; preds = %155
  %159 = load i8, ptr %149, align 8, !tbaa !68, !range !69, !noundef !70
  store i8 %159, ptr %150, align 8, !tbaa !68
  %.not98.peel = icmp eq i32 %154, %157
  br i1 %.not98.peel, label %160, label %.loopexit172

160:                                              ; preds = %158
  %161 = invoke noundef zeroext i1 @_ZNK7glslang8TPpTokenneERKS0_(ptr noundef nonnull align 8 dereferenceable(1065) %6, ptr noundef nonnull align 8 dereferenceable(1065) %7)
          to label %162 unwind label %.loopexit.loopexit.split-lp

162:                                              ; preds = %160
  br i1 %161, label %.loopexit172, label %163

163:                                              ; preds = %162
  call void @llvm.lifetime.end.p0(i64 1072, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 1072, ptr nonnull %6) #7
  %.not101.peel = icmp eq i32 %154, -1
  br i1 %.not101.peel, label %.loopexit118, label %.peel.newph

.peel.newph:                                      ; preds = %163, %180
  call void @llvm.lifetime.start.p0(i64 1072, ptr nonnull %6) #7
  invoke void @_ZN7glslang8TPpTokenC2Ev(ptr noundef nonnull align 8 dereferenceable(1065) %6)
          to label %164 unwind label %.loopexit164

164:                                              ; preds = %.peel.newph
  call void @llvm.lifetime.start.p0(i64 1072, ptr nonnull %7) #7
  invoke void @_ZN7glslang8TPpTokenC2Ev(ptr noundef nonnull align 8 dereferenceable(1065) %7)
          to label %165 unwind label %.loopexit.loopexit

165:                                              ; preds = %164
  %166 = load ptr, ptr %148, align 8, !tbaa !5
  %167 = invoke noundef i32 @_ZN7glslang10TPpContext11TokenStream8getTokenERNS_17TParseContextBaseEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40) %147, ptr noundef nonnull align 8 dereferenceable(1176) %166, ptr noundef nonnull %6)
          to label %168 unwind label %.loopexit.loopexit

168:                                              ; preds = %165
  %169 = load ptr, ptr %148, align 8, !tbaa !5
  %170 = invoke noundef i32 @_ZN7glslang10TPpContext11TokenStream8getTokenERNS_17TParseContextBaseEPNS_8TPpTokenE(ptr noundef nonnull align 8 dereferenceable(40) %102, ptr noundef nonnull align 8 dereferenceable(1176) %169, ptr noundef nonnull %7)
          to label %171 unwind label %.loopexit.loopexit

.loopexit164:                                     ; preds = %.peel.newph
  %lpad.loopexit166 = landingpad { ptr, i32 }
          cleanup
  br label %181

.loopexit.split-lp165:                            ; preds = %.peel.begin
  %lpad.loopexit.split-lp167 = landingpad { ptr, i32 }
          cleanup
  br label %181

.loopexit.loopexit:                               ; preds = %172, %168, %165, %164
  %lpad.loopexit169 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit

.loopexit.loopexit.split-lp:                      ; preds = %151, %152, %155, %160
  %lpad.loopexit.split-lp170 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit

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

.loopexit:                                        ; preds = %.loopexit.loopexit, %.loopexit.loopexit.split-lp, %.loopexit.split-lp
  %lpad.phi = phi { ptr, i32 } [ %lpad.loopexit.split-lp, %.loopexit.split-lp ], [ %lpad.loopexit169, %.loopexit.loopexit ], [ %lpad.loopexit.split-lp170, %.loopexit.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 1072, ptr nonnull %7) #7
  br label %181

171:                                              ; preds = %168
  %.not98 = icmp eq i32 %167, %170
  br i1 %.not98, label %172, label %.loopexit172

172:                                              ; preds = %171
  %173 = invoke noundef zeroext i1 @_ZNK7glslang8TPpTokenneERKS0_(ptr noundef nonnull align 8 dereferenceable(1065) %6, ptr noundef nonnull align 8 dereferenceable(1065) %7)
          to label %174 unwind label %.loopexit.loopexit

174:                                              ; preds = %172
  br i1 %173, label %.loopexit172, label %180

.loopexit172:                                     ; preds = %174, %171, %162, %158
  %175 = load ptr, ptr %148, align 8, !tbaa !5
  %176 = call noundef ptr @_ZNK7glslang14TStringAtomMap9getStringEi(ptr noundef nonnull align 8 dereferenceable(144) %30, i32 noundef %32)
  %177 = load ptr, ptr %175, align 8, !tbaa !60
  %178 = getelementptr inbounds i8, ptr %177, i64 352
  %179 = load ptr, ptr %178, align 8
  invoke void (ptr, ptr, ptr, ptr, ptr, ...) %179(ptr noundef nonnull align 8 dereferenceable(1176) %175, ptr noundef nonnull align 8 dereferenceable(24) %4, ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, ptr noundef %176)
          to label %.thread113 unwind label %.loopexit.split-lp

.thread113:                                       ; preds = %.loopexit172
  call void @llvm.lifetime.end.p0(i64 1072, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 1072, ptr nonnull %6) #7
  br label %.loopexit118

180:                                              ; preds = %174
  call void @llvm.lifetime.end.p0(i64 1072, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 1072, ptr nonnull %6) #7
  %.not101 = icmp eq i32 %167, -1
  br i1 %.not101, label %.loopexit118, label %.peel.newph, !llvm.loop !74

181:                                              ; preds = %.loopexit164, %.loopexit.split-lp165, %.loopexit
  %.pn99 = phi { ptr, i32 } [ %lpad.phi, %.loopexit ], [ %lpad.loopexit166, %.loopexit164 ], [ %lpad.loopexit.split-lp167, %.loopexit.split-lp165 ]
  call void @llvm.lifetime.end.p0(i64 1072, ptr nonnull %6) #7
  br label %.loopexit.split-lp120

.loopexit118:                                     ; preds = %163, %180, %.invoke, %.thread113, %116
  %182 = invoke noundef nonnull align 8 dereferenceable(73) ptr @_ZN7glslang10TPpContext11MacroSymbolaSERKS1_(ptr noundef nonnull align 8 dereferenceable(73) %114, ptr noundef nonnull align 8 dereferenceable(73) %3)
          to label %184 unwind label %125

183:                                              ; preds = %115
  invoke void @_ZN7glslang10TPpContext11addMacroDefEiRNS0_11MacroSymbolE(ptr noundef nonnull align 8 dereferenceable(921) %0, i32 noundef %32, ptr noundef nonnull align 8 dereferenceable(73) %3)
          to label %184 unwind label %125

184:                                              ; preds = %.loopexit118, %183, %95, %85, %54
  %.0 = phi i32 [ %46, %54 ], [ %83, %85 ], [ %34, %95 ], [ 10, %183 ], [ 10, %.loopexit118 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #7
  br label %185

.loopexit.split-lp120:                            ; preds = %.loopexit119, %.loopexit.split-lp120.loopexit.split-lp, %.loopexit.split-lp120.loopexit, %125, %181, %90
  %.pn105 = phi { ptr, i32 } [ %.pn.pn, %90 ], [ %126, %125 ], [ %.pn99, %181 ], [ %lpad.loopexit121, %.loopexit119 ], [ %lpad.loopexit124, %.loopexit.split-lp120.loopexit ], [ %lpad.loopexit.split-lp125, %.loopexit.split-lp120.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #7
  br label %186

185:                                              ; preds = %10, %184
  %.1 = phi i32 [ %.0, %184 ], [ %8, %10 ]
  call void @_ZN7glslang10TPpContext11MacroSymbolD2Ev(ptr noundef nonnull align 8 dereferenceable(73) %3) #7
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %3) #7
  ret i32 %.1

186:                                              ; preds = %51, %.loopexit.split-lp120, %16
  %.pn108 = phi { ptr, i32 } [ %17, %16 ], [ %.pn105, %.loopexit.split-lp120 ], [ %52, %51 ]
  call void @_ZN7glslang10TPpContext11MacroSymbolD2Ev(ptr noundef nonnull align 8 dereferenceable(73) %3) #7
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %3) #7
  resume { ptr, i32 } %.pn108
}

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7glslang10TPpContext11MacroSymbolC2Ev(ptr noundef nonnull align 8 dereferenceable(73)) unnamed_addr #0 align 2

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #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 nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIiN7glslang14pool_allocatorIiEEEixEm(ptr noundef nonnull align 8 dereferenceable(32), i64 noundef) 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) #1

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

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 #0 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: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZStneIiN7glslang14pool_allocatorIiEEEbRKSt6vectorIT_T0_ES8_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK7glslang8TPpTokenneERKS0_(ptr noundef nonnull align 8 dereferenceable(1065), ptr noundef nonnull align 8 dereferenceable(1065)) local_unnamed_addr #0 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(73) ptr @_ZN7glslang10TPpContext11MacroSymbolaSERKS1_(ptr noundef nonnull align 8 dereferenceable(73), ptr noundef nonnull align 8 dereferenceable(73)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7glslang10TPpContext11addMacroDefEiRNS0_11MacroSymbolE(ptr noundef nonnull align 8 dereferenceable(921), i32 noundef, ptr noundef nonnull align 8 dereferenceable(73)) local_unnamed_addr #0 align 2

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { 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 256}
!6 = !{!"_ZTSN7glslang10TPpContextE", !7, i64 8, !21, i64 64, !12, i64 208, !37, i64 216, !12, i64 224, !12, i64 232, !37, i64 240, !37, i64 244, !37, i64 248, !12, i64 256, !37, i64 264, !13, i64 268, !37, i64 336, !41, i64 344, !45, i64 368, !45, i64 369, !12, i64 376, !45, i64 384, !46, i64 392, !48, i64 424, !46, i64 504, !54, i64 536, !45, i64 920}
!7 = !{!"_ZTSN7glslang4TMapIiNS_10TPpContext11MacroSymbolESt4lessIiEEE", !8, i64 0}
!8 = !{!"_ZTSSt3mapIiN7glslang10TPpContext11MacroSymbolESt4lessIiENS0_14pool_allocatorISt4pairIKiS2_EEEE", !9, i64 0}
!9 = !{!"_ZTSSt8_Rb_treeIiSt4pairIKiN7glslang10TPpContext11MacroSymbolEESt10_Select1stIS5_ESt4lessIiENS2_14pool_allocatorIS5_EEE", !10, i64 0}
!10 = !{!"_ZTSNSt8_Rb_treeIiSt4pairIKiN7glslang10TPpContext11MacroSymbolEESt10_Select1stIS5_ESt4lessIiENS2_14pool_allocatorIS5_EEE13_Rb_tree_implIS9_Lb1EEE", !11, i64 0, !15, i64 8, !17, i64 16}
!11 = !{!"_ZTSN7glslang14pool_allocatorISt13_Rb_tree_nodeISt4pairIKiNS_10TPpContext11MacroSymbolEEEEE", !12, i64 0}
!12 = !{!"any pointer", !13, i64 0}
!13 = !{!"omnipotent char", !14, i64 0}
!14 = !{!"Simple C++ TBAA"}
!15 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIiEE", !16, i64 0}
!16 = !{!"_ZTSSt4lessIiE"}
!17 = !{!"_ZTSSt15_Rb_tree_header", !18, i64 0, !20, i64 32}
!18 = !{!"_ZTSSt18_Rb_tree_node_base", !19, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!19 = !{!"_ZTSSt14_Rb_tree_color", !13, i64 0}
!20 = !{!"long", !13, i64 0}
!21 = !{!"_ZTSN7glslang14TStringAtomMapE", !22, i64 0, !31, i64 64, !37, i64 96, !38, i64 104}
!22 = !{!"_ZTSN7glslang13TUnorderedMapINSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEEiSt4hashIS7_ESt8equal_toIS7_EEE", !23, i64 0}
!23 = !{!"_ZTSSt13unordered_mapINSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEEiSt4hashIS7_ESt8equal_toIS7_ENS5_ISt4pairIKS7_iEEEE", !24, i64 0}
!24 = !{!"_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", !25, i64 0, !12, i64 8, !20, i64 16, !28, i64 24, !20, i64 32, !29, i64 40, !12, i64 56}
!25 = !{!"_ZTSNSt8__detail16_Hashtable_allocIN7glslang14pool_allocatorINS_10_Hash_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS2_IcEEEEiELb1EEEEEEE", !26, i64 0}
!26 = !{!"_ZTSNSt8__detail21_Hashtable_ebo_helperILi0EN7glslang14pool_allocatorINS_10_Hash_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS2_IcEEEEiELb1EEEEELb0EEE", !27, i64 0}
!27 = !{!"_ZTSN7glslang14pool_allocatorINSt8__detail10_Hash_nodeISt4pairIKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_IcEEEEiELb1EEEEE", !12, i64 0}
!28 = !{!"_ZTSNSt8__detail15_Hash_node_baseE", !12, i64 0}
!29 = !{!"_ZTSNSt8__detail20_Prime_rehash_policyE", !30, i64 0, !20, i64 8}
!30 = !{!"float", !13, i64 0}
!31 = !{!"_ZTSN7glslang7TVectorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS_14pool_allocatorIcEEEEEE", !32, i64 0}
!32 = !{!"_ZTSSt6vectorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE12_Vector_implE", !35, i64 0, !36, i64 8}
!35 = !{!"_ZTSN7glslang14pool_allocatorIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcENS0_IcEEEEEE", !12, i64 0}
!36 = !{!"_ZTSNSt12_Vector_baseIPKNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEENS5_IS9_EEE17_Vector_impl_dataE", !12, i64 0, !12, i64 8, !12, i64 16}
!37 = !{!"int", !13, i64 0}
!38 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEEE", !39, i64 0, !20, i64 16, !13, i64 24}
!39 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcEN7glslang14pool_allocatorIcEEE12_Alloc_hiderE", !40, i64 0, !12, i64 8}
!40 = !{!"_ZTSN7glslang14pool_allocatorIcEE", !12, i64 0}
!41 = !{!"_ZTSSt6vectorIPN7glslang10TPpContext6tInputESaIS3_EE", !42, i64 0}
!42 = !{!"_ZTSSt12_Vector_baseIPN7glslang10TPpContext6tInputESaIS3_EE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIPN7glslang10TPpContext6tInputESaIS3_EE12_Vector_implE", !44, i64 0}
!44 = !{!"_ZTSNSt12_Vector_baseIPN7glslang10TPpContext6tInputESaIS3_EE17_Vector_impl_dataE", !12, i64 0, !12, i64 8, !12, i64 16}
!45 = !{!"bool", !13, i64 0}
!46 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !47, i64 0, !20, i64 8, !13, i64 16}
!47 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !12, i64 0}
!48 = !{!"_ZTSSt5stackIPN7glslang7TShader8Includer13IncludeResultESt5dequeIS4_SaIS4_EEE", !49, i64 0}
!49 = !{!"_ZTSSt5dequeIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE", !50, i64 0}
!50 = !{!"_ZTSSt11_Deque_baseIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE", !51, i64 0}
!51 = !{!"_ZTSNSt11_Deque_baseIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE11_Deque_implE", !52, i64 0}
!52 = !{!"_ZTSNSt11_Deque_baseIPN7glslang7TShader8Includer13IncludeResultESaIS4_EE16_Deque_impl_dataE", !12, i64 0, !20, i64 8, !53, i64 16, !53, i64 48}
!53 = !{!"_ZTSSt15_Deque_iteratorIPN7glslang7TShader8Includer13IncludeResultERS4_PS4_E", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!54 = !{!"_ZTSNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE", !55, i64 0, !56, i64 16}
!55 = !{!"_ZTSSi", !20, i64 8}
!56 = !{!"_ZTSNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE", !57, i64 0, !59, i64 64, !46, i64 72}
!57 = !{!"_ZTSSt15basic_streambufIcSt11char_traitsIcEE", !12, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !58, i64 56}
!58 = !{!"_ZTSSt6locale", !12, i64 0}
!59 = !{!"_ZTSSt13_Ios_Openmode", !13, i64 0}
!60 = !{!61, !61, i64 0}
!61 = !{!"vtable pointer", !14, i64 0}
!62 = !{!63, !37, i64 8}
!63 = !{!"_ZTSN7glslang8TPpTokenE", !64, i64 0, !45, i64 24, !13, i64 32, !13, i64 40}
!64 = !{!"_ZTSN7glslang10TSourceLocE", !12, i64 0, !37, i64 8, !37, i64 12, !37, i64 16}
!65 = !{i64 0, i64 8, !66, i64 8, i64 4, !67, i64 12, i64 4, !67, i64 16, i64 4, !67}
!66 = !{!12, !12, i64 0}
!67 = !{!37, !37, i64 0}
!68 = !{!63, !45, i64 24}
!69 = !{i8 0, i8 2}
!70 = !{}
!71 = distinct !{!71, !72}
!72 = !{!"llvm.loop.mustprogress"}
!73 = distinct !{!73, !72}
!74 = distinct !{!74, !72, !75}
!75 = !{!"llvm.loop.peeled.count", i32 1}


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