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

; 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::XMLNodeDataTag" = type { ptr, i32, i32, i32, i32, i8, ptr, ptr, ptr, ptr, ptr, ptr, i32 }
%struct.XMLAttribute = type { ptr, ptr }
%struct.XMLClear = type { ptr, ptr, ptr }
%struct.XMLNode = type { ptr }

@.str.37 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [7 x i8], align 1
@__PRETTY_FUNCTION__._ZN7XMLNode16CreateXMLStringREPNS_14XMLNodeDataTagEPci = external hidden unnamed_addr constant [65 x i8], align 1

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL7xstrlenPKc(ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef ptr @_ZN15ToXMLStringTool11toXMLUnSafeEPcPKc(ptr noundef, ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef, ptr noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN15ToXMLStringTool15lengthXMLStringEPKc(ptr noundef) #3 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7XMLNode16CreateXMLStringREPNS_14XMLNodeDataTagEPci(ptr noundef %0, ptr noundef %1, i32 noundef %2) #2 align 2 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store i32 %2, ptr %6, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  store i32 0, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  %17 = load i32, ptr %6, align 4, !tbaa !9
  %18 = icmp slt i32 %17, 0
  br i1 %18, label %19, label %20

19:                                               ; preds = %3
  br label %22

20:                                               ; preds = %3
  %21 = load i32, ptr %6, align 4, !tbaa !9
  br label %22

22:                                               ; preds = %20, %19
  %23 = phi i32 [ 0, %19 ], [ %21, %20 ]
  store i32 %23, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  store i32 -1, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  %24 = load ptr, ptr %4, align 8, !tbaa !5
  %25 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %24, i32 0, i32 1
  %26 = load i32, ptr %25, align 8, !tbaa !11
  %27 = load ptr, ptr %4, align 8, !tbaa !5
  %28 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %27, i32 0, i32 2
  %29 = load i32, ptr %28, align 4, !tbaa !13
  %30 = add nsw i32 %26, %29
  %31 = load ptr, ptr %4, align 8, !tbaa !5
  %32 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %31, i32 0, i32 3
  %33 = load i32, ptr %32, align 8, !tbaa !14
  %34 = add nsw i32 %30, %33
  store i32 %34, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %35 = load i32, ptr %6, align 4, !tbaa !9
  %36 = icmp sge i32 %35, 0
  br i1 %36, label %37, label %51

37:                                               ; preds = %22
  %38 = load i32, ptr %11, align 4, !tbaa !9
  %39 = icmp eq i32 %38, 1
  br i1 %39, label %40, label %51

40:                                               ; preds = %37
  %41 = load ptr, ptr %4, align 8, !tbaa !5
  %42 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %41, i32 0, i32 2
  %43 = load i32, ptr %42, align 4, !tbaa !13
  %44 = icmp eq i32 %43, 1
  br i1 %44, label %45, label %51

45:                                               ; preds = %40
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %46, i32 0, i32 5
  %48 = load i8, ptr %47, align 8, !tbaa !15
  %49 = icmp ne i8 %48, 0
  br i1 %49, label %51, label %50

50:                                               ; preds = %45
  store i32 -2, ptr %6, align 4, !tbaa !9
  br label %51

51:                                               ; preds = %50, %45, %40, %37, %22
  %52 = load ptr, ptr %4, align 8, !tbaa !5
  %53 = icmp ne ptr %52, null
  br i1 %53, label %54, label %55

54:                                               ; preds = %51
  br label %57

55:                                               ; preds = %51
  call void @__assert_fail(ptr noundef @.str.38, ptr noundef @.str.37, i32 noundef 2113, ptr noundef @__PRETTY_FUNCTION__._ZN7XMLNode16CreateXMLStringREPNS_14XMLNodeDataTagEPci) #6
  unreachable

56:                                               ; No predecessors!
  br label %57

57:                                               ; preds = %56, %54
  %58 = load ptr, ptr %4, align 8, !tbaa !5
  %59 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %58, i32 0, i32 0
  %60 = load ptr, ptr %59, align 8, !tbaa !16
  %61 = icmp ne ptr %60, null
  br i1 %61, label %62, label %67

62:                                               ; preds = %57
  %63 = load ptr, ptr %4, align 8, !tbaa !5
  %64 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %63, i32 0, i32 0
  %65 = load ptr, ptr %64, align 8, !tbaa !16
  %66 = call noundef i32 @_ZL7xstrlenPKc(ptr noundef %65)
  br label %68

67:                                               ; preds = %57
  br label %68

68:                                               ; preds = %67, %62
  %69 = phi i32 [ %66, %62 ], [ 0, %67 ]
  store i32 %69, ptr %9, align 4, !tbaa !9
  %70 = load i32, ptr %9, align 4, !tbaa !9
  %71 = icmp ne i32 %70, 0
  br i1 %71, label %72, label %301

72:                                               ; preds = %68
  %73 = load ptr, ptr %5, align 8, !tbaa !5
  %74 = icmp ne ptr %73, null
  br i1 %74, label %75, label %115

75:                                               ; preds = %72
  %76 = load i32, ptr %8, align 4, !tbaa !9
  %77 = icmp ne i32 %76, 0
  br i1 %77, label %78, label %81

78:                                               ; preds = %75
  %79 = load ptr, ptr %5, align 8, !tbaa !5
  %80 = load i32, ptr %8, align 4, !tbaa !9
  call void @_ZL10charmemsetPcci(ptr noundef %79, i8 noundef signext 9, i32 noundef %80)
  br label %81

81:                                               ; preds = %78, %75
  %82 = load i32, ptr %8, align 4, !tbaa !9
  store i32 %82, ptr %7, align 4, !tbaa !9
  %83 = load ptr, ptr %5, align 8, !tbaa !5
  %84 = load i32, ptr %7, align 4, !tbaa !9
  %85 = add nsw i32 %84, 1
  store i32 %85, ptr %7, align 4, !tbaa !9
  %86 = sext i32 %84 to i64
  %87 = getelementptr inbounds i8, ptr %83, i64 %86
  store i8 60, ptr %87, align 1, !tbaa !17
  %88 = load ptr, ptr %4, align 8, !tbaa !5
  %89 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %88, i32 0, i32 5
  %90 = load i8, ptr %89, align 8, !tbaa !15
  %91 = icmp ne i8 %90, 0
  br i1 %91, label %92, label %98

92:                                               ; preds = %81
  %93 = load ptr, ptr %5, align 8, !tbaa !5
  %94 = load i32, ptr %7, align 4, !tbaa !9
  %95 = add nsw i32 %94, 1
  store i32 %95, ptr %7, align 4, !tbaa !9
  %96 = sext i32 %94 to i64
  %97 = getelementptr inbounds i8, ptr %93, i64 %96
  store i8 63, ptr %97, align 1, !tbaa !17
  br label %98

98:                                               ; preds = %92, %81
  %99 = load ptr, ptr %5, align 8, !tbaa !5
  %100 = load i32, ptr %7, align 4, !tbaa !9
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds i8, ptr %99, i64 %101
  %103 = load ptr, ptr %4, align 8, !tbaa !5
  %104 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %103, i32 0, i32 0
  %105 = load ptr, ptr %104, align 8, !tbaa !16
  %106 = call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef %102, ptr noundef %105)
  %107 = load i32, ptr %9, align 4, !tbaa !9
  %108 = load i32, ptr %7, align 4, !tbaa !9
  %109 = add nsw i32 %108, %107
  store i32 %109, ptr %7, align 4, !tbaa !9
  %110 = load ptr, ptr %5, align 8, !tbaa !5
  %111 = load i32, ptr %7, align 4, !tbaa !9
  %112 = add nsw i32 %111, 1
  store i32 %112, ptr %7, align 4, !tbaa !9
  %113 = sext i32 %111 to i64
  %114 = getelementptr inbounds i8, ptr %110, i64 %113
  store i8 32, ptr %114, align 1, !tbaa !17
  br label %130

115:                                              ; preds = %72
  %116 = load i32, ptr %9, align 4, !tbaa !9
  %117 = add nsw i32 %116, 2
  %118 = load i32, ptr %8, align 4, !tbaa !9
  %119 = add nsw i32 %117, %118
  %120 = load i32, ptr %7, align 4, !tbaa !9
  %121 = add nsw i32 %120, %119
  store i32 %121, ptr %7, align 4, !tbaa !9
  %122 = load ptr, ptr %4, align 8, !tbaa !5
  %123 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %122, i32 0, i32 5
  %124 = load i8, ptr %123, align 8, !tbaa !15
  %125 = icmp ne i8 %124, 0
  br i1 %125, label %126, label %129

126:                                              ; preds = %115
  %127 = load i32, ptr %7, align 4, !tbaa !9
  %128 = add nsw i32 %127, 1
  store i32 %128, ptr %7, align 4, !tbaa !9
  br label %129

129:                                              ; preds = %126, %115
  br label %130

130:                                              ; preds = %129, %98
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  %131 = load ptr, ptr %4, align 8, !tbaa !5
  %132 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %131, i32 0, i32 10
  %133 = load ptr, ptr %132, align 8, !tbaa !18
  store ptr %133, ptr %14, align 8, !tbaa !5
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %134

134:                                              ; preds = %231, %130
  %135 = load i32, ptr %12, align 4, !tbaa !9
  %136 = load ptr, ptr %4, align 8, !tbaa !5
  %137 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %136, i32 0, i32 4
  %138 = load i32, ptr %137, align 4, !tbaa !19
  %139 = icmp slt i32 %135, %138
  br i1 %139, label %140, label %234

140:                                              ; preds = %134
  %141 = load ptr, ptr %14, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.XMLAttribute, ptr %141, i32 0, i32 0
  %143 = load ptr, ptr %142, align 8, !tbaa !20
  %144 = icmp ne ptr %143, null
  br i1 %144, label %145, label %150

145:                                              ; preds = %140
  %146 = load ptr, ptr %14, align 8, !tbaa !5
  %147 = getelementptr inbounds %struct.XMLAttribute, ptr %146, i32 0, i32 0
  %148 = load ptr, ptr %147, align 8, !tbaa !20
  %149 = call noundef i32 @_ZL7xstrlenPKc(ptr noundef %148)
  br label %151

150:                                              ; preds = %140
  br label %151

151:                                              ; preds = %150, %145
  %152 = phi i32 [ %149, %145 ], [ 0, %150 ]
  store i32 %152, ptr %8, align 4, !tbaa !9
  %153 = load i32, ptr %8, align 4, !tbaa !9
  %154 = icmp ne i32 %153, 0
  br i1 %154, label %155, label %228

155:                                              ; preds = %151
  %156 = load ptr, ptr %5, align 8, !tbaa !5
  %157 = icmp ne ptr %156, null
  br i1 %157, label %158, label %167

158:                                              ; preds = %155
  %159 = load ptr, ptr %5, align 8, !tbaa !5
  %160 = load i32, ptr %7, align 4, !tbaa !9
  %161 = sext i32 %160 to i64
  %162 = getelementptr inbounds i8, ptr %159, i64 %161
  %163 = load ptr, ptr %14, align 8, !tbaa !5
  %164 = getelementptr inbounds %struct.XMLAttribute, ptr %163, i32 0, i32 0
  %165 = load ptr, ptr %164, align 8, !tbaa !20
  %166 = call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef %162, ptr noundef %165)
  br label %167

167:                                              ; preds = %158, %155
  %168 = load i32, ptr %8, align 4, !tbaa !9
  %169 = load i32, ptr %7, align 4, !tbaa !9
  %170 = add nsw i32 %169, %168
  store i32 %170, ptr %7, align 4, !tbaa !9
  %171 = load ptr, ptr %14, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.XMLAttribute, ptr %171, i32 0, i32 1
  %173 = load ptr, ptr %172, align 8, !tbaa !22
  %174 = icmp ne ptr %173, null
  br i1 %174, label %175, label %217

175:                                              ; preds = %167
  %176 = load ptr, ptr %14, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.XMLAttribute, ptr %176, i32 0, i32 1
  %178 = load ptr, ptr %177, align 8, !tbaa !22
  %179 = call noundef i32 @_ZN15ToXMLStringTool15lengthXMLStringEPKc(ptr noundef %178)
  store i32 %179, ptr %8, align 4, !tbaa !9
  %180 = load ptr, ptr %5, align 8, !tbaa !5
  %181 = icmp ne ptr %180, null
  br i1 %181, label %182, label %212

182:                                              ; preds = %175
  %183 = load ptr, ptr %5, align 8, !tbaa !5
  %184 = load i32, ptr %7, align 4, !tbaa !9
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds i8, ptr %183, i64 %185
  store i8 61, ptr %186, align 1, !tbaa !17
  %187 = load ptr, ptr %5, align 8, !tbaa !5
  %188 = load i32, ptr %7, align 4, !tbaa !9
  %189 = add nsw i32 %188, 1
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds i8, ptr %187, i64 %190
  store i8 34, ptr %191, align 1, !tbaa !17
  %192 = load i32, ptr %8, align 4, !tbaa !9
  %193 = icmp ne i32 %192, 0
  br i1 %193, label %194, label %204

194:                                              ; preds = %182
  %195 = load ptr, ptr %5, align 8, !tbaa !5
  %196 = load i32, ptr %7, align 4, !tbaa !9
  %197 = add nsw i32 %196, 2
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds i8, ptr %195, i64 %198
  %200 = load ptr, ptr %14, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.XMLAttribute, ptr %200, i32 0, i32 1
  %202 = load ptr, ptr %201, align 8, !tbaa !22
  %203 = call noundef ptr @_ZN15ToXMLStringTool11toXMLUnSafeEPcPKc(ptr noundef %199, ptr noundef %202)
  br label %204

204:                                              ; preds = %194, %182
  %205 = load ptr, ptr %5, align 8, !tbaa !5
  %206 = load i32, ptr %7, align 4, !tbaa !9
  %207 = load i32, ptr %8, align 4, !tbaa !9
  %208 = add nsw i32 %206, %207
  %209 = add nsw i32 %208, 2
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds i8, ptr %205, i64 %210
  store i8 34, ptr %211, align 1, !tbaa !17
  br label %212

212:                                              ; preds = %204, %175
  %213 = load i32, ptr %8, align 4, !tbaa !9
  %214 = add nsw i32 %213, 3
  %215 = load i32, ptr %7, align 4, !tbaa !9
  %216 = add nsw i32 %215, %214
  store i32 %216, ptr %7, align 4, !tbaa !9
  br label %217

217:                                              ; preds = %212, %167
  %218 = load ptr, ptr %5, align 8, !tbaa !5
  %219 = icmp ne ptr %218, null
  br i1 %219, label %220, label %225

220:                                              ; preds = %217
  %221 = load ptr, ptr %5, align 8, !tbaa !5
  %222 = load i32, ptr %7, align 4, !tbaa !9
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds i8, ptr %221, i64 %223
  store i8 32, ptr %224, align 1, !tbaa !17
  br label %225

225:                                              ; preds = %220, %217
  %226 = load i32, ptr %7, align 4, !tbaa !9
  %227 = add nsw i32 %226, 1
  store i32 %227, ptr %7, align 4, !tbaa !9
  br label %228

228:                                              ; preds = %225, %151
  %229 = load ptr, ptr %14, align 8, !tbaa !5
  %230 = getelementptr inbounds %struct.XMLAttribute, ptr %229, i32 1
  store ptr %230, ptr %14, align 8, !tbaa !5
  br label %231

231:                                              ; preds = %228
  %232 = load i32, ptr %12, align 4, !tbaa !9
  %233 = add nsw i32 %232, 1
  store i32 %233, ptr %12, align 4, !tbaa !9
  br label %134, !llvm.loop !23

234:                                              ; preds = %134
  %235 = load ptr, ptr %4, align 8, !tbaa !5
  %236 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %235, i32 0, i32 5
  %237 = load i8, ptr %236, align 8, !tbaa !15
  %238 = icmp ne i8 %237, 0
  br i1 %238, label %239, label %269

239:                                              ; preds = %234
  %240 = load ptr, ptr %5, align 8, !tbaa !5
  %241 = icmp ne ptr %240, null
  br i1 %241, label %242, label %252

242:                                              ; preds = %239
  %243 = load ptr, ptr %5, align 8, !tbaa !5
  %244 = load i32, ptr %7, align 4, !tbaa !9
  %245 = sub nsw i32 %244, 1
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds i8, ptr %243, i64 %246
  store i8 63, ptr %247, align 1, !tbaa !17
  %248 = load ptr, ptr %5, align 8, !tbaa !5
  %249 = load i32, ptr %7, align 4, !tbaa !9
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds i8, ptr %248, i64 %250
  store i8 62, ptr %251, align 1, !tbaa !17
  br label %252

252:                                              ; preds = %242, %239
  %253 = load i32, ptr %7, align 4, !tbaa !9
  %254 = add nsw i32 %253, 1
  store i32 %254, ptr %7, align 4, !tbaa !9
  %255 = load i32, ptr %6, align 4, !tbaa !9
  %256 = icmp ne i32 %255, -1
  br i1 %256, label %257, label %268

257:                                              ; preds = %252
  %258 = load ptr, ptr %5, align 8, !tbaa !5
  %259 = icmp ne ptr %258, null
  br i1 %259, label %260, label %265

260:                                              ; preds = %257
  %261 = load ptr, ptr %5, align 8, !tbaa !5
  %262 = load i32, ptr %7, align 4, !tbaa !9
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds i8, ptr %261, i64 %263
  store i8 10, ptr %264, align 1, !tbaa !17
  br label %265

265:                                              ; preds = %260, %257
  %266 = load i32, ptr %7, align 4, !tbaa !9
  %267 = add nsw i32 %266, 1
  store i32 %267, ptr %7, align 4, !tbaa !9
  br label %268

268:                                              ; preds = %265, %252
  br label %300

269:                                              ; preds = %234
  %270 = load i32, ptr %11, align 4, !tbaa !9
  %271 = icmp ne i32 %270, 0
  br i1 %271, label %272, label %296

272:                                              ; preds = %269
  %273 = load ptr, ptr %5, align 8, !tbaa !5
  %274 = icmp ne ptr %273, null
  br i1 %274, label %275, label %281

275:                                              ; preds = %272
  %276 = load ptr, ptr %5, align 8, !tbaa !5
  %277 = load i32, ptr %7, align 4, !tbaa !9
  %278 = sub nsw i32 %277, 1
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds i8, ptr %276, i64 %279
  store i8 62, ptr %280, align 1, !tbaa !17
  br label %281

281:                                              ; preds = %275, %272
  %282 = load i32, ptr %6, align 4, !tbaa !9
  %283 = icmp sge i32 %282, 0
  br i1 %283, label %284, label %295

284:                                              ; preds = %281
  %285 = load ptr, ptr %5, align 8, !tbaa !5
  %286 = icmp ne ptr %285, null
  br i1 %286, label %287, label %292

287:                                              ; preds = %284
  %288 = load ptr, ptr %5, align 8, !tbaa !5
  %289 = load i32, ptr %7, align 4, !tbaa !9
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds i8, ptr %288, i64 %290
  store i8 10, ptr %291, align 1, !tbaa !17
  br label %292

292:                                              ; preds = %287, %284
  %293 = load i32, ptr %7, align 4, !tbaa !9
  %294 = add nsw i32 %293, 1
  store i32 %294, ptr %7, align 4, !tbaa !9
  br label %295

295:                                              ; preds = %292, %281
  br label %299

296:                                              ; preds = %269
  %297 = load i32, ptr %7, align 4, !tbaa !9
  %298 = add nsw i32 %297, -1
  store i32 %298, ptr %7, align 4, !tbaa !9
  br label %299

299:                                              ; preds = %296, %295
  br label %300

300:                                              ; preds = %299, %268
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  br label %301

301:                                              ; preds = %300, %68
  %302 = load i32, ptr %6, align 4, !tbaa !9
  %303 = icmp ne i32 %302, -1
  br i1 %303, label %304, label %318

304:                                              ; preds = %301
  %305 = load i32, ptr %9, align 4, !tbaa !9
  %306 = icmp ne i32 %305, 0
  br i1 %306, label %307, label %315

307:                                              ; preds = %304
  %308 = load ptr, ptr %4, align 8, !tbaa !5
  %309 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %308, i32 0, i32 5
  %310 = load i8, ptr %309, align 8, !tbaa !15
  %311 = icmp ne i8 %310, 0
  br i1 %311, label %315, label %312

312:                                              ; preds = %307
  %313 = load i32, ptr %6, align 4, !tbaa !9
  %314 = add nsw i32 %313, 1
  store i32 %314, ptr %10, align 4, !tbaa !9
  br label %317

315:                                              ; preds = %307, %304
  %316 = load i32, ptr %6, align 4, !tbaa !9
  store i32 %316, ptr %10, align 4, !tbaa !9
  br label %317

317:                                              ; preds = %315, %312
  br label %318

318:                                              ; preds = %317, %301
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %319

319:                                              ; preds = %573, %318
  %320 = load i32, ptr %12, align 4, !tbaa !9
  %321 = load i32, ptr %11, align 4, !tbaa !9
  %322 = icmp slt i32 %320, %321
  br i1 %322, label %323, label %576

323:                                              ; preds = %319
  %324 = load ptr, ptr %4, align 8, !tbaa !5
  %325 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %324, i32 0, i32 11
  %326 = load ptr, ptr %325, align 8, !tbaa !25
  %327 = load i32, ptr %12, align 4, !tbaa !9
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds i32, ptr %326, i64 %328
  %330 = load i32, ptr %329, align 4, !tbaa !9
  store i32 %330, ptr %13, align 4, !tbaa !9
  %331 = load i32, ptr %13, align 4, !tbaa !9
  %332 = and i32 %331, 3
  switch i32 %332, label %571 [
    i32 2, label %333
    i32 3, label %400
    i32 0, label %547
  ]

333:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %334 = load ptr, ptr %4, align 8, !tbaa !5
  %335 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %334, i32 0, i32 8
  %336 = load ptr, ptr %335, align 8, !tbaa !26
  %337 = load i32, ptr %13, align 4, !tbaa !9
  %338 = ashr i32 %337, 2
  %339 = sext i32 %338 to i64
  %340 = getelementptr inbounds ptr, ptr %336, i64 %339
  %341 = load ptr, ptr %340, align 8, !tbaa !5
  store ptr %341, ptr %15, align 8, !tbaa !5
  %342 = load ptr, ptr %15, align 8, !tbaa !5
  %343 = call noundef i32 @_ZN15ToXMLStringTool15lengthXMLStringEPKc(ptr noundef %342)
  store i32 %343, ptr %8, align 4, !tbaa !9
  %344 = load i32, ptr %8, align 4, !tbaa !9
  %345 = icmp ne i32 %344, 0
  br i1 %345, label %346, label %399

346:                                              ; preds = %333
  %347 = load i32, ptr %6, align 4, !tbaa !9
  %348 = icmp sge i32 %347, 0
  br i1 %348, label %349, label %384

349:                                              ; preds = %346
  %350 = load ptr, ptr %5, align 8, !tbaa !5
  %351 = icmp ne ptr %350, null
  br i1 %351, label %352, label %377

352:                                              ; preds = %349
  %353 = load ptr, ptr %5, align 8, !tbaa !5
  %354 = load i32, ptr %7, align 4, !tbaa !9
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds i8, ptr %353, i64 %355
  %357 = load i32, ptr %6, align 4, !tbaa !9
  %358 = add nsw i32 %357, 1
  call void @_ZL10charmemsetPcci(ptr noundef %356, i8 noundef signext 9, i32 noundef %358)
  %359 = load ptr, ptr %5, align 8, !tbaa !5
  %360 = load i32, ptr %7, align 4, !tbaa !9
  %361 = load i32, ptr %6, align 4, !tbaa !9
  %362 = add nsw i32 %360, %361
  %363 = add nsw i32 %362, 1
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds i8, ptr %359, i64 %364
  %366 = load ptr, ptr %15, align 8, !tbaa !5
  %367 = call noundef ptr @_ZN15ToXMLStringTool11toXMLUnSafeEPcPKc(ptr noundef %365, ptr noundef %366)
  %368 = load ptr, ptr %5, align 8, !tbaa !5
  %369 = load i32, ptr %7, align 4, !tbaa !9
  %370 = load i32, ptr %6, align 4, !tbaa !9
  %371 = add nsw i32 %369, %370
  %372 = add nsw i32 %371, 1
  %373 = load i32, ptr %8, align 4, !tbaa !9
  %374 = add nsw i32 %372, %373
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds i8, ptr %368, i64 %375
  store i8 10, ptr %376, align 1, !tbaa !17
  br label %377

377:                                              ; preds = %352, %349
  %378 = load i32, ptr %8, align 4, !tbaa !9
  %379 = load i32, ptr %6, align 4, !tbaa !9
  %380 = add nsw i32 %378, %379
  %381 = add nsw i32 %380, 2
  %382 = load i32, ptr %7, align 4, !tbaa !9
  %383 = add nsw i32 %382, %381
  store i32 %383, ptr %7, align 4, !tbaa !9
  br label %398

384:                                              ; preds = %346
  %385 = load ptr, ptr %5, align 8, !tbaa !5
  %386 = icmp ne ptr %385, null
  br i1 %386, label %387, label %394

387:                                              ; preds = %384
  %388 = load ptr, ptr %5, align 8, !tbaa !5
  %389 = load i32, ptr %7, align 4, !tbaa !9
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds i8, ptr %388, i64 %390
  %392 = load ptr, ptr %15, align 8, !tbaa !5
  %393 = call noundef ptr @_ZN15ToXMLStringTool11toXMLUnSafeEPcPKc(ptr noundef %391, ptr noundef %392)
  br label %394

394:                                              ; preds = %387, %384
  %395 = load i32, ptr %8, align 4, !tbaa !9
  %396 = load i32, ptr %7, align 4, !tbaa !9
  %397 = add nsw i32 %396, %395
  store i32 %397, ptr %7, align 4, !tbaa !9
  br label %398

398:                                              ; preds = %394, %377
  br label %399

399:                                              ; preds = %398, %333
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br label %572

400:                                              ; preds = %323
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %401 = load ptr, ptr %4, align 8, !tbaa !5
  %402 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %401, i32 0, i32 9
  %403 = load ptr, ptr %402, align 8, !tbaa !27
  %404 = load i32, ptr %13, align 4, !tbaa !9
  %405 = ashr i32 %404, 2
  %406 = sext i32 %405 to i64
  %407 = getelementptr inbounds %struct.XMLClear, ptr %403, i64 %406
  store ptr %407, ptr %16, align 8, !tbaa !5
  %408 = load ptr, ptr %16, align 8, !tbaa !5
  %409 = getelementptr inbounds %struct.XMLClear, ptr %408, i32 0, i32 1
  %410 = load ptr, ptr %409, align 8, !tbaa !28
  %411 = icmp ne ptr %410, null
  br i1 %411, label %412, label %417

412:                                              ; preds = %400
  %413 = load ptr, ptr %16, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.XMLClear, ptr %413, i32 0, i32 1
  %415 = load ptr, ptr %414, align 8, !tbaa !28
  %416 = call noundef i32 @_ZL7xstrlenPKc(ptr noundef %415)
  br label %418

417:                                              ; preds = %400
  br label %418

418:                                              ; preds = %417, %412
  %419 = phi i32 [ %416, %412 ], [ 0, %417 ]
  store i32 %419, ptr %8, align 4, !tbaa !9
  %420 = load i32, ptr %8, align 4, !tbaa !9
  %421 = icmp ne i32 %420, 0
  br i1 %421, label %422, label %470

422:                                              ; preds = %418
  %423 = load i32, ptr %6, align 4, !tbaa !9
  %424 = icmp ne i32 %423, -1
  br i1 %424, label %425, label %453

425:                                              ; preds = %422
  %426 = load ptr, ptr %5, align 8, !tbaa !5
  %427 = icmp ne ptr %426, null
  br i1 %427, label %428, label %446

428:                                              ; preds = %425
  %429 = load ptr, ptr %5, align 8, !tbaa !5
  %430 = load i32, ptr %7, align 4, !tbaa !9
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds i8, ptr %429, i64 %431
  %433 = load i32, ptr %6, align 4, !tbaa !9
  %434 = add nsw i32 %433, 1
  call void @_ZL10charmemsetPcci(ptr noundef %432, i8 noundef signext 9, i32 noundef %434)
  %435 = load ptr, ptr %5, align 8, !tbaa !5
  %436 = load i32, ptr %7, align 4, !tbaa !9
  %437 = load i32, ptr %6, align 4, !tbaa !9
  %438 = add nsw i32 %436, %437
  %439 = add nsw i32 %438, 1
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds i8, ptr %435, i64 %440
  %442 = load ptr, ptr %16, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.XMLClear, ptr %442, i32 0, i32 1
  %444 = load ptr, ptr %443, align 8, !tbaa !28
  %445 = call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef %441, ptr noundef %444)
  br label %446

446:                                              ; preds = %428, %425
  %447 = load i32, ptr %8, align 4, !tbaa !9
  %448 = load i32, ptr %6, align 4, !tbaa !9
  %449 = add nsw i32 %447, %448
  %450 = add nsw i32 %449, 1
  %451 = load i32, ptr %7, align 4, !tbaa !9
  %452 = add nsw i32 %451, %450
  store i32 %452, ptr %7, align 4, !tbaa !9
  br label %469

453:                                              ; preds = %422
  %454 = load ptr, ptr %5, align 8, !tbaa !5
  %455 = icmp ne ptr %454, null
  br i1 %455, label %456, label %465

456:                                              ; preds = %453
  %457 = load ptr, ptr %5, align 8, !tbaa !5
  %458 = load i32, ptr %7, align 4, !tbaa !9
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds i8, ptr %457, i64 %459
  %461 = load ptr, ptr %16, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.XMLClear, ptr %461, i32 0, i32 1
  %463 = load ptr, ptr %462, align 8, !tbaa !28
  %464 = call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef %460, ptr noundef %463)
  br label %465

465:                                              ; preds = %456, %453
  %466 = load i32, ptr %8, align 4, !tbaa !9
  %467 = load i32, ptr %7, align 4, !tbaa !9
  %468 = add nsw i32 %467, %466
  store i32 %468, ptr %7, align 4, !tbaa !9
  br label %469

469:                                              ; preds = %465, %446
  br label %470

470:                                              ; preds = %469, %418
  %471 = load ptr, ptr %16, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.XMLClear, ptr %471, i32 0, i32 0
  %473 = load ptr, ptr %472, align 8, !tbaa !30
  %474 = icmp ne ptr %473, null
  br i1 %474, label %475, label %480

475:                                              ; preds = %470
  %476 = load ptr, ptr %16, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.XMLClear, ptr %476, i32 0, i32 0
  %478 = load ptr, ptr %477, align 8, !tbaa !30
  %479 = call noundef i32 @_ZL7xstrlenPKc(ptr noundef %478)
  br label %481

480:                                              ; preds = %470
  br label %481

481:                                              ; preds = %480, %475
  %482 = phi i32 [ %479, %475 ], [ 0, %480 ]
  store i32 %482, ptr %8, align 4, !tbaa !9
  %483 = load i32, ptr %8, align 4, !tbaa !9
  %484 = icmp ne i32 %483, 0
  br i1 %484, label %485, label %501

485:                                              ; preds = %481
  %486 = load ptr, ptr %5, align 8, !tbaa !5
  %487 = icmp ne ptr %486, null
  br i1 %487, label %488, label %497

488:                                              ; preds = %485
  %489 = load ptr, ptr %5, align 8, !tbaa !5
  %490 = load i32, ptr %7, align 4, !tbaa !9
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds i8, ptr %489, i64 %491
  %493 = load ptr, ptr %16, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.XMLClear, ptr %493, i32 0, i32 0
  %495 = load ptr, ptr %494, align 8, !tbaa !30
  %496 = call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef %492, ptr noundef %495)
  br label %497

497:                                              ; preds = %488, %485
  %498 = load i32, ptr %8, align 4, !tbaa !9
  %499 = load i32, ptr %7, align 4, !tbaa !9
  %500 = add nsw i32 %499, %498
  store i32 %500, ptr %7, align 4, !tbaa !9
  br label %501

501:                                              ; preds = %497, %481
  %502 = load ptr, ptr %16, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.XMLClear, ptr %502, i32 0, i32 2
  %504 = load ptr, ptr %503, align 8, !tbaa !31
  %505 = icmp ne ptr %504, null
  br i1 %505, label %506, label %511

506:                                              ; preds = %501
  %507 = load ptr, ptr %16, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.XMLClear, ptr %507, i32 0, i32 2
  %509 = load ptr, ptr %508, align 8, !tbaa !31
  %510 = call noundef i32 @_ZL7xstrlenPKc(ptr noundef %509)
  br label %512

511:                                              ; preds = %501
  br label %512

512:                                              ; preds = %511, %506
  %513 = phi i32 [ %510, %506 ], [ 0, %511 ]
  store i32 %513, ptr %8, align 4, !tbaa !9
  %514 = load i32, ptr %8, align 4, !tbaa !9
  %515 = icmp ne i32 %514, 0
  br i1 %515, label %516, label %532

516:                                              ; preds = %512
  %517 = load ptr, ptr %5, align 8, !tbaa !5
  %518 = icmp ne ptr %517, null
  br i1 %518, label %519, label %528

519:                                              ; preds = %516
  %520 = load ptr, ptr %5, align 8, !tbaa !5
  %521 = load i32, ptr %7, align 4, !tbaa !9
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds i8, ptr %520, i64 %522
  %524 = load ptr, ptr %16, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.XMLClear, ptr %524, i32 0, i32 2
  %526 = load ptr, ptr %525, align 8, !tbaa !31
  %527 = call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef %523, ptr noundef %526)
  br label %528

528:                                              ; preds = %519, %516
  %529 = load i32, ptr %8, align 4, !tbaa !9
  %530 = load i32, ptr %7, align 4, !tbaa !9
  %531 = add nsw i32 %530, %529
  store i32 %531, ptr %7, align 4, !tbaa !9
  br label %532

532:                                              ; preds = %528, %512
  %533 = load i32, ptr %6, align 4, !tbaa !9
  %534 = icmp ne i32 %533, -1
  br i1 %534, label %535, label %546

535:                                              ; preds = %532
  %536 = load ptr, ptr %5, align 8, !tbaa !5
  %537 = icmp ne ptr %536, null
  br i1 %537, label %538, label %543

538:                                              ; preds = %535
  %539 = load ptr, ptr %5, align 8, !tbaa !5
  %540 = load i32, ptr %7, align 4, !tbaa !9
  %541 = sext i32 %540 to i64
  %542 = getelementptr inbounds i8, ptr %539, i64 %541
  store i8 10, ptr %542, align 1, !tbaa !17
  br label %543

543:                                              ; preds = %538, %535
  %544 = load i32, ptr %7, align 4, !tbaa !9
  %545 = add nsw i32 %544, 1
  store i32 %545, ptr %7, align 4, !tbaa !9
  br label %546

546:                                              ; preds = %543, %532
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  br label %572

547:                                              ; preds = %323
  %548 = load ptr, ptr %4, align 8, !tbaa !5
  %549 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %548, i32 0, i32 7
  %550 = load ptr, ptr %549, align 8, !tbaa !32
  %551 = load i32, ptr %13, align 4, !tbaa !9
  %552 = ashr i32 %551, 2
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds %struct.XMLNode, ptr %550, i64 %553
  %555 = getelementptr inbounds %struct.XMLNode, ptr %554, i32 0, i32 0
  %556 = load ptr, ptr %555, align 8, !tbaa !33
  %557 = load ptr, ptr %5, align 8, !tbaa !5
  %558 = icmp ne ptr %557, null
  br i1 %558, label %559, label %564

559:                                              ; preds = %547
  %560 = load ptr, ptr %5, align 8, !tbaa !5
  %561 = load i32, ptr %7, align 4, !tbaa !9
  %562 = sext i32 %561 to i64
  %563 = getelementptr inbounds i8, ptr %560, i64 %562
  br label %565

564:                                              ; preds = %547
  br label %565

565:                                              ; preds = %564, %559
  %566 = phi ptr [ %563, %559 ], [ null, %564 ]
  %567 = load i32, ptr %10, align 4, !tbaa !9
  %568 = call noundef i32 @_ZN7XMLNode16CreateXMLStringREPNS_14XMLNodeDataTagEPci(ptr noundef %556, ptr noundef %566, i32 noundef %567)
  %569 = load i32, ptr %7, align 4, !tbaa !9
  %570 = add nsw i32 %569, %568
  store i32 %570, ptr %7, align 4, !tbaa !9
  br label %572

571:                                              ; preds = %323
  br label %572

572:                                              ; preds = %571, %565, %546, %399
  br label %573

573:                                              ; preds = %572
  %574 = load i32, ptr %12, align 4, !tbaa !9
  %575 = add nsw i32 %574, 1
  store i32 %575, ptr %12, align 4, !tbaa !9
  br label %319, !llvm.loop !35

576:                                              ; preds = %319
  %577 = load i32, ptr %9, align 4, !tbaa !9
  %578 = icmp ne i32 %577, 0
  br i1 %578, label %579, label %699

579:                                              ; preds = %576
  %580 = load ptr, ptr %4, align 8, !tbaa !5
  %581 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %580, i32 0, i32 5
  %582 = load i8, ptr %581, align 8, !tbaa !15
  %583 = icmp ne i8 %582, 0
  br i1 %583, label %699, label %584

584:                                              ; preds = %579
  %585 = load i32, ptr %11, align 4, !tbaa !9
  %586 = icmp ne i32 %585, 0
  br i1 %586, label %587, label %669

587:                                              ; preds = %584
  %588 = load ptr, ptr %5, align 8, !tbaa !5
  %589 = icmp ne ptr %588, null
  br i1 %589, label %590, label %643

590:                                              ; preds = %587
  %591 = load i32, ptr %6, align 4, !tbaa !9
  %592 = icmp sge i32 %591, 0
  br i1 %592, label %593, label %602

593:                                              ; preds = %590
  %594 = load ptr, ptr %5, align 8, !tbaa !5
  %595 = load i32, ptr %7, align 4, !tbaa !9
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds i8, ptr %594, i64 %596
  %598 = load i32, ptr %6, align 4, !tbaa !9
  call void @_ZL10charmemsetPcci(ptr noundef %597, i8 noundef signext 9, i32 noundef %598)
  %599 = load i32, ptr %6, align 4, !tbaa !9
  %600 = load i32, ptr %7, align 4, !tbaa !9
  %601 = add nsw i32 %600, %599
  store i32 %601, ptr %7, align 4, !tbaa !9
  br label %602

602:                                              ; preds = %593, %590
  %603 = load ptr, ptr %5, align 8, !tbaa !5
  %604 = load i32, ptr %7, align 4, !tbaa !9
  %605 = sext i32 %604 to i64
  %606 = getelementptr inbounds i8, ptr %603, i64 %605
  store i8 60, ptr %606, align 1, !tbaa !17
  %607 = load ptr, ptr %5, align 8, !tbaa !5
  %608 = load i32, ptr %7, align 4, !tbaa !9
  %609 = add nsw i32 %608, 1
  %610 = sext i32 %609 to i64
  %611 = getelementptr inbounds i8, ptr %607, i64 %610
  store i8 47, ptr %611, align 1, !tbaa !17
  %612 = load i32, ptr %7, align 4, !tbaa !9
  %613 = add nsw i32 %612, 2
  store i32 %613, ptr %7, align 4, !tbaa !9
  %614 = load ptr, ptr %5, align 8, !tbaa !5
  %615 = load i32, ptr %7, align 4, !tbaa !9
  %616 = sext i32 %615 to i64
  %617 = getelementptr inbounds i8, ptr %614, i64 %616
  %618 = load ptr, ptr %4, align 8, !tbaa !5
  %619 = getelementptr inbounds %"struct.XMLNode::XMLNodeDataTag", ptr %618, i32 0, i32 0
  %620 = load ptr, ptr %619, align 8, !tbaa !16
  %621 = call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef %617, ptr noundef %620)
  %622 = load i32, ptr %9, align 4, !tbaa !9
  %623 = load i32, ptr %7, align 4, !tbaa !9
  %624 = add nsw i32 %623, %622
  store i32 %624, ptr %7, align 4, !tbaa !9
  %625 = load ptr, ptr %5, align 8, !tbaa !5
  %626 = load i32, ptr %7, align 4, !tbaa !9
  %627 = sext i32 %626 to i64
  %628 = getelementptr inbounds i8, ptr %625, i64 %627
  store i8 62, ptr %628, align 1, !tbaa !17
  %629 = load i32, ptr %6, align 4, !tbaa !9
  %630 = icmp eq i32 %629, -1
  br i1 %630, label %631, label %634

631:                                              ; preds = %602
  %632 = load i32, ptr %7, align 4, !tbaa !9
  %633 = add nsw i32 %632, 1
  store i32 %633, ptr %7, align 4, !tbaa !9
  br label %642

634:                                              ; preds = %602
  %635 = load ptr, ptr %5, align 8, !tbaa !5
  %636 = load i32, ptr %7, align 4, !tbaa !9
  %637 = add nsw i32 %636, 1
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds i8, ptr %635, i64 %638
  store i8 10, ptr %639, align 1, !tbaa !17
  %640 = load i32, ptr %7, align 4, !tbaa !9
  %641 = add nsw i32 %640, 2
  store i32 %641, ptr %7, align 4, !tbaa !9
  br label %642

642:                                              ; preds = %634, %631
  br label %668

643:                                              ; preds = %587
  %644 = load i32, ptr %6, align 4, !tbaa !9
  %645 = icmp sge i32 %644, 0
  br i1 %645, label %646, label %653

646:                                              ; preds = %643
  %647 = load i32, ptr %9, align 4, !tbaa !9
  %648 = add nsw i32 %647, 4
  %649 = load i32, ptr %6, align 4, !tbaa !9
  %650 = add nsw i32 %648, %649
  %651 = load i32, ptr %7, align 4, !tbaa !9
  %652 = add nsw i32 %651, %650
  store i32 %652, ptr %7, align 4, !tbaa !9
  br label %667

653:                                              ; preds = %643
  %654 = load i32, ptr %6, align 4, !tbaa !9
  %655 = icmp eq i32 %654, -1
  br i1 %655, label %656, label %661

656:                                              ; preds = %653
  %657 = load i32, ptr %9, align 4, !tbaa !9
  %658 = add nsw i32 %657, 3
  %659 = load i32, ptr %7, align 4, !tbaa !9
  %660 = add nsw i32 %659, %658
  store i32 %660, ptr %7, align 4, !tbaa !9
  br label %666

661:                                              ; preds = %653
  %662 = load i32, ptr %9, align 4, !tbaa !9
  %663 = add nsw i32 %662, 4
  %664 = load i32, ptr %7, align 4, !tbaa !9
  %665 = add nsw i32 %664, %663
  store i32 %665, ptr %7, align 4, !tbaa !9
  br label %666

666:                                              ; preds = %661, %656
  br label %667

667:                                              ; preds = %666, %646
  br label %668

668:                                              ; preds = %667, %642
  br label %698

669:                                              ; preds = %584
  %670 = load ptr, ptr %5, align 8, !tbaa !5
  %671 = icmp ne ptr %670, null
  br i1 %671, label %672, label %691

672:                                              ; preds = %669
  %673 = load ptr, ptr %5, align 8, !tbaa !5
  %674 = load i32, ptr %7, align 4, !tbaa !9
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds i8, ptr %673, i64 %675
  store i8 47, ptr %676, align 1, !tbaa !17
  %677 = load ptr, ptr %5, align 8, !tbaa !5
  %678 = load i32, ptr %7, align 4, !tbaa !9
  %679 = add nsw i32 %678, 1
  %680 = sext i32 %679 to i64
  %681 = getelementptr inbounds i8, ptr %677, i64 %680
  store i8 62, ptr %681, align 1, !tbaa !17
  %682 = load i32, ptr %6, align 4, !tbaa !9
  %683 = icmp ne i32 %682, -1
  br i1 %683, label %684, label %690

684:                                              ; preds = %672
  %685 = load ptr, ptr %5, align 8, !tbaa !5
  %686 = load i32, ptr %7, align 4, !tbaa !9
  %687 = add nsw i32 %686, 2
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds i8, ptr %685, i64 %688
  store i8 10, ptr %689, align 1, !tbaa !17
  br label %690

690:                                              ; preds = %684, %672
  br label %691

691:                                              ; preds = %690, %669
  %692 = load i32, ptr %6, align 4, !tbaa !9
  %693 = icmp eq i32 %692, -1
  %694 = zext i1 %693 to i64
  %695 = select i1 %693, i32 2, i32 3
  %696 = load i32, ptr %7, align 4, !tbaa !9
  %697 = add nsw i32 %696, %695
  store i32 %697, ptr %7, align 4, !tbaa !9
  br label %698

698:                                              ; preds = %691, %668
  br label %699

699:                                              ; preds = %698, %579, %576
  %700 = load i32, ptr %7, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, 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
  ret i32 %700
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZL10charmemsetPcci(ptr noundef, i8 noundef signext, i32 noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 = { 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 = { 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, !10, i64 8}
!12 = !{!"_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}
!13 = !{!12, !10, i64 12}
!14 = !{!12, !10, i64 16}
!15 = !{!12, !7, i64 24}
!16 = !{!12, !6, i64 0}
!17 = !{!7, !7, i64 0}
!18 = !{!12, !6, i64 64}
!19 = !{!12, !10, i64 20}
!20 = !{!21, !6, i64 0}
!21 = !{!"_ZTS12XMLAttribute", !6, i64 0, !6, i64 8}
!22 = !{!21, !6, i64 8}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!12, !6, i64 72}
!26 = !{!12, !6, i64 48}
!27 = !{!12, !6, i64 56}
!28 = !{!29, !6, i64 8}
!29 = !{!"_ZTS8XMLClear", !6, i64 0, !6, i64 8, !6, i64 16}
!30 = !{!29, !6, i64 0}
!31 = !{!29, !6, i64 16}
!32 = !{!12, !6, i64 40}
!33 = !{!34, !6, i64 0}
!34 = !{!"_ZTS7XMLNode", !6, i64 0}
!35 = distinct !{!35, !24}


; 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.XMLClear = type { ptr, ptr, ptr }
%struct.XMLNode = type { ptr }

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL7xstrlenPKc(ptr noundef) local_unnamed_addr #0

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef, ptr noundef) local_unnamed_addr #0

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_ZN7XMLNode16CreateXMLStringREPNS_14XMLNodeDataTagEPci(ptr nocapture noundef readonly %0, ptr noundef %1, i32 noundef %2) local_unnamed_addr #1 align 2 {
  %4 = tail call i32 @llvm.smax.i32(i32 %2, i32 0)
  %5 = getelementptr inbounds i8, ptr %0, i64 8
  %6 = load i32, ptr %5, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %0, i64 12
  %8 = load i32, ptr %7, align 4, !tbaa !11
  %9 = add i32 %8, %6
  %10 = getelementptr inbounds i8, ptr %0, i64 16
  %11 = load i32, ptr %10, align 8, !tbaa !12
  %12 = add i32 %9, %11
  %13 = icmp sgt i32 %2, -1
  %14 = icmp eq i32 %12, 1
  %or.cond = select i1 %13, i1 %14, i1 false
  %15 = icmp eq i32 %8, 1
  %or.cond301 = select i1 %or.cond, i1 %15, i1 false
  br i1 %or.cond301, label %16, label %19

16:                                               ; preds = %3
  %17 = getelementptr inbounds i8, ptr %0, i64 24
  %18 = load i8, ptr %17, align 8, !tbaa !13
  %.not = icmp eq i8 %18, 0
  %spec.select = select i1 %.not, i32 -2, i32 %2
  br label %19

19:                                               ; preds = %3, %16
  %.0 = phi i32 [ %2, %3 ], [ %spec.select, %16 ]
  %20 = load ptr, ptr %0, align 8, !tbaa !14
  %.not267 = icmp eq ptr %20, null
  br i1 %.not267, label %.thread313, label %21

21:                                               ; preds = %19
  %22 = tail call noundef i32 @_ZL7xstrlenPKc(ptr noundef nonnull %20)
  %.not268 = icmp eq i32 %22, 0
  br i1 %.not268, label %.thread313, label %23

23:                                               ; preds = %21
  %.not269 = icmp eq ptr %1, null
  br i1 %.not269, label %36, label %24

24:                                               ; preds = %23
  %.not271 = icmp slt i32 %2, 1
  br i1 %.not271, label %26, label %25

25:                                               ; preds = %24
  tail call void @_ZL10charmemsetPcci(ptr noundef nonnull %1, i8 noundef signext 9, i32 noundef %4)
  br label %26

26:                                               ; preds = %25, %24
  %27 = add nuw nsw i32 %4, 1
  %28 = zext nneg i32 %4 to i64
  %29 = getelementptr inbounds i8, ptr %1, i64 %28
  store i8 60, ptr %29, align 1, !tbaa !15
  %30 = getelementptr inbounds i8, ptr %0, i64 24
  %31 = load i8, ptr %30, align 8, !tbaa !13
  %.not272 = icmp eq i8 %31, 0
  br i1 %.not272, label %.thread, label %32

32:                                               ; preds = %26
  %33 = add nuw nsw i32 %4, 2
  %34 = zext nneg i32 %27 to i64
  %35 = getelementptr inbounds i8, ptr %1, i64 %34
  store i8 63, ptr %35, align 1, !tbaa !15
  br label %.thread

36:                                               ; preds = %23
  %37 = getelementptr inbounds i8, ptr %0, i64 24
  %38 = load i8, ptr %37, align 8, !tbaa !13
  %.not270 = icmp ne i8 %38, 0
  %39 = zext i1 %.not270 to i32
  %40 = add nuw i32 %4, 2
  %41 = add i32 %40, %22
  %spec.select302 = add nsw i32 %41, %39
  %42 = getelementptr inbounds i8, ptr %0, i64 20
  %43 = load i32, ptr %42, align 4, !tbaa !16
  %44 = icmp sgt i32 %43, 0
  br i1 %44, label %.lr.ph.split.us.preheader, label %._crit_edge

.thread:                                          ; preds = %26, %32
  %.0228 = phi i32 [ %33, %32 ], [ %27, %26 ]
  %45 = zext nneg i32 %.0228 to i64
  %46 = getelementptr inbounds i8, ptr %1, i64 %45
  %47 = load ptr, ptr %0, align 8, !tbaa !14
  %48 = tail call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef nonnull %46, ptr noundef %47)
  %49 = add nsw i32 %.0228, %22
  %50 = add nsw i32 %49, 1
  %51 = sext i32 %49 to i64
  %52 = getelementptr inbounds i8, ptr %1, i64 %51
  store i8 32, ptr %52, align 1, !tbaa !15
  %53 = getelementptr inbounds i8, ptr %0, i64 20
  %invariant.gep343 = getelementptr i8, ptr %1, i64 2
  %54 = load i32, ptr %53, align 4, !tbaa !16
  %55 = icmp sgt i32 %54, 0
  br i1 %55, label %.lr.ph.split.preheader, label %._crit_edge.thread

.lr.ph.split.preheader:                           ; preds = %.thread
  %56 = getelementptr inbounds i8, ptr %0, i64 64
  %57 = load ptr, ptr %56, align 8, !tbaa !17
  br label %.lr.ph.split

.lr.ph.split.us.preheader:                        ; preds = %36
  %58 = getelementptr inbounds i8, ptr %0, i64 64
  %59 = load ptr, ptr %58, align 8, !tbaa !17
  br label %.lr.ph.split.us

.lr.ph.split.us:                                  ; preds = %.lr.ph.split.us.preheader, %.thread306.us
  %.2330.us = phi i32 [ %.4.us, %.thread306.us ], [ %spec.select302, %.lr.ph.split.us.preheader ]
  %.0229329.us = phi ptr [ %73, %.thread306.us ], [ %59, %.lr.ph.split.us.preheader ]
  %.0230328.us = phi i32 [ %74, %.thread306.us ], [ 0, %.lr.ph.split.us.preheader ]
  %60 = load ptr, ptr %.0229329.us, align 8, !tbaa !18
  %.not297.us = icmp eq ptr %60, null
  br i1 %.not297.us, label %.thread306.us, label %61

61:                                               ; preds = %.lr.ph.split.us
  %62 = tail call noundef i32 @_ZL7xstrlenPKc(ptr noundef nonnull %60)
  %.not298.us = icmp eq i32 %62, 0
  br i1 %.not298.us, label %.thread306.us, label %63

63:                                               ; preds = %61
  %64 = add nsw i32 %62, %.2330.us
  %65 = getelementptr inbounds i8, ptr %.0229329.us, i64 8
  %66 = load ptr, ptr %65, align 8, !tbaa !20
  %.not299.us = icmp eq ptr %66, null
  br i1 %.not299.us, label %71, label %67

67:                                               ; preds = %63
  %68 = tail call noundef i32 @_ZN15ToXMLStringTool15lengthXMLStringEPKc(ptr noundef nonnull %66)
  %69 = add i32 %64, 3
  %70 = add i32 %69, %68
  br label %71

71:                                               ; preds = %67, %63
  %.3.us = phi i32 [ %70, %67 ], [ %64, %63 ]
  %72 = add nsw i32 %.3.us, 1
  br label %.thread306.us

.thread306.us:                                    ; preds = %71, %61, %.lr.ph.split.us
  %.4.us = phi i32 [ %72, %71 ], [ %.2330.us, %61 ], [ %.2330.us, %.lr.ph.split.us ]
  %73 = getelementptr inbounds i8, ptr %.0229329.us, i64 16
  %74 = add nuw nsw i32 %.0230328.us, 1
  %75 = load i32, ptr %42, align 4, !tbaa !16
  %76 = icmp slt i32 %74, %75
  br i1 %76, label %.lr.ph.split.us, label %._crit_edge, !llvm.loop !21

.lr.ph.split:                                     ; preds = %.lr.ph.split.preheader, %.thread306
  %.2330 = phi i32 [ %.4, %.thread306 ], [ %50, %.lr.ph.split.preheader ]
  %.0229329 = phi ptr [ %106, %.thread306 ], [ %57, %.lr.ph.split.preheader ]
  %.0230328 = phi i32 [ %107, %.thread306 ], [ 0, %.lr.ph.split.preheader ]
  %77 = load ptr, ptr %.0229329, align 8, !tbaa !18
  %.not297 = icmp eq ptr %77, null
  br i1 %.not297, label %.thread306, label %78

78:                                               ; preds = %.lr.ph.split
  %79 = tail call noundef i32 @_ZL7xstrlenPKc(ptr noundef nonnull %77)
  %.not298 = icmp eq i32 %79, 0
  br i1 %.not298, label %.thread306, label %80

80:                                               ; preds = %78
  %81 = sext i32 %.2330 to i64
  %82 = getelementptr inbounds i8, ptr %1, i64 %81
  %83 = load ptr, ptr %.0229329, align 8, !tbaa !18
  %84 = tail call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef %82, ptr noundef %83)
  %85 = add nsw i32 %79, %.2330
  %86 = getelementptr inbounds i8, ptr %.0229329, i64 8
  %87 = load ptr, ptr %86, align 8, !tbaa !20
  %.not299 = icmp eq ptr %87, null
  br i1 %.not299, label %102, label %88

88:                                               ; preds = %80
  %89 = tail call noundef i32 @_ZN15ToXMLStringTool15lengthXMLStringEPKc(ptr noundef nonnull %87)
  %90 = sext i32 %85 to i64
  %91 = getelementptr inbounds i8, ptr %1, i64 %90
  store i8 61, ptr %91, align 1, !tbaa !15
  %92 = getelementptr i8, ptr %91, i64 1
  store i8 34, ptr %92, align 1, !tbaa !15
  %.not300 = icmp eq i32 %89, 0
  br i1 %.not300, label %97, label %93

93:                                               ; preds = %88
  %94 = getelementptr i8, ptr %91, i64 2
  %95 = load ptr, ptr %86, align 8, !tbaa !20
  %96 = tail call noundef ptr @_ZN15ToXMLStringTool11toXMLUnSafeEPcPKc(ptr noundef %94, ptr noundef %95)
  br label %97

97:                                               ; preds = %93, %88
  %98 = add nsw i32 %89, %85
  %99 = sext i32 %98 to i64
  %gep = getelementptr i8, ptr %invariant.gep343, i64 %99
  store i8 34, ptr %gep, align 1, !tbaa !15
  %100 = add i32 %85, 3
  %101 = add i32 %100, %89
  br label %102

102:                                              ; preds = %97, %80
  %.3 = phi i32 [ %101, %97 ], [ %85, %80 ]
  %103 = sext i32 %.3 to i64
  %104 = getelementptr inbounds i8, ptr %1, i64 %103
  store i8 32, ptr %104, align 1, !tbaa !15
  %105 = add nsw i32 %.3, 1
  br label %.thread306

.thread306:                                       ; preds = %.lr.ph.split, %102, %78
  %.4 = phi i32 [ %105, %102 ], [ %.2330, %78 ], [ %.2330, %.lr.ph.split ]
  %106 = getelementptr inbounds i8, ptr %.0229329, i64 16
  %107 = add nuw nsw i32 %.0230328, 1
  %108 = load i32, ptr %53, align 4, !tbaa !16
  %109 = icmp slt i32 %107, %108
  br i1 %109, label %.lr.ph.split, label %._crit_edge, !llvm.loop !21

._crit_edge:                                      ; preds = %.thread306, %.thread306.us, %36
  %.2.lcssa = phi i32 [ %spec.select302, %36 ], [ %.4.us, %.thread306.us ], [ %.4, %.thread306 ]
  %110 = getelementptr inbounds i8, ptr %0, i64 24
  %111 = load i8, ptr %110, align 8, !tbaa !13
  %.not273 = icmp eq i8 %111, 0
  br i1 %.not273, label %128, label %114

._crit_edge.thread:                               ; preds = %.thread
  %112 = getelementptr inbounds i8, ptr %0, i64 24
  %113 = load i8, ptr %112, align 8, !tbaa !13
  %.not273351 = icmp eq i8 %113, 0
  br i1 %.not273351, label %.thread358, label %.thread308

114:                                              ; preds = %._crit_edge
  br i1 %.not269, label %115, label %.thread308

115:                                              ; preds = %114
  %116 = add nsw i32 %.2.lcssa, 1
  %.not275 = icmp eq i32 %.0, -1
  br i1 %.not275, label %.thread313, label %125

.thread308:                                       ; preds = %._crit_edge.thread, %114
  %.2.lcssa353356 = phi i32 [ %.2.lcssa, %114 ], [ %50, %._crit_edge.thread ]
  %117 = phi ptr [ %110, %114 ], [ %112, %._crit_edge.thread ]
  %118 = sext i32 %.2.lcssa353356 to i64
  %119 = getelementptr i8, ptr %1, i64 %118
  %120 = getelementptr i8, ptr %119, i64 -1
  store i8 63, ptr %120, align 1, !tbaa !15
  store i8 62, ptr %119, align 1, !tbaa !15
  %121 = add nsw i32 %.2.lcssa353356, 1
  %.not275309 = icmp eq i32 %.0, -1
  br i1 %.not275309, label %.thread313, label %122

122:                                              ; preds = %.thread308
  %123 = sext i32 %121 to i64
  %124 = getelementptr inbounds i8, ptr %1, i64 %123
  store i8 10, ptr %124, align 1, !tbaa !15
  br label %125

125:                                              ; preds = %115, %122
  %.2.lcssa353357 = phi i32 [ %.2.lcssa, %115 ], [ %.2.lcssa353356, %122 ]
  %126 = phi ptr [ %110, %115 ], [ %117, %122 ]
  %127 = add nsw i32 %.2.lcssa353357, 2
  br label %.thread369

128:                                              ; preds = %._crit_edge
  %.not274 = icmp eq i32 %12, 0
  br i1 %.not274, label %141, label %129

.thread358:                                       ; preds = %._crit_edge.thread
  %.not274360 = icmp eq i32 %12, 0
  br i1 %.not274360, label %141, label %.thread311

129:                                              ; preds = %128
  br i1 %.not269, label %130, label %.thread311

130:                                              ; preds = %129
  %131 = icmp sgt i32 %.0, -1
  br i1 %131, label %138, label %144

.thread311:                                       ; preds = %.thread358, %129
  %132 = phi ptr [ %110, %129 ], [ %112, %.thread358 ]
  %.2.lcssa352361365 = phi i32 [ %.2.lcssa, %129 ], [ %50, %.thread358 ]
  %133 = sext i32 %.2.lcssa352361365 to i64
  %134 = getelementptr i8, ptr %1, i64 %133
  %135 = getelementptr i8, ptr %134, i64 -1
  store i8 62, ptr %135, align 1, !tbaa !15
  %136 = icmp sgt i32 %.0, -1
  br i1 %136, label %137, label %144

137:                                              ; preds = %.thread311
  store i8 10, ptr %134, align 1, !tbaa !15
  br label %138

138:                                              ; preds = %130, %137
  %139 = phi ptr [ %110, %130 ], [ %132, %137 ]
  %.2.lcssa352361366 = phi i32 [ %.2.lcssa, %130 ], [ %.2.lcssa352361365, %137 ]
  %140 = add nsw i32 %.2.lcssa352361366, 1
  br label %.thread369

141:                                              ; preds = %.thread358, %128
  %.2.lcssa352362 = phi i32 [ %50, %.thread358 ], [ %.2.lcssa, %128 ]
  %142 = phi ptr [ %112, %.thread358 ], [ %110, %128 ]
  %143 = add nsw i32 %.2.lcssa352362, -1
  br label %144

.thread313:                                       ; preds = %.thread308, %115, %21, %19
  %.not268305.ph = phi i1 [ false, %.thread308 ], [ false, %115 ], [ true, %21 ], [ true, %19 ]
  %.ph = phi i32 [ %22, %.thread308 ], [ %22, %115 ], [ 0, %21 ], [ 0, %19 ]
  %.6.ph = phi i32 [ %121, %.thread308 ], [ %116, %115 ], [ 0, %21 ], [ 0, %19 ]
  %.not276316 = icmp eq i32 %.0, -1
  br label %149

144:                                              ; preds = %.thread311, %130, %141
  %145 = phi ptr [ %110, %130 ], [ %142, %141 ], [ %132, %.thread311 ]
  %.6 = phi i32 [ %.2.lcssa, %130 ], [ %143, %141 ], [ %.2.lcssa352361365, %.thread311 ]
  %.not276 = icmp eq i32 %.0, -1
  br i1 %.not276, label %149, label %.thread369

.thread369:                                       ; preds = %138, %125, %144
  %.6372 = phi i32 [ %.6, %144 ], [ %140, %138 ], [ %127, %125 ]
  %146 = phi ptr [ %145, %144 ], [ %139, %138 ], [ %126, %125 ]
  %147 = load i8, ptr %146, align 8, !tbaa !13
  %.not277 = icmp eq i8 %147, 0
  %148 = zext i1 %.not277 to i32
  %spec.select303 = add nuw nsw i32 %.0, %148
  br label %149

149:                                              ; preds = %.thread313, %.thread369, %144
  %.not276320 = phi i1 [ true, %144 ], [ false, %.thread369 ], [ %.not276316, %.thread313 ]
  %.6319 = phi i32 [ %.6, %144 ], [ %.6372, %.thread369 ], [ %.6.ph, %.thread313 ]
  %150 = phi i32 [ %22, %144 ], [ %22, %.thread369 ], [ %.ph, %.thread313 ]
  %.not268305318 = phi i1 [ false, %144 ], [ false, %.thread369 ], [ %.not268305.ph, %.thread313 ]
  %.0232 = phi i32 [ -1, %144 ], [ %spec.select303, %.thread369 ], [ %.0, %.thread313 ]
  %invariant.gep331 = getelementptr i8, ptr %1, i64 1
  %151 = icmp sgt i32 %12, 0
  br i1 %151, label %.lr.ph336, label %._crit_edge337

.lr.ph336:                                        ; preds = %149
  %152 = getelementptr inbounds i8, ptr %0, i64 72
  %153 = getelementptr inbounds i8, ptr %0, i64 40
  %.not282 = icmp eq ptr %1, null
  %154 = getelementptr inbounds i8, ptr %0, i64 56
  %155 = add i32 %.0, 1
  %156 = getelementptr inbounds i8, ptr %0, i64 48
  %157 = icmp sgt i32 %.0, -1
  %158 = add i32 %.0, 2
  %wide.trip.count = zext nneg i32 %12 to i64
  br label %159

159:                                              ; preds = %.lr.ph336, %262
  %indvars.iv = phi i64 [ 0, %.lr.ph336 ], [ %indvars.iv.next, %262 ]
  %.7334 = phi i32 [ %.6319, %.lr.ph336 ], [ %.13, %262 ]
  %160 = load ptr, ptr %152, align 8, !tbaa !23
  %161 = getelementptr inbounds i32, ptr %160, i64 %indvars.iv
  %162 = load i32, ptr %161, align 4, !tbaa !24
  %163 = and i32 %162, 3
  switch i32 %163, label %default.unreachable341 [
    i32 2, label %164
    i32 3, label %193
    i32 0, label %251
    i32 1, label %262
  ]

164:                                              ; preds = %159
  %165 = load ptr, ptr %156, align 8, !tbaa !25
  %166 = ashr i32 %162, 2
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds ptr, ptr %165, i64 %167
  %169 = load ptr, ptr %168, align 8, !tbaa !26
  %170 = tail call noundef i32 @_ZN15ToXMLStringTool15lengthXMLStringEPKc(ptr noundef %169)
  %.not294 = icmp eq i32 %170, 0
  br i1 %.not294, label %262, label %171

171:                                              ; preds = %164
  br i1 %157, label %172, label %186

172:                                              ; preds = %171
  br i1 %.not282, label %183, label %173

173:                                              ; preds = %172
  %174 = sext i32 %.7334 to i64
  %175 = getelementptr inbounds i8, ptr %1, i64 %174
  tail call void @_ZL10charmemsetPcci(ptr noundef %175, i8 noundef signext 9, i32 noundef %155)
  %176 = add i32 %155, %.7334
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds i8, ptr %1, i64 %177
  %179 = tail call noundef ptr @_ZN15ToXMLStringTool11toXMLUnSafeEPcPKc(ptr noundef %178, ptr noundef %169)
  %180 = add nsw i32 %170, %176
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds i8, ptr %1, i64 %181
  store i8 10, ptr %182, align 1, !tbaa !15
  br label %183

183:                                              ; preds = %173, %172
  %184 = add i32 %158, %.7334
  %185 = add i32 %184, %170
  br label %262

186:                                              ; preds = %171
  br i1 %.not282, label %191, label %187

187:                                              ; preds = %186
  %188 = sext i32 %.7334 to i64
  %189 = getelementptr inbounds i8, ptr %1, i64 %188
  %190 = tail call noundef ptr @_ZN15ToXMLStringTool11toXMLUnSafeEPcPKc(ptr noundef %189, ptr noundef %169)
  br label %191

191:                                              ; preds = %187, %186
  %192 = add nsw i32 %170, %.7334
  br label %262

193:                                              ; preds = %159
  %194 = load ptr, ptr %154, align 8, !tbaa !27
  %195 = ashr i32 %162, 2
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds %struct.XMLClear, ptr %194, i64 %196
  %198 = getelementptr inbounds i8, ptr %197, i64 8
  %199 = load ptr, ptr %198, align 8, !tbaa !28
  %.not283 = icmp eq ptr %199, null
  br i1 %.not283, label %.thread321, label %200

200:                                              ; preds = %193
  %201 = tail call noundef i32 @_ZL7xstrlenPKc(ptr noundef nonnull %199)
  %.not284 = icmp eq i32 %201, 0
  br i1 %.not284, label %.thread321, label %202

202:                                              ; preds = %200
  br i1 %.not276320, label %214, label %203

203:                                              ; preds = %202
  br i1 %.not282, label %211, label %204

204:                                              ; preds = %203
  %205 = sext i32 %.7334 to i64
  %206 = getelementptr inbounds i8, ptr %1, i64 %205
  tail call void @_ZL10charmemsetPcci(ptr noundef %206, i8 noundef signext 9, i32 noundef %155)
  %207 = add nsw i32 %.7334, %.0
  %208 = sext i32 %207 to i64
  %gep332 = getelementptr i8, ptr %invariant.gep331, i64 %208
  %209 = load ptr, ptr %198, align 8, !tbaa !28
  %210 = tail call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef %gep332, ptr noundef %209)
  br label %211

211:                                              ; preds = %204, %203
  %212 = add i32 %155, %.7334
  %213 = add i32 %212, %201
  br label %.thread321

214:                                              ; preds = %202
  br i1 %.not282, label %220, label %215

215:                                              ; preds = %214
  %216 = sext i32 %.7334 to i64
  %217 = getelementptr inbounds i8, ptr %1, i64 %216
  %218 = load ptr, ptr %198, align 8, !tbaa !28
  %219 = tail call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef %217, ptr noundef %218)
  br label %220

220:                                              ; preds = %215, %214
  %221 = add nsw i32 %201, %.7334
  br label %.thread321

.thread321:                                       ; preds = %193, %211, %220, %200
  %.9 = phi i32 [ %213, %211 ], [ %221, %220 ], [ %.7334, %200 ], [ %.7334, %193 ]
  %222 = load ptr, ptr %197, align 8, !tbaa !30
  %.not287 = icmp eq ptr %222, null
  br i1 %.not287, label %.thread323, label %223

223:                                              ; preds = %.thread321
  %224 = tail call noundef i32 @_ZL7xstrlenPKc(ptr noundef nonnull %222)
  %.not288 = icmp eq i32 %224, 0
  br i1 %.not288, label %.thread323, label %225

225:                                              ; preds = %223
  br i1 %.not282, label %231, label %226

226:                                              ; preds = %225
  %227 = sext i32 %.9 to i64
  %228 = getelementptr inbounds i8, ptr %1, i64 %227
  %229 = load ptr, ptr %197, align 8, !tbaa !30
  %230 = tail call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef %228, ptr noundef %229)
  br label %231

231:                                              ; preds = %226, %225
  %232 = add nsw i32 %224, %.9
  br label %.thread323

.thread323:                                       ; preds = %.thread321, %231, %223
  %.10 = phi i32 [ %232, %231 ], [ %.9, %223 ], [ %.9, %.thread321 ]
  %233 = getelementptr inbounds i8, ptr %197, i64 16
  %234 = load ptr, ptr %233, align 8, !tbaa !31
  %.not290 = icmp eq ptr %234, null
  br i1 %.not290, label %.thread325, label %235

235:                                              ; preds = %.thread323
  %236 = tail call noundef i32 @_ZL7xstrlenPKc(ptr noundef nonnull %234)
  %.not291 = icmp eq i32 %236, 0
  br i1 %.not291, label %.thread325, label %237

237:                                              ; preds = %235
  br i1 %.not282, label %243, label %238

238:                                              ; preds = %237
  %239 = sext i32 %.10 to i64
  %240 = getelementptr inbounds i8, ptr %1, i64 %239
  %241 = load ptr, ptr %233, align 8, !tbaa !31
  %242 = tail call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef %240, ptr noundef %241)
  br label %243

243:                                              ; preds = %238, %237
  %244 = add nsw i32 %236, %.10
  br label %.thread325

.thread325:                                       ; preds = %.thread323, %243, %235
  %.11 = phi i32 [ %244, %243 ], [ %.10, %235 ], [ %.10, %.thread323 ]
  br i1 %.not276320, label %262, label %245

245:                                              ; preds = %.thread325
  br i1 %.not282, label %249, label %246

246:                                              ; preds = %245
  %247 = sext i32 %.11 to i64
  %248 = getelementptr inbounds i8, ptr %1, i64 %247
  store i8 10, ptr %248, align 1, !tbaa !15
  br label %249

249:                                              ; preds = %246, %245
  %250 = add nsw i32 %.11, 1
  br label %262

251:                                              ; preds = %159
  %252 = load ptr, ptr %153, align 8, !tbaa !32
  %253 = ashr i32 %162, 2
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds %struct.XMLNode, ptr %252, i64 %254
  %256 = load ptr, ptr %255, align 8, !tbaa !33
  %257 = sext i32 %.7334 to i64
  %258 = getelementptr inbounds i8, ptr %1, i64 %257
  %259 = select i1 %.not282, ptr null, ptr %258
  %260 = tail call noundef i32 @_ZN7XMLNode16CreateXMLStringREPNS_14XMLNodeDataTagEPci(ptr noundef %256, ptr noundef %259, i32 noundef %.0232)
  %261 = add nsw i32 %260, %.7334
  br label %262

default.unreachable341:                           ; preds = %159
  unreachable

262:                                              ; preds = %.thread325, %249, %164, %191, %183, %251, %159
  %.13 = phi i32 [ %.7334, %159 ], [ %261, %251 ], [ %185, %183 ], [ %192, %191 ], [ %.7334, %164 ], [ %250, %249 ], [ %.11, %.thread325 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge337, label %159, !llvm.loop !35

._crit_edge337:                                   ; preds = %262, %149
  %.7.lcssa = phi i32 [ %.6319, %149 ], [ %.13, %262 ]
  br i1 %.not268305318, label %313, label %263

263:                                              ; preds = %._crit_edge337
  %264 = getelementptr inbounds i8, ptr %0, i64 24
  %265 = load i8, ptr %264, align 8, !tbaa !13
  %.not278 = icmp eq i8 %265, 0
  br i1 %.not278, label %266, label %313

266:                                              ; preds = %263
  %.not279 = icmp eq i32 %12, 0
  %.not280 = icmp eq ptr %1, null
  br i1 %.not279, label %303, label %267

267:                                              ; preds = %266
  %268 = icmp sgt i32 %.0, -1
  br i1 %.not280, label %291, label %269

269:                                              ; preds = %267
  br i1 %268, label %270, label %274

270:                                              ; preds = %269
  %271 = sext i32 %.7.lcssa to i64
  %272 = getelementptr inbounds i8, ptr %1, i64 %271
  tail call void @_ZL10charmemsetPcci(ptr noundef %272, i8 noundef signext 9, i32 noundef %.0)
  %273 = add nsw i32 %.7.lcssa, %.0
  br label %274

274:                                              ; preds = %270, %269
  %.14 = phi i32 [ %273, %270 ], [ %.7.lcssa, %269 ]
  %275 = sext i32 %.14 to i64
  %276 = getelementptr inbounds i8, ptr %1, i64 %275
  store i8 60, ptr %276, align 1, !tbaa !15
  %277 = getelementptr i8, ptr %276, i64 1
  store i8 47, ptr %277, align 1, !tbaa !15
  %278 = add nsw i32 %.14, 2
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds i8, ptr %1, i64 %279
  %281 = load ptr, ptr %0, align 8, !tbaa !14
  %282 = tail call noundef ptr @_ZL7xstrcpyPcPKc(ptr noundef %280, ptr noundef %281)
  %283 = add nsw i32 %278, %150
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds i8, ptr %1, i64 %284
  store i8 62, ptr %285, align 1, !tbaa !15
  br i1 %.not276320, label %286, label %288

286:                                              ; preds = %274
  %287 = add nsw i32 %283, 1
  br label %313

288:                                              ; preds = %274
  %289 = getelementptr i8, ptr %285, i64 1
  store i8 10, ptr %289, align 1, !tbaa !15
  %290 = add nsw i32 %283, 2
  br label %313

291:                                              ; preds = %267
  br i1 %268, label %292, label %296

292:                                              ; preds = %291
  %293 = add nuw i32 %.0, 4
  %294 = add i32 %293, %150
  %295 = add nsw i32 %294, %.7.lcssa
  br label %313

296:                                              ; preds = %291
  br i1 %.not276320, label %297, label %300

297:                                              ; preds = %296
  %298 = add nsw i32 %150, 3
  %299 = add nsw i32 %298, %.7.lcssa
  br label %313

300:                                              ; preds = %296
  %301 = add nsw i32 %150, 4
  %302 = add nsw i32 %301, %.7.lcssa
  br label %313

303:                                              ; preds = %266
  br i1 %.not280, label %310, label %304

304:                                              ; preds = %303
  %305 = sext i32 %.7.lcssa to i64
  %306 = getelementptr inbounds i8, ptr %1, i64 %305
  store i8 47, ptr %306, align 1, !tbaa !15
  %307 = getelementptr i8, ptr %306, i64 1
  store i8 62, ptr %307, align 1, !tbaa !15
  br i1 %.not276320, label %310, label %308

308:                                              ; preds = %304
  %309 = getelementptr i8, ptr %306, i64 2
  store i8 10, ptr %309, align 1, !tbaa !15
  br label %310

310:                                              ; preds = %304, %308, %303
  %311 = select i1 %.not276320, i32 2, i32 3
  %312 = add nsw i32 %.7.lcssa, %311
  br label %313

313:                                              ; preds = %310, %292, %300, %297, %286, %288, %263, %._crit_edge337
  %.15 = phi i32 [ %.7.lcssa, %263 ], [ %287, %286 ], [ %290, %288 ], [ %295, %292 ], [ %299, %297 ], [ %302, %300 ], [ %312, %310 ], [ %.7.lcssa, %._crit_edge337 ]
  ret i32 %.15
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @_ZL10charmemsetPcci(ptr noundef, i8 noundef signext, i32 noundef) local_unnamed_addr #0

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #3

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

!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, !10, i64 8}
!6 = !{!"_ZTSN7XMLNode14XMLNodeDataTagE", !7, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !8, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !10, i64 80}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!6, !10, i64 12}
!12 = !{!6, !10, i64 16}
!13 = !{!6, !8, i64 24}
!14 = !{!6, !7, i64 0}
!15 = !{!8, !8, i64 0}
!16 = !{!6, !10, i64 20}
!17 = !{!6, !7, i64 64}
!18 = !{!19, !7, i64 0}
!19 = !{!"_ZTS12XMLAttribute", !7, i64 0, !7, i64 8}
!20 = !{!19, !7, i64 8}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!6, !7, i64 72}
!24 = !{!10, !10, i64 0}
!25 = !{!6, !7, i64 48}
!26 = !{!7, !7, i64 0}
!27 = !{!6, !7, i64 56}
!28 = !{!29, !7, i64 8}
!29 = !{!"_ZTS8XMLClear", !7, i64 0, !7, i64 8, !7, i64 16}
!30 = !{!29, !7, i64 0}
!31 = !{!29, !7, i64 16}
!32 = !{!6, !7, i64 40}
!33 = !{!34, !7, i64 0}
!34 = !{!"_ZTS7XMLNode", !7, i64 0}
!35 = distinct !{!35, !22}


; Effective O3 passes: ADCEPass,ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass