; LLVM IR from gem5/gem5 :: ext/mcpat/xmlParser.ll (ZN7XMLNode15ParseXMLElementEPv)

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

%struct.XMLNode = type { ptr }
%struct.NextToken = type { ptr, ptr }
%struct.XML = type { ptr, ptr, i32, i32, i32, ptr, i32, ptr, i32, i32 }
%"struct.XMLNode::XMLNodeDataTag" = type { ptr, i32, i32, i32, i32, i8, ptr, ptr, ptr, ptr, ptr, ptr, i32 }

@_ZN7XMLNode12emptyXMLNodeE = external dso_local global %struct.XMLNode, align 8
@.str.36 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [66 x i8], align 1
@__PRETTY_FUNCTION__._ZN7XMLNode15ParseXMLElementEPv = external hidden unnamed_addr constant [37 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z9stringDupPKci(ptr noundef, i32 noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z13fromXMLStringPKciP3XML(ptr noundef, i32 noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef signext i8 @_Z12myTagComparePKcS0_(ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7XMLNode13addChild_privEiPcci(ptr dead_on_unwind noalias writable sret(%struct.XMLNode) align 8, ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, ptr noundef, i8 noundef signext, i32 noundef) #3 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef signext i8 @_ZN7XMLNode13parseClearTagEPvS0_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, ptr noundef) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7XMLNode11exactMemoryEPNS_14XMLNodeDataTagE(ptr noundef) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef signext i8 @_ZN7XMLNode11maybeAddTxTEPvPKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, ptr noundef) #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7XMLNode15ParseXMLElementEPv(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %1) #3 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca %struct.NextToken, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i8, align 1
  %13 = alloca %struct.XMLNode, align 8
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca %struct.NextToken, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca %struct.NextToken, align 8
  %21 = alloca %struct.XMLNode, align 8
  %22 = alloca %struct.XMLNode, align 8
  %23 = alloca %struct.NextToken, align 8
  %24 = alloca %struct.NextToken, align 8
  %25 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %26 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  %27 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %27, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  store ptr null, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @_ZN7XMLNodeC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13)
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 0, ptr %15, align 4, !tbaa !11
  %28 = load ptr, ptr %6, align 8, !tbaa !5
  %29 = icmp ne ptr %28, null
  br i1 %29, label %30, label %31

30:                                               ; preds = %2
  br label %33

31:                                               ; preds = %2
  call void @__assert_fail(ptr noundef @.str.36, ptr noundef @.str.37, i32 noundef 1553, ptr noundef @__PRETTY_FUNCTION__._ZN7XMLNode15ParseXMLElementEPv) #6
  unreachable

32:                                               ; No predecessors!
  br label %33

33:                                               ; preds = %32, %30
  %34 = load ptr, ptr %6, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.XML, ptr %34, i32 0, i32 9
  %36 = load i32, ptr %35, align 4, !tbaa !13
  %37 = icmp ne i32 %36, 0
  br i1 %37, label %38, label %41

38:                                               ; preds = %33
  %39 = load ptr, ptr %6, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.XML, ptr %39, i32 0, i32 9
  store i32 0, ptr %40, align 4, !tbaa !13
  store i32 1, ptr %14, align 4, !tbaa !16
  br label %42

41:                                               ; preds = %33
  store i32 0, ptr %14, align 4, !tbaa !16
  br label %42

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

43:                                               ; preds = %530, %42
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #5
  %44 = load ptr, ptr %6, align 8, !tbaa !5
  %45 = invoke { ptr, ptr } @_ZL12GetNextTokenP3XMLPiP15XMLTokenTypeTag(ptr noundef %44, ptr noundef %7, ptr noundef %8)
          to label %46 unwind label %55

46:                                               ; preds = %43
  %47 = getelementptr inbounds { ptr, ptr }, ptr %16, i32 0, i32 0
  %48 = extractvalue { ptr, ptr } %45, 0
  store ptr %48, ptr %47, align 8
  %49 = getelementptr inbounds { ptr, ptr }, ptr %16, i32 0, i32 1
  %50 = extractvalue { ptr, ptr } %45, 1
  store ptr %50, ptr %49, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %9, ptr align 8 %16, i64 16, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #5
  %51 = load i32, ptr %8, align 4, !tbaa !19
  %52 = icmp ne i32 %51, 9
  br i1 %52, label %53, label %498

53:                                               ; preds = %46
  %54 = load i32, ptr %14, align 4, !tbaa !16
  switch i32 %54, label %497 [
    i32 1, label %59
    i32 0, label %312
  ]

55:                                               ; preds = %43
  %56 = landingpad { ptr, i32 }
          cleanup
  %57 = extractvalue { ptr, i32 } %56, 0
  store ptr %57, ptr %17, align 8
  %58 = extractvalue { ptr, i32 } %56, 1
  store i32 %58, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #5
  br label %533

59:                                               ; preds = %53
  %60 = load i32, ptr %8, align 4, !tbaa !19
  switch i32 %60, label %310 [
    i32 0, label %61
    i32 4, label %61
    i32 7, label %61
    i32 1, label %61
    i32 5, label %61
    i32 2, label %62
    i32 6, label %62
    i32 3, label %202
    i32 8, label %283
  ]

61:                                               ; preds = %59, %59, %59, %59, %59
  br label %311

62:                                               ; preds = %59, %59
  %63 = load i32, ptr %8, align 4, !tbaa !19
  %64 = icmp eq i32 %63, 6
  %65 = zext i1 %64 to i8
  store i8 %65, ptr %12, align 1, !tbaa !21
  %66 = load ptr, ptr %6, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.NextToken, ptr %9, i32 0, i32 1
  %68 = load ptr, ptr %67, align 8, !tbaa !22
  %69 = invoke noundef signext i8 @_ZN7XMLNode11maybeAddTxTEPvPKc(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef %66, ptr noundef %68)
          to label %70 unwind label %73

70:                                               ; preds = %62
  %71 = icmp ne i8 %69, 0
  br i1 %71, label %72, label %77

72:                                               ; preds = %70
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

73:                                               ; preds = %518, %411, %407, %355, %351, %291, %283, %246, %202, %195, %159, %138, %109, %104, %62
  %74 = landingpad { ptr, i32 }
          cleanup
  %75 = extractvalue { ptr, i32 } %74, 0
  store ptr %75, ptr %17, align 8
  %76 = extractvalue { ptr, i32 } %74, 1
  store i32 %76, ptr %18, align 4
  br label %533

77:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 16, ptr %20) #5
  %78 = load ptr, ptr %6, align 8, !tbaa !5
  %79 = invoke { ptr, ptr } @_ZL12GetNextTokenP3XMLPiP15XMLTokenTypeTag(ptr noundef %78, ptr noundef %7, ptr noundef %8)
          to label %80 unwind label %90

80:                                               ; preds = %77
  %81 = getelementptr inbounds { ptr, ptr }, ptr %20, i32 0, i32 0
  %82 = extractvalue { ptr, ptr } %79, 0
  store ptr %82, ptr %81, align 8
  %83 = getelementptr inbounds { ptr, ptr }, ptr %20, i32 0, i32 1
  %84 = extractvalue { ptr, ptr } %79, 1
  store ptr %84, ptr %83, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %9, ptr align 8 %20, i64 16, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #5
  %85 = load i32, ptr %8, align 4, !tbaa !19
  %86 = icmp ne i32 %85, 0
  br i1 %86, label %87, label %94

87:                                               ; preds = %80
  %88 = load ptr, ptr %6, align 8, !tbaa !5
  %89 = getelementptr inbounds %struct.XML, ptr %88, i32 0, i32 4
  store i32 4, ptr %89, align 8, !tbaa !24
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

90:                                               ; preds = %77
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %17, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %20) #5
  br label %533

94:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  %95 = getelementptr inbounds %struct.NextToken, ptr %9, i32 0, i32 1
  %96 = load ptr, ptr %95, align 8, !tbaa !22
  %97 = load i32, ptr %7, align 4, !tbaa !9
  %98 = invoke noundef ptr @_Z9stringDupPKci(ptr noundef %96, i32 noundef %97)
          to label %99 unwind label %115

99:                                               ; preds = %94
  %100 = load i8, ptr %12, align 1, !tbaa !21
  invoke void @_ZN7XMLNode13addChild_privEiPcci(ptr dead_on_unwind writable sret(%struct.XMLNode) align 8 %21, ptr noundef nonnull align 8 dereferenceable(8) %26, i32 noundef 50, ptr noundef %98, i8 noundef signext %100, i32 noundef -1)
          to label %101 unwind label %115

101:                                              ; preds = %99
  %102 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7XMLNodeaSERKS_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %21)
          to label %103 unwind label %119

103:                                              ; preds = %101
  call void @_ZN7XMLNodeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %104

104:                                              ; preds = %200, %103
  %105 = invoke noundef signext i8 @_ZNK7XMLNode7isEmptyEv(ptr noundef nonnull align 8 dereferenceable(8) %13)
          to label %106 unwind label %73

106:                                              ; preds = %104
  %107 = icmp ne i8 %105, 0
  %108 = xor i1 %107, true
  br i1 %108, label %109, label %201

109:                                              ; preds = %106
  %110 = load ptr, ptr %6, align 8, !tbaa !5
  %111 = invoke noundef i32 @_ZN7XMLNode15ParseXMLElementEPv(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef %110)
          to label %112 unwind label %73

112:                                              ; preds = %109
  %113 = icmp ne i32 %111, 0
  br i1 %113, label %124, label %114

114:                                              ; preds = %112
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

115:                                              ; preds = %99, %94
  %116 = landingpad { ptr, i32 }
          cleanup
  %117 = extractvalue { ptr, i32 } %116, 0
  store ptr %117, ptr %17, align 8
  %118 = extractvalue { ptr, i32 } %116, 1
  store i32 %118, ptr %18, align 4
  br label %123

119:                                              ; preds = %101
  %120 = landingpad { ptr, i32 }
          cleanup
  %121 = extractvalue { ptr, i32 } %120, 0
  store ptr %121, ptr %17, align 8
  %122 = extractvalue { ptr, i32 } %120, 1
  store i32 %122, ptr %18, align 4
  call void @_ZN7XMLNodeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #5
  br label %123

123:                                              ; preds = %119, %115
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  br label %533

124:                                              ; preds = %112
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.XML, ptr %125, i32 0, i32 6
  %127 = load i32, ptr %126, align 8, !tbaa !25
  %128 = icmp ne i32 %127, 0
  br i1 %128, label %129, label %154

129:                                              ; preds = %124
  %130 = getelementptr inbounds %struct.XMLNode, ptr %26, i32 0, i32 0
  %131 = load ptr, ptr %130, align 8, !tbaa !26
  %132 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %131, i32 0, i32 0
  %133 = load ptr, ptr %132, align 8, !tbaa !28
  %134 = icmp ne ptr %133, null
  br i1 %134, label %138, label %135

135:                                              ; preds = %129
  %136 = load ptr, ptr %6, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.XML, ptr %136, i32 0, i32 4
  store i32 6, ptr %137, align 8, !tbaa !24
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

138:                                              ; preds = %129
  %139 = getelementptr inbounds %struct.XMLNode, ptr %26, i32 0, i32 0
  %140 = load ptr, ptr %139, align 8, !tbaa !26
  %141 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %140, i32 0, i32 0
  %142 = load ptr, ptr %141, align 8, !tbaa !28
  %143 = load ptr, ptr %6, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.XML, ptr %143, i32 0, i32 5
  %145 = load ptr, ptr %144, align 8, !tbaa !30
  %146 = invoke noundef signext i8 @_Z12myTagComparePKcS0_(ptr noundef %142, ptr noundef %145)
          to label %147 unwind label %73

147:                                              ; preds = %138
  %148 = sext i8 %146 to i32
  %149 = icmp eq i32 %148, 0
  br i1 %149, label %150, label %153

150:                                              ; preds = %147
  %151 = load ptr, ptr %6, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.XML, ptr %151, i32 0, i32 6
  store i32 0, ptr %152, align 8, !tbaa !25
  br label %153

153:                                              ; preds = %150, %147
  store i32 1, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

154:                                              ; preds = %124
  %155 = load ptr, ptr %6, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.XML, ptr %155, i32 0, i32 8
  %157 = load i32, ptr %156, align 8, !tbaa !31
  %158 = icmp ne i32 %157, 0
  br i1 %158, label %159, label %195

159:                                              ; preds = %154
  %160 = getelementptr inbounds %struct.XMLNode, ptr %26, i32 0, i32 0
  %161 = load ptr, ptr %160, align 8, !tbaa !26
  %162 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %161, i32 0, i32 0
  %163 = load ptr, ptr %162, align 8, !tbaa !28
  %164 = load ptr, ptr %6, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.XML, ptr %164, i32 0, i32 7
  %166 = load ptr, ptr %165, align 8, !tbaa !32
  %167 = invoke noundef signext i8 @_Z12myTagComparePKcS0_(ptr noundef %163, ptr noundef %166)
          to label %168 unwind label %73

168:                                              ; preds = %159
  %169 = sext i8 %167 to i32
  %170 = icmp eq i32 %169, 0
  br i1 %170, label %171, label %172

171:                                              ; preds = %168
  store i32 1, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

172:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %173 = load ptr, ptr %6, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.XML, ptr %173, i32 0, i32 7
  %175 = load ptr, ptr %174, align 8, !tbaa !32
  %176 = load ptr, ptr %6, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.XML, ptr %176, i32 0, i32 8
  %178 = load i32, ptr %177, align 8, !tbaa !31
  %179 = invoke noundef ptr @_Z9stringDupPKci(ptr noundef %175, i32 noundef %178)
          to label %180 unwind label %186

180:                                              ; preds = %172
  invoke void @_ZN7XMLNode13addChild_privEiPcci(ptr dead_on_unwind writable sret(%struct.XMLNode) align 8 %22, ptr noundef nonnull align 8 dereferenceable(8) %26, i32 noundef 50, ptr noundef %179, i8 noundef signext 0, i32 noundef -1)
          to label %181 unwind label %186

181:                                              ; preds = %180
  %182 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7XMLNodeaSERKS_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %183 unwind label %190

183:                                              ; preds = %181
  call void @_ZN7XMLNodeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  %184 = load ptr, ptr %6, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.XML, ptr %184, i32 0, i32 8
  store i32 0, ptr %185, align 8, !tbaa !31
  br label %198

186:                                              ; preds = %180, %172
  %187 = landingpad { ptr, i32 }
          cleanup
  %188 = extractvalue { ptr, i32 } %187, 0
  store ptr %188, ptr %17, align 8
  %189 = extractvalue { ptr, i32 } %187, 1
  store i32 %189, ptr %18, align 4
  br label %194

190:                                              ; preds = %181
  %191 = landingpad { ptr, i32 }
          cleanup
  %192 = extractvalue { ptr, i32 } %191, 0
  store ptr %192, ptr %17, align 8
  %193 = extractvalue { ptr, i32 } %191, 1
  store i32 %193, ptr %18, align 4
  call void @_ZN7XMLNodeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %22) #5
  br label %194

194:                                              ; preds = %190, %186
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  br label %533

195:                                              ; preds = %154
  %196 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7XMLNodeaSERKS_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) @_ZN7XMLNode12emptyXMLNodeE)
          to label %197 unwind label %73

197:                                              ; preds = %195
  br label %198

198:                                              ; preds = %197, %183
  br label %199

199:                                              ; preds = %198
  br label %200

200:                                              ; preds = %199
  br label %104, !llvm.loop !33

201:                                              ; preds = %106
  br label %311

202:                                              ; preds = %59
  %203 = load ptr, ptr %6, align 8, !tbaa !5
  %204 = getelementptr inbounds %struct.NextToken, ptr %9, i32 0, i32 1
  %205 = load ptr, ptr %204, align 8, !tbaa !22
  %206 = invoke noundef signext i8 @_ZN7XMLNode11maybeAddTxTEPvPKc(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef %203, ptr noundef %205)
          to label %207 unwind label %73

207:                                              ; preds = %202
  %208 = icmp ne i8 %206, 0
  br i1 %208, label %209, label %210

209:                                              ; preds = %207
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

210:                                              ; preds = %207
  call void @llvm.lifetime.start.p0(i64 16, ptr %23) #5
  %211 = load ptr, ptr %6, align 8, !tbaa !5
  %212 = invoke { ptr, ptr } @_ZL12GetNextTokenP3XMLPiP15XMLTokenTypeTag(ptr noundef %211, ptr noundef %11, ptr noundef %8)
          to label %213 unwind label %223

213:                                              ; preds = %210
  %214 = getelementptr inbounds { ptr, ptr }, ptr %23, i32 0, i32 0
  %215 = extractvalue { ptr, ptr } %212, 0
  store ptr %215, ptr %214, align 8
  %216 = getelementptr inbounds { ptr, ptr }, ptr %23, i32 0, i32 1
  %217 = extractvalue { ptr, ptr } %212, 1
  store ptr %217, ptr %216, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %9, ptr align 8 %23, i64 16, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  %218 = load i32, ptr %8, align 4, !tbaa !19
  %219 = icmp ne i32 %218, 0
  br i1 %219, label %220, label %227

220:                                              ; preds = %213
  %221 = load ptr, ptr %6, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.XML, ptr %221, i32 0, i32 4
  store i32 5, ptr %222, align 8, !tbaa !24
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

223:                                              ; preds = %210
  %224 = landingpad { ptr, i32 }
          cleanup
  %225 = extractvalue { ptr, i32 } %224, 0
  store ptr %225, ptr %17, align 8
  %226 = extractvalue { ptr, i32 } %224, 1
  store i32 %226, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %23) #5
  br label %533

227:                                              ; preds = %213
  %228 = getelementptr inbounds %struct.NextToken, ptr %9, i32 0, i32 1
  %229 = load ptr, ptr %228, align 8, !tbaa !22
  store ptr %229, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #5
  %230 = load ptr, ptr %6, align 8, !tbaa !5
  %231 = invoke { ptr, ptr } @_ZL12GetNextTokenP3XMLPiP15XMLTokenTypeTag(ptr noundef %230, ptr noundef %7, ptr noundef %8)
          to label %232 unwind label %242

232:                                              ; preds = %227
  %233 = getelementptr inbounds { ptr, ptr }, ptr %24, i32 0, i32 0
  %234 = extractvalue { ptr, ptr } %231, 0
  store ptr %234, ptr %233, align 8
  %235 = getelementptr inbounds { ptr, ptr }, ptr %24, i32 0, i32 1
  %236 = extractvalue { ptr, ptr } %231, 1
  store ptr %236, ptr %235, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %9, ptr align 8 %24, i64 16, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #5
  %237 = load i32, ptr %8, align 4, !tbaa !19
  %238 = icmp ne i32 %237, 4
  br i1 %238, label %239, label %246

239:                                              ; preds = %232
  %240 = load ptr, ptr %6, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.XML, ptr %240, i32 0, i32 4
  store i32 5, ptr %241, align 8, !tbaa !24
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

242:                                              ; preds = %227
  %243 = landingpad { ptr, i32 }
          cleanup
  %244 = extractvalue { ptr, i32 } %243, 0
  store ptr %244, ptr %17, align 8
  %245 = extractvalue { ptr, i32 } %243, 1
  store i32 %245, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #5
  br label %533

246:                                              ; preds = %232
  %247 = load ptr, ptr %6, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.XML, ptr %247, i32 0, i32 0
  %249 = load ptr, ptr %248, align 8, !tbaa !35
  %250 = load ptr, ptr %6, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.XML, ptr %250, i32 0, i32 2
  %252 = load i32, ptr %251, align 8, !tbaa !36
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds i8, ptr %249, i64 %253
  %255 = load ptr, ptr %6, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.XML, ptr %255, i32 0, i32 1
  store ptr %254, ptr %256, align 8, !tbaa !37
  %257 = getelementptr inbounds %struct.XMLNode, ptr %26, i32 0, i32 0
  %258 = load ptr, ptr %257, align 8, !tbaa !26
  %259 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %258, i32 0, i32 0
  %260 = load ptr, ptr %259, align 8, !tbaa !28
  %261 = load ptr, ptr %10, align 8, !tbaa !5
  %262 = invoke noundef signext i8 @_Z12myTagComparePKcS0_(ptr noundef %260, ptr noundef %261)
          to label %263 unwind label %73

263:                                              ; preds = %246
  %264 = sext i8 %262 to i32
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %266, label %280

266:                                              ; preds = %263
  %267 = load ptr, ptr %6, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.XML, ptr %267, i32 0, i32 4
  store i32 1, ptr %268, align 8, !tbaa !24
  %269 = load ptr, ptr %6, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.XML, ptr %269, i32 0, i32 2
  %271 = load i32, ptr %270, align 8, !tbaa !36
  %272 = load ptr, ptr %6, align 8, !tbaa !5
  %273 = getelementptr inbounds %struct.XML, ptr %272, i32 0, i32 3
  store i32 %271, ptr %273, align 4, !tbaa !38
  %274 = load ptr, ptr %10, align 8, !tbaa !5
  %275 = load ptr, ptr %6, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.XML, ptr %275, i32 0, i32 5
  store ptr %274, ptr %276, align 8, !tbaa !30
  %277 = load i32, ptr %11, align 4, !tbaa !9
  %278 = load ptr, ptr %6, align 8, !tbaa !5
  %279 = getelementptr inbounds %struct.XML, ptr %278, i32 0, i32 6
  store i32 %277, ptr %279, align 8, !tbaa !25
  br label %280

280:                                              ; preds = %266, %263
  %281 = getelementptr inbounds %struct.XMLNode, ptr %26, i32 0, i32 0
  %282 = load ptr, ptr %281, align 8, !tbaa !26
  call void @_ZN7XMLNode11exactMemoryEPNS_14XMLNodeDataTagE(ptr noundef %282)
  store i32 1, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

283:                                              ; preds = %59
  %284 = load ptr, ptr %6, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.NextToken, ptr %9, i32 0, i32 1
  %286 = load ptr, ptr %285, align 8, !tbaa !22
  %287 = invoke noundef signext i8 @_ZN7XMLNode11maybeAddTxTEPvPKc(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef %284, ptr noundef %286)
          to label %288 unwind label %73

288:                                              ; preds = %283
  %289 = icmp ne i8 %287, 0
  br i1 %289, label %290, label %291

290:                                              ; preds = %288
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

291:                                              ; preds = %288
  %292 = load ptr, ptr %6, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.NextToken, ptr %9, i32 0, i32 0
  %294 = load ptr, ptr %293, align 8, !tbaa !39
  %295 = invoke noundef signext i8 @_ZN7XMLNode13parseClearTagEPvS0_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef %292, ptr noundef %294)
          to label %296 unwind label %73

296:                                              ; preds = %291
  %297 = icmp ne i8 %295, 0
  br i1 %297, label %298, label %299

298:                                              ; preds = %296
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

299:                                              ; preds = %296
  %300 = load ptr, ptr %6, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.XML, ptr %300, i32 0, i32 0
  %302 = load ptr, ptr %301, align 8, !tbaa !35
  %303 = load ptr, ptr %6, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.XML, ptr %303, i32 0, i32 2
  %305 = load i32, ptr %304, align 8, !tbaa !36
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds i8, ptr %302, i64 %306
  %308 = load ptr, ptr %6, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.XML, ptr %308, i32 0, i32 1
  store ptr %307, ptr %309, align 8, !tbaa !37
  br label %311

310:                                              ; preds = %59
  br label %311

311:                                              ; preds = %310, %299, %201, %61
  br label %497

312:                                              ; preds = %53
  %313 = load i32, ptr %15, align 4, !tbaa !11
  switch i32 %313, label %496 [
    i32 0, label %314
    i32 1, label %349
    i32 2, label %427
  ]

314:                                              ; preds = %312
  %315 = load i32, ptr %8, align 4, !tbaa !19
  switch i32 %315, label %347 [
    i32 0, label %316
    i32 4, label %320
    i32 7, label %331
    i32 1, label %344
    i32 2, label %344
    i32 3, label %344
    i32 5, label %344
    i32 6, label %344
    i32 8, label %344
  ]

316:                                              ; preds = %314
  %317 = getelementptr inbounds %struct.NextToken, ptr %9, i32 0, i32 1
  %318 = load ptr, ptr %317, align 8, !tbaa !22
  store ptr %318, ptr %10, align 8, !tbaa !5
  %319 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %319, ptr %11, align 4, !tbaa !9
  store i32 1, ptr %15, align 4, !tbaa !11
  br label %348

320:                                              ; preds = %314
  store i32 1, ptr %14, align 4, !tbaa !16
  %321 = load ptr, ptr %6, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.XML, ptr %321, i32 0, i32 0
  %323 = load ptr, ptr %322, align 8, !tbaa !35
  %324 = load ptr, ptr %6, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.XML, ptr %324, i32 0, i32 2
  %326 = load i32, ptr %325, align 8, !tbaa !36
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds i8, ptr %323, i64 %327
  %329 = load ptr, ptr %6, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.XML, ptr %329, i32 0, i32 1
  store ptr %328, ptr %330, align 8, !tbaa !37
  br label %348

331:                                              ; preds = %314
  %332 = getelementptr inbounds %struct.XMLNode, ptr %26, i32 0, i32 0
  %333 = load ptr, ptr %332, align 8, !tbaa !26
  call void @_ZN7XMLNode11exactMemoryEPNS_14XMLNodeDataTagE(ptr noundef %333)
  %334 = load ptr, ptr %6, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.XML, ptr %334, i32 0, i32 0
  %336 = load ptr, ptr %335, align 8, !tbaa !35
  %337 = load ptr, ptr %6, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.XML, ptr %337, i32 0, i32 2
  %339 = load i32, ptr %338, align 8, !tbaa !36
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds i8, ptr %336, i64 %340
  %342 = load ptr, ptr %6, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.XML, ptr %342, i32 0, i32 1
  store ptr %341, ptr %343, align 8, !tbaa !37
  store i32 1, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

344:                                              ; preds = %314, %314, %314, %314, %314, %314
  %345 = load ptr, ptr %6, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.XML, ptr %345, i32 0, i32 4
  store i32 8, ptr %346, align 8, !tbaa !24
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

347:                                              ; preds = %314
  br label %348

348:                                              ; preds = %347, %320, %316
  br label %496

349:                                              ; preds = %312
  %350 = load i32, ptr %8, align 4, !tbaa !19
  switch i32 %350, label %425 [
    i32 0, label %351
    i32 7, label %361
    i32 4, label %361
    i32 5, label %421
    i32 1, label %422
    i32 2, label %422
    i32 3, label %422
    i32 6, label %422
    i32 8, label %422
  ]

351:                                              ; preds = %349
  %352 = load ptr, ptr %10, align 8, !tbaa !5
  %353 = load i32, ptr %11, align 4, !tbaa !9
  %354 = invoke noundef ptr @_Z9stringDupPKci(ptr noundef %352, i32 noundef %353)
          to label %355 unwind label %73

355:                                              ; preds = %351
  %356 = invoke noundef ptr @_ZN7XMLNode17addAttribute_privEiPcS0_(ptr noundef nonnull align 8 dereferenceable(8) %26, i32 noundef 50, ptr noundef %354, ptr noundef null)
          to label %357 unwind label %73

357:                                              ; preds = %355
  %358 = getelementptr inbounds %struct.NextToken, ptr %9, i32 0, i32 1
  %359 = load ptr, ptr %358, align 8, !tbaa !22
  store ptr %359, ptr %10, align 8, !tbaa !5
  %360 = load i32, ptr %7, align 4, !tbaa !9
  store i32 %360, ptr %11, align 4, !tbaa !9
  br label %426

361:                                              ; preds = %349, %349
  %362 = load ptr, ptr %6, align 8, !tbaa !5
  %363 = getelementptr inbounds %struct.XML, ptr %362, i32 0, i32 0
  %364 = load ptr, ptr %363, align 8, !tbaa !35
  %365 = load ptr, ptr %6, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.XML, ptr %365, i32 0, i32 2
  %367 = load i32, ptr %366, align 8, !tbaa !36
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds i8, ptr %364, i64 %368
  %370 = load ptr, ptr %6, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.XML, ptr %370, i32 0, i32 1
  store ptr %369, ptr %371, align 8, !tbaa !37
  %372 = getelementptr inbounds %struct.XMLNode, ptr %26, i32 0, i32 0
  %373 = load ptr, ptr %372, align 8, !tbaa !26
  %374 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %373, i32 0, i32 5
  %375 = load i8, ptr %374, align 8, !tbaa !40
  %376 = icmp ne i8 %375, 0
  br i1 %376, label %377, label %404

377:                                              ; preds = %361
  %378 = load ptr, ptr %10, align 8, !tbaa !5
  %379 = load i32, ptr %11, align 4, !tbaa !9
  %380 = sub nsw i32 %379, 1
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds i8, ptr %378, i64 %381
  %383 = load i8, ptr %382, align 1, !tbaa !21
  %384 = sext i8 %383 to i32
  %385 = icmp eq i32 %384, 63
  br i1 %385, label %386, label %404

386:                                              ; preds = %377
  %387 = load i32, ptr %11, align 4, !tbaa !9
  %388 = add nsw i32 %387, -1
  store i32 %388, ptr %11, align 4, !tbaa !9
  %389 = getelementptr inbounds %struct.XMLNode, ptr %26, i32 0, i32 0
  %390 = load ptr, ptr %389, align 8, !tbaa !26
  %391 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %390, i32 0, i32 6
  %392 = load ptr, ptr %391, align 8, !tbaa !41
  %393 = icmp ne ptr %392, null
  br i1 %393, label %394, label %403

394:                                              ; preds = %386
  %395 = getelementptr inbounds %struct.XMLNode, ptr %26, i32 0, i32 0
  %396 = load ptr, ptr %395, align 8, !tbaa !26
  %397 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %396, i32 0, i32 6
  %398 = load ptr, ptr %397, align 8, !tbaa !41
  %399 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %398, i32 0, i32 6
  %400 = load ptr, ptr %399, align 8, !tbaa !41
  %401 = icmp ne ptr %400, null
  br i1 %401, label %402, label %403

402:                                              ; preds = %394
  store i32 7, ptr %8, align 4, !tbaa !19
  br label %403

403:                                              ; preds = %402, %394, %386
  br label %404

404:                                              ; preds = %403, %377, %361
  %405 = load i32, ptr %11, align 4, !tbaa !9
  %406 = icmp ne i32 %405, 0
  br i1 %406, label %407, label %414

407:                                              ; preds = %404
  %408 = load ptr, ptr %10, align 8, !tbaa !5
  %409 = load i32, ptr %11, align 4, !tbaa !9
  %410 = invoke noundef ptr @_Z9stringDupPKci(ptr noundef %408, i32 noundef %409)
          to label %411 unwind label %73

411:                                              ; preds = %407
  %412 = invoke noundef ptr @_ZN7XMLNode17addAttribute_privEiPcS0_(ptr noundef nonnull align 8 dereferenceable(8) %26, i32 noundef 50, ptr noundef %410, ptr noundef null)
          to label %413 unwind label %73

413:                                              ; preds = %411
  br label %414

414:                                              ; preds = %413, %404
  %415 = load i32, ptr %8, align 4, !tbaa !19
  %416 = icmp eq i32 %415, 7
  br i1 %416, label %417, label %420

417:                                              ; preds = %414
  %418 = getelementptr inbounds %struct.XMLNode, ptr %26, i32 0, i32 0
  %419 = load ptr, ptr %418, align 8, !tbaa !26
  call void @_ZN7XMLNode11exactMemoryEPNS_14XMLNodeDataTagE(ptr noundef %419)
  store i32 1, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

420:                                              ; preds = %414
  store i32 1, ptr %14, align 4, !tbaa !16
  br label %426

421:                                              ; preds = %349
  store i32 2, ptr %15, align 4, !tbaa !11
  br label %426

422:                                              ; preds = %349, %349, %349, %349, %349
  %423 = load ptr, ptr %6, align 8, !tbaa !5
  %424 = getelementptr inbounds %struct.XML, ptr %423, i32 0, i32 4
  store i32 8, ptr %424, align 8, !tbaa !24
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

425:                                              ; preds = %349
  br label %426

426:                                              ; preds = %425, %421, %420, %357
  br label %496

427:                                              ; preds = %312
  %428 = load i32, ptr %8, align 4, !tbaa !19
  switch i32 %428, label %494 [
    i32 0, label %429
    i32 1, label %429
    i32 2, label %491
    i32 3, label %491
    i32 4, label %491
    i32 7, label %491
    i32 5, label %491
    i32 6, label %491
    i32 8, label %491
  ]

429:                                              ; preds = %427, %427
  %430 = getelementptr inbounds %struct.XMLNode, ptr %26, i32 0, i32 0
  %431 = load ptr, ptr %430, align 8, !tbaa !26
  %432 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %431, i32 0, i32 5
  %433 = load i8, ptr %432, align 8, !tbaa !40
  %434 = icmp ne i8 %433, 0
  br i1 %434, label %435, label %448

435:                                              ; preds = %429
  %436 = getelementptr inbounds %struct.NextToken, ptr %9, i32 0, i32 1
  %437 = load ptr, ptr %436, align 8, !tbaa !22
  %438 = load i32, ptr %7, align 4, !tbaa !9
  %439 = sub nsw i32 %438, 1
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds i8, ptr %437, i64 %440
  %442 = load i8, ptr %441, align 1, !tbaa !21
  %443 = sext i8 %442 to i32
  %444 = icmp eq i32 %443, 63
  br i1 %444, label %445, label %448

445:                                              ; preds = %435
  %446 = load i32, ptr %7, align 4, !tbaa !9
  %447 = add nsw i32 %446, -1
  store i32 %447, ptr %7, align 4, !tbaa !9
  br label %448

448:                                              ; preds = %445, %435, %429
  %449 = load i32, ptr %11, align 4, !tbaa !9
  %450 = icmp ne i32 %449, 0
  br i1 %450, label %451, label %490

451:                                              ; preds = %448
  %452 = load i32, ptr %8, align 4, !tbaa !19
  %453 = icmp eq i32 %452, 1
  br i1 %453, label %454, label %460

454:                                              ; preds = %451
  %455 = getelementptr inbounds %struct.NextToken, ptr %9, i32 0, i32 1
  %456 = load ptr, ptr %455, align 8, !tbaa !22
  %457 = getelementptr inbounds i8, ptr %456, i32 1
  store ptr %457, ptr %455, align 8, !tbaa !22
  %458 = load i32, ptr %7, align 4, !tbaa !9
  %459 = sub nsw i32 %458, 2
  store i32 %459, ptr %7, align 4, !tbaa !9
  br label %460

460:                                              ; preds = %454, %451
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  %461 = getelementptr inbounds %struct.NextToken, ptr %9, i32 0, i32 1
  %462 = load ptr, ptr %461, align 8, !tbaa !22
  store ptr %462, ptr %25, align 8, !tbaa !5
  %463 = load ptr, ptr %25, align 8, !tbaa !5
  %464 = icmp ne ptr %463, null
  br i1 %464, label %465, label %479

465:                                              ; preds = %460
  %466 = load ptr, ptr %25, align 8, !tbaa !5
  %467 = load i32, ptr %7, align 4, !tbaa !9
  %468 = load ptr, ptr %6, align 8, !tbaa !5
  %469 = invoke noundef ptr @_Z13fromXMLStringPKciP3XML(ptr noundef %466, i32 noundef %467, ptr noundef %468)
          to label %470 unwind label %474

470:                                              ; preds = %465
  store ptr %469, ptr %25, align 8, !tbaa !5
  %471 = load ptr, ptr %25, align 8, !tbaa !5
  %472 = icmp ne ptr %471, null
  br i1 %472, label %478, label %473

473:                                              ; preds = %470
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %487

474:                                              ; preds = %483, %479, %465
  %475 = landingpad { ptr, i32 }
          cleanup
  %476 = extractvalue { ptr, i32 } %475, 0
  store ptr %476, ptr %17, align 8
  %477 = extractvalue { ptr, i32 } %475, 1
  store i32 %477, ptr %18, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  br label %533

478:                                              ; preds = %470
  br label %479

479:                                              ; preds = %478, %460
  %480 = load ptr, ptr %10, align 8, !tbaa !5
  %481 = load i32, ptr %11, align 4, !tbaa !9
  %482 = invoke noundef ptr @_Z9stringDupPKci(ptr noundef %480, i32 noundef %481)
          to label %483 unwind label %474

483:                                              ; preds = %479
  %484 = load ptr, ptr %25, align 8, !tbaa !5
  %485 = invoke noundef ptr @_ZN7XMLNode17addAttribute_privEiPcS0_(ptr noundef nonnull align 8 dereferenceable(8) %26, i32 noundef 50, ptr noundef %482, ptr noundef %484)
          to label %486 unwind label %474

486:                                              ; preds = %483
  store i32 0, ptr %19, align 4
  br label %487

487:                                              ; preds = %486, %473
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  %488 = load i32, ptr %19, align 4
  switch i32 %488, label %531 [
    i32 0, label %489
  ]

489:                                              ; preds = %487
  br label %490

490:                                              ; preds = %489, %448
  store i32 0, ptr %15, align 4, !tbaa !11
  br label %495

491:                                              ; preds = %427, %427, %427, %427, %427, %427, %427
  %492 = load ptr, ptr %6, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.XML, ptr %492, i32 0, i32 4
  store i32 8, ptr %493, align 8, !tbaa !24
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

494:                                              ; preds = %427
  br label %495

495:                                              ; preds = %494, %490
  br label %496

496:                                              ; preds = %495, %426, %348, %312
  br label %497

497:                                              ; preds = %496, %311, %53
  br label %530

498:                                              ; preds = %46
  %499 = getelementptr inbounds %struct.XMLNode, ptr %26, i32 0, i32 0
  %500 = load ptr, ptr %499, align 8, !tbaa !26
  %501 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %500, i32 0, i32 5
  %502 = load i8, ptr %501, align 8, !tbaa !40
  %503 = icmp ne i8 %502, 0
  br i1 %503, label %518, label %504

504:                                              ; preds = %498
  %505 = getelementptr inbounds %struct.XMLNode, ptr %26, i32 0, i32 0
  %506 = load ptr, ptr %505, align 8, !tbaa !26
  %507 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %506, i32 0, i32 6
  %508 = load ptr, ptr %507, align 8, !tbaa !41
  %509 = icmp ne ptr %508, null
  br i1 %509, label %510, label %518

510:                                              ; preds = %504
  %511 = load ptr, ptr %6, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.XML, ptr %511, i32 0, i32 4
  store i32 1, ptr %512, align 8, !tbaa !24
  %513 = load ptr, ptr %6, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.XML, ptr %513, i32 0, i32 2
  %515 = load i32, ptr %514, align 8, !tbaa !36
  %516 = load ptr, ptr %6, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.XML, ptr %516, i32 0, i32 3
  store i32 %515, ptr %517, align 4, !tbaa !38
  br label %518

518:                                              ; preds = %510, %504, %498
  %519 = load ptr, ptr %6, align 8, !tbaa !5
  %520 = load ptr, ptr %6, align 8, !tbaa !5
  %521 = getelementptr inbounds %struct.XML, ptr %520, i32 0, i32 0
  %522 = load ptr, ptr %521, align 8, !tbaa !35
  %523 = load ptr, ptr %6, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.XML, ptr %523, i32 0, i32 2
  %525 = load i32, ptr %524, align 8, !tbaa !36
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds i8, ptr %522, i64 %526
  %528 = invoke noundef signext i8 @_ZN7XMLNode11maybeAddTxTEPvPKc(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef %519, ptr noundef %527)
          to label %529 unwind label %73

529:                                              ; preds = %518
  store i32 0, ptr %3, align 4
  store i32 1, ptr %19, align 4
  br label %531

530:                                              ; preds = %497
  br label %43, !llvm.loop !42

531:                                              ; preds = %529, %491, %487, %422, %417, %344, %331, %298, %290, %280, %239, %220, %209, %171, %153, %135, %114, %87, %72
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @_ZN7XMLNodeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  %532 = load i32, ptr %3, align 4
  ret i32 %532

533:                                              ; preds = %474, %242, %223, %194, %123, %90, %73, %55
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @_ZN7XMLNodeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  br label %534

534:                                              ; preds = %533
  %535 = load ptr, ptr %17, align 8
  %536 = load i32, ptr %18, align 4
  %537 = insertvalue { ptr, i32 } poison, ptr %535, 0
  %538 = insertvalue { ptr, i32 } %537, i32 %536, 1
  resume { ptr, i32 } %538
}

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

; Function Attrs: mustprogress uwtable
declare hidden { ptr, ptr } @_ZL12GetNextTokenP3XMLPiP15XMLTokenTypeTag(ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef signext i8 @_ZNK7XMLNode7isEmptyEv(ptr noundef nonnull align 8 dereferenceable(8)) #1 align 2

declare void @_ZN7XMLNodeD1Ev(ptr)

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"_ZTS6Attrib", !7, i64 0}
!13 = !{!14, !10, i64 60}
!14 = !{!"_ZTS3XML", !6, i64 0, !6, i64 8, !10, i64 16, !10, i64 20, !15, i64 24, !6, i64 32, !10, i64 40, !6, i64 48, !10, i64 56, !10, i64 60}
!15 = !{!"_ZTS8XMLError", !7, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"_ZTS6Status", !7, i64 0}
!18 = !{i64 0, i64 8, !5, i64 8, i64 8, !5}
!19 = !{!20, !20, i64 0}
!20 = !{!"_ZTS15XMLTokenTypeTag", !7, i64 0}
!21 = !{!7, !7, i64 0}
!22 = !{!23, !6, i64 8}
!23 = !{!"_ZTS9NextToken", !6, i64 0, !6, i64 8}
!24 = !{!14, !15, i64 24}
!25 = !{!14, !10, i64 40}
!26 = !{!27, !6, i64 0}
!27 = !{!"_ZTS7XMLNode", !6, i64 0}
!28 = !{!29, !6, i64 0}
!29 = !{!"_ZTSN7XMLNode14XMLNodeDataTagE", !6, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !7, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !10, i64 80}
!30 = !{!14, !6, i64 32}
!31 = !{!14, !10, i64 56}
!32 = !{!14, !6, i64 48}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!14, !6, i64 0}
!36 = !{!14, !10, i64 16}
!37 = !{!14, !6, i64 8}
!38 = !{!14, !10, i64 20}
!39 = !{!23, !6, i64 0}
!40 = !{!29, !7, i64 24}
!41 = !{!29, !6, i64 32}
!42 = distinct !{!42, !34}


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

%struct.XMLNode = type { ptr }

@_ZN7XMLNode12emptyXMLNodeE = external dso_local global %struct.XMLNode, align 8
@.str.36 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [66 x i8], align 1
@__PRETTY_FUNCTION__._ZN7XMLNode15ParseXMLElementEPv = external hidden unnamed_addr constant [37 x i8], align 1

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

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

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z9stringDupPKci(ptr noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_Z13fromXMLStringPKciP3XML(ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local noundef signext i8 @_Z12myTagComparePKcS0_(ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN7XMLNode13addChild_privEiPcci(ptr dead_on_unwind noalias writable sret(%struct.XMLNode) align 8, ptr noundef nonnull align 8 dereferenceable(8), i32 noundef, ptr noundef, i8 noundef signext, i32 noundef) local_unnamed_addr #2 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef signext i8 @_ZN7XMLNode13parseClearTagEPvS0_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7XMLNode11exactMemoryEPNS_14XMLNodeDataTagE(ptr noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef signext i8 @_ZN7XMLNode11maybeAddTxTEPvPKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef, ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7XMLNode15ParseXMLElementEPv(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %1) local_unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca %struct.XMLNode, align 8
  %7 = alloca %struct.XMLNode, align 8
  %8 = alloca %struct.XMLNode, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #4
  store i32 0, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #4
  call void @_ZN7XMLNodeC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %.not = icmp eq ptr %1, null
  br i1 %.not, label %9, label %10

9:                                                ; preds = %2
  call void @__assert_fail(ptr noundef nonnull @.str.36, ptr noundef nonnull @.str.37, i32 noundef 1553, ptr noundef nonnull @__PRETTY_FUNCTION__._ZN7XMLNode15ParseXMLElementEPv) #5
  unreachable

10:                                               ; preds = %2
  %11 = getelementptr inbounds i8, ptr %1, i64 60
  %12 = load i32, ptr %11, align 4, !tbaa !9
  %.not109 = icmp eq i32 %12, 0
  br i1 %.not109, label %14, label %13

13:                                               ; preds = %10
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %14

14:                                               ; preds = %10, %13
  %.091 = phi i32 [ 1, %13 ], [ 0, %10 ]
  %15 = getelementptr inbounds i8, ptr %1, i64 16
  %16 = getelementptr inbounds i8, ptr %1, i64 8
  %17 = getelementptr inbounds i8, ptr %1, i64 40
  %18 = getelementptr inbounds i8, ptr %1, i64 56
  %19 = getelementptr inbounds i8, ptr %1, i64 48
  br label %20

20:                                               ; preds = %.loopexit, %14
  %.094 = phi i32 [ 0, %14 ], [ %.195, %.loopexit ]
  %.192 = phi i32 [ %.091, %14 ], [ %.293, %.loopexit ]
  %.089 = phi ptr [ null, %14 ], [ %.190, %.loopexit ]
  %21 = invoke { ptr, ptr } @_ZL12GetNextTokenP3XMLPiP15XMLTokenTypeTag(ptr noundef %1, ptr noundef nonnull %3, ptr noundef nonnull %4)
          to label %22 unwind label %27

22:                                               ; preds = %20
  %23 = extractvalue { ptr, ptr } %21, 0
  %24 = extractvalue { ptr, ptr } %21, 1
  %25 = load i32, ptr %4, align 4, !tbaa !13
  %.not110 = icmp eq i32 %25, 9
  br i1 %.not110, label %242, label %26

26:                                               ; preds = %22
  %switch = icmp eq i32 %.192, 1
  br i1 %switch, label %29, label %147

27:                                               ; preds = %20
  %28 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

29:                                               ; preds = %26
  switch i32 %25, label %.loopexit [
    i32 8, label %136
    i32 3, label %99
    i32 6, label %30
    i32 2, label %30
  ]

30:                                               ; preds = %29, %29
  %31 = icmp eq i32 %25, 6
  %32 = zext i1 %31 to i8
  %33 = invoke noundef signext i8 @_ZN7XMLNode11maybeAddTxTEPvPKc(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %1, ptr noundef %24)
          to label %34 unwind label %.loopexit.split-lp.loopexit

34:                                               ; preds = %30
  %.not121 = icmp eq i8 %33, 0
  br i1 %.not121, label %35, label %.critedge

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

.loopexit.split-lp.loopexit:                      ; preds = %197, %195, %168, %165, %139, %136, %30
  %lpad.loopexit144 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

.loopexit.split-lp.loopexit.split-lp:             ; preds = %252, %119, %99, %66
  %lpad.loopexit.split-lp145 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

35:                                               ; preds = %34
  %36 = invoke { ptr, ptr } @_ZL12GetNextTokenP3XMLPiP15XMLTokenTypeTag(ptr noundef %1, ptr noundef nonnull %3, ptr noundef nonnull %4)
          to label %37 unwind label %41

37:                                               ; preds = %35
  %38 = load i32, ptr %4, align 4, !tbaa !13
  %.not122 = icmp eq i32 %38, 0
  br i1 %.not122, label %43, label %39

39:                                               ; preds = %37
  %40 = getelementptr inbounds i8, ptr %1, i64 24
  store i32 4, ptr %40, align 8, !tbaa !15
  br label %.critedge

41:                                               ; preds = %35
  %42 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

43:                                               ; preds = %37
  %44 = extractvalue { ptr, ptr } %36, 1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #4
  %45 = load i32, ptr %3, align 4, !tbaa !5
  %46 = invoke noundef ptr @_Z9stringDupPKci(ptr noundef %44, i32 noundef %45)
          to label %47 unwind label %54

47:                                               ; preds = %43
  invoke void @_ZN7XMLNode13addChild_privEiPcci(ptr dead_on_unwind nonnull writable sret(%struct.XMLNode) align 8 %7, ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef 50, ptr noundef %46, i8 noundef signext %32, i32 noundef -1)
          to label %48 unwind label %54

48:                                               ; preds = %47
  %49 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7XMLNodeaSERKS_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %7)
          to label %50 unwind label %56

50:                                               ; preds = %48
  call void @_ZN7XMLNodeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  %51 = call noundef signext i8 @_ZNK7XMLNode7isEmptyEv(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %.not124169 = icmp eq i8 %51, 0
  br i1 %.not124169, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %50, %97
  %52 = invoke noundef i32 @_ZN7XMLNode15ParseXMLElementEPv(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef %1)
          to label %53 unwind label %.loopexit142

53:                                               ; preds = %.lr.ph
  %.not125 = icmp eq i32 %52, 0
  br i1 %.not125, label %.critedge, label %59

54:                                               ; preds = %47, %43
  %55 = landingpad { ptr, i32 }
          cleanup
  br label %58

56:                                               ; preds = %48
  %57 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7XMLNodeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %7) #4
  br label %58

58:                                               ; preds = %56, %54
  %.pn = phi { ptr, i32 } [ %57, %56 ], [ %55, %54 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  br label %.loopexit.split-lp

59:                                               ; preds = %53
  %60 = load i32, ptr %17, align 8, !tbaa !16
  %.not126 = icmp eq i32 %60, 0
  br i1 %.not126, label %73, label %61

61:                                               ; preds = %59
  %62 = load ptr, ptr %0, align 8, !tbaa !17
  %63 = load ptr, ptr %62, align 8, !tbaa !19
  %.not130 = icmp eq ptr %63, null
  br i1 %.not130, label %64, label %66

64:                                               ; preds = %61
  %65 = getelementptr inbounds i8, ptr %1, i64 24
  store i32 6, ptr %65, align 8, !tbaa !15
  br label %.critedge

66:                                               ; preds = %61
  %67 = getelementptr inbounds i8, ptr %1, i64 32
  %68 = load ptr, ptr %67, align 8, !tbaa !21
  %69 = invoke noundef signext i8 @_Z12myTagComparePKcS0_(ptr noundef nonnull %63, ptr noundef %68)
          to label %70 unwind label %.loopexit.split-lp.loopexit.split-lp

70:                                               ; preds = %66
  %71 = icmp eq i8 %69, 0
  br i1 %71, label %72, label %.critedge

72:                                               ; preds = %70
  store i32 0, ptr %17, align 8, !tbaa !16
  br label %.critedge

73:                                               ; preds = %59
  %74 = load i32, ptr %18, align 8, !tbaa !22
  %.not127 = icmp eq i32 %74, 0
  br i1 %.not127, label %95, label %75

75:                                               ; preds = %73
  %76 = load ptr, ptr %0, align 8, !tbaa !17
  %77 = load ptr, ptr %76, align 8, !tbaa !19
  %78 = load ptr, ptr %19, align 8, !tbaa !23
  %79 = invoke noundef signext i8 @_Z12myTagComparePKcS0_(ptr noundef %77, ptr noundef %78)
          to label %80 unwind label %.loopexit142

80:                                               ; preds = %75
  %81 = icmp eq i8 %79, 0
  br i1 %81, label %.critedge, label %82

82:                                               ; preds = %80
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #4
  %83 = load ptr, ptr %19, align 8, !tbaa !23
  %84 = load i32, ptr %18, align 8, !tbaa !22
  %85 = invoke noundef ptr @_Z9stringDupPKci(ptr noundef %83, i32 noundef %84)
          to label %86 unwind label %90

86:                                               ; preds = %82
  invoke void @_ZN7XMLNode13addChild_privEiPcci(ptr dead_on_unwind nonnull writable sret(%struct.XMLNode) align 8 %8, ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef 50, ptr noundef %85, i8 noundef signext 0, i32 noundef -1)
          to label %87 unwind label %90

87:                                               ; preds = %86
  %88 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7XMLNodeaSERKS_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) %8)
          to label %89 unwind label %92

89:                                               ; preds = %87
  call void @_ZN7XMLNodeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #4
  store i32 0, ptr %18, align 8, !tbaa !22
  br label %97

90:                                               ; preds = %86, %82
  %91 = landingpad { ptr, i32 }
          cleanup
  br label %94

92:                                               ; preds = %87
  %93 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN7XMLNodeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %8) #4
  br label %94

94:                                               ; preds = %92, %90
  %.pn128 = phi { ptr, i32 } [ %93, %92 ], [ %91, %90 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #4
  br label %.loopexit.split-lp

95:                                               ; preds = %73
  %96 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN7XMLNodeaSERKS_(ptr noundef nonnull align 8 dereferenceable(8) %6, ptr noundef nonnull align 8 dereferenceable(8) @_ZN7XMLNode12emptyXMLNodeE)
          to label %97 unwind label %.loopexit142

97:                                               ; preds = %95, %89
  %98 = call noundef signext i8 @_ZNK7XMLNode7isEmptyEv(ptr noundef nonnull align 8 dereferenceable(8) %6)
  %.not124 = icmp eq i8 %98, 0
  br i1 %.not124, label %.lr.ph, label %.loopexit, !llvm.loop !24

99:                                               ; preds = %29
  %100 = invoke noundef signext i8 @_ZN7XMLNode11maybeAddTxTEPvPKc(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %1, ptr noundef %24)
          to label %101 unwind label %.loopexit.split-lp.loopexit.split-lp

101:                                              ; preds = %99
  %.not131 = icmp eq i8 %100, 0
  br i1 %.not131, label %102, label %.critedge

102:                                              ; preds = %101
  %103 = invoke { ptr, ptr } @_ZL12GetNextTokenP3XMLPiP15XMLTokenTypeTag(ptr noundef %1, ptr noundef nonnull %5, ptr noundef nonnull %4)
          to label %104 unwind label %109

104:                                              ; preds = %102
  %105 = extractvalue { ptr, ptr } %103, 1
  %106 = load i32, ptr %4, align 4, !tbaa !13
  %.not132 = icmp eq i32 %106, 0
  br i1 %.not132, label %111, label %107

107:                                              ; preds = %104
  %108 = getelementptr inbounds i8, ptr %1, i64 24
  store i32 5, ptr %108, align 8, !tbaa !15
  br label %.critedge

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

111:                                              ; preds = %104
  %112 = invoke { ptr, ptr } @_ZL12GetNextTokenP3XMLPiP15XMLTokenTypeTag(ptr noundef %1, ptr noundef nonnull %3, ptr noundef nonnull %4)
          to label %113 unwind label %117

113:                                              ; preds = %111
  %114 = load i32, ptr %4, align 4, !tbaa !13
  %.not133 = icmp eq i32 %114, 4
  br i1 %.not133, label %119, label %115

115:                                              ; preds = %113
  %116 = getelementptr inbounds i8, ptr %1, i64 24
  store i32 5, ptr %116, align 8, !tbaa !15
  br label %.critedge

117:                                              ; preds = %111
  %118 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

119:                                              ; preds = %113
  %120 = load ptr, ptr %1, align 8, !tbaa !26
  %121 = load i32, ptr %15, align 8, !tbaa !27
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds i8, ptr %120, i64 %122
  store ptr %123, ptr %16, align 8, !tbaa !28
  %124 = load ptr, ptr %0, align 8, !tbaa !17
  %125 = load ptr, ptr %124, align 8, !tbaa !19
  %126 = invoke noundef signext i8 @_Z12myTagComparePKcS0_(ptr noundef %125, ptr noundef %105)
          to label %127 unwind label %.loopexit.split-lp.loopexit.split-lp

127:                                              ; preds = %119
  %.not134 = icmp eq i8 %126, 0
  br i1 %.not134, label %134, label %128

128:                                              ; preds = %127
  %129 = getelementptr inbounds i8, ptr %1, i64 24
  store i32 1, ptr %129, align 8, !tbaa !15
  %130 = load i32, ptr %15, align 8, !tbaa !27
  %131 = getelementptr inbounds i8, ptr %1, i64 20
  store i32 %130, ptr %131, align 4, !tbaa !29
  %132 = getelementptr inbounds i8, ptr %1, i64 32
  store ptr %105, ptr %132, align 8, !tbaa !21
  %133 = load i32, ptr %5, align 4, !tbaa !5
  store i32 %133, ptr %17, align 8, !tbaa !16
  br label %134

134:                                              ; preds = %128, %127
  %135 = load ptr, ptr %0, align 8, !tbaa !17
  call void @_ZN7XMLNode11exactMemoryEPNS_14XMLNodeDataTagE(ptr noundef %135)
  br label %.critedge

136:                                              ; preds = %29
  %137 = invoke noundef signext i8 @_ZN7XMLNode11maybeAddTxTEPvPKc(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %1, ptr noundef %24)
          to label %138 unwind label %.loopexit.split-lp.loopexit

138:                                              ; preds = %136
  %.not135 = icmp eq i8 %137, 0
  br i1 %.not135, label %139, label %.critedge

139:                                              ; preds = %138
  %140 = invoke noundef signext i8 @_ZN7XMLNode13parseClearTagEPvS0_(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef %1, ptr noundef %23)
          to label %141 unwind label %.loopexit.split-lp.loopexit

141:                                              ; preds = %139
  %.not138 = icmp eq i8 %140, 0
  br i1 %.not138, label %142, label %.critedge

142:                                              ; preds = %141
  %143 = load ptr, ptr %1, align 8, !tbaa !26
  %144 = load i32, ptr %15, align 8, !tbaa !27
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds i8, ptr %143, i64 %145
  store ptr %146, ptr %16, align 8, !tbaa !28
  br label %.loopexit

147:                                              ; preds = %26
  switch i32 %.094, label %default.unreachable198 [
    i32 0, label %148
    i32 1, label %164
    i32 2, label %207
  ]

148:                                              ; preds = %147
  switch i32 %25, label %.loopexit [
    i32 0, label %149
    i32 4, label %151
    i32 7, label %156
    i32 1, label %162
    i32 2, label %162
    i32 3, label %162
    i32 5, label %162
    i32 6, label %162
    i32 8, label %162
  ]

149:                                              ; preds = %148
  %150 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %150, ptr %5, align 4, !tbaa !5
  br label %.loopexit

151:                                              ; preds = %148
  %152 = load ptr, ptr %1, align 8, !tbaa !26
  %153 = load i32, ptr %15, align 8, !tbaa !27
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds i8, ptr %152, i64 %154
  store ptr %155, ptr %16, align 8, !tbaa !28
  br label %.loopexit

156:                                              ; preds = %148
  %157 = load ptr, ptr %0, align 8, !tbaa !17
  call void @_ZN7XMLNode11exactMemoryEPNS_14XMLNodeDataTagE(ptr noundef %157)
  %158 = load ptr, ptr %1, align 8, !tbaa !26
  %159 = load i32, ptr %15, align 8, !tbaa !27
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds i8, ptr %158, i64 %160
  store ptr %161, ptr %16, align 8, !tbaa !28
  br label %.critedge

162:                                              ; preds = %148, %148, %148, %148, %148, %148
  %163 = getelementptr inbounds i8, ptr %1, i64 24
  store i32 8, ptr %163, align 8, !tbaa !15
  br label %.critedge

164:                                              ; preds = %147
  switch i32 %25, label %.loopexit [
    i32 0, label %165
    i32 7, label %172
    i32 4, label %172
    i32 5, label %204
    i32 1, label %205
    i32 2, label %205
    i32 3, label %205
    i32 6, label %205
    i32 8, label %205
  ]

165:                                              ; preds = %164
  %166 = load i32, ptr %5, align 4, !tbaa !5
  %167 = invoke noundef ptr @_Z9stringDupPKci(ptr noundef %.089, i32 noundef %166)
          to label %168 unwind label %.loopexit.split-lp.loopexit

168:                                              ; preds = %165
  %169 = invoke noundef ptr @_ZN7XMLNode17addAttribute_privEiPcS0_(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef 50, ptr noundef %167, ptr noundef null)
          to label %170 unwind label %.loopexit.split-lp.loopexit

170:                                              ; preds = %168
  %171 = load i32, ptr %3, align 4, !tbaa !5
  store i32 %171, ptr %5, align 4, !tbaa !5
  br label %.loopexit

172:                                              ; preds = %164, %164
  %173 = load ptr, ptr %1, align 8, !tbaa !26
  %174 = load i32, ptr %15, align 8, !tbaa !27
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds i8, ptr %173, i64 %175
  store ptr %176, ptr %16, align 8, !tbaa !28
  %177 = load ptr, ptr %0, align 8, !tbaa !17
  %178 = getelementptr inbounds i8, ptr %177, i64 24
  %179 = load i8, ptr %178, align 8, !tbaa !30
  %.not117 = icmp eq i8 %179, 0
  %.pr.pre = load i32, ptr %5, align 4, !tbaa !5
  br i1 %.not117, label %thread-pre-split, label %180

180:                                              ; preds = %172
  %181 = add nsw i32 %.pr.pre, -1
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds i8, ptr %.089, i64 %182
  %184 = load i8, ptr %183, align 1, !tbaa !31
  %185 = icmp eq i8 %184, 63
  br i1 %185, label %186, label %thread-pre-split

186:                                              ; preds = %180
  store i32 %181, ptr %5, align 4, !tbaa !5
  %187 = getelementptr inbounds i8, ptr %177, i64 32
  %188 = load ptr, ptr %187, align 8, !tbaa !32
  %.not118 = icmp eq ptr %188, null
  br i1 %.not118, label %thread-pre-split, label %189

189:                                              ; preds = %186
  %190 = getelementptr inbounds i8, ptr %188, i64 32
  %191 = load ptr, ptr %190, align 8, !tbaa !32
  %.not119 = icmp eq ptr %191, null
  br i1 %.not119, label %thread-pre-split, label %192

192:                                              ; preds = %189
  store i32 7, ptr %4, align 4, !tbaa !13
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %189, %192, %180, %172, %186
  %193 = phi i32 [ %25, %186 ], [ %25, %172 ], [ %25, %180 ], [ 7, %192 ], [ %25, %189 ]
  %194 = phi i32 [ %181, %186 ], [ %.pr.pre, %172 ], [ %.pr.pre, %180 ], [ %181, %192 ], [ %181, %189 ]
  %.not120 = icmp eq i32 %194, 0
  br i1 %.not120, label %199, label %195

195:                                              ; preds = %thread-pre-split
  %196 = invoke noundef ptr @_Z9stringDupPKci(ptr noundef %.089, i32 noundef %194)
          to label %197 unwind label %.loopexit.split-lp.loopexit

197:                                              ; preds = %195
  %198 = invoke noundef ptr @_ZN7XMLNode17addAttribute_privEiPcS0_(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef 50, ptr noundef %196, ptr noundef null)
          to label %._crit_edge193 unwind label %.loopexit.split-lp.loopexit

._crit_edge193:                                   ; preds = %197
  %.pre194 = load i32, ptr %4, align 4, !tbaa !13
  br label %199

199:                                              ; preds = %._crit_edge193, %thread-pre-split
  %200 = phi i32 [ %.pre194, %._crit_edge193 ], [ %193, %thread-pre-split ]
  %201 = icmp eq i32 %200, 7
  br i1 %201, label %202, label %.loopexit

202:                                              ; preds = %199
  %203 = load ptr, ptr %0, align 8, !tbaa !17
  call void @_ZN7XMLNode11exactMemoryEPNS_14XMLNodeDataTagE(ptr noundef %203)
  br label %.critedge

204:                                              ; preds = %164
  br label %.loopexit

205:                                              ; preds = %164, %164, %164, %164, %164
  %206 = getelementptr inbounds i8, ptr %1, i64 24
  store i32 8, ptr %206, align 8, !tbaa !15
  br label %.critedge

207:                                              ; preds = %147
  switch i32 %25, label %.loopexit [
    i32 0, label %208
    i32 1, label %208
    i32 2, label %240
    i32 3, label %240
    i32 4, label %240
    i32 7, label %240
    i32 5, label %240
    i32 6, label %240
    i32 8, label %240
  ]

208:                                              ; preds = %207, %207
  %209 = load ptr, ptr %0, align 8, !tbaa !17
  %210 = getelementptr inbounds i8, ptr %209, i64 24
  %211 = load i8, ptr %210, align 8, !tbaa !30
  %.not113 = icmp eq i8 %211, 0
  br i1 %.not113, label %221, label %212

212:                                              ; preds = %208
  %213 = load i32, ptr %3, align 4, !tbaa !5
  %214 = sext i32 %213 to i64
  %215 = getelementptr i8, ptr %24, i64 %214
  %216 = getelementptr i8, ptr %215, i64 -1
  %217 = load i8, ptr %216, align 1, !tbaa !31
  %218 = icmp eq i8 %217, 63
  br i1 %218, label %219, label %221

219:                                              ; preds = %212
  %220 = add nsw i32 %213, -1
  store i32 %220, ptr %3, align 4, !tbaa !5
  br label %221

221:                                              ; preds = %219, %212, %208
  %222 = load i32, ptr %5, align 4, !tbaa !5
  %.not114 = icmp eq i32 %222, 0
  br i1 %.not114, label %.loopexit, label %223

223:                                              ; preds = %221
  %224 = icmp eq i32 %25, 1
  br i1 %224, label %.thread, label %228

.thread:                                          ; preds = %223
  %225 = getelementptr inbounds i8, ptr %24, i64 1
  %226 = load i32, ptr %3, align 4, !tbaa !5
  %227 = add nsw i32 %226, -2
  store i32 %227, ptr %3, align 4, !tbaa !5
  br label %229

228:                                              ; preds = %223
  %.not115 = icmp eq ptr %24, null
  br i1 %.not115, label %235, label %._crit_edge

._crit_edge:                                      ; preds = %228
  %.pre = load i32, ptr %3, align 4, !tbaa !5
  br label %229

229:                                              ; preds = %._crit_edge, %.thread
  %230 = phi i32 [ %227, %.thread ], [ %.pre, %._crit_edge ]
  %.sroa.8.0141 = phi ptr [ %225, %.thread ], [ %24, %._crit_edge ]
  %231 = invoke noundef ptr @_Z13fromXMLStringPKciP3XML(ptr noundef nonnull %.sroa.8.0141, i32 noundef %230, ptr noundef %1)
          to label %232 unwind label %233

232:                                              ; preds = %229
  %.not116 = icmp eq ptr %231, null
  br i1 %.not116, label %.critedge, label %._crit_edge190

._crit_edge190:                                   ; preds = %232
  %.pre191 = load i32, ptr %5, align 4, !tbaa !5
  br label %235

233:                                              ; preds = %238, %235, %229
  %234 = landingpad { ptr, i32 }
          cleanup
  br label %.loopexit.split-lp

235:                                              ; preds = %._crit_edge190, %228
  %236 = phi i32 [ %.pre191, %._crit_edge190 ], [ %222, %228 ]
  %.0 = phi ptr [ %231, %._crit_edge190 ], [ null, %228 ]
  %237 = invoke noundef ptr @_Z9stringDupPKci(ptr noundef %.089, i32 noundef %236)
          to label %238 unwind label %233

238:                                              ; preds = %235
  %239 = invoke noundef ptr @_ZN7XMLNode17addAttribute_privEiPcS0_(ptr noundef nonnull align 8 dereferenceable(8) %0, i32 noundef 50, ptr noundef %237, ptr noundef %.0)
          to label %.loopexit unwind label %233

240:                                              ; preds = %207, %207, %207, %207, %207, %207, %207
  %241 = getelementptr inbounds i8, ptr %1, i64 24
  store i32 8, ptr %241, align 8, !tbaa !15
  br label %.critedge

242:                                              ; preds = %22
  %243 = load ptr, ptr %0, align 8, !tbaa !17
  %244 = getelementptr inbounds i8, ptr %243, i64 24
  %245 = load i8, ptr %244, align 8, !tbaa !30
  %.not111 = icmp eq i8 %245, 0
  br i1 %.not111, label %246, label %._crit_edge195

._crit_edge195:                                   ; preds = %242
  %.pre196 = load i32, ptr %15, align 8, !tbaa !27
  br label %252

246:                                              ; preds = %242
  %247 = getelementptr inbounds i8, ptr %243, i64 32
  %248 = load ptr, ptr %247, align 8, !tbaa !32
  %.not112 = icmp eq ptr %248, null
  %.pre197 = load i32, ptr %15, align 8, !tbaa !27
  br i1 %.not112, label %252, label %249

249:                                              ; preds = %246
  %250 = getelementptr inbounds i8, ptr %1, i64 24
  store i32 1, ptr %250, align 8, !tbaa !15
  %251 = getelementptr inbounds i8, ptr %1, i64 20
  store i32 %.pre197, ptr %251, align 4, !tbaa !29
  br label %252

252:                                              ; preds = %._crit_edge195, %249, %246
  %253 = phi i32 [ %.pre196, %._crit_edge195 ], [ %.pre197, %249 ], [ %.pre197, %246 ]
  %254 = load ptr, ptr %1, align 8, !tbaa !26
  %255 = sext i32 %253 to i64
  %256 = getelementptr inbounds i8, ptr %254, i64 %255
  %257 = invoke noundef signext i8 @_ZN7XMLNode11maybeAddTxTEPvPKc(ptr noundef nonnull align 8 dereferenceable(8) %0, ptr noundef nonnull %1, ptr noundef %256)
          to label %.critedge unwind label %.loopexit.split-lp.loopexit.split-lp

default.unreachable198:                           ; preds = %147
  unreachable

.loopexit:                                        ; preds = %97, %50, %221, %238, %199, %29, %142, %207, %170, %204, %164, %149, %151, %148
  %.195 = phi i32 [ 2, %207 ], [ 1, %164 ], [ 2, %204 ], [ 1, %170 ], [ 0, %148 ], [ 0, %151 ], [ 1, %149 ], [ %.094, %29 ], [ %.094, %142 ], [ 1, %199 ], [ 0, %238 ], [ 0, %221 ], [ %.094, %50 ], [ %.094, %97 ]
  %.293 = phi i32 [ 0, %207 ], [ 0, %164 ], [ 0, %204 ], [ 0, %170 ], [ 0, %148 ], [ 1, %151 ], [ 0, %149 ], [ 1, %29 ], [ 1, %142 ], [ 1, %199 ], [ 0, %238 ], [ 0, %221 ], [ 1, %50 ], [ 1, %97 ]
  %.190 = phi ptr [ %.089, %207 ], [ %.089, %164 ], [ %.089, %204 ], [ %24, %170 ], [ %.089, %148 ], [ %.089, %151 ], [ %24, %149 ], [ %.089, %29 ], [ %.089, %142 ], [ %.089, %199 ], [ %.089, %238 ], [ %.089, %221 ], [ %.089, %50 ], [ %.089, %97 ]
  br label %20, !llvm.loop !33

.critedge:                                        ; preds = %232, %141, %138, %34, %80, %53, %252, %101, %70, %72, %240, %205, %202, %162, %156, %134, %115, %107, %64, %39
  %.4 = phi i32 [ 0, %240 ], [ 0, %205 ], [ 1, %202 ], [ 0, %162 ], [ 1, %156 ], [ 0, %39 ], [ 0, %64 ], [ 0, %107 ], [ 0, %115 ], [ 1, %134 ], [ 1, %72 ], [ 1, %70 ], [ 0, %101 ], [ 0, %252 ], [ 1, %80 ], [ 0, %53 ], [ 0, %34 ], [ 0, %138 ], [ 0, %141 ], [ 0, %232 ]
  call void @_ZN7XMLNodeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #4
  ret i32 %.4

.loopexit.split-lp:                               ; preds = %.loopexit142, %.loopexit.split-lp.loopexit.split-lp, %.loopexit.split-lp.loopexit, %233, %117, %109, %94, %58, %41, %27
  %.pn136 = phi { ptr, i32 } [ %234, %233 ], [ %.pn128, %94 ], [ %.pn, %58 ], [ %42, %41 ], [ %118, %117 ], [ %110, %109 ], [ %28, %27 ], [ %lpad.loopexit, %.loopexit142 ], [ %lpad.loopexit144, %.loopexit.split-lp.loopexit ], [ %lpad.loopexit.split-lp145, %.loopexit.split-lp.loopexit.split-lp ]
  call void @_ZN7XMLNodeD1Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #4
  resume { ptr, i32 } %.pn136
}

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

; Function Attrs: mustprogress uwtable
declare hidden { ptr, ptr } @_ZL12GetNextTokenP3XMLPiP15XMLTokenTypeTag(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef signext i8 @_ZNK7XMLNode7isEmptyEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1 align 2

declare void @_ZN7XMLNodeD1Ev(ptr) local_unnamed_addr

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 60}
!10 = !{!"_ZTS3XML", !11, i64 0, !11, i64 8, !6, i64 16, !6, i64 20, !12, i64 24, !11, i64 32, !6, i64 40, !11, i64 48, !6, i64 56, !6, i64 60}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!"_ZTS8XMLError", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"_ZTS15XMLTokenTypeTag", !7, i64 0}
!15 = !{!10, !12, i64 24}
!16 = !{!10, !6, i64 40}
!17 = !{!18, !11, i64 0}
!18 = !{!"_ZTS7XMLNode", !11, i64 0}
!19 = !{!20, !11, i64 0}
!20 = !{!"_ZTSN7XMLNode14XMLNodeDataTagE", !11, i64 0, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !7, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !6, i64 80}
!21 = !{!10, !11, i64 32}
!22 = !{!10, !6, i64 56}
!23 = !{!10, !11, i64 48}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!10, !11, i64 0}
!27 = !{!10, !6, i64 16}
!28 = !{!10, !11, i64 8}
!29 = !{!10, !6, i64 20}
!30 = !{!20, !7, i64 24}
!31 = !{!7, !7, i64 0}
!32 = !{!20, !11, i64 32}
!33 = distinct !{!33, !25}


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