; LLVM IR from NVIDIA/DALI :: dali/util (uri)

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

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

@.str.8 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [14 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4dali12display_charB5cxx11Ec(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, i8 noundef signext) #0

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4dali3URI5ParseENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS0_9ParseOptsE(ptr dead_on_unwind noalias writable sret(%"class.dali::URI") align 8 %0, ptr noundef %1, i32 noundef %2) #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i1, align 1
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::__cxx11::basic_string", align 8
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca i8, align 1
  %22 = alloca %"class.std::__cxx11::basic_string", align 8
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::__cxx11::basic_string", align 8
  %25 = alloca %"class.std::__cxx11::basic_string", align 8
  %26 = alloca %"class.std::__cxx11::basic_string", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  store ptr %0, ptr %4, align 8
  store ptr %1, ptr %5, align 8, !tbaa !5
  store i32 %2, ptr %6, align 4, !tbaa !9
  store i1 false, ptr %7, align 1
  call void @_ZN4dali3URIC2Ev(ptr noundef nonnull align 8 dereferenceable(152) %0) #6
  %31 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 0
  %32 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  %33 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 11
  store i8 1, ptr %33, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  %34 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 0
  %35 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv(ptr noundef nonnull align 8 dereferenceable(32) %34) #6
  store i64 %35, ptr %8, align 8, !tbaa !17
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  %36 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 0
  %37 = call noundef ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4dataEv(ptr noundef nonnull align 8 dereferenceable(32) %36) #6
  store ptr %37, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  %38 = load ptr, ptr %9, align 8, !tbaa !5
  %39 = load i64, ptr %8, align 8, !tbaa !17
  %40 = getelementptr inbounds i8, ptr %38, i64 %39
  store ptr %40, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  %41 = load ptr, ptr %9, align 8, !tbaa !5
  store ptr %41, ptr %11, align 8, !tbaa !5
  %42 = load ptr, ptr %11, align 8, !tbaa !5
  %43 = load ptr, ptr %9, align 8, !tbaa !5
  %44 = ptrtoint ptr %42 to i64
  %45 = ptrtoint ptr %43 to i64
  %46 = sub i64 %44, %45
  %47 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 1
  store i64 %46, ptr %47, align 8, !tbaa !18
  %48 = load ptr, ptr %11, align 8, !tbaa !5
  %49 = load i8, ptr %48, align 1, !tbaa !19
  %50 = sext i8 %49 to i32
  %51 = call i32 @isalpha(i32 noundef %50) #7
  %52 = icmp ne i32 %51, 0
  br i1 %52, label %62, label %53

53:                                               ; preds = %3
  %54 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 11
  store i8 0, ptr %54, align 8, !tbaa !11
  %55 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 12
  %56 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef @.str.8)
          to label %57 unwind label %58

57:                                               ; preds = %53
  store i1 true, ptr %7, align 1
  store i32 1, ptr %14, align 4
  br label %408

58:                                               ; preds = %167, %128, %118, %75, %53
  %59 = landingpad { ptr, i32 }
          cleanup
  %60 = extractvalue { ptr, i32 } %59, 0
  store ptr %60, ptr %12, align 8
  %61 = extractvalue { ptr, i32 } %59, 1
  store i32 %61, ptr %13, align 4
  br label %410

62:                                               ; preds = %3
  br label %63

63:                                               ; preds = %103, %62
  %64 = load ptr, ptr %11, align 8, !tbaa !5
  %65 = load i8, ptr %64, align 1, !tbaa !19
  %66 = sext i8 %65 to i32
  %67 = icmp ne i32 %66, 0
  br i1 %67, label %68, label %73

68:                                               ; preds = %63
  %69 = load ptr, ptr %11, align 8, !tbaa !5
  %70 = load i8, ptr %69, align 1, !tbaa !19
  %71 = sext i8 %70 to i32
  %72 = icmp ne i32 %71, 58
  br label %73

73:                                               ; preds = %68, %63
  %74 = phi i1 [ false, %63 ], [ %72, %68 ]
  br i1 %74, label %75, label %106

75:                                               ; preds = %73
  %76 = load ptr, ptr %11, align 8, !tbaa !5
  %77 = load i8, ptr %76, align 1, !tbaa !19
  %78 = invoke noundef zeroext i1 @_ZN4dali19allowed_scheme_charEc(i8 noundef signext %77)
          to label %79 unwind label %58

79:                                               ; preds = %75
  br i1 %78, label %103, label %80

80:                                               ; preds = %79
  %81 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 11
  store i8 0, ptr %81, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #6
  %82 = load ptr, ptr %11, align 8, !tbaa !5
  %83 = load i8, ptr %82, align 1, !tbaa !19
  invoke void @_ZN4dali12display_charB5cxx11Ec(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %17, i8 noundef signext %83)
          to label %84 unwind label %89

84:                                               ; preds = %80
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef @.str.9, ptr noundef nonnull align 8 dereferenceable(32) %17)
          to label %85 unwind label %93

85:                                               ; preds = %84
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %15, ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef @.str.10)
          to label %86 unwind label %97

86:                                               ; preds = %85
  %87 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 12
  %88 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %87, ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #6
  store i1 true, ptr %7, align 1
  store i32 1, ptr %14, align 4
  br label %408

89:                                               ; preds = %80
  %90 = landingpad { ptr, i32 }
          cleanup
  %91 = extractvalue { ptr, i32 } %90, 0
  store ptr %91, ptr %12, align 8
  %92 = extractvalue { ptr, i32 } %90, 1
  store i32 %92, ptr %13, align 4
  br label %102

93:                                               ; preds = %84
  %94 = landingpad { ptr, i32 }
          cleanup
  %95 = extractvalue { ptr, i32 } %94, 0
  store ptr %95, ptr %12, align 8
  %96 = extractvalue { ptr, i32 } %94, 1
  store i32 %96, ptr %13, align 4
  br label %101

97:                                               ; preds = %85
  %98 = landingpad { ptr, i32 }
          cleanup
  %99 = extractvalue { ptr, i32 } %98, 0
  store ptr %99, ptr %12, align 8
  %100 = extractvalue { ptr, i32 } %98, 1
  store i32 %100, ptr %13, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  br label %101

101:                                              ; preds = %97, %93
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  br label %102

102:                                              ; preds = %101, %89
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #6
  br label %410

103:                                              ; preds = %79
  %104 = load ptr, ptr %11, align 8, !tbaa !5
  %105 = getelementptr inbounds i8, ptr %104, i32 1
  store ptr %105, ptr %11, align 8, !tbaa !5
  br label %63, !llvm.loop !20

106:                                              ; preds = %73
  %107 = load ptr, ptr %11, align 8, !tbaa !5
  %108 = load ptr, ptr %9, align 8, !tbaa !5
  %109 = ptrtoint ptr %107 to i64
  %110 = ptrtoint ptr %108 to i64
  %111 = sub i64 %109, %110
  %112 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 2
  store i64 %111, ptr %112, align 8, !tbaa !22
  %113 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 2
  %114 = load i64, ptr %113, align 8, !tbaa !22
  %115 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 1
  %116 = load i64, ptr %115, align 8, !tbaa !18
  %117 = icmp sle i64 %114, %116
  br i1 %117, label %118, label %123

118:                                              ; preds = %106
  %119 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 11
  store i8 0, ptr %119, align 8, !tbaa !11
  %120 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 12
  %121 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %120, ptr noundef @.str.11)
          to label %122 unwind label %58

122:                                              ; preds = %118
  store i1 true, ptr %7, align 1
  store i32 1, ptr %14, align 4
  br label %408

123:                                              ; preds = %106
  %124 = load ptr, ptr %11, align 8, !tbaa !5
  %125 = load i8, ptr %124, align 1, !tbaa !19
  %126 = sext i8 %125 to i32
  %127 = icmp ne i32 %126, 58
  br i1 %127, label %128, label %133

128:                                              ; preds = %123
  %129 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 11
  store i8 0, ptr %129, align 8, !tbaa !11
  %130 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 12
  %131 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %130, ptr noundef @.str.12)
          to label %132 unwind label %58

132:                                              ; preds = %128
  store i1 true, ptr %7, align 1
  store i32 1, ptr %14, align 4
  br label %408

133:                                              ; preds = %123
  %134 = load ptr, ptr %11, align 8, !tbaa !5
  %135 = getelementptr inbounds i8, ptr %134, i32 1
  store ptr %135, ptr %11, align 8, !tbaa !5
  %136 = load ptr, ptr %11, align 8, !tbaa !5
  %137 = load i8, ptr %136, align 1, !tbaa !19
  %138 = sext i8 %137 to i32
  %139 = icmp eq i32 %138, 47
  br i1 %139, label %140, label %205

140:                                              ; preds = %133
  %141 = load ptr, ptr %11, align 8, !tbaa !5
  %142 = getelementptr inbounds i8, ptr %141, i64 1
  %143 = load i8, ptr %142, align 1, !tbaa !19
  %144 = sext i8 %143 to i32
  %145 = icmp eq i32 %144, 47
  br i1 %145, label %146, label %205

146:                                              ; preds = %140
  %147 = load ptr, ptr %11, align 8, !tbaa !5
  %148 = getelementptr inbounds i8, ptr %147, i64 2
  store ptr %148, ptr %11, align 8, !tbaa !5
  %149 = load ptr, ptr %11, align 8, !tbaa !5
  %150 = load ptr, ptr %9, align 8, !tbaa !5
  %151 = ptrtoint ptr %149 to i64
  %152 = ptrtoint ptr %150 to i64
  %153 = sub i64 %151, %152
  %154 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 3
  store i64 %153, ptr %154, align 8, !tbaa !23
  br label %155

155:                                              ; preds = %195, %146
  %156 = load ptr, ptr %11, align 8, !tbaa !5
  %157 = load i8, ptr %156, align 1, !tbaa !19
  %158 = sext i8 %157 to i32
  %159 = icmp ne i32 %158, 0
  br i1 %159, label %160, label %165

160:                                              ; preds = %155
  %161 = load ptr, ptr %11, align 8, !tbaa !5
  %162 = load i8, ptr %161, align 1, !tbaa !19
  %163 = sext i8 %162 to i32
  %164 = icmp ne i32 %163, 47
  br label %165

165:                                              ; preds = %160, %155
  %166 = phi i1 [ false, %155 ], [ %164, %160 ]
  br i1 %166, label %167, label %198

167:                                              ; preds = %165
  %168 = load ptr, ptr %11, align 8, !tbaa !5
  %169 = load i8, ptr %168, align 1, !tbaa !19
  %170 = invoke noundef zeroext i1 @_ZN4dali12allowed_charEc(i8 noundef signext %169)
          to label %171 unwind label %58

171:                                              ; preds = %167
  br i1 %170, label %195, label %172

172:                                              ; preds = %171
  %173 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 11
  store i8 0, ptr %173, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #6
  %174 = load ptr, ptr %11, align 8, !tbaa !5
  %175 = load i8, ptr %174, align 1, !tbaa !19
  invoke void @_ZN4dali12display_charB5cxx11Ec(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %20, i8 noundef signext %175)
          to label %176 unwind label %181

176:                                              ; preds = %172
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %19, ptr noundef @.str.9, ptr noundef nonnull align 8 dereferenceable(32) %20)
          to label %177 unwind label %185

177:                                              ; preds = %176
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %18, ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef @.str.13)
          to label %178 unwind label %189

178:                                              ; preds = %177
  %179 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 12
  %180 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %179, ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  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 @llvm.lifetime.end.p0(i64 32, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #6
  store i1 true, ptr %7, align 1
  store i32 1, ptr %14, align 4
  br label %408

181:                                              ; preds = %172
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %12, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %13, align 4
  br label %194

185:                                              ; preds = %176
  %186 = landingpad { ptr, i32 }
          cleanup
  %187 = extractvalue { ptr, i32 } %186, 0
  store ptr %187, ptr %12, align 8
  %188 = extractvalue { ptr, i32 } %186, 1
  store i32 %188, ptr %13, align 4
  br label %193

189:                                              ; preds = %177
  %190 = landingpad { ptr, i32 }
          cleanup
  %191 = extractvalue { ptr, i32 } %190, 0
  store ptr %191, ptr %12, align 8
  %192 = extractvalue { ptr, i32 } %190, 1
  store i32 %192, ptr %13, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #6
  br label %193

193:                                              ; preds = %189, %185
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #6
  br label %194

194:                                              ; preds = %193, %181
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #6
  br label %410

195:                                              ; preds = %171
  %196 = load ptr, ptr %11, align 8, !tbaa !5
  %197 = getelementptr inbounds i8, ptr %196, i32 1
  store ptr %197, ptr %11, align 8, !tbaa !5
  br label %155, !llvm.loop !24

198:                                              ; preds = %165
  %199 = load ptr, ptr %11, align 8, !tbaa !5
  %200 = load ptr, ptr %9, align 8, !tbaa !5
  %201 = ptrtoint ptr %199 to i64
  %202 = ptrtoint ptr %200 to i64
  %203 = sub i64 %201, %202
  %204 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 4
  store i64 %203, ptr %204, align 8, !tbaa !25
  br label %205

205:                                              ; preds = %198, %140, %133
  %206 = load ptr, ptr %11, align 8, !tbaa !5
  %207 = load i8, ptr %206, align 1, !tbaa !19
  %208 = sext i8 %207 to i32
  %209 = icmp eq i32 %208, 0
  br i1 %209, label %210, label %211

210:                                              ; preds = %205
  store i1 true, ptr %7, align 1
  store i32 1, ptr %14, align 4
  br label %408

211:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #6
  %212 = load i32, ptr %6, align 4, !tbaa !9
  %213 = and i32 %212, 1
  %214 = icmp eq i32 %213, 1
  %215 = zext i1 %214 to i8
  store i8 %215, ptr %21, align 1, !tbaa !26
  %216 = load ptr, ptr %11, align 8, !tbaa !5
  %217 = load ptr, ptr %9, align 8, !tbaa !5
  %218 = ptrtoint ptr %216 to i64
  %219 = ptrtoint ptr %217 to i64
  %220 = sub i64 %218, %219
  %221 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 5
  store i64 %220, ptr %221, align 8, !tbaa !27
  br label %222

222:                                              ; preds = %269, %211
  %223 = load ptr, ptr %11, align 8, !tbaa !5
  %224 = load i8, ptr %223, align 1, !tbaa !19
  %225 = sext i8 %224 to i32
  %226 = icmp ne i32 %225, 0
  br i1 %226, label %227, label %232

227:                                              ; preds = %222
  %228 = load ptr, ptr %11, align 8, !tbaa !5
  %229 = load i8, ptr %228, align 1, !tbaa !19
  %230 = sext i8 %229 to i32
  %231 = icmp ne i32 %230, 63
  br label %232

232:                                              ; preds = %227, %222
  %233 = phi i1 [ false, %222 ], [ %231, %227 ]
  br i1 %233, label %234, label %272

234:                                              ; preds = %232
  %235 = load ptr, ptr %11, align 8, !tbaa !5
  %236 = load i8, ptr %235, align 1, !tbaa !19
  %237 = invoke noundef zeroext i1 @_ZN4dali12allowed_charEc(i8 noundef signext %236)
          to label %238 unwind label %251

238:                                              ; preds = %234
  br i1 %237, label %269, label %239

239:                                              ; preds = %238
  %240 = load i8, ptr %21, align 1, !tbaa !26, !range !28, !noundef !29
  %241 = trunc i8 %240 to i1
  br i1 %241, label %269, label %242

242:                                              ; preds = %239
  %243 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 11
  store i8 0, ptr %243, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %23) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #6
  %244 = load ptr, ptr %11, align 8, !tbaa !5
  %245 = load i8, ptr %244, align 1, !tbaa !19
  invoke void @_ZN4dali12display_charB5cxx11Ec(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %24, i8 noundef signext %245)
          to label %246 unwind label %255

246:                                              ; preds = %242
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %23, ptr noundef @.str.9, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %247 unwind label %259

247:                                              ; preds = %246
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %22, ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef @.str.14)
          to label %248 unwind label %263

248:                                              ; preds = %247
  %249 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 12
  %250 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %249, ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  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
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #6
  store i1 true, ptr %7, align 1
  store i32 1, ptr %14, align 4
  br label %406

251:                                              ; preds = %365, %305, %234
  %252 = landingpad { ptr, i32 }
          cleanup
  %253 = extractvalue { ptr, i32 } %252, 0
  store ptr %253, ptr %12, align 8
  %254 = extractvalue { ptr, i32 } %252, 1
  store i32 %254, ptr %13, align 4
  br label %407

255:                                              ; preds = %242
  %256 = landingpad { ptr, i32 }
          cleanup
  %257 = extractvalue { ptr, i32 } %256, 0
  store ptr %257, ptr %12, align 8
  %258 = extractvalue { ptr, i32 } %256, 1
  store i32 %258, ptr %13, align 4
  br label %268

259:                                              ; preds = %246
  %260 = landingpad { ptr, i32 }
          cleanup
  %261 = extractvalue { ptr, i32 } %260, 0
  store ptr %261, ptr %12, align 8
  %262 = extractvalue { ptr, i32 } %260, 1
  store i32 %262, ptr %13, align 4
  br label %267

263:                                              ; preds = %247
  %264 = landingpad { ptr, i32 }
          cleanup
  %265 = extractvalue { ptr, i32 } %264, 0
  store ptr %265, ptr %12, align 8
  %266 = extractvalue { ptr, i32 } %264, 1
  store i32 %266, ptr %13, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #6
  br label %267

267:                                              ; preds = %263, %259
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #6
  br label %268

268:                                              ; preds = %267, %255
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #6
  br label %407

269:                                              ; preds = %239, %238
  %270 = load ptr, ptr %11, align 8, !tbaa !5
  %271 = getelementptr inbounds i8, ptr %270, i32 1
  store ptr %271, ptr %11, align 8, !tbaa !5
  br label %222, !llvm.loop !30

272:                                              ; preds = %232
  %273 = load ptr, ptr %11, align 8, !tbaa !5
  %274 = load ptr, ptr %9, align 8, !tbaa !5
  %275 = ptrtoint ptr %273 to i64
  %276 = ptrtoint ptr %274 to i64
  %277 = sub i64 %275, %276
  %278 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 6
  store i64 %277, ptr %278, align 8, !tbaa !31
  %279 = load ptr, ptr %11, align 8, !tbaa !5
  %280 = load i8, ptr %279, align 1, !tbaa !19
  %281 = sext i8 %280 to i32
  %282 = icmp eq i32 %281, 0
  br i1 %282, label %283, label %284

283:                                              ; preds = %272
  store i1 true, ptr %7, align 1
  store i32 1, ptr %14, align 4
  br label %406

284:                                              ; preds = %272
  %285 = load ptr, ptr %11, align 8, !tbaa !5
  %286 = getelementptr inbounds i8, ptr %285, i32 1
  store ptr %286, ptr %11, align 8, !tbaa !5
  %287 = load ptr, ptr %11, align 8, !tbaa !5
  %288 = load ptr, ptr %9, align 8, !tbaa !5
  %289 = ptrtoint ptr %287 to i64
  %290 = ptrtoint ptr %288 to i64
  %291 = sub i64 %289, %290
  %292 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 7
  store i64 %291, ptr %292, align 8, !tbaa !32
  br label %293

293:                                              ; preds = %336, %284
  %294 = load ptr, ptr %11, align 8, !tbaa !5
  %295 = load i8, ptr %294, align 1, !tbaa !19
  %296 = sext i8 %295 to i32
  %297 = icmp ne i32 %296, 0
  br i1 %297, label %298, label %303

298:                                              ; preds = %293
  %299 = load ptr, ptr %11, align 8, !tbaa !5
  %300 = load i8, ptr %299, align 1, !tbaa !19
  %301 = sext i8 %300 to i32
  %302 = icmp ne i32 %301, 35
  br label %303

303:                                              ; preds = %298, %293
  %304 = phi i1 [ false, %293 ], [ %302, %298 ]
  br i1 %304, label %305, label %339

305:                                              ; preds = %303
  %306 = load ptr, ptr %11, align 8, !tbaa !5
  %307 = load i8, ptr %306, align 1, !tbaa !19
  %308 = invoke noundef zeroext i1 @_ZN4dali12allowed_charEc(i8 noundef signext %307)
          to label %309 unwind label %251

309:                                              ; preds = %305
  br i1 %308, label %336, label %310

310:                                              ; preds = %309
  %311 = load i8, ptr %21, align 1, !tbaa !26, !range !28, !noundef !29
  %312 = trunc i8 %311 to i1
  br i1 %312, label %336, label %313

313:                                              ; preds = %310
  %314 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 11
  store i8 0, ptr %314, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %25) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %26) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %27) #6
  %315 = load ptr, ptr %11, align 8, !tbaa !5
  %316 = load i8, ptr %315, align 1, !tbaa !19
  invoke void @_ZN4dali12display_charB5cxx11Ec(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %27, i8 noundef signext %316)
          to label %317 unwind label %322

317:                                              ; preds = %313
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %26, ptr noundef @.str.9, ptr noundef nonnull align 8 dereferenceable(32) %27)
          to label %318 unwind label %326

318:                                              ; preds = %317
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %25, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef @.str.15)
          to label %319 unwind label %330

319:                                              ; preds = %318
  %320 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 12
  %321 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %320, ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #6
  store i1 true, ptr %7, align 1
  store i32 1, ptr %14, align 4
  br label %406

322:                                              ; preds = %313
  %323 = landingpad { ptr, i32 }
          cleanup
  %324 = extractvalue { ptr, i32 } %323, 0
  store ptr %324, ptr %12, align 8
  %325 = extractvalue { ptr, i32 } %323, 1
  store i32 %325, ptr %13, align 4
  br label %335

326:                                              ; preds = %317
  %327 = landingpad { ptr, i32 }
          cleanup
  %328 = extractvalue { ptr, i32 } %327, 0
  store ptr %328, ptr %12, align 8
  %329 = extractvalue { ptr, i32 } %327, 1
  store i32 %329, ptr %13, align 4
  br label %334

330:                                              ; preds = %318
  %331 = landingpad { ptr, i32 }
          cleanup
  %332 = extractvalue { ptr, i32 } %331, 0
  store ptr %332, ptr %12, align 8
  %333 = extractvalue { ptr, i32 } %331, 1
  store i32 %333, ptr %13, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #6
  br label %334

334:                                              ; preds = %330, %326
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #6
  br label %335

335:                                              ; preds = %334, %322
  call void @llvm.lifetime.end.p0(i64 32, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %25) #6
  br label %407

336:                                              ; preds = %310, %309
  %337 = load ptr, ptr %11, align 8, !tbaa !5
  %338 = getelementptr inbounds i8, ptr %337, i32 1
  store ptr %338, ptr %11, align 8, !tbaa !5
  br label %293, !llvm.loop !33

339:                                              ; preds = %303
  %340 = load ptr, ptr %11, align 8, !tbaa !5
  %341 = load ptr, ptr %9, align 8, !tbaa !5
  %342 = ptrtoint ptr %340 to i64
  %343 = ptrtoint ptr %341 to i64
  %344 = sub i64 %342, %343
  %345 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 8
  store i64 %344, ptr %345, align 8, !tbaa !34
  %346 = load ptr, ptr %11, align 8, !tbaa !5
  %347 = load i8, ptr %346, align 1, !tbaa !19
  %348 = sext i8 %347 to i32
  %349 = icmp eq i32 %348, 0
  br i1 %349, label %350, label %351

350:                                              ; preds = %339
  store i1 true, ptr %7, align 1
  store i32 1, ptr %14, align 4
  br label %406

351:                                              ; preds = %339
  %352 = load ptr, ptr %11, align 8, !tbaa !5
  %353 = getelementptr inbounds i8, ptr %352, i32 1
  store ptr %353, ptr %11, align 8, !tbaa !5
  %354 = load ptr, ptr %11, align 8, !tbaa !5
  %355 = load ptr, ptr %9, align 8, !tbaa !5
  %356 = ptrtoint ptr %354 to i64
  %357 = ptrtoint ptr %355 to i64
  %358 = sub i64 %356, %357
  %359 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 9
  store i64 %358, ptr %359, align 8, !tbaa !35
  br label %360

360:                                              ; preds = %396, %351
  %361 = load ptr, ptr %11, align 8, !tbaa !5
  %362 = load i8, ptr %361, align 1, !tbaa !19
  %363 = sext i8 %362 to i32
  %364 = icmp ne i32 %363, 0
  br i1 %364, label %365, label %399

365:                                              ; preds = %360
  %366 = load ptr, ptr %11, align 8, !tbaa !5
  %367 = load i8, ptr %366, align 1, !tbaa !19
  %368 = invoke noundef zeroext i1 @_ZN4dali12allowed_charEc(i8 noundef signext %367)
          to label %369 unwind label %251

369:                                              ; preds = %365
  br i1 %368, label %396, label %370

370:                                              ; preds = %369
  %371 = load i8, ptr %21, align 1, !tbaa !26, !range !28, !noundef !29
  %372 = trunc i8 %371 to i1
  br i1 %372, label %396, label %373

373:                                              ; preds = %370
  %374 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 11
  store i8 0, ptr %374, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %29) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #6
  %375 = load ptr, ptr %11, align 8, !tbaa !5
  %376 = load i8, ptr %375, align 1, !tbaa !19
  invoke void @_ZN4dali12display_charB5cxx11Ec(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %30, i8 noundef signext %376)
          to label %377 unwind label %382

377:                                              ; preds = %373
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %29, ptr noundef @.str.9, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %378 unwind label %386

378:                                              ; preds = %377
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %28, ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef @.str.16)
          to label %379 unwind label %390

379:                                              ; preds = %378
  %380 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 12
  %381 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %380, ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #6
  store i1 true, ptr %7, align 1
  store i32 1, ptr %14, align 4
  br label %406

382:                                              ; preds = %373
  %383 = landingpad { ptr, i32 }
          cleanup
  %384 = extractvalue { ptr, i32 } %383, 0
  store ptr %384, ptr %12, align 8
  %385 = extractvalue { ptr, i32 } %383, 1
  store i32 %385, ptr %13, align 4
  br label %395

386:                                              ; preds = %377
  %387 = landingpad { ptr, i32 }
          cleanup
  %388 = extractvalue { ptr, i32 } %387, 0
  store ptr %388, ptr %12, align 8
  %389 = extractvalue { ptr, i32 } %387, 1
  store i32 %389, ptr %13, align 4
  br label %394

390:                                              ; preds = %378
  %391 = landingpad { ptr, i32 }
          cleanup
  %392 = extractvalue { ptr, i32 } %391, 0
  store ptr %392, ptr %12, align 8
  %393 = extractvalue { ptr, i32 } %391, 1
  store i32 %393, ptr %13, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #6
  br label %394

394:                                              ; preds = %390, %386
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #6
  br label %395

395:                                              ; preds = %394, %382
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #6
  br label %407

396:                                              ; preds = %370, %369
  %397 = load ptr, ptr %11, align 8, !tbaa !5
  %398 = getelementptr inbounds i8, ptr %397, i32 1
  store ptr %398, ptr %11, align 8, !tbaa !5
  br label %360, !llvm.loop !36

399:                                              ; preds = %360
  %400 = load ptr, ptr %11, align 8, !tbaa !5
  %401 = load ptr, ptr %9, align 8, !tbaa !5
  %402 = ptrtoint ptr %400 to i64
  %403 = ptrtoint ptr %401 to i64
  %404 = sub i64 %402, %403
  %405 = getelementptr inbounds %"class.dali::URI", ptr %0, i32 0, i32 10
  store i64 %404, ptr %405, align 8, !tbaa !37
  store i1 true, ptr %7, align 1
  store i32 1, ptr %14, align 4
  br label %406

406:                                              ; preds = %399, %379, %350, %319, %283, %248
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #6
  br label %408

407:                                              ; preds = %395, %335, %268, %251
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #6
  br label %410

408:                                              ; preds = %406, %210, %178, %132, %122, %86, %57
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  %409 = load i1, ptr %7, align 1
  br i1 %409, label %412, label %411

410:                                              ; preds = %407, %194, %102, %58
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  call void @_ZN4dali3URID2Ev(ptr noundef nonnull align 8 dereferenceable(152) %0) #6
  br label %413

411:                                              ; preds = %408
  call void @_ZN4dali3URID2Ev(ptr noundef nonnull align 8 dereferenceable(152) %0) #6
  br label %412

412:                                              ; preds = %411, %408
  ret void

413:                                              ; preds = %410
  %414 = load ptr, ptr %12, align 8
  %415 = load i32, ptr %13, align 4
  %416 = insertvalue { ptr, i32 } poison, ptr %414, 0
  %417 = insertvalue { ptr, i32 } %416, i32 %415, 1
  resume { ptr, i32 } %417
}

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

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

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

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @isalpha(i32 noundef) #4

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN4dali19allowed_scheme_charEc(i8 noundef signext) #2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN4dali12allowed_charEc(i8 noundef signext) #5

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

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

!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 = !{!"_ZTSN4dali3URI9ParseOptsE", !7, i64 0}
!11 = !{!12, !16, i64 112}
!12 = !{!"_ZTSN4dali3URIE", !13, i64 0, !15, i64 32, !15, i64 40, !15, i64 48, !15, i64 56, !15, i64 64, !15, i64 72, !15, i64 80, !15, i64 88, !15, i64 96, !15, i64 104, !16, i64 112, !13, i64 120}
!13 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !14, i64 0, !15, i64 8, !7, i64 16}
!14 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!"bool", !7, i64 0}
!17 = !{!15, !15, i64 0}
!18 = !{!12, !15, i64 32}
!19 = !{!7, !7, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!12, !15, i64 40}
!23 = !{!12, !15, i64 48}
!24 = distinct !{!24, !21}
!25 = !{!12, !15, i64 56}
!26 = !{!16, !16, i64 0}
!27 = !{!12, !15, i64 64}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = distinct !{!30, !21}
!31 = !{!12, !15, i64 72}
!32 = !{!12, !15, i64 80}
!33 = distinct !{!33, !21}
!34 = !{!12, !15, i64 88}
!35 = !{!12, !15, i64 96}
!36 = distinct !{!36, !21}
!37 = !{!12, !15, i64 104}


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

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

@.str.8 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [14 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4dali12display_charB5cxx11Ec(ptr dead_on_unwind noalias writable sret(%"class.std::__cxx11::basic_string") align 8, i8 noundef signext) local_unnamed_addr #0

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4dali3URI5ParseENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS0_9ParseOptsE(ptr dead_on_unwind noalias nonnull writable sret(%"class.dali::URI") align 8 %0, ptr noundef %1, i32 noundef %2) local_unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::__cxx11::basic_string", align 8
  %5 = alloca %"class.std::__cxx11::basic_string", align 8
  %6 = alloca %"class.std::__cxx11::basic_string", align 8
  %7 = alloca %"class.std::__cxx11::basic_string", align 8
  %8 = alloca %"class.std::__cxx11::basic_string", align 8
  %9 = alloca %"class.std::__cxx11::basic_string", align 8
  %10 = alloca %"class.std::__cxx11::basic_string", align 8
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::__cxx11::basic_string", align 8
  %13 = alloca %"class.std::__cxx11::basic_string", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::__cxx11::basic_string", align 8
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::__cxx11::basic_string", align 8
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  tail call void @_ZN4dali3URIC2Ev(ptr noundef nonnull align 8 dereferenceable(152) %0) #6
  %19 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %1) #6
  %20 = getelementptr inbounds i8, ptr %0, i64 112
  store i8 1, ptr %20, align 8, !tbaa !5
  %21 = tail call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6lengthEv(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  %22 = tail call noundef ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4dataEv(ptr noundef nonnull align 8 dereferenceable(32) %0) #6
  %23 = ptrtoint ptr %22 to i64
  %24 = getelementptr inbounds i8, ptr %0, i64 32
  store i64 0, ptr %24, align 8, !tbaa !14
  %25 = load i8, ptr %22, align 1, !tbaa !15
  %26 = sext i8 %25 to i32
  %27 = tail call i32 @isalpha(i32 noundef %26) #7
  %.not = icmp eq i32 %27, 0
  br i1 %.not, label %.invoke, label %.preheader

.invoke:                                          ; preds = %3, %55, %.critedge
  %28 = phi ptr [ @.str.11, %.critedge ], [ @.str.12, %55 ], [ @.str.8, %3 ]
  store i8 0, ptr %20, align 8, !tbaa !5
  %29 = getelementptr inbounds i8, ptr %0, i64 120
  %30 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull %28)
          to label %203 unwind label %.loopexit.split-lp130

.loopexit129:                                     ; preds = %72
  %lpad.loopexit131 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit

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

.preheader:                                       ; preds = %3, %49
  %31 = phi i8 [ %.pr, %49 ], [ %25, %3 ]
  %.084 = phi ptr [ %50, %49 ], [ %22, %3 ]
  switch i8 %31, label %32 [
    i8 0, label %.critedge
    i8 58, label %.critedge
  ]

32:                                               ; preds = %.preheader
  %33 = tail call noundef zeroext i1 @_ZN4dali19allowed_scheme_charEc(i8 noundef signext %31)
  br i1 %33, label %49, label %34

34:                                               ; preds = %32
  store i8 0, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #6
  %35 = load i8, ptr %.084, align 1, !tbaa !15
  invoke void @_ZN4dali12display_charB5cxx11Ec(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %6, i8 noundef signext %35)
          to label %36 unwind label %41

36:                                               ; preds = %34
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %5, ptr noundef nonnull @.str.9, ptr noundef nonnull align 8 dereferenceable(32) %6)
          to label %37 unwind label %43

37:                                               ; preds = %36
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %4, ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull @.str.10)
          to label %38 unwind label %45

38:                                               ; preds = %37
  %39 = getelementptr inbounds i8, ptr %0, i64 120
  %40 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %4) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #6
  br label %203

41:                                               ; preds = %34
  %42 = landingpad { ptr, i32 }
          cleanup
  br label %48

43:                                               ; preds = %36
  %44 = landingpad { ptr, i32 }
          cleanup
  br label %47

45:                                               ; preds = %37
  %46 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #6
  br label %47

47:                                               ; preds = %45, %43
  %.pn117 = phi { ptr, i32 } [ %46, %45 ], [ %44, %43 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %6) #6
  br label %48

48:                                               ; preds = %47, %41
  %.pn117.pn = phi { ptr, i32 } [ %.pn117, %47 ], [ %42, %41 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4) #6
  br label %.loopexit

49:                                               ; preds = %32
  %50 = getelementptr inbounds i8, ptr %.084, i64 1
  %.pr = load i8, ptr %50, align 1, !tbaa !15
  br label %.preheader, !llvm.loop !16

.critedge:                                        ; preds = %.preheader, %.preheader
  %51 = ptrtoint ptr %.084 to i64
  %52 = sub i64 %51, %23
  %53 = getelementptr inbounds i8, ptr %0, i64 40
  store i64 %52, ptr %53, align 8, !tbaa !18
  %54 = load i64, ptr %24, align 8, !tbaa !14
  %.not95 = icmp sgt i64 %52, %54
  br i1 %.not95, label %55, label %.invoke

55:                                               ; preds = %.critedge
  %56 = load i8, ptr %.084, align 1, !tbaa !15
  %.not96 = icmp eq i8 %56, 58
  br i1 %.not96, label %57, label %.invoke

57:                                               ; preds = %55
  %58 = getelementptr inbounds i8, ptr %.084, i64 1
  %59 = load i8, ptr %58, align 1, !tbaa !15
  %60 = icmp eq i8 %59, 47
  br i1 %60, label %61, label %thread-pre-split

61:                                               ; preds = %57
  %62 = getelementptr inbounds i8, ptr %.084, i64 2
  %63 = load i8, ptr %62, align 1, !tbaa !15
  %64 = icmp eq i8 %63, 47
  br i1 %64, label %65, label %thread-pre-split.thread

65:                                               ; preds = %61
  %66 = getelementptr inbounds i8, ptr %.084, i64 3
  %67 = ptrtoint ptr %66 to i64
  %68 = sub i64 %67, %23
  %69 = getelementptr inbounds i8, ptr %0, i64 48
  store i64 %68, ptr %69, align 8, !tbaa !19
  br label %70

70:                                               ; preds = %90, %65
  %.185 = phi ptr [ %66, %65 ], [ %91, %90 ]
  %71 = load i8, ptr %.185, align 1, !tbaa !15
  switch i8 %71, label %72 [
    i8 0, label %.critedge2
    i8 47, label %.critedge2
  ]

72:                                               ; preds = %70
  %73 = invoke noundef zeroext i1 @_ZN4dali12allowed_charEc(i8 noundef signext %71)
          to label %74 unwind label %.loopexit129

74:                                               ; preds = %72
  br i1 %73, label %90, label %75

75:                                               ; preds = %74
  store i8 0, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #6
  %76 = load i8, ptr %.185, align 1, !tbaa !15
  invoke void @_ZN4dali12display_charB5cxx11Ec(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %9, i8 noundef signext %76)
          to label %77 unwind label %82

77:                                               ; preds = %75
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %8, ptr noundef nonnull @.str.9, ptr noundef nonnull align 8 dereferenceable(32) %9)
          to label %78 unwind label %84

78:                                               ; preds = %77
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %7, ptr noundef nonnull align 8 dereferenceable(32) %8, ptr noundef nonnull @.str.13)
          to label %79 unwind label %86

79:                                               ; preds = %78
  %80 = getelementptr inbounds i8, ptr %0, i64 120
  %81 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %80, ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  br label %203

82:                                               ; preds = %75
  %83 = landingpad { ptr, i32 }
          cleanup
  br label %89

84:                                               ; preds = %77
  %85 = landingpad { ptr, i32 }
          cleanup
  br label %88

86:                                               ; preds = %78
  %87 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %8) #6
  br label %88

88:                                               ; preds = %86, %84
  %.pn114 = phi { ptr, i32 } [ %87, %86 ], [ %85, %84 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #6
  br label %89

89:                                               ; preds = %88, %82
  %.pn114.pn = phi { ptr, i32 } [ %.pn114, %88 ], [ %83, %82 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #6
  br label %.loopexit

90:                                               ; preds = %74
  %91 = getelementptr inbounds i8, ptr %.185, i64 1
  br label %70, !llvm.loop !20

.critedge2:                                       ; preds = %70, %70
  %92 = ptrtoint ptr %.185 to i64
  %93 = sub i64 %92, %23
  %94 = getelementptr inbounds i8, ptr %0, i64 56
  store i64 %93, ptr %94, align 8, !tbaa !21
  %.pr125.pre = load i8, ptr %.185, align 1, !tbaa !15
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %.critedge2, %57
  %95 = phi i8 [ %59, %57 ], [ %.pr125.pre, %.critedge2 ]
  %.286 = phi ptr [ %58, %57 ], [ %.185, %.critedge2 ]
  %96 = icmp eq i8 %95, 0
  br i1 %96, label %203, label %thread-pre-split.thread

thread-pre-split.thread:                          ; preds = %61, %thread-pre-split
  %.286167 = phi ptr [ %.286, %thread-pre-split ], [ %58, %61 ]
  %97 = and i32 %2, 1
  %.not99.not = icmp eq i32 %97, 0
  %98 = ptrtoint ptr %.286167 to i64
  %99 = sub i64 %98, %23
  %100 = getelementptr inbounds i8, ptr %0, i64 64
  store i64 %99, ptr %100, align 8, !tbaa !22
  br i1 %.not99.not, label %.split, label %.split.us

.split.us:                                        ; preds = %thread-pre-split.thread, %104
  %.387.us = phi ptr [ %105, %104 ], [ %.286167, %thread-pre-split.thread ]
  %101 = load i8, ptr %.387.us, align 1, !tbaa !15
  switch i8 %101, label %102 [
    i8 0, label %.critedge4
    i8 63, label %.critedge4
  ]

102:                                              ; preds = %.split.us
  %103 = invoke noundef zeroext i1 @_ZN4dali12allowed_charEc(i8 noundef signext %101)
          to label %104 unwind label %.loopexit.split-lp.loopexit.split-lp.split.us

104:                                              ; preds = %102
  %105 = getelementptr inbounds i8, ptr %.387.us, i64 1
  br label %.split.us, !llvm.loop !23

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

.split:                                           ; preds = %thread-pre-split.thread, %125
  %.387 = phi ptr [ %126, %125 ], [ %.286167, %thread-pre-split.thread ]
  %106 = load i8, ptr %.387, align 1, !tbaa !15
  switch i8 %106, label %107 [
    i8 0, label %.critedge4
    i8 63, label %.critedge4
  ]

107:                                              ; preds = %.split
  %108 = invoke noundef zeroext i1 @_ZN4dali12allowed_charEc(i8 noundef signext %106)
          to label %109 unwind label %.loopexit.split-lp.loopexit.split-lp.split

109:                                              ; preds = %107
  br i1 %108, label %125, label %110

110:                                              ; preds = %109
  store i8 0, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #6
  %111 = load i8, ptr %.387, align 1, !tbaa !15
  invoke void @_ZN4dali12display_charB5cxx11Ec(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %12, i8 noundef signext %111)
          to label %112 unwind label %117

112:                                              ; preds = %110
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %11, ptr noundef nonnull @.str.9, ptr noundef nonnull align 8 dereferenceable(32) %12)
          to label %113 unwind label %119

113:                                              ; preds = %112
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %10, ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull @.str.14)
          to label %114 unwind label %121

114:                                              ; preds = %113
  %115 = getelementptr inbounds i8, ptr %0, i64 120
  %116 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %115, ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %10) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  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
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  br label %203

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

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

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

117:                                              ; preds = %110
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %124

119:                                              ; preds = %112
  %120 = landingpad { ptr, i32 }
          cleanup
  br label %123

121:                                              ; preds = %113
  %122 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #6
  br label %123

123:                                              ; preds = %121, %119
  %.pn110 = phi { ptr, i32 } [ %122, %121 ], [ %120, %119 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #6
  br label %124

124:                                              ; preds = %123, %117
  %.pn110.pn = phi { ptr, i32 } [ %.pn110, %123 ], [ %118, %117 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #6
  br label %.loopexit

125:                                              ; preds = %109
  %126 = getelementptr inbounds i8, ptr %.387, i64 1
  br label %.split, !llvm.loop !23

.critedge4:                                       ; preds = %.split.us, %.split.us, %.split, %.split
  %.us-phi = phi ptr [ %.387, %.split ], [ %.387, %.split ], [ %.387.us, %.split.us ], [ %.387.us, %.split.us ]
  %127 = ptrtoint ptr %.us-phi to i64
  %128 = sub i64 %127, %23
  %129 = getelementptr inbounds i8, ptr %0, i64 72
  store i64 %128, ptr %129, align 8, !tbaa !24
  %130 = load i8, ptr %.us-phi, align 1, !tbaa !15
  %131 = icmp eq i8 %130, 0
  br i1 %131, label %203, label %132

132:                                              ; preds = %.critedge4
  %133 = getelementptr inbounds i8, ptr %.us-phi, i64 1
  %134 = ptrtoint ptr %133 to i64
  %135 = sub i64 %134, %23
  %136 = getelementptr inbounds i8, ptr %0, i64 80
  store i64 %135, ptr %136, align 8, !tbaa !25
  br i1 %.not99.not, label %.split143, label %.split143.us

.split143.us:                                     ; preds = %132, %140
  %.488.us = phi ptr [ %141, %140 ], [ %133, %132 ]
  %137 = load i8, ptr %.488.us, align 1, !tbaa !15
  switch i8 %137, label %138 [
    i8 0, label %.critedge6
    i8 35, label %.critedge6
  ]

138:                                              ; preds = %.split143.us
  %139 = invoke noundef zeroext i1 @_ZN4dali12allowed_charEc(i8 noundef signext %137)
          to label %140 unwind label %.loopexit.split-lp.loopexit.split.us

140:                                              ; preds = %138
  %141 = getelementptr inbounds i8, ptr %.488.us, i64 1
  br label %.split143.us, !llvm.loop !26

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

.split143:                                        ; preds = %132, %161
  %.488 = phi ptr [ %162, %161 ], [ %133, %132 ]
  %142 = load i8, ptr %.488, align 1, !tbaa !15
  switch i8 %142, label %143 [
    i8 0, label %.critedge6
    i8 35, label %.critedge6
  ]

143:                                              ; preds = %.split143
  %144 = invoke noundef zeroext i1 @_ZN4dali12allowed_charEc(i8 noundef signext %142)
          to label %145 unwind label %.loopexit.split-lp.loopexit.split

145:                                              ; preds = %143
  br i1 %144, label %161, label %146

146:                                              ; preds = %145
  store i8 0, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %15) #6
  %147 = load i8, ptr %.488, align 1, !tbaa !15
  invoke void @_ZN4dali12display_charB5cxx11Ec(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %15, i8 noundef signext %147)
          to label %148 unwind label %153

148:                                              ; preds = %146
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %14, ptr noundef nonnull @.str.9, ptr noundef nonnull align 8 dereferenceable(32) %15)
          to label %149 unwind label %155

149:                                              ; preds = %148
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %13, ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull @.str.15)
          to label %150 unwind label %157

150:                                              ; preds = %149
  %151 = getelementptr inbounds i8, ptr %0, i64 120
  %152 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %151, ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  br label %203

153:                                              ; preds = %146
  %154 = landingpad { ptr, i32 }
          cleanup
  br label %160

155:                                              ; preds = %148
  %156 = landingpad { ptr, i32 }
          cleanup
  br label %159

157:                                              ; preds = %149
  %158 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #6
  br label %159

159:                                              ; preds = %157, %155
  %.pn107 = phi { ptr, i32 } [ %158, %157 ], [ %156, %155 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #6
  br label %160

160:                                              ; preds = %159, %153
  %.pn107.pn = phi { ptr, i32 } [ %.pn107, %159 ], [ %154, %153 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %13) #6
  br label %.loopexit

161:                                              ; preds = %145
  %162 = getelementptr inbounds i8, ptr %.488, i64 1
  br label %.split143, !llvm.loop !26

.critedge6:                                       ; preds = %.split143.us, %.split143.us, %.split143, %.split143
  %.us-phi144 = phi ptr [ %.488, %.split143 ], [ %.488, %.split143 ], [ %.488.us, %.split143.us ], [ %.488.us, %.split143.us ]
  %163 = ptrtoint ptr %.us-phi144 to i64
  %164 = sub i64 %163, %23
  %165 = getelementptr inbounds i8, ptr %0, i64 88
  store i64 %164, ptr %165, align 8, !tbaa !27
  %166 = load i8, ptr %.us-phi144, align 1, !tbaa !15
  %167 = icmp eq i8 %166, 0
  br i1 %167, label %203, label %168

168:                                              ; preds = %.critedge6
  %169 = getelementptr inbounds i8, ptr %.us-phi144, i64 1
  %170 = ptrtoint ptr %169 to i64
  %171 = sub i64 %170, %23
  %172 = getelementptr inbounds i8, ptr %0, i64 96
  store i64 %171, ptr %172, align 8, !tbaa !28
  %173 = load i8, ptr %169, align 1, !tbaa !15
  %.not104146 = icmp eq i8 %173, 0
  br i1 %.not104146, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %168
  br i1 %.not99.not, label %.lr.ph.split, label %.lr.ph.split.us

.lr.ph.split.us:                                  ; preds = %.lr.ph, %176
  %174 = phi i8 [ %178, %176 ], [ %173, %.lr.ph ]
  %.589147.us = phi ptr [ %177, %176 ], [ %169, %.lr.ph ]
  %175 = invoke noundef zeroext i1 @_ZN4dali12allowed_charEc(i8 noundef signext %174)
          to label %176 unwind label %.loopexit.split.us

176:                                              ; preds = %.lr.ph.split.us
  %177 = getelementptr inbounds i8, ptr %.589147.us, i64 1
  %178 = load i8, ptr %177, align 1, !tbaa !15
  %.not104.us = icmp eq i8 %178, 0
  br i1 %.not104.us, label %._crit_edge, label %.lr.ph.split.us, !llvm.loop !29

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

.lr.ph.split:                                     ; preds = %.lr.ph, %197
  %179 = phi i8 [ %199, %197 ], [ %173, %.lr.ph ]
  %.589147 = phi ptr [ %198, %197 ], [ %169, %.lr.ph ]
  %180 = invoke noundef zeroext i1 @_ZN4dali12allowed_charEc(i8 noundef signext %179)
          to label %181 unwind label %.loopexit.split

181:                                              ; preds = %.lr.ph.split
  br i1 %180, label %197, label %182

182:                                              ; preds = %181
  store i8 0, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #6
  %183 = load i8, ptr %.589147, align 1, !tbaa !15
  invoke void @_ZN4dali12display_charB5cxx11Ec(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %18, i8 noundef signext %183)
          to label %184 unwind label %189

184:                                              ; preds = %182
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %17, ptr noundef nonnull @.str.9, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %185 unwind label %191

185:                                              ; preds = %184
  invoke void @_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_PKS5_(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %16, ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull @.str.16)
          to label %186 unwind label %193

186:                                              ; preds = %185
  %187 = getelementptr inbounds i8, ptr %0, i64 120
  %188 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEOS4_(ptr noundef nonnull align 8 dereferenceable(32) %187, ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #6
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  br label %203

189:                                              ; preds = %182
  %190 = landingpad { ptr, i32 }
          cleanup
  br label %196

191:                                              ; preds = %184
  %192 = landingpad { ptr, i32 }
          cleanup
  br label %195

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

195:                                              ; preds = %193, %191
  %.pn = phi { ptr, i32 } [ %194, %193 ], [ %192, %191 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #6
  br label %196

196:                                              ; preds = %195, %189
  %.pn.pn = phi { ptr, i32 } [ %.pn, %195 ], [ %190, %189 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #6
  br label %.loopexit

197:                                              ; preds = %181
  %198 = getelementptr inbounds i8, ptr %.589147, i64 1
  %199 = load i8, ptr %198, align 1, !tbaa !15
  %.not104 = icmp eq i8 %199, 0
  br i1 %.not104, label %._crit_edge, label %.lr.ph.split, !llvm.loop !29

._crit_edge:                                      ; preds = %176, %197, %168
  %.589.lcssa = phi ptr [ %169, %168 ], [ %198, %197 ], [ %177, %176 ]
  %200 = ptrtoint ptr %.589.lcssa to i64
  %201 = sub i64 %200, %23
  %202 = getelementptr inbounds i8, ptr %0, i64 104
  store i64 %201, ptr %202, align 8, !tbaa !30
  br label %203

.loopexit:                                        ; preds = %.loopexit.split.us, %.loopexit.split, %.loopexit.split-lp.loopexit.split-lp.split, %.loopexit.split-lp.loopexit.split-lp.split.us, %.loopexit.split-lp.loopexit.split, %.loopexit.split-lp.loopexit.split.us, %.loopexit129, %.loopexit.split-lp130, %124, %160, %196, %89, %48
  %.pn117.pn.pn = phi { ptr, i32 } [ %.pn117.pn, %48 ], [ %.pn114.pn, %89 ], [ %.pn110.pn, %124 ], [ %.pn107.pn, %160 ], [ %.pn.pn, %196 ], [ %lpad.loopexit131, %.loopexit129 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp130 ], [ %lpad.loopexit, %.loopexit.split ], [ %lpad.loopexit.us, %.loopexit.split.us ], [ %lpad.loopexit126, %.loopexit.split-lp.loopexit.split ], [ %lpad.loopexit126.us, %.loopexit.split-lp.loopexit.split.us ], [ %lpad.loopexit.split-lp127, %.loopexit.split-lp.loopexit.split-lp.split ], [ %lpad.loopexit.split-lp127.us, %.loopexit.split-lp.loopexit.split-lp.split.us ]
  call void @_ZN4dali3URID2Ev(ptr noundef nonnull align 8 dereferenceable(152) %0) #6
  resume { ptr, i32 } %.pn117.pn.pn

203:                                              ; preds = %.invoke, %38, %79, %thread-pre-split, %.critedge6, %.critedge4, %._crit_edge, %186, %150, %114
  ret void
}

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

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

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(read)
declare i32 @isalpha(i32 noundef) local_unnamed_addr #4

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN4dali19allowed_scheme_charEc(i8 noundef signext) local_unnamed_addr #2

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN4dali12allowed_charEc(i8 noundef signext) local_unnamed_addr #5

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

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

!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, !13, i64 112}
!6 = !{!"_ZTSN4dali3URIE", !7, i64 0, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !13, i64 112, !7, i64 120}
!7 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !8, i64 0, !12, i64 8, !10, i64 16}
!8 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !9, i64 0}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"long", !10, i64 0}
!13 = !{!"bool", !10, i64 0}
!14 = !{!6, !12, i64 32}
!15 = !{!10, !10, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!6, !12, i64 40}
!19 = !{!6, !12, i64 48}
!20 = distinct !{!20, !17}
!21 = !{!6, !12, i64 56}
!22 = !{!6, !12, i64 64}
!23 = distinct !{!23, !17}
!24 = !{!6, !12, i64 72}
!25 = !{!6, !12, i64 80}
!26 = distinct !{!26, !17}
!27 = !{!6, !12, i64 88}
!28 = !{!6, !12, i64 96}
!29 = distinct !{!29, !17}
!30 = !{!6, !12, i64 104}


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