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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.std::pair.391" = type <{ %"class.std::__cxx11::basic_string", i32, [4 x i8] }>
%"struct.spirv_cross::IVariant" = type <{ ptr, %"class.spirv_cross::TypedID.280", [4 x i8] }>
%"class.spirv_cross::TypedID.280" = type { i32 }
%"struct.spirv_cross::SPIRType" = type { %"struct.spirv_cross::IVariant.base", i32, i32, i32, i32, i32, %"class.spirv_cross::SmallVector.92", %"class.spirv_cross::SmallVector.284", i32, i8, i8, i32, %"class.spirv_cross::SmallVector.227", %"class.spirv_cross::SmallVector.92", %"struct.spirv_cross::SPIRType::ImageType", %"class.spirv_cross::TypedID.281", %"class.spirv_cross::TypedID.281", %"class.std::unordered_set.165" }
%"struct.spirv_cross::IVariant.base" = type <{ ptr, %"class.spirv_cross::TypedID.280" }>
%"class.spirv_cross::SmallVector.284" = type { %"class.spirv_cross::VectorView.285", i64, %"class.spirv_cross::AlignedBuffer.286" }
%"class.spirv_cross::VectorView.285" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.286" = type { [8 x i8] }
%"class.spirv_cross::SmallVector.227" = type { %"class.spirv_cross::VectorView.228", i64, %"class.spirv_cross::AlignedBuffer.229" }
%"class.spirv_cross::VectorView.228" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.229" = type { [32 x i8] }
%"class.spirv_cross::SmallVector.92" = type { %"class.spirv_cross::VectorView.93", i64, %"class.spirv_cross::AlignedBuffer.94" }
%"class.spirv_cross::VectorView.93" = type { ptr, i64 }
%"class.spirv_cross::AlignedBuffer.94" = type { [32 x i8] }
%"struct.spirv_cross::SPIRType::ImageType" = type { %"class.spirv_cross::TypedID.281", i32, i8, i8, i8, i32, i32, i32 }
%"class.spirv_cross::TypedID.281" = type { i32 }
%"class.std::unordered_set.165" = type { %"class.std::_Hashtable.166" }
%"class.std::_Hashtable.166" = type { ptr, i64, %"struct.std::__detail::_Hash_node_base", i64, %"struct.std::__detail::_Prime_rehash_policy", ptr }
%"struct.std::__detail::_Hash_node_base" = type { ptr }
%"struct.std::__detail::_Prime_rehash_policy" = type { float, i64 }

@.str.11 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.308 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.713 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1370 = external hidden unnamed_addr constant [48 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL29flattened_access_chain_vectorB5cxx11EjPKjjRKNS_8SPIRTypeEjjb = external hidden unnamed_addr constant [151 x i8], align 1
@.str.1371 = external hidden unnamed_addr constant [45 x i8], align 1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef, i32 noundef) #1 align 2

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL29flattened_access_chain_offsetB5cxx11ERKNS_8SPIRTypeEPKjjjjPbPjS7_b(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.391") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, i1 noundef zeroext) #3 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL29flattened_access_chain_vectorB5cxx11EjPKjjRKNS_8SPIRTypeEjjb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %2, ptr noundef %3, i32 noundef %4, ptr noundef nonnull align 8 dereferenceable(336) %5, i32 noundef %6, i32 noundef %7, i1 noundef zeroext %8) #3 align 2 personality ptr @__gxx_personality_v0 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i8, align 1
  %19 = alloca %"struct.std::pair.391", align 8
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i1, align 1
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i1, align 1
  %33 = alloca %"class.std::__cxx11::basic_string", align 8
  %34 = alloca i32, align 4
  store ptr %0, ptr %10, align 8
  store ptr %1, ptr %11, align 8, !tbaa !5
  store i32 %2, ptr %12, align 4, !tbaa !9
  store ptr %3, ptr %13, align 8, !tbaa !5
  store i32 %4, ptr %14, align 4, !tbaa !9
  store ptr %5, ptr %15, align 8, !tbaa !5
  store i32 %6, ptr %16, align 4, !tbaa !9
  store i32 %7, ptr %17, align 4, !tbaa !9
  %35 = zext i1 %8 to i8
  store i8 %35, ptr %18, align 1, !tbaa !11
  %36 = load ptr, ptr %11, align 8
  call void @llvm.lifetime.start.p0(i64 40, ptr %19) #6
  %37 = load i32, ptr %12, align 4, !tbaa !9
  %38 = call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %36, i32 noundef %37)
  %39 = load ptr, ptr %13, align 8, !tbaa !5
  %40 = load i32, ptr %14, align 4, !tbaa !9
  %41 = load i32, ptr %16, align 4, !tbaa !9
  call void @_ZN11spirv_cross12CompilerGLSL29flattened_access_chain_offsetB5cxx11ERKNS_8SPIRTypeEPKjjjjPbPjS7_b(ptr dead_on_unwind writable sret(%"struct.std::pair.391") align 8 %19, ptr noundef nonnull align 8 dereferenceable(9848) %36, ptr noundef nonnull align 8 dereferenceable(336) %38, ptr noundef %39, i32 noundef %40, i32 noundef %41, i32 noundef 16, ptr noundef null, ptr noundef null, ptr noundef null, i1 noundef zeroext false)
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #6
  %42 = load i32, ptr %12, align 4, !tbaa !9
  %43 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %36, i32 noundef %42)
          to label %44 unwind label %66

44:                                               ; preds = %9
  %45 = getelementptr inbounds %"struct.spirv_cross::IVariant", ptr %43, i32 0, i32 1
  %46 = invoke noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %45)
          to label %47 unwind label %66

47:                                               ; preds = %44
  %48 = load ptr, ptr %36, align 8, !tbaa !13
  %49 = getelementptr inbounds ptr, ptr %48, i64 6
  %50 = load ptr, ptr %49, align 8
  invoke void %50(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(3176) %36, i32 noundef %46, i1 noundef zeroext true)
          to label %51 unwind label %66

51:                                               ; preds = %47
  %52 = load i8, ptr %18, align 1, !tbaa !11, !range !15, !noundef !16
  %53 = trunc i8 %52 to i1
  br i1 %53, label %54, label %175

54:                                               ; preds = %51
  store i1 false, ptr %23, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  %55 = load ptr, ptr %15, align 8, !tbaa !5
  %56 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %55, i32 0, i32 4
  %57 = load i32, ptr %56, align 8, !tbaa !17
  %58 = icmp ugt i32 %57, 1
  br i1 %58, label %59, label %83

59:                                               ; preds = %54
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #6
  %60 = load ptr, ptr %15, align 8, !tbaa !5
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %24, ptr noundef nonnull align 8 dereferenceable(9848) %36, ptr noundef nonnull align 8 dereferenceable(336) %60)
          to label %61 unwind label %70

61:                                               ; preds = %59
  %62 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %63 unwind label %74

63:                                               ; preds = %61
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #6
  %64 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.718)
          to label %65 unwind label %79

65:                                               ; preds = %63
  br label %83

66:                                               ; preds = %47, %44, %9
  %67 = landingpad { ptr, i32 }
          cleanup
  %68 = extractvalue { ptr, i32 } %67, 0
  store ptr %68, ptr %21, align 8
  %69 = extractvalue { ptr, i32 } %67, 1
  store i32 %69, ptr %22, align 4
  br label %236

70:                                               ; preds = %59
  %71 = landingpad { ptr, i32 }
          cleanup
  %72 = extractvalue { ptr, i32 } %71, 0
  store ptr %72, ptr %21, align 8
  %73 = extractvalue { ptr, i32 } %71, 1
  store i32 %73, ptr %22, align 4
  br label %78

74:                                               ; preds = %61
  %75 = landingpad { ptr, i32 }
          cleanup
  %76 = extractvalue { ptr, i32 } %75, 0
  store ptr %76, ptr %21, align 8
  %77 = extractvalue { ptr, i32 } %75, 1
  store i32 %77, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  br label %78

78:                                               ; preds = %74, %70
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #6
  br label %174

79:                                               ; preds = %167, %63
  %80 = landingpad { ptr, i32 }
          cleanup
  %81 = extractvalue { ptr, i32 } %80, 0
  store ptr %81, ptr %21, align 8
  %82 = extractvalue { ptr, i32 } %80, 1
  store i32 %82, ptr %22, align 4
  br label %174

83:                                               ; preds = %65, %54
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  store i32 0, ptr %25, align 4, !tbaa !9
  br label %84

84:                                               ; preds = %144, %83
  %85 = load i32, ptr %25, align 4, !tbaa !9
  %86 = load ptr, ptr %15, align 8, !tbaa !5
  %87 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %86, i32 0, i32 4
  %88 = load i32, ptr %87, align 8, !tbaa !17
  %89 = icmp ult i32 %85, %88
  br i1 %89, label %91, label %90

90:                                               ; preds = %84
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  br label %162

91:                                               ; preds = %84
  %92 = load i32, ptr %25, align 4, !tbaa !9
  %93 = icmp ne i32 %92, 0
  br i1 %93, label %94, label %101

94:                                               ; preds = %91
  %95 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.177)
          to label %96 unwind label %97

96:                                               ; preds = %94
  br label %101

97:                                               ; preds = %94
  %98 = landingpad { ptr, i32 }
          cleanup
  %99 = extractvalue { ptr, i32 } %98, 0
  store ptr %99, ptr %21, align 8
  %100 = extractvalue { ptr, i32 } %98, 1
  store i32 %100, ptr %22, align 4
  br label %161

101:                                              ; preds = %96, %91
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  %102 = getelementptr inbounds %"struct.std::pair.391", ptr %19, i32 0, i32 1
  %103 = load i32, ptr %102, align 8, !tbaa !44
  %104 = load i32, ptr %25, align 4, !tbaa !9
  %105 = load i32, ptr %17, align 4, !tbaa !9
  %106 = mul i32 %104, %105
  %107 = add i32 %103, %106
  store i32 %107, ptr %26, align 4, !tbaa !9
  %108 = load i32, ptr %26, align 4, !tbaa !9
  %109 = load ptr, ptr %15, align 8, !tbaa !5
  %110 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %109, i32 0, i32 3
  %111 = load i32, ptr %110, align 4, !tbaa !48
  %112 = udiv i32 %111, 8
  %113 = urem i32 %108, %112
  %114 = icmp eq i32 %113, 0
  br i1 %114, label %115, label %116

115:                                              ; preds = %101
  br label %118

116:                                              ; preds = %101
  call void @__assert_fail(ptr noundef @.str.1370, ptr noundef @.str.11, i32 noundef 11019, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL29flattened_access_chain_vectorB5cxx11EjPKjjRKNS_8SPIRTypeEjjb) #7
  unreachable

117:                                              ; No predecessors!
  br label %118

118:                                              ; preds = %117, %115
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  %119 = load i32, ptr %26, align 4, !tbaa !9
  %120 = load ptr, ptr %15, align 8, !tbaa !5
  %121 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %120, i32 0, i32 3
  %122 = load i32, ptr %121, align 4, !tbaa !48
  %123 = udiv i32 %122, 8
  %124 = udiv i32 %119, %123
  store i32 %124, ptr %27, align 4, !tbaa !9
  %125 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %126 unwind label %147

126:                                              ; preds = %118
  %127 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.308)
          to label %128 unwind label %147

128:                                              ; preds = %126
  %129 = getelementptr inbounds %"struct.std::pair.391", ptr %19, i32 0, i32 0
  %130 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %129)
          to label %131 unwind label %147

131:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  %132 = load i32, ptr %27, align 4, !tbaa !9
  %133 = udiv i32 %132, 4
  store i32 %133, ptr %29, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 4 dereferenceable(4) %29)
          to label %134 unwind label %151

134:                                              ; preds = %131
  %135 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %28)
          to label %136 unwind label %155

136:                                              ; preds = %134
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #6
  %137 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.713)
          to label %138 unwind label %147

138:                                              ; preds = %136
  %139 = load i32, ptr %27, align 4, !tbaa !9
  %140 = urem i32 %139, 4
  %141 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef 1, i32 noundef %140)
  %142 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %141)
          to label %143 unwind label %147

143:                                              ; preds = %138
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %144

144:                                              ; preds = %143
  %145 = load i32, ptr %25, align 4, !tbaa !9
  %146 = add i32 %145, 1
  store i32 %146, ptr %25, align 4, !tbaa !9
  br label %84, !llvm.loop !49

147:                                              ; preds = %138, %136, %128, %126, %118
  %148 = landingpad { ptr, i32 }
          cleanup
  %149 = extractvalue { ptr, i32 } %148, 0
  store ptr %149, ptr %21, align 8
  %150 = extractvalue { ptr, i32 } %148, 1
  store i32 %150, ptr %22, align 4
  br label %160

151:                                              ; preds = %131
  %152 = landingpad { ptr, i32 }
          cleanup
  %153 = extractvalue { ptr, i32 } %152, 0
  store ptr %153, ptr %21, align 8
  %154 = extractvalue { ptr, i32 } %152, 1
  store i32 %154, ptr %22, align 4
  br label %159

155:                                              ; preds = %134
  %156 = landingpad { ptr, i32 }
          cleanup
  %157 = extractvalue { ptr, i32 } %156, 0
  store ptr %157, ptr %21, align 8
  %158 = extractvalue { ptr, i32 } %156, 1
  store i32 %158, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  br label %159

159:                                              ; preds = %155, %151
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #6
  br label %160

160:                                              ; preds = %159, %147
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  br label %161

161:                                              ; preds = %160, %97
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  br label %174

162:                                              ; preds = %90
  %163 = load ptr, ptr %15, align 8, !tbaa !5
  %164 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %163, i32 0, i32 4
  %165 = load i32, ptr %164, align 8, !tbaa !17
  %166 = icmp ugt i32 %165, 1
  br i1 %166, label %167, label %170

167:                                              ; preds = %162
  %168 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.135)
          to label %169 unwind label %79

169:                                              ; preds = %167
  br label %170

170:                                              ; preds = %169, %162
  store i1 true, ptr %23, align 1
  store i32 1, ptr %30, align 4
  %171 = load i1, ptr %23, align 1
  br i1 %171, label %173, label %172

172:                                              ; preds = %170
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br label %173

173:                                              ; preds = %172, %170
  br label %234

174:                                              ; preds = %161, %79, %78
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br label %235

175:                                              ; preds = %51
  %176 = getelementptr inbounds %"struct.std::pair.391", ptr %19, i32 0, i32 1
  %177 = load i32, ptr %176, align 8, !tbaa !44
  %178 = load ptr, ptr %15, align 8, !tbaa !5
  %179 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %178, i32 0, i32 3
  %180 = load i32, ptr %179, align 4, !tbaa !48
  %181 = udiv i32 %180, 8
  %182 = urem i32 %177, %181
  %183 = icmp eq i32 %182, 0
  br i1 %183, label %184, label %185

184:                                              ; preds = %175
  br label %187

185:                                              ; preds = %175
  call void @__assert_fail(ptr noundef @.str.1371, ptr noundef @.str.11, i32 noundef 11040, ptr noundef @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL29flattened_access_chain_vectorB5cxx11EjPKjjRKNS_8SPIRTypeEjjb) #7
  unreachable

186:                                              ; No predecessors!
  br label %187

187:                                              ; preds = %186, %184
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  %188 = getelementptr inbounds %"struct.std::pair.391", ptr %19, i32 0, i32 1
  %189 = load i32, ptr %188, align 8, !tbaa !44
  %190 = load ptr, ptr %15, align 8, !tbaa !5
  %191 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %190, i32 0, i32 3
  %192 = load i32, ptr %191, align 4, !tbaa !48
  %193 = udiv i32 %192, 8
  %194 = udiv i32 %189, %193
  store i32 %194, ptr %31, align 4, !tbaa !9
  store i1 false, ptr %32, align 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  %195 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %196 unwind label %218

196:                                              ; preds = %187
  %197 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.308)
          to label %198 unwind label %218

198:                                              ; preds = %196
  %199 = getelementptr inbounds %"struct.std::pair.391", ptr %19, i32 0, i32 0
  %200 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %199)
          to label %201 unwind label %218

201:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 32, ptr %33) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  %202 = load i32, ptr %31, align 4, !tbaa !9
  %203 = udiv i32 %202, 4
  store i32 %203, ptr %34, align 4, !tbaa !9
  invoke void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %33, ptr noundef nonnull align 4 dereferenceable(4) %34)
          to label %204 unwind label %222

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

206:                                              ; preds = %204
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #6
  %207 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef @.str.713)
          to label %208 unwind label %218

208:                                              ; preds = %206
  %209 = load ptr, ptr %15, align 8, !tbaa !5
  %210 = getelementptr inbounds %"struct.spirv_cross::SPIRType", ptr %209, i32 0, i32 4
  %211 = load i32, ptr %210, align 8, !tbaa !17
  %212 = load i32, ptr %31, align 4, !tbaa !9
  %213 = urem i32 %212, 4
  %214 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %211, i32 noundef %213)
  %215 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %214)
          to label %216 unwind label %218

216:                                              ; preds = %208
  store i1 true, ptr %32, align 1
  store i32 1, ptr %30, align 4
  %217 = load i1, ptr %32, align 1
  br i1 %217, label %232, label %231

218:                                              ; preds = %208, %206, %198, %196, %187
  %219 = landingpad { ptr, i32 }
          cleanup
  %220 = extractvalue { ptr, i32 } %219, 0
  store ptr %220, ptr %21, align 8
  %221 = extractvalue { ptr, i32 } %219, 1
  store i32 %221, ptr %22, align 4
  br label %233

222:                                              ; preds = %201
  %223 = landingpad { ptr, i32 }
          cleanup
  %224 = extractvalue { ptr, i32 } %223, 0
  store ptr %224, ptr %21, align 8
  %225 = extractvalue { ptr, i32 } %223, 1
  store i32 %225, ptr %22, align 4
  br label %230

226:                                              ; preds = %204
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %21, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %22, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #6
  br label %230

230:                                              ; preds = %226, %222
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %33) #6
  br label %233

231:                                              ; preds = %216
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  br label %232

232:                                              ; preds = %231, %216
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %234

233:                                              ; preds = %230, %218
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %235

234:                                              ; preds = %232, %173
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #6
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %19) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr %19) #6
  ret void

235:                                              ; preds = %233, %174
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  br label %236

236:                                              ; preds = %235, %66
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #6
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %19) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr %19) #6
  br label %237

237:                                              ; preds = %236
  %238 = load ptr, ptr %21, align 8
  %239 = load i32, ptr %22, align 4
  %240 = insertvalue { ptr, i32 } poison, ptr %238, 0
  %241 = insertvalue { ptr, i32 } %240, i32 %239, 1
  resume { ptr, i32 } %241
}

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

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.std::pair.391" = type <{ %"class.std::__cxx11::basic_string", i32, [4 x i8] }>

@.str.11 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.135 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.177 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.308 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.713 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.718 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1370 = external hidden unnamed_addr constant [48 x i8], align 1
@__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL29flattened_access_chain_vectorB5cxx11EjPKjjRKNS_8SPIRTypeEjjb = external hidden unnamed_addr constant [151 x i8], align 1
@.str.1371 = external hidden unnamed_addr constant [45 x i8], align 1

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef, i32 noundef) local_unnamed_addr #1 align 2

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

declare i32 @__gxx_personality_v0(...)

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11spirv_cross12CompilerGLSL29flattened_access_chain_offsetB5cxx11ERKNS_8SPIRTypeEPKjjjjPbPjS7_b(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.391") align 8, ptr noundef nonnull align 8 dereferenceable(9848), ptr noundef nonnull align 8 dereferenceable(336), ptr noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11spirv_cross12CompilerGLSL29flattened_access_chain_vectorB5cxx11EjPKjjRKNS_8SPIRTypeEjjb(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8 %0, ptr noundef nonnull align 8 dereferenceable(9848) %1, i32 noundef %2, ptr noundef %3, i32 noundef %4, ptr noundef nonnull align 8 dereferenceable(336) %5, i32 noundef %6, i32 noundef %7, i1 noundef zeroext %8) local_unnamed_addr #3 align 2 personality ptr @__gxx_personality_v0 {
  %10 = alloca %"struct.std::pair.391", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca i32, align 4
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %10) #6
  %17 = tail call noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %2)
  call void @_ZN11spirv_cross12CompilerGLSL29flattened_access_chain_offsetB5cxx11ERKNS_8SPIRTypeEPKjjjjPbPjS7_b(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.391") align 8 %10, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %17, ptr noundef %3, i32 noundef %4, i32 noundef %6, i32 noundef 16, ptr noundef null, ptr noundef null, ptr noundef null, i1 noundef zeroext false)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #6
  %18 = invoke noundef nonnull align 8 dereferenceable(336) ptr @_ZNK11spirv_cross8Compiler15expression_typeEj(ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %2)
          to label %19 unwind label %35

19:                                               ; preds = %9
  %20 = getelementptr inbounds i8, ptr %18, i64 8
  %21 = call noundef i32 @_ZNK11spirv_cross7TypedIDILNS_5TypesE0EEcvjEv(ptr noundef nonnull align 4 dereferenceable(4) %20)
  %22 = load ptr, ptr %1, align 8, !tbaa !5
  %23 = getelementptr inbounds i8, ptr %22, i64 48
  %24 = load ptr, ptr %23, align 8
  invoke void %24(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull align 8 dereferenceable(3176) %1, i32 noundef %21, i1 noundef zeroext true)
          to label %25 unwind label %35

25:                                               ; preds = %19
  br i1 %8, label %26, label %105

26:                                               ; preds = %25
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  %27 = getelementptr inbounds i8, ptr %5, i64 24
  %28 = load i32, ptr %27, align 8, !tbaa !8
  %29 = icmp ugt i32 %28, 1
  br i1 %29, label %30, label %44

30:                                               ; preds = %26
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #6
  invoke void @_ZN11spirv_cross12CompilerGLSL24type_to_glsl_constructorB5cxx11ERKNS_8SPIRTypeE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, ptr noundef nonnull align 8 dereferenceable(9848) %1, ptr noundef nonnull align 8 dereferenceable(336) %5)
          to label %31 unwind label %37

31:                                               ; preds = %30
  %32 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %33 unwind label %39

33:                                               ; preds = %31
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  %34 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.718)
          to label %._crit_edge67 unwind label %42

._crit_edge67:                                    ; preds = %33
  %.pre = load i32, ptr %27, align 8, !tbaa !8
  br label %44

35:                                               ; preds = %19, %9
  %36 = landingpad { ptr, i32 }
          cleanup
  br label %137

37:                                               ; preds = %30
  %38 = landingpad { ptr, i32 }
          cleanup
  br label %41

39:                                               ; preds = %31
  %40 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  br label %41

41:                                               ; preds = %39, %37
  %.pn40 = phi { ptr, i32 } [ %40, %39 ], [ %38, %37 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  br label %136

42:                                               ; preds = %103, %33
  %43 = landingpad { ptr, i32 }
          cleanup
  br label %136

44:                                               ; preds = %._crit_edge67, %26
  %45 = phi i32 [ %.pre, %._crit_edge67 ], [ %28, %26 ]
  %.not53 = icmp eq i32 %45, 0
  br i1 %.not53, label %._crit_edge.thread, label %46

46:                                               ; preds = %44
  %47 = getelementptr inbounds i8, ptr %10, i64 32
  %48 = getelementptr inbounds i8, ptr %5, i64 20
  %.pre69 = load i32, ptr %47, align 8, !tbaa !39
  %.pre70 = load i32, ptr %48, align 4, !tbaa !43
  %49 = lshr i32 %.pre70, 3
  %50 = urem i32 %.pre69, %49
  %51 = udiv i32 %.pre69, %49
  %52 = icmp eq i32 %50, 0
  br i1 %52, label %53, label %.loopexit56

53:                                               ; preds = %46
  %54 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %55 unwind label %.loopexit.split-lp58

55:                                               ; preds = %53
  %56 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.308)
          to label %57 unwind label %.loopexit.split-lp58

57:                                               ; preds = %55
  %58 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %59 unwind label %.loopexit.split-lp58

59:                                               ; preds = %57
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #6
  %60 = lshr i32 %51, 2
  store i32 %60, ptr %14, align 4, !tbaa !44
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 4 dereferenceable(4) %14)
  %61 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %13)
          to label %62 unwind label %.loopexit.split-lp63

62:                                               ; preds = %59
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  %63 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.713)
          to label %64 unwind label %.loopexit.split-lp58

64:                                               ; preds = %62
  %65 = and i32 %51, 3
  %66 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef 1, i32 noundef %65)
  %67 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %66)
          to label %68 unwind label %.loopexit.split-lp58

68:                                               ; preds = %64
  %69 = load i32, ptr %27, align 8, !tbaa !8
  %70 = icmp ugt i32 %69, 1
  br i1 %70, label %.peel.next, label %._crit_edge.thread

._crit_edge:                                      ; preds = %98
  %71 = icmp ugt i32 %100, 1
  br i1 %71, label %103, label %._crit_edge.thread

.peel.next:                                       ; preds = %68, %98
  %.03752 = phi i32 [ %99, %98 ], [ 1, %68 ]
  %72 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.177)
          to label %74 unwind label %73

73:                                               ; preds = %.peel.next
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %136

74:                                               ; preds = %.peel.next
  %75 = load i32, ptr %47, align 8, !tbaa !39
  %76 = mul i32 %.03752, %7
  %77 = add i32 %75, %76
  %78 = load i32, ptr %48, align 4, !tbaa !43
  %79 = lshr i32 %78, 3
  %80 = urem i32 %77, %79
  %81 = udiv i32 %77, %79
  %82 = icmp eq i32 %80, 0
  br i1 %82, label %83, label %.loopexit56

.loopexit56:                                      ; preds = %74, %46
  call void @__assert_fail(ptr noundef nonnull @.str.1370, ptr noundef nonnull @.str.11, i32 noundef 11019, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL29flattened_access_chain_vectorB5cxx11EjPKjjRKNS_8SPIRTypeEjjb) #7
  unreachable

83:                                               ; preds = %74
  %84 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %85 unwind label %.loopexit57

85:                                               ; preds = %83
  %86 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.308)
          to label %87 unwind label %.loopexit57

87:                                               ; preds = %85
  %88 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %89 unwind label %.loopexit57

89:                                               ; preds = %87
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %14) #6
  %90 = lshr i32 %81, 2
  store i32 %90, ptr %14, align 4, !tbaa !44
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 4 dereferenceable(4) %14)
  %91 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %13)
          to label %92 unwind label %.loopexit62

92:                                               ; preds = %89
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  %93 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.713)
          to label %94 unwind label %.loopexit57

94:                                               ; preds = %92
  %95 = and i32 %81, 3
  %96 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef 1, i32 noundef %95)
  %97 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %96)
          to label %98 unwind label %.loopexit57

98:                                               ; preds = %94
  %99 = add nuw i32 %.03752, 1
  %100 = load i32, ptr %27, align 8, !tbaa !8
  %101 = icmp ult i32 %99, %100
  br i1 %101, label %.peel.next, label %._crit_edge, !llvm.loop !45

.loopexit57:                                      ; preds = %83, %85, %87, %92, %94
  %lpad.loopexit59 = landingpad { ptr, i32 }
          cleanup
  br label %136

.loopexit.split-lp58:                             ; preds = %53, %55, %57, %62, %64
  %lpad.loopexit.split-lp60 = landingpad { ptr, i32 }
          cleanup
  br label %136

.loopexit62:                                      ; preds = %89
  %lpad.loopexit64 = landingpad { ptr, i32 }
          cleanup
  br label %102

.loopexit.split-lp63:                             ; preds = %59
  %lpad.loopexit.split-lp65 = landingpad { ptr, i32 }
          cleanup
  br label %102

102:                                              ; preds = %.loopexit.split-lp63, %.loopexit62
  %lpad.phi66 = phi { ptr, i32 } [ %lpad.loopexit64, %.loopexit62 ], [ %lpad.loopexit.split-lp65, %.loopexit.split-lp63 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  br label %136

103:                                              ; preds = %._crit_edge
  %104 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.135)
          to label %._crit_edge.thread unwind label %42

105:                                              ; preds = %25
  %106 = getelementptr inbounds i8, ptr %10, i64 32
  %107 = load i32, ptr %106, align 8, !tbaa !39
  %108 = getelementptr inbounds i8, ptr %5, i64 20
  %109 = load i32, ptr %108, align 4, !tbaa !43
  %110 = lshr i32 %109, 3
  %111 = urem i32 %107, %110
  %112 = udiv i32 %107, %110
  %113 = icmp eq i32 %111, 0
  br i1 %113, label %115, label %114

114:                                              ; preds = %105
  call void @__assert_fail(ptr noundef nonnull @.str.1371, ptr noundef nonnull @.str.11, i32 noundef 11040, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN11spirv_cross12CompilerGLSL29flattened_access_chain_vectorB5cxx11EjPKjjRKNS_8SPIRTypeEjjb) #7
  unreachable

115:                                              ; preds = %105
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  %116 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %117 unwind label %132

117:                                              ; preds = %115
  %118 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.308)
          to label %119 unwind label %132

119:                                              ; preds = %117
  %120 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %10)
          to label %121 unwind label %132

121:                                              ; preds = %119
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #6
  %122 = lshr i32 %112, 2
  store i32 %122, ptr %16, align 4, !tbaa !44
  call void @_ZN11spirv_cross17convert_to_stringIjTnNSt9enable_ifIXntsr3std17is_floating_pointIT_EE5valueEiE4typeELi0EEENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS2_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 4 dereferenceable(4) %16)
  %123 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %124 unwind label %134

124:                                              ; preds = %121
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  %125 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.713)
          to label %126 unwind label %132

126:                                              ; preds = %124
  %127 = getelementptr inbounds i8, ptr %5, i64 24
  %128 = load i32, ptr %127, align 8, !tbaa !8
  %129 = and i32 %112, 3
  %130 = call noundef ptr @_ZN11spirv_cross12CompilerGLSL14vector_swizzleEii(i32 noundef %128, i32 noundef %129)
  %131 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEpLEPKc(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef %130)
          to label %._crit_edge.thread unwind label %132

132:                                              ; preds = %126, %124, %119, %117, %115
  %133 = landingpad { ptr, i32 }
          cleanup
  br label %136

134:                                              ; preds = %121
  %135 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  br label %136

._crit_edge.thread:                               ; preds = %68, %44, %126, %._crit_edge, %103
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %10) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #6
  ret void

136:                                              ; preds = %132, %134, %41, %42, %102, %73, %.loopexit.split-lp58, %.loopexit57
  %.pn42.pn.pn.pn = phi { ptr, i32 } [ %43, %42 ], [ %.pn40, %41 ], [ %lpad.loopexit, %73 ], [ %lpad.phi66, %102 ], [ %lpad.loopexit59, %.loopexit57 ], [ %lpad.loopexit.split-lp60, %.loopexit.split-lp58 ], [ %133, %132 ], [ %135, %134 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  br label %137

137:                                              ; preds = %136, %35
  %.pn42.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn42.pn.pn.pn, %136 ], [ %36, %35 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  call void @_ZNSt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %10) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %10) #6
  resume { ptr, i32 } %.pn42.pn.pn.pn.pn
}

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

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

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


; Effective O3 passes: CorrelatedValuePropagationPass,DivRemPairsPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopFullUnrollPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass