; LLVM IR from rweather/lightweight-crypto :: src/genavr/code.ll (ZN4Code7immtempEh)

; 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.__gnu_cxx::__normal_iterator" = type { ptr }
%class.Code = type { %"class.std::vector.0", %"class.std::vector.5", %"class.std::vector", i32, i32, i32, i32, [16 x i8], i32, i32, i32, %"class.std::__cxx11::basic_string", %"class.std::map" }
%"class.std::vector.0" = type { %"struct.std::_Vector_base.1" }
%"struct.std::_Vector_base.1" = type { %"struct.std::_Vector_base<Insn, std::allocator<Insn>>::_Vector_impl" }
%"struct.std::_Vector_base<Insn, std::allocator<Insn>>::_Vector_impl" = type { %"struct.std::_Vector_base<Insn, std::allocator<Insn>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Insn, std::allocator<Insn>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl" = type { %"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<int, std::allocator<int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned char, std::allocator<unsigned char>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.13 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.13 = type { i64, [8 x i8] }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, Sbox>, std::_Select1st<std::pair<const unsigned char, Sbox>>, std::less<unsigned char>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, Sbox>, std::_Select1st<std::pair<const unsigned char, Sbox>>, std::less<unsigned char>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }

@.str.19 = external hidden unnamed_addr constant [26 x i8], align 1
@_ZTISt14overflow_error = external constant ptr

declare ptr @__cxa_allocate_exception(i64)

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr)

declare void @__cxa_throw(ptr, ptr, ptr)

; 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 uwtable
define dso_local noundef zeroext i8 @_ZN4Code7immtempEh(ptr noundef nonnull align 8 dereferenceable(200) %0, i8 noundef zeroext %1) #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i8, align 1
  %4 = alloca ptr, align 8
  %5 = alloca i8, align 1
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %11 = alloca i8, align 1
  %12 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %13 = alloca i8, align 1
  %14 = alloca ptr, align 8
  %15 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i8 %1, ptr %5, align 1, !tbaa !9
  %16 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  store i32 16, ptr %6, align 4, !tbaa !10
  br label %17

17:                                               ; preds = %43, %2
  %18 = load i32, ptr %6, align 4, !tbaa !10
  %19 = icmp slt i32 %18, 32
  br i1 %19, label %20, label %46

20:                                               ; preds = %17
  %21 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 5
  %22 = load i32, ptr %21, align 8, !tbaa !12
  %23 = load i32, ptr %6, align 4, !tbaa !10
  %24 = shl i32 1, %23
  %25 = and i32 %22, %24
  %26 = icmp ne i32 %25, 0
  br i1 %26, label %27, label %42

27:                                               ; preds = %20
  %28 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 7
  %29 = load i32, ptr %6, align 4, !tbaa !10
  %30 = sub nsw i32 %29, 16
  %31 = sext i32 %30 to i64
  %32 = getelementptr inbounds [16 x i8], ptr %28, i64 0, i64 %31
  %33 = load i8, ptr %32, align 1, !tbaa !9
  %34 = zext i8 %33 to i32
  %35 = load i8, ptr %5, align 1, !tbaa !9
  %36 = zext i8 %35 to i32
  %37 = icmp eq i32 %34, %36
  br i1 %37, label %38, label %41

38:                                               ; preds = %27
  %39 = load i32, ptr %6, align 4, !tbaa !10
  %40 = trunc i32 %39 to i8
  store i8 %40, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %173

41:                                               ; preds = %27
  br label %42

42:                                               ; preds = %41, %20
  br label %43

43:                                               ; preds = %42
  %44 = load i32, ptr %6, align 4, !tbaa !10
  %45 = add nsw i32 %44, 1
  store i32 %45, ptr %6, align 4, !tbaa !10
  br label %17, !llvm.loop !38

46:                                               ; preds = %17
  %47 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 8
  %48 = load i32, ptr %47, align 8, !tbaa !40
  %49 = icmp uge i32 %48, 4
  br i1 %49, label %50, label %78

50:                                               ; preds = %46
  store i32 16, ptr %6, align 4, !tbaa !10
  br label %51

51:                                               ; preds = %74, %50
  %52 = load i32, ptr %6, align 4, !tbaa !10
  %53 = icmp slt i32 %52, 32
  br i1 %53, label %54, label %77

54:                                               ; preds = %51
  %55 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 5
  %56 = load i32, ptr %55, align 8, !tbaa !12
  %57 = load i32, ptr %6, align 4, !tbaa !10
  %58 = shl i32 1, %57
  %59 = and i32 %56, %58
  %60 = icmp ne i32 %59, 0
  br i1 %60, label %61, label %73

61:                                               ; preds = %54
  %62 = load i8, ptr %5, align 1, !tbaa !9
  %63 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 7
  %64 = load i32, ptr %6, align 4, !tbaa !10
  %65 = sub nsw i32 %64, 16
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds [16 x i8], ptr %63, i64 0, i64 %66
  store i8 %62, ptr %67, align 1, !tbaa !9
  %68 = load i32, ptr %6, align 4, !tbaa !10
  %69 = trunc i32 %68 to i8
  %70 = load i8, ptr %5, align 1, !tbaa !9
  call void @_ZN4Code6immregEN4Insn4TypeEhh(ptr noundef nonnull align 8 dereferenceable(200) %16, i32 noundef 26, i8 noundef zeroext %69, i8 noundef zeroext %70)
  %71 = load i32, ptr %6, align 4, !tbaa !10
  %72 = trunc i32 %71 to i8
  store i8 %72, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %173

73:                                               ; preds = %54
  br label %74

74:                                               ; preds = %73
  %75 = load i32, ptr %6, align 4, !tbaa !10
  %76 = add nsw i32 %75, 1
  store i32 %76, ptr %6, align 4, !tbaa !10
  br label %51, !llvm.loop !41

77:                                               ; preds = %51
  br label %78

78:                                               ; preds = %77, %46
  store i32 31, ptr %6, align 4, !tbaa !10
  br label %79

79:                                               ; preds = %134, %78
  %80 = load i32, ptr %6, align 4, !tbaa !10
  %81 = icmp sge i32 %80, 16
  br i1 %81, label %82, label %137

82:                                               ; preds = %79
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  %83 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 2
  %84 = call ptr @_ZNSt6vectorIhSaIhEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %83) #7
  %85 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %9, i32 0, i32 0
  store ptr %84, ptr %85, align 8
  %86 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 2
  %87 = call ptr @_ZNSt6vectorIhSaIhEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %86) #7
  %88 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %10, i32 0, i32 0
  store ptr %87, ptr %88, align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #7
  %89 = load i32, ptr %6, align 4, !tbaa !10
  %90 = trunc i32 %89 to i8
  store i8 %90, ptr %11, align 1, !tbaa !9
  %91 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %9, i32 0, i32 0
  %92 = load ptr, ptr %91, align 8
  %93 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %10, i32 0, i32 0
  %94 = load ptr, ptr %93, align 8
  %95 = call ptr @_ZSt4findIN9__gnu_cxx17__normal_iteratorIPhSt6vectorIhSaIhEEEEhET_S7_S7_RKT0_(ptr %92, ptr %94, ptr noundef nonnull align 1 dereferenceable(1) %11)
  %96 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %8, i32 0, i32 0
  store ptr %95, ptr %96, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  %97 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 2
  %98 = call ptr @_ZNSt6vectorIhSaIhEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %97) #7
  %99 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %12, i32 0, i32 0
  store ptr %98, ptr %99, align 8
  %100 = call noundef zeroext i1 @_ZN9__gnu_cxxeqIPhSt6vectorIhSaIhEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  br i1 %100, label %101, label %102

101:                                              ; preds = %82
  br label %134

102:                                              ; preds = %82
  %103 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 3
  %104 = load i32, ptr %103, align 8, !tbaa !42
  %105 = load i32, ptr %6, align 4, !tbaa !10
  %106 = shl i32 1, %105
  %107 = and i32 %104, %106
  %108 = icmp ne i32 %107, 0
  br i1 %108, label %133, label %109

109:                                              ; preds = %102
  %110 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 5
  %111 = load i32, ptr %110, align 8, !tbaa !12
  %112 = load i32, ptr %6, align 4, !tbaa !10
  %113 = shl i32 1, %112
  %114 = and i32 %111, %113
  %115 = icmp ne i32 %114, 0
  br i1 %115, label %133, label %116

116:                                              ; preds = %109
  %117 = load i32, ptr %6, align 4, !tbaa !10
  %118 = shl i32 1, %117
  %119 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 5
  %120 = load i32, ptr %119, align 8, !tbaa !12
  %121 = or i32 %120, %118
  store i32 %121, ptr %119, align 8, !tbaa !12
  %122 = load i8, ptr %5, align 1, !tbaa !9
  %123 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 7
  %124 = load i32, ptr %6, align 4, !tbaa !10
  %125 = sub nsw i32 %124, 16
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds [16 x i8], ptr %123, i64 0, i64 %126
  store i8 %122, ptr %127, align 1, !tbaa !9
  %128 = load i32, ptr %6, align 4, !tbaa !10
  %129 = trunc i32 %128 to i8
  %130 = load i8, ptr %5, align 1, !tbaa !9
  call void @_ZN4Code6immregEN4Insn4TypeEhh(ptr noundef nonnull align 8 dereferenceable(200) %16, i32 noundef 26, i8 noundef zeroext %129, i8 noundef zeroext %130)
  %131 = load i32, ptr %6, align 4, !tbaa !10
  %132 = trunc i32 %131 to i8
  store i8 %132, ptr %3, align 1
  store i32 1, ptr %7, align 4
  br label %173

133:                                              ; preds = %109, %102
  br label %134

134:                                              ; preds = %133, %101
  %135 = load i32, ptr %6, align 4, !tbaa !10
  %136 = add nsw i32 %135, -1
  store i32 %136, ptr %6, align 4, !tbaa !10
  br label %79, !llvm.loop !43

137:                                              ; preds = %79
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #7
  %138 = call noundef zeroext i8 @_ZN4Code13allocateSpareEb(ptr noundef nonnull align 8 dereferenceable(200) %16, i1 noundef zeroext true)
  store i8 %138, ptr %13, align 1, !tbaa !9
  %139 = load i8, ptr %13, align 1, !tbaa !9
  %140 = zext i8 %139 to i32
  %141 = icmp eq i32 %140, 255
  br i1 %141, label %142, label %149

142:                                              ; preds = %137
  %143 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZNSt14overflow_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %143, ptr noundef @.str.19)
          to label %144 unwind label %145

144:                                              ; preds = %142
  call void @__cxa_throw(ptr %143, ptr @_ZTISt14overflow_error, ptr @_ZNSt14overflow_errorD1Ev) #8
  unreachable

145:                                              ; preds = %142
  %146 = landingpad { ptr, i32 }
          cleanup
  %147 = extractvalue { ptr, i32 } %146, 0
  store ptr %147, ptr %14, align 8
  %148 = extractvalue { ptr, i32 } %146, 1
  store i32 %148, ptr %15, align 4
  call void @__cxa_free_exception(ptr %143) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  br label %175

149:                                              ; preds = %137
  %150 = load i8, ptr %13, align 1, !tbaa !9
  %151 = zext i8 %150 to i32
  %152 = shl i32 1, %151
  %153 = xor i32 %152, -1
  %154 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 3
  %155 = load i32, ptr %154, align 8, !tbaa !42
  %156 = and i32 %155, %153
  store i32 %156, ptr %154, align 8, !tbaa !42
  %157 = load i8, ptr %13, align 1, !tbaa !9
  %158 = zext i8 %157 to i32
  %159 = shl i32 1, %158
  %160 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 5
  %161 = load i32, ptr %160, align 8, !tbaa !12
  %162 = or i32 %161, %159
  store i32 %162, ptr %160, align 8, !tbaa !12
  %163 = load i8, ptr %5, align 1, !tbaa !9
  %164 = getelementptr inbounds %class.Code, ptr %16, i32 0, i32 7
  %165 = load i8, ptr %13, align 1, !tbaa !9
  %166 = zext i8 %165 to i32
  %167 = sub nsw i32 %166, 16
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds [16 x i8], ptr %164, i64 0, i64 %168
  store i8 %163, ptr %169, align 1, !tbaa !9
  %170 = load i8, ptr %13, align 1, !tbaa !9
  %171 = load i8, ptr %5, align 1, !tbaa !9
  call void @_ZN4Code6immregEN4Insn4TypeEhh(ptr noundef nonnull align 8 dereferenceable(200) %16, i32 noundef 26, i8 noundef zeroext %170, i8 noundef zeroext %171)
  %172 = load i8, ptr %13, align 1, !tbaa !9
  store i8 %172, ptr %3, align 1
  store i32 1, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #7
  br label %173

173:                                              ; preds = %149, %116, %61, %38
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  %174 = load i8, ptr %3, align 1
  ret i8 %174

175:                                              ; preds = %145
  %176 = load ptr, ptr %14, align 8
  %177 = load i32, ptr %15, align 4
  %178 = insertvalue { ptr, i32 } poison, ptr %176, 0
  %179 = insertvalue { ptr, i32 } %178, i32 %177, 1
  resume { ptr, i32 } %179
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4Code6immregEN4Insn4TypeEhh(ptr noundef nonnull align 8 dereferenceable(200), i32 noundef, i8 noundef zeroext, i8 noundef zeroext) #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i8 @_ZN4Code13allocateSpareEb(ptr noundef nonnull align 8 dereferenceable(200), i1 noundef zeroext) #2 align 2

declare void @_ZNSt14overflow_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #3

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZSt4findIN9__gnu_cxx17__normal_iteratorIPhSt6vectorIhSaIhEEEEhET_S7_S7_RKT0_(ptr, ptr, ptr noundef nonnull align 1 dereferenceable(1)) #6

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = !{!13, !11, i64 80}
!13 = !{!"_ZTS4Code", !14, i64 0, !18, i64 24, !22, i64 48, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84, !7, i64 88, !11, i64 104, !26, i64 108, !11, i64 112, !27, i64 120, !30, i64 152}
!14 = !{!"_ZTSSt6vectorI4InsnSaIS0_EE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseI4InsnSaIS0_EE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseI4InsnSaIS0_EE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseI4InsnSaIS0_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!18 = !{!"_ZTSSt6vectorIiSaIiEE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!22 = !{!"_ZTSSt6vectorIhSaIhEE", !23, i64 0}
!23 = !{!"_ZTSSt12_Vector_baseIhSaIhEE", !24, i64 0}
!24 = !{!"_ZTSNSt12_Vector_baseIhSaIhEE12_Vector_implE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIhSaIhEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!26 = !{!"_ZTSN4Code12PrologueTypeE", !7, i64 0}
!27 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !28, i64 0, !29, i64 8, !7, i64 16}
!28 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!29 = !{!"long", !7, i64 0}
!30 = !{!"_ZTSSt3mapIh4SboxSt4lessIhESaISt4pairIKhS0_EEE", !31, i64 0}
!31 = !{!"_ZTSSt8_Rb_treeIhSt4pairIKh4SboxESt10_Select1stIS3_ESt4lessIhESaIS3_EE", !32, i64 0}
!32 = !{!"_ZTSNSt8_Rb_treeIhSt4pairIKh4SboxESt10_Select1stIS3_ESt4lessIhESaIS3_EE13_Rb_tree_implIS7_Lb1EEE", !33, i64 0, !35, i64 8}
!33 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIhEE", !34, i64 0}
!34 = !{!"_ZTSSt4lessIhE"}
!35 = !{!"_ZTSSt15_Rb_tree_header", !36, i64 0, !29, i64 32}
!36 = !{!"_ZTSSt18_Rb_tree_node_base", !37, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!37 = !{!"_ZTSSt14_Rb_tree_color", !7, i64 0}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.mustprogress"}
!40 = !{!13, !11, i64 104}
!41 = distinct !{!41, !39}
!42 = !{!13, !11, i64 72}
!43 = distinct !{!43, !39}


; 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.__gnu_cxx::__normal_iterator" = type { ptr }

@.str.19 = external hidden unnamed_addr constant [26 x i8], align 1
@_ZTISt14overflow_error = external constant ptr

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

declare i32 @__gxx_personality_v0(...)

declare void @__cxa_free_exception(ptr) local_unnamed_addr

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

; 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 uwtable
define dso_local noundef zeroext i8 @_ZN4Code7immtempEh(ptr noundef nonnull align 8 dereferenceable(200) %0, i8 noundef zeroext %1) local_unnamed_addr #1 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %4 = alloca i8, align 1
  %5 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %6 = getelementptr inbounds i8, ptr %0, i64 80
  %7 = load i32, ptr %6, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %0, i64 88
  %9 = and i32 %7, 65536
  %.not41 = icmp ne i32 %9, 0
  %10 = load i8, ptr %8, align 8
  %11 = icmp eq i8 %10, %1
  %or.cond = select i1 %.not41, i1 %11, i1 false
  br i1 %or.cond, label %156, label %12

12:                                               ; preds = %2
  %13 = and i32 %7, 131072
  %.not41.1 = icmp ne i32 %13, 0
  %14 = getelementptr inbounds i8, ptr %0, i64 89
  %15 = load i8, ptr %14, align 1
  %16 = icmp eq i8 %15, %1
  %or.cond65 = select i1 %.not41.1, i1 %16, i1 false
  br i1 %or.cond65, label %156, label %17

17:                                               ; preds = %12
  %18 = and i32 %7, 262144
  %.not41.2 = icmp ne i32 %18, 0
  %19 = getelementptr inbounds i8, ptr %0, i64 90
  %20 = load i8, ptr %19, align 2
  %21 = icmp eq i8 %20, %1
  %or.cond68 = select i1 %.not41.2, i1 %21, i1 false
  br i1 %or.cond68, label %156, label %22

22:                                               ; preds = %17
  %23 = and i32 %7, 524288
  %.not41.3 = icmp ne i32 %23, 0
  %24 = getelementptr inbounds i8, ptr %0, i64 91
  %25 = load i8, ptr %24, align 1
  %26 = icmp eq i8 %25, %1
  %or.cond71 = select i1 %.not41.3, i1 %26, i1 false
  br i1 %or.cond71, label %156, label %27

27:                                               ; preds = %22
  %28 = and i32 %7, 1048576
  %.not41.4 = icmp ne i32 %28, 0
  %29 = getelementptr inbounds i8, ptr %0, i64 92
  %30 = load i8, ptr %29, align 4
  %31 = icmp eq i8 %30, %1
  %or.cond74 = select i1 %.not41.4, i1 %31, i1 false
  br i1 %or.cond74, label %156, label %32

32:                                               ; preds = %27
  %33 = and i32 %7, 2097152
  %.not41.5 = icmp ne i32 %33, 0
  %34 = getelementptr inbounds i8, ptr %0, i64 93
  %35 = load i8, ptr %34, align 1
  %36 = icmp eq i8 %35, %1
  %or.cond77 = select i1 %.not41.5, i1 %36, i1 false
  br i1 %or.cond77, label %156, label %37

37:                                               ; preds = %32
  %38 = and i32 %7, 4194304
  %.not41.6 = icmp ne i32 %38, 0
  %39 = getelementptr inbounds i8, ptr %0, i64 94
  %40 = load i8, ptr %39, align 2
  %41 = icmp eq i8 %40, %1
  %or.cond80 = select i1 %.not41.6, i1 %41, i1 false
  br i1 %or.cond80, label %156, label %42

42:                                               ; preds = %37
  %43 = and i32 %7, 8388608
  %.not41.7 = icmp ne i32 %43, 0
  %44 = getelementptr inbounds i8, ptr %0, i64 95
  %45 = load i8, ptr %44, align 1
  %46 = icmp eq i8 %45, %1
  %or.cond83 = select i1 %.not41.7, i1 %46, i1 false
  br i1 %or.cond83, label %156, label %47

47:                                               ; preds = %42
  %48 = and i32 %7, 16777216
  %.not41.8 = icmp ne i32 %48, 0
  %49 = getelementptr inbounds i8, ptr %0, i64 96
  %50 = load i8, ptr %49, align 8
  %51 = icmp eq i8 %50, %1
  %or.cond86 = select i1 %.not41.8, i1 %51, i1 false
  br i1 %or.cond86, label %156, label %52

52:                                               ; preds = %47
  %53 = and i32 %7, 33554432
  %.not41.9 = icmp ne i32 %53, 0
  %54 = getelementptr inbounds i8, ptr %0, i64 97
  %55 = load i8, ptr %54, align 1
  %56 = icmp eq i8 %55, %1
  %or.cond89 = select i1 %.not41.9, i1 %56, i1 false
  br i1 %or.cond89, label %156, label %57

57:                                               ; preds = %52
  %58 = and i32 %7, 67108864
  %.not41.10 = icmp ne i32 %58, 0
  %59 = getelementptr inbounds i8, ptr %0, i64 98
  %60 = load i8, ptr %59, align 2
  %61 = icmp eq i8 %60, %1
  %or.cond92 = select i1 %.not41.10, i1 %61, i1 false
  br i1 %or.cond92, label %156, label %62

62:                                               ; preds = %57
  %63 = and i32 %7, 134217728
  %.not41.11 = icmp ne i32 %63, 0
  %64 = getelementptr inbounds i8, ptr %0, i64 99
  %65 = load i8, ptr %64, align 1
  %66 = icmp eq i8 %65, %1
  %or.cond95 = select i1 %.not41.11, i1 %66, i1 false
  br i1 %or.cond95, label %156, label %67

67:                                               ; preds = %62
  %68 = and i32 %7, 268435456
  %.not41.12 = icmp ne i32 %68, 0
  %69 = getelementptr inbounds i8, ptr %0, i64 100
  %70 = load i8, ptr %69, align 4
  %71 = icmp eq i8 %70, %1
  %or.cond98 = select i1 %.not41.12, i1 %71, i1 false
  br i1 %or.cond98, label %156, label %72

72:                                               ; preds = %67
  %73 = and i32 %7, 536870912
  %.not41.13 = icmp ne i32 %73, 0
  %74 = getelementptr inbounds i8, ptr %0, i64 101
  %75 = load i8, ptr %74, align 1
  %76 = icmp eq i8 %75, %1
  %or.cond101 = select i1 %.not41.13, i1 %76, i1 false
  br i1 %or.cond101, label %156, label %77

77:                                               ; preds = %72
  %78 = and i32 %7, 1073741824
  %.not41.14 = icmp ne i32 %78, 0
  %79 = getelementptr inbounds i8, ptr %0, i64 102
  %80 = load i8, ptr %79, align 2
  %81 = icmp eq i8 %80, %1
  %or.cond104 = select i1 %.not41.14, i1 %81, i1 false
  br i1 %or.cond104, label %156, label %82

82:                                               ; preds = %77
  %.not41.15 = icmp slt i32 %7, 0
  %83 = getelementptr inbounds i8, ptr %0, i64 103
  %84 = load i8, ptr %83, align 1
  %85 = icmp eq i8 %84, %1
  %or.cond107 = select i1 %.not41.15, i1 %85, i1 false
  br i1 %or.cond107, label %156, label %86

86:                                               ; preds = %82
  %87 = getelementptr inbounds i8, ptr %0, i64 104
  %88 = load i32, ptr %87, align 8, !tbaa !35
  %89 = icmp ult i32 %88, 4
  %brmerge137.not = icmp ult i32 %7, 65536
  %or.cond142 = or i1 %89, %brmerge137.not
  br i1 %or.cond142, label %.loopexit, label %90

90:                                               ; preds = %86
  %91 = and i32 %7, 2147418112
  %brmerge135.not = icmp eq i32 %91, 0
  %92 = and i32 %7, 1073676288
  %brmerge133.not = icmp eq i32 %92, 0
  %93 = and i32 %7, 536805376
  %brmerge131.not = icmp eq i32 %93, 0
  %94 = and i32 %7, 268369920
  %brmerge129.not = icmp eq i32 %94, 0
  %95 = and i32 %7, 134152192
  %brmerge127.not = icmp eq i32 %95, 0
  %96 = and i32 %7, 67043328
  %brmerge125.not = icmp eq i32 %96, 0
  %97 = insertelement <8 x i32> poison, i32 %7, i64 0
  %98 = shufflevector <8 x i32> %97, <8 x i32> poison, <8 x i32> zeroinitializer
  %99 = and <8 x i32> %98, <i32 196608, i32 458752, i32 983040, i32 2031616, i32 4128768, i32 8323072, i32 16711680, i32 33488896>
  %100 = icmp eq <8 x i32> %99, zeroinitializer
  %.mux = select i1 %.not41, i32 16, i32 17
  %101 = extractelement <8 x i1> %100, i64 0
  %.mux.mux = select i1 %101, i32 18, i32 %.mux
  %102 = extractelement <8 x i1> %100, i64 1
  %.mux.mux.mux = select i1 %102, i32 19, i32 %.mux.mux
  %103 = extractelement <8 x i1> %100, i64 2
  %.mux.mux.mux.mux = select i1 %103, i32 20, i32 %.mux.mux.mux
  %104 = extractelement <8 x i1> %100, i64 3
  %.mux.mux.mux.mux.mux = select i1 %104, i32 21, i32 %.mux.mux.mux.mux
  %105 = extractelement <8 x i1> %100, i64 4
  %.mux.mux.mux.mux.mux.mux = select i1 %105, i32 22, i32 %.mux.mux.mux.mux.mux
  %106 = extractelement <8 x i1> %100, i64 5
  %.mux.mux.mux.mux.mux.mux.mux = select i1 %106, i32 23, i32 %.mux.mux.mux.mux.mux.mux
  %107 = extractelement <8 x i1> %100, i64 6
  %.mux.mux.mux.mux.mux.mux.mux.mux = select i1 %107, i32 24, i32 %.mux.mux.mux.mux.mux.mux.mux
  %108 = extractelement <8 x i1> %100, i64 7
  %.mux.mux.mux.mux.mux.mux.mux.mux.mux = select i1 %108, i32 25, i32 %.mux.mux.mux.mux.mux.mux.mux.mux
  %.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux = select i1 %brmerge125.not, i32 26, i32 %.mux.mux.mux.mux.mux.mux.mux.mux.mux
  %.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux = select i1 %brmerge127.not, i32 27, i32 %.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux
  %.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux = select i1 %brmerge129.not, i32 28, i32 %.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux
  %.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux = select i1 %brmerge131.not, i32 29, i32 %.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux
  %.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux = select i1 %brmerge133.not, i32 30, i32 %.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux
  %.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux = select i1 %brmerge135.not, i32 31, i32 %.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux
  %109 = add nsw i32 %.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux, -16
  %110 = zext nneg i32 %109 to i64
  %111 = getelementptr inbounds [16 x i8], ptr %8, i64 0, i64 %110
  store i8 %1, ptr %111, align 1, !tbaa !36
  %112 = trunc nuw nsw i32 %.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux.mux to i8
  tail call void @_ZN4Code6immregEN4Insn4TypeEhh(ptr noundef nonnull align 8 dereferenceable(200) %0, i32 noundef 26, i8 noundef zeroext %112, i8 noundef zeroext %1)
  br label %156

.loopexit:                                        ; preds = %86
  %113 = getelementptr inbounds i8, ptr %0, i64 48
  %114 = getelementptr inbounds i8, ptr %0, i64 72
  br label %115

115:                                              ; preds = %.loopexit, %134
  %.250 = phi i32 [ 31, %.loopexit ], [ %135, %134 ]
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #7
  %116 = call ptr @_ZNSt6vectorIhSaIhEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %113) #7
  %117 = call ptr @_ZNSt6vectorIhSaIhEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %113) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %4) #7
  %118 = trunc i32 %.250 to i8
  store i8 %118, ptr %4, align 1, !tbaa !36
  %119 = call ptr @_ZSt4findIN9__gnu_cxx17__normal_iteratorIPhSt6vectorIhSaIhEEEEhET_S7_S7_RKT0_(ptr %116, ptr %117, ptr noundef nonnull align 1 dereferenceable(1) %4)
  store ptr %119, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #7
  %120 = call ptr @_ZNSt6vectorIhSaIhEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %113) #7
  store ptr %120, ptr %5, align 8
  %121 = call noundef zeroext i1 @_ZN9__gnu_cxxeqIPhSt6vectorIhSaIhEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %5) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #7
  br i1 %121, label %134, label %122

122:                                              ; preds = %115
  %123 = load i32, ptr %114, align 8, !tbaa !37
  %124 = shl nuw i32 1, %.250
  %125 = and i32 %123, %124
  %.not = icmp eq i32 %125, 0
  br i1 %.not, label %126, label %134

126:                                              ; preds = %122
  %127 = load i32, ptr %6, align 8, !tbaa !5
  %128 = and i32 %127, %124
  %.not39 = icmp eq i32 %128, 0
  br i1 %.not39, label %129, label %134

129:                                              ; preds = %126
  %130 = or i32 %127, %124
  store i32 %130, ptr %6, align 8, !tbaa !5
  %131 = add nsw i32 %.250, -16
  %132 = zext nneg i32 %131 to i64
  %133 = getelementptr inbounds [16 x i8], ptr %8, i64 0, i64 %132
  store i8 %1, ptr %133, align 1, !tbaa !36
  call void @_ZN4Code6immregEN4Insn4TypeEhh(ptr noundef nonnull align 8 dereferenceable(200) %0, i32 noundef 26, i8 noundef zeroext %118, i8 noundef zeroext %1)
  br label %156

134:                                              ; preds = %122, %126, %115
  %135 = add nsw i32 %.250, -1
  %136 = icmp ugt i32 %.250, 16
  br i1 %136, label %115, label %137, !llvm.loop !38

137:                                              ; preds = %134
  %138 = call noundef zeroext i8 @_ZN4Code13allocateSpareEb(ptr noundef nonnull align 8 dereferenceable(200) %0, i1 noundef zeroext true)
  %139 = icmp eq i8 %138, -1
  br i1 %139, label %140, label %145

140:                                              ; preds = %137
  %141 = call ptr @__cxa_allocate_exception(i64 16) #7
  invoke void @_ZNSt14overflow_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %141, ptr noundef nonnull @.str.19)
          to label %142 unwind label %143

142:                                              ; preds = %140
  call void @__cxa_throw(ptr nonnull %141, ptr nonnull @_ZTISt14overflow_error, ptr nonnull @_ZNSt14overflow_errorD1Ev) #8
  unreachable

143:                                              ; preds = %140
  %144 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %141) #7
  resume { ptr, i32 } %144

145:                                              ; preds = %137
  %146 = zext i8 %138 to i32
  %147 = shl nuw i32 1, %146
  %148 = xor i32 %147, -1
  %149 = load i32, ptr %114, align 8, !tbaa !37
  %150 = and i32 %149, %148
  store i32 %150, ptr %114, align 8, !tbaa !37
  %151 = load i32, ptr %6, align 8, !tbaa !5
  %152 = or i32 %151, %147
  store i32 %152, ptr %6, align 8, !tbaa !5
  %153 = add nsw i32 %146, -16
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds [16 x i8], ptr %8, i64 0, i64 %154
  store i8 %1, ptr %155, align 1, !tbaa !36
  call void @_ZN4Code6immregEN4Insn4TypeEhh(ptr noundef nonnull align 8 dereferenceable(200) %0, i32 noundef 26, i8 noundef zeroext %138, i8 noundef zeroext %1)
  br label %156

156:                                              ; preds = %82, %77, %72, %67, %62, %57, %52, %47, %42, %37, %32, %27, %22, %17, %12, %2, %145, %129, %90
  %.0 = phi i8 [ %112, %90 ], [ %118, %129 ], [ %138, %145 ], [ 16, %2 ], [ 17, %12 ], [ 18, %17 ], [ 19, %22 ], [ 20, %27 ], [ 21, %32 ], [ 22, %37 ], [ 23, %42 ], [ 24, %47 ], [ 25, %52 ], [ 26, %57 ], [ 27, %62 ], [ 28, %67 ], [ 29, %72 ], [ 30, %77 ], [ 31, %82 ]
  ret i8 %.0
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4Code6immregEN4Insn4TypeEhh(ptr noundef nonnull align 8 dereferenceable(200), i32 noundef, i8 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #1 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i8 @_ZN4Code13allocateSpareEb(ptr noundef nonnull align 8 dereferenceable(200), i1 noundef zeroext) local_unnamed_addr #2 align 2

declare void @_ZNSt14overflow_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #3

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local ptr @_ZSt4findIN9__gnu_cxx17__normal_iteratorIPhSt6vectorIhSaIhEEEEhET_S7_S7_RKT0_(ptr, ptr, ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #6

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !22, i64 80}
!6 = !{!"_ZTS4Code", !7, i64 0, !14, i64 24, !18, i64 48, !22, i64 72, !22, i64 76, !22, i64 80, !22, i64 84, !12, i64 88, !22, i64 104, !23, i64 108, !22, i64 112, !24, i64 120, !27, i64 152}
!7 = !{!"_ZTSSt6vectorI4InsnSaIS0_EE", !8, i64 0}
!8 = !{!"_ZTSSt12_Vector_baseI4InsnSaIS0_EE", !9, i64 0}
!9 = !{!"_ZTSNSt12_Vector_baseI4InsnSaIS0_EE12_Vector_implE", !10, i64 0}
!10 = !{!"_ZTSNSt12_Vector_baseI4InsnSaIS0_EE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!11 = !{!"any pointer", !12, i64 0}
!12 = !{!"omnipotent char", !13, i64 0}
!13 = !{!"Simple C++ TBAA"}
!14 = !{!"_ZTSSt6vectorIiSaIiEE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseIiSaIiEE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIiSaIiEE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!18 = !{!"_ZTSSt6vectorIhSaIhEE", !19, i64 0}
!19 = !{!"_ZTSSt12_Vector_baseIhSaIhEE", !20, i64 0}
!20 = !{!"_ZTSNSt12_Vector_baseIhSaIhEE12_Vector_implE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIhSaIhEE17_Vector_impl_dataE", !11, i64 0, !11, i64 8, !11, i64 16}
!22 = !{!"int", !12, i64 0}
!23 = !{!"_ZTSN4Code12PrologueTypeE", !12, i64 0}
!24 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !25, i64 0, !26, i64 8, !12, i64 16}
!25 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !11, i64 0}
!26 = !{!"long", !12, i64 0}
!27 = !{!"_ZTSSt3mapIh4SboxSt4lessIhESaISt4pairIKhS0_EEE", !28, i64 0}
!28 = !{!"_ZTSSt8_Rb_treeIhSt4pairIKh4SboxESt10_Select1stIS3_ESt4lessIhESaIS3_EE", !29, i64 0}
!29 = !{!"_ZTSNSt8_Rb_treeIhSt4pairIKh4SboxESt10_Select1stIS3_ESt4lessIhESaIS3_EE13_Rb_tree_implIS7_Lb1EEE", !30, i64 0, !32, i64 8}
!30 = !{!"_ZTSSt20_Rb_tree_key_compareISt4lessIhEE", !31, i64 0}
!31 = !{!"_ZTSSt4lessIhE"}
!32 = !{!"_ZTSSt15_Rb_tree_header", !33, i64 0, !26, i64 32}
!33 = !{!"_ZTSSt18_Rb_tree_node_base", !34, i64 0, !11, i64 8, !11, i64 16, !11, i64 24}
!34 = !{!"_ZTSSt14_Rb_tree_color", !12, i64 0}
!35 = !{!6, !22, i64 104}
!36 = !{!12, !12, i64 0}
!37 = !{!6, !22, i64 72}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass