; LLVM IR from kala13x/libxutils :: examples (strings)

; 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.XLogConfig = type { i32, i32, ptr, ptr, i8, i8, i8, i8, i8, i8, i8, i8, i16, [256 x i8], [2048 x i8], [256 x i8] }
%struct.XString = type { ptr, i64, i64, i16, i8, i8 }
%struct.XArray_ = type { ptr, ptr, i32, ptr, i8, i8, i8, i64, i64 }

@.str = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [21 x i8], align 1
@__const.main.pattern = external hidden unnamed_addr constant [9 x i8], align 1
@__const.main.pattern2 = external hidden unnamed_addr constant [27 x i8], align 16
@__const.main.matchStr1 = external hidden unnamed_addr constant [8 x i8], align 1
@__const.main.matchStr2 = external hidden unnamed_addr constant [13 x i8], align 1
@__const.main.matchStr3 = external hidden unnamed_addr constant [18 x i8], align 16
@__const.main.matchStr4 = external hidden unnamed_addr constant [32 x i8], align 16
@.str.46 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [9 x i8], align 1
@__const.main.multiPattern = external hidden unnamed_addr constant [41 x i8], align 16
@__const.main.multiMatchStr1 = external hidden unnamed_addr constant [8 x i8], align 1
@__const.main.multiMatchStr1a = external hidden unnamed_addr constant [9 x i8], align 1
@__const.main.multiMatchStr2 = external hidden unnamed_addr constant [20 x i8], align 16
@__const.main.multiMatchStr3 = external hidden unnamed_addr constant [20 x i8], align 16
@.str.50 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [59 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca ptr, align 8
  %3 = alloca %struct.XLogConfig, align 8
  %4 = alloca i32, align 4
  %5 = alloca [128 x i8], align 16
  %6 = alloca [128 x i8], align 16
  %7 = alloca ptr, align 8
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca [128 x i8], align 16
  %11 = alloca [32 x i8], align 16
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca %struct.XString, align 8
  %16 = alloca %struct.XString, align 8
  %17 = alloca i32, align 4
  %18 = alloca %struct.XString, align 8
  %19 = alloca ptr, align 8
  %20 = alloca %struct.XString, align 8
  %21 = alloca ptr, align 8
  %22 = alloca %struct.XString, align 8
  %23 = alloca ptr, align 8
  %24 = alloca [9 x i8], align 1
  %25 = alloca [27 x i8], align 16
  %26 = alloca [8 x i8], align 1
  %27 = alloca i64, align 8
  %28 = alloca [13 x i8], align 1
  %29 = alloca i64, align 8
  %30 = alloca [18 x i8], align 16
  %31 = alloca i64, align 8
  %32 = alloca [32 x i8], align 16
  %33 = alloca i64, align 8
  %34 = alloca i8, align 1
  %35 = alloca i8, align 1
  %36 = alloca i8, align 1
  %37 = alloca i8, align 1
  %38 = alloca [41 x i8], align 16
  %39 = alloca [8 x i8], align 1
  %40 = alloca [9 x i8], align 1
  %41 = alloca [20 x i8], align 16
  %42 = alloca [20 x i8], align 16
  %43 = alloca i8, align 1
  %44 = alloca i8, align 1
  %45 = alloca i8, align 1
  %46 = alloca i8, align 1
  store i32 0, ptr %1, align 4
  call void @XLog_Init(ptr noundef null, i16 noundef zeroext 203, i8 noundef zeroext 0)
  call void @llvm.lifetime.start.p0(i64 8, ptr %2) #6
  %47 = call ptr (ptr, ...) @xstracpy(ptr noundef @.str, ptr noundef @.str.1, ptr noundef @.str.2, i32 noundef 1, ptr noundef @.str.3, double noundef 3.000000e+00)
  store ptr %47, ptr %2, align 8, !tbaa !5
  %48 = load ptr, ptr %2, align 8, !tbaa !5
  %49 = icmp ne ptr %48, null
  br i1 %49, label %50, label %55

50:                                               ; preds = %0
  call void @llvm.lifetime.start.p0(i64 2600, ptr %3) #6
  call void @XLog_ConfigGet(ptr noundef %3)
  %51 = getelementptr inbounds %struct.XLogConfig, ptr %3, i32 0, i32 7
  store i8 1, ptr %51, align 1, !tbaa !9
  call void @XLog_ConfigSet(ptr noundef %3)
  %52 = load ptr, ptr %2, align 8, !tbaa !5
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef @.str.4, ptr noundef %52)
  %53 = load ptr, ptr %2, align 8, !tbaa !5
  call void @free(ptr noundef %53) #6
  %54 = getelementptr inbounds %struct.XLogConfig, ptr %3, i32 0, i32 7
  store i8 0, ptr %54, align 1, !tbaa !9
  call void @XLog_ConfigSet(ptr noundef %3)
  call void @llvm.lifetime.end.p0(i64 2600, ptr %3) #6
  br label %56

55:                                               ; preds = %0
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef @.str.5)
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %4, align 4
  br label %464

56:                                               ; preds = %50
  call void @llvm.lifetime.start.p0(i64 128, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 128, ptr %6) #6
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef @.str.6, ptr noundef @.str.7, ptr noundef @.str.8)
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  %57 = call ptr @xstrrep(ptr noundef @.str.8, ptr noundef @.str.9, ptr noundef @.str.10)
  store ptr %57, ptr %7, align 8, !tbaa !5
  %58 = load ptr, ptr %7, align 8, !tbaa !5
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef @.str.11, ptr noundef %58)
  %59 = getelementptr inbounds [128 x i8], ptr %5, i64 0, i64 0
  %60 = load ptr, ptr %7, align 8, !tbaa !5
  %61 = call i64 @xstrncase(ptr noundef %59, i64 noundef 128, i32 noundef 0, ptr noundef %60)
  %62 = getelementptr inbounds [128 x i8], ptr %5, i64 0, i64 0
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef @.str.12, ptr noundef %62)
  %63 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %63) #6
  %64 = call ptr @xstrrep(ptr noundef @.str.7, ptr noundef @.str.13, ptr noundef @.str.14)
  store ptr %64, ptr %7, align 8, !tbaa !5
  %65 = load ptr, ptr %7, align 8, !tbaa !5
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef @.str.15, ptr noundef %65)
  %66 = getelementptr inbounds [128 x i8], ptr %6, i64 0, i64 0
  %67 = load ptr, ptr %7, align 8, !tbaa !5
  %68 = call i64 @xstrncase(ptr noundef %66, i64 noundef 128, i32 noundef 1, ptr noundef %67)
  %69 = getelementptr inbounds [128 x i8], ptr %6, i64 0, i64 0
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef @.str.16, ptr noundef %69)
  %70 = load ptr, ptr %7, align 8, !tbaa !5
  call void @free(ptr noundef %70) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  %71 = getelementptr inbounds [128 x i8], ptr %5, i64 0, i64 0
  %72 = getelementptr inbounds [128 x i8], ptr %5, i64 0, i64 0
  %73 = call i64 @strlen(ptr noundef %72) #7
  %74 = trunc i64 %73 to i32
  %75 = sub nsw i32 128, %74
  %76 = sext i32 %75 to i64
  %77 = call i64 (ptr, i64, ptr, ...) @xstrncatf(ptr noundef %71, i64 noundef %76, ptr noundef @.str.17)
  %78 = trunc i64 %77 to i32
  store i32 %78, ptr %9, align 4, !tbaa !13
  %79 = load i32, ptr %9, align 4, !tbaa !13
  %80 = icmp sgt i32 %79, 0
  br i1 %80, label %81, label %87

81:                                               ; preds = %56
  %82 = getelementptr inbounds [128 x i8], ptr %5, i64 0, i64 0
  %83 = load i32, ptr %9, align 4, !tbaa !13
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds [128 x i8], ptr %6, i64 0, i64 0
  %86 = call i64 (ptr, i64, ptr, ...) @xstrncatf(ptr noundef %82, i64 noundef %84, ptr noundef %85)
  br label %87

87:                                               ; preds = %81, %56
  call void @llvm.lifetime.start.p0(i64 128, ptr %10) #6
  %88 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  %89 = getelementptr inbounds [128 x i8], ptr %5, i64 0, i64 0
  %90 = call i64 (ptr, i64, ptr, ptr, ...) @xstrnclr(ptr noundef %88, i64 noundef 128, ptr noundef @.str.18, ptr noundef %89)
  %91 = getelementptr inbounds [128 x i8], ptr %10, i64 0, i64 0
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef @.str.19, ptr noundef %91)
  call void @llvm.lifetime.start.p0(i64 32, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  store i32 0, ptr %12, align 4, !tbaa !13
  br label %92

92:                                               ; preds = %104, %87
  %93 = getelementptr inbounds [32 x i8], ptr %11, i64 0, i64 0
  %94 = getelementptr inbounds [128 x i8], ptr %5, i64 0, i64 0
  %95 = load i32, ptr %12, align 4, !tbaa !13
  %96 = sext i32 %95 to i64
  %97 = call i32 @xstrntok(ptr noundef %93, i64 noundef 32, ptr noundef %94, i64 noundef %96, ptr noundef @.str.20)
  store i32 %97, ptr %12, align 4, !tbaa !13
  %98 = icmp sge i32 %97, 0
  br i1 %98, label %99, label %105

99:                                               ; preds = %92
  %100 = getelementptr inbounds [32 x i8], ptr %11, i64 0, i64 0
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef @.str.21, ptr noundef %100)
  %101 = load i32, ptr %12, align 4, !tbaa !13
  %102 = icmp ne i32 %101, 0
  br i1 %102, label %104, label %103

103:                                              ; preds = %99
  br label %105

104:                                              ; preds = %99
  br label %92, !llvm.loop !14

105:                                              ; preds = %103, %92
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %106 = call ptr @xstrsplit(ptr noundef @.str.22, ptr noundef @.str.23)
  store ptr %106, ptr %13, align 8, !tbaa !5
  %107 = load ptr, ptr %13, align 8, !tbaa !5
  %108 = icmp ne ptr %107, null
  br i1 %108, label %109, label %128

109:                                              ; preds = %105
  store i32 0, ptr %8, align 4, !tbaa !13
  br label %110

110:                                              ; preds = %123, %109
  %111 = load i32, ptr %8, align 4, !tbaa !13
  %112 = sext i32 %111 to i64
  %113 = load ptr, ptr %13, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.XArray_, ptr %113, i32 0, i32 8
  %115 = load i64, ptr %114, align 8, !tbaa !16
  %116 = icmp ult i64 %112, %115
  br i1 %116, label %117, label %126

117:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %118 = load ptr, ptr %13, align 8, !tbaa !5
  %119 = load i32, ptr %8, align 4, !tbaa !13
  %120 = sext i32 %119 to i64
  %121 = call ptr @XArray_GetData(ptr noundef %118, i64 noundef %120)
  store ptr %121, ptr %14, align 8, !tbaa !5
  %122 = load ptr, ptr %14, align 8, !tbaa !5
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef @.str.24, ptr noundef %122)
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  br label %123

123:                                              ; preds = %117
  %124 = load i32, ptr %8, align 4, !tbaa !13
  %125 = add nsw i32 %124, 1
  store i32 %125, ptr %8, align 4, !tbaa !13
  br label %110, !llvm.loop !19

126:                                              ; preds = %110
  %127 = load ptr, ptr %13, align 8, !tbaa !5
  call void @XArray_Destroy(ptr noundef %127)
  br label %129

128:                                              ; preds = %105
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef @.str.25)
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %4, align 4
  br label %463

129:                                              ; preds = %126
  call void @llvm.lifetime.start.p0(i64 32, ptr %15) #6
  %130 = call i32 @XString_Init(ptr noundef %15, i64 noundef 1, i8 noundef zeroext 1)
  %131 = call i32 (ptr, ptr, ...) @XString_Append(ptr noundef %15, ptr noundef @.str.26)
  %132 = call i32 (ptr, ptr, ...) @XString_Append(ptr noundef %15, ptr noundef @.str.27)
  %133 = call i32 (ptr, ptr, ...) @XString_Append(ptr noundef %15, ptr noundef @.str.28)
  %134 = getelementptr inbounds %struct.XString, ptr %15, i32 0, i32 0
  %135 = load ptr, ptr %134, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %135)
  %136 = call i32 @XString_Remove(ptr noundef %15, i64 noundef 6, i64 noundef 5)
  %137 = getelementptr inbounds %struct.XString, ptr %15, i32 0, i32 0
  %138 = load ptr, ptr %137, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %138)
  %139 = call i32 @XString_Insert(ptr noundef %15, i64 noundef 6, ptr noundef @.str.27, i64 noundef 5)
  %140 = getelementptr inbounds %struct.XString, ptr %15, i32 0, i32 0
  %141 = load ptr, ptr %140, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %141)
  %142 = call i32 (ptr, ptr, ...) @XString_Append(ptr noundef %15, ptr noundef @.str.29)
  %143 = call i32 @XString_Add(ptr noundef %15, ptr noundef @.str.30, i64 noundef 3)
  %144 = getelementptr inbounds %struct.XString, ptr %15, i32 0, i32 0
  %145 = load ptr, ptr %144, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %145)
  %146 = call i32 @XString_Delete(ptr noundef %15, i64 noundef 36, i64 noundef 3)
  %147 = getelementptr inbounds %struct.XString, ptr %15, i32 0, i32 0
  %148 = load ptr, ptr %147, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %148)
  %149 = call i32 (ptr, i64, ptr, ...) @XString_InsertFmt(ptr noundef %15, i64 noundef 36, ptr noundef @.str.31)
  %150 = getelementptr inbounds %struct.XString, ptr %15, i32 0, i32 0
  %151 = load ptr, ptr %150, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %151)
  %152 = call i32 @XString_Advance(ptr noundef %15, i64 noundef 40)
  %153 = getelementptr inbounds %struct.XString, ptr %15, i32 0, i32 0
  %154 = load ptr, ptr %153, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %154)
  %155 = getelementptr inbounds %struct.XString, ptr %15, i32 0, i32 0
  %156 = load ptr, ptr %155, align 8, !tbaa !20
  %157 = call i64 @strlen(ptr noundef %156) #7
  %158 = getelementptr inbounds %struct.XString, ptr %15, i32 0, i32 1
  %159 = load i64, ptr %158, align 8, !tbaa !22
  %160 = icmp ne i64 %157, %159
  br i1 %160, label %161, label %167

161:                                              ; preds = %129
  %162 = getelementptr inbounds %struct.XString, ptr %15, i32 0, i32 0
  %163 = load ptr, ptr %162, align 8, !tbaa !20
  %164 = call i64 @strlen(ptr noundef %163) #7
  %165 = getelementptr inbounds %struct.XString, ptr %15, i32 0, i32 1
  %166 = load i64, ptr %165, align 8, !tbaa !22
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef @.str.32, i64 noundef %164, i64 noundef %166)
  call void @XString_Clear(ptr noundef %15)
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %4, align 4
  br label %462

167:                                              ; preds = %129
  call void @llvm.lifetime.start.p0(i64 32, ptr %16) #6
  %168 = call i32 @XString_Copy(ptr noundef %16, ptr noundef %15)
  %169 = getelementptr inbounds %struct.XString, ptr %16, i32 0, i32 0
  %170 = load ptr, ptr %169, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %170)
  %171 = call i32 @XString_ChangeCase(ptr noundef %16, i32 noundef 1)
  %172 = getelementptr inbounds %struct.XString, ptr %16, i32 0, i32 0
  %173 = load ptr, ptr %172, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %173)
  %174 = call i32 @XString_Case(ptr noundef %16, i32 noundef 0, i64 noundef 6, i64 noundef 8)
  %175 = getelementptr inbounds %struct.XString, ptr %16, i32 0, i32 0
  %176 = load ptr, ptr %175, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %176)
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  %177 = call i32 @XString_Search(ptr noundef %16, i64 noundef 0, ptr noundef @.str.33)
  store i32 %177, ptr %17, align 4, !tbaa !13
  %178 = load i32, ptr %17, align 4, !tbaa !13
  %179 = icmp sge i32 %178, 0
  br i1 %179, label %180, label %195

180:                                              ; preds = %167
  %181 = load i32, ptr %17, align 4, !tbaa !13
  %182 = sext i32 %181 to i64
  %183 = call i32 @XString_Case(ptr noundef %16, i32 noundef 1, i64 noundef %182, i64 noundef 8)
  %184 = getelementptr inbounds %struct.XString, ptr %16, i32 0, i32 0
  %185 = load ptr, ptr %184, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %185)
  %186 = load i32, ptr %17, align 4, !tbaa !13
  %187 = sext i32 %186 to i64
  %188 = call i32 @XString_Color(ptr noundef %16, ptr noundef @.str.34, i64 noundef %187, i64 noundef 8)
  %189 = getelementptr inbounds %struct.XString, ptr %16, i32 0, i32 0
  %190 = load ptr, ptr %189, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %190)
  %191 = call i32 @XString_Delete(ptr noundef %16, i64 noundef 6, i64 noundef 5)
  %192 = call i32 @XString_Delete(ptr noundef %16, i64 noundef 14, i64 noundef 4)
  %193 = getelementptr inbounds %struct.XString, ptr %16, i32 0, i32 0
  %194 = load ptr, ptr %193, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %194)
  br label %196

195:                                              ; preds = %167
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef @.str.35)
  call void @XString_Clear(ptr noundef %15)
  call void @XString_Clear(ptr noundef %16)
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %4, align 4
  br label %461

196:                                              ; preds = %180
  %197 = call i32 @XString_ChangeColor(ptr noundef %16, ptr noundef @.str.34)
  %198 = getelementptr inbounds %struct.XString, ptr %16, i32 0, i32 0
  %199 = load ptr, ptr %198, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %199)
  %200 = call i32 @XString_Replace(ptr noundef %16, ptr noundef @.str.36, ptr noundef @.str.37)
  %201 = getelementptr inbounds %struct.XString, ptr %16, i32 0, i32 0
  %202 = load ptr, ptr %201, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %202)
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #6
  %203 = call i32 @XString_Init(ptr noundef %18, i64 noundef 32, i8 noundef zeroext 0)
  store i32 0, ptr %12, align 4, !tbaa !13
  br label %204

204:                                              ; preds = %215, %196
  %205 = load i32, ptr %12, align 4, !tbaa !13
  %206 = sext i32 %205 to i64
  %207 = call i32 @XString_Token(ptr noundef %15, ptr noundef %18, i64 noundef %206, ptr noundef @.str.20)
  store i32 %207, ptr %12, align 4, !tbaa !13
  %208 = icmp sge i32 %207, 0
  br i1 %208, label %209, label %216

209:                                              ; preds = %204
  %210 = getelementptr inbounds %struct.XString, ptr %18, i32 0, i32 0
  %211 = load ptr, ptr %210, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef @.str.21, ptr noundef %211)
  %212 = load i32, ptr %12, align 4, !tbaa !13
  %213 = icmp ne i32 %212, 0
  br i1 %213, label %215, label %214

214:                                              ; preds = %209
  br label %216

215:                                              ; preds = %209
  br label %204, !llvm.loop !23

216:                                              ; preds = %214, %204
  call void @XString_Clear(ptr noundef %18)
  %217 = call ptr @XString_SplitStr(ptr noundef %15, ptr noundef @.str.20)
  store ptr %217, ptr %13, align 8, !tbaa !5
  %218 = load ptr, ptr %13, align 8, !tbaa !5
  %219 = icmp ne ptr %218, null
  br i1 %219, label %220, label %241

220:                                              ; preds = %216
  store i32 0, ptr %8, align 4, !tbaa !13
  br label %221

221:                                              ; preds = %236, %220
  %222 = load i32, ptr %8, align 4, !tbaa !13
  %223 = sext i32 %222 to i64
  %224 = load ptr, ptr %13, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.XArray_, ptr %224, i32 0, i32 8
  %226 = load i64, ptr %225, align 8, !tbaa !16
  %227 = icmp ult i64 %223, %226
  br i1 %227, label %228, label %239

228:                                              ; preds = %221
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %229 = load ptr, ptr %13, align 8, !tbaa !5
  %230 = load i32, ptr %8, align 4, !tbaa !13
  %231 = sext i32 %230 to i64
  %232 = call ptr @XArray_GetData(ptr noundef %229, i64 noundef %231)
  store ptr %232, ptr %19, align 8, !tbaa !5
  %233 = load ptr, ptr %19, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.XString, ptr %233, i32 0, i32 0
  %235 = load ptr, ptr %234, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef @.str.38, ptr noundef %235)
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  br label %236

236:                                              ; preds = %228
  %237 = load i32, ptr %8, align 4, !tbaa !13
  %238 = add nsw i32 %237, 1
  store i32 %238, ptr %8, align 4, !tbaa !13
  br label %221, !llvm.loop !24

239:                                              ; preds = %221
  %240 = load ptr, ptr %13, align 8, !tbaa !5
  call void @XArray_Destroy(ptr noundef %240)
  br label %242

241:                                              ; preds = %216
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef @.str.39)
  call void @XString_Clear(ptr noundef %15)
  call void @XString_Clear(ptr noundef %16)
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %4, align 4
  br label %460

242:                                              ; preds = %239
  call void @llvm.lifetime.start.p0(i64 32, ptr %20) #6
  %243 = call i32 @XString_SubStr(ptr noundef %15, ptr noundef %20, i64 noundef 6, i64 noundef 8)
  %244 = getelementptr inbounds %struct.XString, ptr %20, i32 0, i32 0
  %245 = load ptr, ptr %244, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %245)
  call void @XString_Clear(ptr noundef %20)
  call void @XString_Clear(ptr noundef %16)
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  %246 = call ptr (ptr, ...) @XString_FromFmt(ptr noundef @.str.40)
  store ptr %246, ptr %21, align 8, !tbaa !5
  %247 = load ptr, ptr %21, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.XString, ptr %247, i32 0, i32 0
  %249 = load ptr, ptr %248, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %249)
  %250 = load ptr, ptr %21, align 8, !tbaa !5
  call void @XString_Clear(ptr noundef %250)
  %251 = call ptr @XString_From(ptr noundef @.str.41, i64 noundef 11)
  store ptr %251, ptr %21, align 8, !tbaa !5
  %252 = load ptr, ptr %21, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct.XString, ptr %252, i32 0, i32 0
  %254 = load ptr, ptr %253, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %254)
  %255 = load ptr, ptr %21, align 8, !tbaa !5
  call void @XString_Clear(ptr noundef %255)
  %256 = call ptr @XString_SubNew(ptr noundef %15, i64 noundef 6, i64 noundef 8)
  store ptr %256, ptr %21, align 8, !tbaa !5
  %257 = load ptr, ptr %21, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.XString, ptr %257, i32 0, i32 0
  %259 = load ptr, ptr %258, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %259)
  %260 = load ptr, ptr %21, align 8, !tbaa !5
  call void @XString_Clear(ptr noundef %260)
  %261 = call ptr @XString_CutNew(ptr noundef %15, ptr noundef @.str.42, ptr noundef @.str.43)
  store ptr %261, ptr %21, align 8, !tbaa !5
  %262 = load ptr, ptr %21, align 8, !tbaa !5
  %263 = icmp ne ptr %262, null
  br i1 %263, label %264, label %268

264:                                              ; preds = %242
  %265 = load ptr, ptr %21, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct.XString, ptr %265, i32 0, i32 0
  %267 = load ptr, ptr %266, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %267)
  br label %268

268:                                              ; preds = %264, %242
  %269 = load ptr, ptr %21, align 8, !tbaa !5
  call void @XString_Clear(ptr noundef %269)
  call void @llvm.lifetime.start.p0(i64 32, ptr %22) #6
  %270 = call i32 @XString_CutSub(ptr noundef %15, ptr noundef %22, ptr noundef @.str.42, ptr noundef @.str.43)
  %271 = getelementptr inbounds %struct.XString, ptr %22, i32 0, i32 1
  %272 = load i64, ptr %271, align 8, !tbaa !22
  %273 = icmp ne i64 %272, 0
  br i1 %273, label %274, label %277

274:                                              ; preds = %268
  %275 = getelementptr inbounds %struct.XString, ptr %22, i32 0, i32 0
  %276 = load ptr, ptr %275, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %276)
  br label %277

277:                                              ; preds = %274, %268
  call void @XString_Clear(ptr noundef %22)
  %278 = call ptr @XString_Split(ptr noundef @.str.22, ptr noundef @.str.23)
  store ptr %278, ptr %13, align 8, !tbaa !5
  %279 = load ptr, ptr %13, align 8, !tbaa !5
  %280 = icmp ne ptr %279, null
  br i1 %280, label %281, label %302

281:                                              ; preds = %277
  store i32 0, ptr %8, align 4, !tbaa !13
  br label %282

282:                                              ; preds = %297, %281
  %283 = load i32, ptr %8, align 4, !tbaa !13
  %284 = sext i32 %283 to i64
  %285 = load ptr, ptr %13, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.XArray_, ptr %285, i32 0, i32 8
  %287 = load i64, ptr %286, align 8, !tbaa !16
  %288 = icmp ult i64 %284, %287
  br i1 %288, label %289, label %300

289:                                              ; preds = %282
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %290 = load ptr, ptr %13, align 8, !tbaa !5
  %291 = load i32, ptr %8, align 4, !tbaa !13
  %292 = sext i32 %291 to i64
  %293 = call ptr @XArray_GetData(ptr noundef %290, i64 noundef %292)
  store ptr %293, ptr %23, align 8, !tbaa !5
  %294 = load ptr, ptr %23, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.XString, ptr %294, i32 0, i32 0
  %296 = load ptr, ptr %295, align 8, !tbaa !20
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef @.str.44, ptr noundef %296)
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  br label %297

297:                                              ; preds = %289
  %298 = load i32, ptr %8, align 4, !tbaa !13
  %299 = add nsw i32 %298, 1
  store i32 %299, ptr %8, align 4, !tbaa !13
  br label %282, !llvm.loop !25

300:                                              ; preds = %282
  %301 = load ptr, ptr %13, align 8, !tbaa !5
  call void @XArray_Destroy(ptr noundef %301)
  br label %303

302:                                              ; preds = %277
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef @.str.45)
  call void @XString_Clear(ptr noundef %15)
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %4, align 4
  br label %459

303:                                              ; preds = %300
  call void @XString_Clear(ptr noundef %15)
  call void @llvm.lifetime.start.p0(i64 9, ptr %24) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %24, ptr align 1 @__const.main.pattern, i64 9, i1 false)
  call void @llvm.lifetime.start.p0(i64 27, ptr %25) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %25, ptr align 16 @__const.main.pattern2, i64 27, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %26, ptr align 1 @__const.main.matchStr1, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %304 = getelementptr inbounds [8 x i8], ptr %26, i64 0, i64 0
  %305 = call i64 @strlen(ptr noundef %304) #7
  store i64 %305, ptr %27, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 13, ptr %28) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %28, ptr align 1 @__const.main.matchStr2, i64 13, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %306 = getelementptr inbounds [13 x i8], ptr %28, i64 0, i64 0
  %307 = call i64 @strlen(ptr noundef %306) #7
  store i64 %307, ptr %29, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 18, ptr %30) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %30, ptr align 16 @__const.main.matchStr3, i64 18, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %308 = getelementptr inbounds [18 x i8], ptr %30, i64 0, i64 0
  %309 = call i64 @strlen(ptr noundef %308) #7
  store i64 %309, ptr %31, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %32, ptr align 16 @__const.main.matchStr4, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %310 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %311 = call i64 @strlen(ptr noundef %310) #7
  store i64 %311, ptr %33, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 1, ptr %34) #6
  %312 = getelementptr inbounds [8 x i8], ptr %26, i64 0, i64 0
  %313 = load i64, ptr %27, align 8, !tbaa !26
  %314 = getelementptr inbounds [9 x i8], ptr %24, i64 0, i64 0
  %315 = call zeroext i8 @xstrmatch(ptr noundef %312, i64 noundef %313, ptr noundef %314)
  store i8 %315, ptr %34, align 1, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #6
  %316 = getelementptr inbounds [13 x i8], ptr %28, i64 0, i64 0
  %317 = load i64, ptr %29, align 8, !tbaa !26
  %318 = getelementptr inbounds [9 x i8], ptr %24, i64 0, i64 0
  %319 = call zeroext i8 @xstrmatch(ptr noundef %316, i64 noundef %317, ptr noundef %318)
  store i8 %319, ptr %35, align 1, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #6
  %320 = getelementptr inbounds [18 x i8], ptr %30, i64 0, i64 0
  %321 = load i64, ptr %31, align 8, !tbaa !26
  %322 = getelementptr inbounds [9 x i8], ptr %24, i64 0, i64 0
  %323 = call zeroext i8 @xstrmatch(ptr noundef %320, i64 noundef %321, ptr noundef %322)
  store i8 %323, ptr %36, align 1, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 1, ptr %37) #6
  %324 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %325 = load i64, ptr %33, align 8, !tbaa !26
  %326 = getelementptr inbounds [27 x i8], ptr %25, i64 0, i64 0
  %327 = call zeroext i8 @xstrmatch(ptr noundef %324, i64 noundef %325, ptr noundef %326)
  store i8 %327, ptr %37, align 1, !tbaa !27
  %328 = load i8, ptr %34, align 1, !tbaa !27
  %329 = icmp ne i8 %328, 0
  br i1 %329, label %330, label %340

330:                                              ; preds = %303
  %331 = load i8, ptr %35, align 1, !tbaa !27
  %332 = icmp ne i8 %331, 0
  br i1 %332, label %333, label %340

333:                                              ; preds = %330
  %334 = load i8, ptr %36, align 1, !tbaa !27
  %335 = zext i8 %334 to i32
  %336 = icmp ne i32 %335, 0
  br i1 %336, label %340, label %337

337:                                              ; preds = %333
  %338 = load i8, ptr %37, align 1, !tbaa !27
  %339 = icmp ne i8 %338, 0
  br i1 %339, label %349, label %340

340:                                              ; preds = %337, %333, %330, %303
  %341 = load i8, ptr %34, align 1, !tbaa !27
  %342 = zext i8 %341 to i32
  %343 = load i8, ptr %35, align 1, !tbaa !27
  %344 = zext i8 %343 to i32
  %345 = load i8, ptr %36, align 1, !tbaa !27
  %346 = zext i8 %345 to i32
  %347 = load i8, ptr %37, align 1, !tbaa !27
  %348 = zext i8 %347 to i32
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef @.str.46, i32 noundef %342, i32 noundef %344, i32 noundef %346, i32 noundef %348)
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %4, align 4
  br label %458

349:                                              ; preds = %337
  %350 = getelementptr inbounds [8 x i8], ptr %26, i64 0, i64 0
  %351 = getelementptr inbounds [9 x i8], ptr %24, i64 0, i64 0
  %352 = load i8, ptr %34, align 1, !tbaa !27
  %353 = zext i8 %352 to i32
  %354 = icmp ne i32 %353, 0
  %355 = zext i1 %354 to i64
  %356 = select i1 %354, ptr @.str.48, ptr @.str.49
  %357 = call i32 (ptr, ...) @printf(ptr noundef @.str.47, ptr noundef %350, ptr noundef %351, ptr noundef %356)
  %358 = getelementptr inbounds [13 x i8], ptr %28, i64 0, i64 0
  %359 = getelementptr inbounds [9 x i8], ptr %24, i64 0, i64 0
  %360 = load i8, ptr %35, align 1, !tbaa !27
  %361 = zext i8 %360 to i32
  %362 = icmp ne i32 %361, 0
  %363 = zext i1 %362 to i64
  %364 = select i1 %362, ptr @.str.48, ptr @.str.49
  %365 = call i32 (ptr, ...) @printf(ptr noundef @.str.47, ptr noundef %358, ptr noundef %359, ptr noundef %364)
  %366 = getelementptr inbounds [18 x i8], ptr %30, i64 0, i64 0
  %367 = getelementptr inbounds [9 x i8], ptr %24, i64 0, i64 0
  %368 = load i8, ptr %36, align 1, !tbaa !27
  %369 = zext i8 %368 to i32
  %370 = icmp ne i32 %369, 0
  %371 = zext i1 %370 to i64
  %372 = select i1 %370, ptr @.str.48, ptr @.str.49
  %373 = call i32 (ptr, ...) @printf(ptr noundef @.str.47, ptr noundef %366, ptr noundef %367, ptr noundef %372)
  %374 = getelementptr inbounds [32 x i8], ptr %32, i64 0, i64 0
  %375 = getelementptr inbounds [27 x i8], ptr %25, i64 0, i64 0
  %376 = load i8, ptr %37, align 1, !tbaa !27
  %377 = zext i8 %376 to i32
  %378 = icmp ne i32 %377, 0
  %379 = zext i1 %378 to i64
  %380 = select i1 %378, ptr @.str.48, ptr @.str.49
  %381 = call i32 (ptr, ...) @printf(ptr noundef @.str.47, ptr noundef %374, ptr noundef %375, ptr noundef %380)
  call void @llvm.lifetime.start.p0(i64 41, ptr %38) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %38, ptr align 16 @__const.main.multiPattern, i64 41, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %39, ptr align 1 @__const.main.multiMatchStr1, i64 8, i1 false)
  call void @llvm.lifetime.start.p0(i64 9, ptr %40) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %40, ptr align 1 @__const.main.multiMatchStr1a, i64 9, i1 false)
  call void @llvm.lifetime.start.p0(i64 20, ptr %41) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %41, ptr align 16 @__const.main.multiMatchStr2, i64 20, i1 false)
  call void @llvm.lifetime.start.p0(i64 20, ptr %42) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %42, ptr align 16 @__const.main.multiMatchStr3, i64 20, i1 false)
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #6
  %382 = getelementptr inbounds [8 x i8], ptr %39, i64 0, i64 0
  %383 = getelementptr inbounds [8 x i8], ptr %39, i64 0, i64 0
  %384 = call i64 @strlen(ptr noundef %383) #7
  %385 = getelementptr inbounds [41 x i8], ptr %38, i64 0, i64 0
  %386 = call zeroext i8 @xstrmatchm(ptr noundef %382, i64 noundef %384, ptr noundef %385, ptr noundef @.str.50)
  store i8 %386, ptr %43, align 1, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 1, ptr %44) #6
  %387 = getelementptr inbounds [9 x i8], ptr %40, i64 0, i64 0
  %388 = getelementptr inbounds [9 x i8], ptr %40, i64 0, i64 0
  %389 = call i64 @strlen(ptr noundef %388) #7
  %390 = getelementptr inbounds [41 x i8], ptr %38, i64 0, i64 0
  %391 = call zeroext i8 @xstrmatchm(ptr noundef %387, i64 noundef %389, ptr noundef %390, ptr noundef @.str.50)
  store i8 %391, ptr %44, align 1, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #6
  %392 = getelementptr inbounds [20 x i8], ptr %41, i64 0, i64 0
  %393 = getelementptr inbounds [20 x i8], ptr %41, i64 0, i64 0
  %394 = call i64 @strlen(ptr noundef %393) #7
  %395 = getelementptr inbounds [41 x i8], ptr %38, i64 0, i64 0
  %396 = call zeroext i8 @xstrmatchm(ptr noundef %392, i64 noundef %394, ptr noundef %395, ptr noundef @.str.50)
  store i8 %396, ptr %45, align 1, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 1, ptr %46) #6
  %397 = getelementptr inbounds [20 x i8], ptr %42, i64 0, i64 0
  %398 = getelementptr inbounds [20 x i8], ptr %42, i64 0, i64 0
  %399 = call i64 @strlen(ptr noundef %398) #7
  %400 = getelementptr inbounds [41 x i8], ptr %38, i64 0, i64 0
  %401 = call zeroext i8 @xstrmatchm(ptr noundef %397, i64 noundef %399, ptr noundef %400, ptr noundef @.str.50)
  store i8 %401, ptr %46, align 1, !tbaa !27
  %402 = load i8, ptr %43, align 1, !tbaa !27
  %403 = icmp ne i8 %402, 0
  br i1 %403, label %404, label %415

404:                                              ; preds = %349
  %405 = load i8, ptr %44, align 1, !tbaa !27
  %406 = zext i8 %405 to i32
  %407 = icmp ne i32 %406, 0
  br i1 %407, label %415, label %408

408:                                              ; preds = %404
  %409 = load i8, ptr %45, align 1, !tbaa !27
  %410 = icmp ne i8 %409, 0
  br i1 %410, label %411, label %415

411:                                              ; preds = %408
  %412 = load i8, ptr %46, align 1, !tbaa !27
  %413 = zext i8 %412 to i32
  %414 = icmp ne i32 %413, 0
  br i1 %414, label %415, label %424

415:                                              ; preds = %411, %408, %404, %349
  %416 = load i8, ptr %43, align 1, !tbaa !27
  %417 = zext i8 %416 to i32
  %418 = load i8, ptr %44, align 1, !tbaa !27
  %419 = zext i8 %418 to i32
  %420 = load i8, ptr %45, align 1, !tbaa !27
  %421 = zext i8 %420 to i32
  %422 = load i8, ptr %46, align 1, !tbaa !27
  %423 = zext i8 %422 to i32
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef @.str.51, i32 noundef %417, i32 noundef %419, i32 noundef %421, i32 noundef %423)
  store i32 -1, ptr %1, align 4
  store i32 1, ptr %4, align 4
  br label %457

424:                                              ; preds = %411
  %425 = getelementptr inbounds [8 x i8], ptr %39, i64 0, i64 0
  %426 = getelementptr inbounds [41 x i8], ptr %38, i64 0, i64 0
  %427 = load i8, ptr %43, align 1, !tbaa !27
  %428 = zext i8 %427 to i32
  %429 = icmp ne i32 %428, 0
  %430 = zext i1 %429 to i64
  %431 = select i1 %429, ptr @.str.48, ptr @.str.49
  %432 = call i32 (ptr, ...) @printf(ptr noundef @.str.47, ptr noundef %425, ptr noundef %426, ptr noundef %431)
  %433 = getelementptr inbounds [9 x i8], ptr %40, i64 0, i64 0
  %434 = getelementptr inbounds [41 x i8], ptr %38, i64 0, i64 0
  %435 = load i8, ptr %44, align 1, !tbaa !27
  %436 = zext i8 %435 to i32
  %437 = icmp ne i32 %436, 0
  %438 = zext i1 %437 to i64
  %439 = select i1 %437, ptr @.str.48, ptr @.str.49
  %440 = call i32 (ptr, ...) @printf(ptr noundef @.str.47, ptr noundef %433, ptr noundef %434, ptr noundef %439)
  %441 = getelementptr inbounds [20 x i8], ptr %41, i64 0, i64 0
  %442 = getelementptr inbounds [41 x i8], ptr %38, i64 0, i64 0
  %443 = load i8, ptr %45, align 1, !tbaa !27
  %444 = zext i8 %443 to i32
  %445 = icmp ne i32 %444, 0
  %446 = zext i1 %445 to i64
  %447 = select i1 %445, ptr @.str.48, ptr @.str.49
  %448 = call i32 (ptr, ...) @printf(ptr noundef @.str.47, ptr noundef %441, ptr noundef %442, ptr noundef %447)
  %449 = getelementptr inbounds [20 x i8], ptr %42, i64 0, i64 0
  %450 = getelementptr inbounds [41 x i8], ptr %38, i64 0, i64 0
  %451 = load i8, ptr %46, align 1, !tbaa !27
  %452 = zext i8 %451 to i32
  %453 = icmp ne i32 %452, 0
  %454 = zext i1 %453 to i64
  %455 = select i1 %453, ptr @.str.48, ptr @.str.49
  %456 = call i32 (ptr, ...) @printf(ptr noundef @.str.47, ptr noundef %449, ptr noundef %450, ptr noundef %455)
  store i32 0, ptr %1, align 4
  store i32 1, ptr %4, align 4
  br label %457

457:                                              ; preds = %424, %415
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #6
  call void @llvm.lifetime.end.p0(i64 20, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 20, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 9, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 41, ptr %38) #6
  br label %458

458:                                              ; preds = %457, %340
  call void @llvm.lifetime.end.p0(i64 1, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 18, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 13, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 27, ptr %25) #6
  call void @llvm.lifetime.end.p0(i64 9, ptr %24) #6
  br label %459

459:                                              ; preds = %458, %302
  call void @llvm.lifetime.end.p0(i64 32, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %20) #6
  br label %460

460:                                              ; preds = %459, %241
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #6
  br label %461

461:                                              ; preds = %460, %195
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %16) #6
  br label %462

462:                                              ; preds = %461, %161
  call void @llvm.lifetime.end.p0(i64 32, ptr %15) #6
  br label %463

463:                                              ; preds = %462, %128
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 128, ptr %5) #6
  br label %464

464:                                              ; preds = %463, %55
  call void @llvm.lifetime.end.p0(i64 8, ptr %2) #6
  %465 = load i32, ptr %1, align 4
  ret i32 %465
}

declare void @XLog_Init(ptr noundef, i16 noundef zeroext, i8 noundef zeroext) #1

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

declare ptr @xstracpy(ptr noundef, ...) #1

declare void @XLog_ConfigGet(ptr noundef) #1

declare void @XLog_ConfigSet(ptr noundef) #1

declare void @XLog_Display(i32 noundef, i8 noundef zeroext, ptr noundef, ...) #1

; Function Attrs: nounwind
declare void @free(ptr noundef) #3

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

declare ptr @xstrrep(ptr noundef, ptr noundef, ptr noundef) #1

declare i64 @xstrncase(ptr noundef, i64 noundef, i32 noundef, ptr noundef) #1

declare i64 @xstrncatf(ptr noundef, i64 noundef, ptr noundef, ...) #1

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #4

declare i64 @xstrnclr(ptr noundef, i64 noundef, ptr noundef, ptr noundef, ...) #1

declare i32 @xstrntok(ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef) #1

declare ptr @xstrsplit(ptr noundef, ptr noundef) #1

declare ptr @XArray_GetData(ptr noundef, i64 noundef) #1

declare void @XArray_Destroy(ptr noundef) #1

declare i32 @XString_Init(ptr noundef, i64 noundef, i8 noundef zeroext) #1

declare i32 @XString_Append(ptr noundef, ptr noundef, ...) #1

declare i32 @XString_Remove(ptr noundef, i64 noundef, i64 noundef) #1

declare i32 @XString_Insert(ptr noundef, i64 noundef, ptr noundef, i64 noundef) #1

declare i32 @XString_Add(ptr noundef, ptr noundef, i64 noundef) #1

declare i32 @XString_Delete(ptr noundef, i64 noundef, i64 noundef) #1

declare i32 @XString_InsertFmt(ptr noundef, i64 noundef, ptr noundef, ...) #1

declare i32 @XString_Advance(ptr noundef, i64 noundef) #1

declare void @XString_Clear(ptr noundef) #1

declare i32 @XString_Copy(ptr noundef, ptr noundef) #1

declare i32 @XString_ChangeCase(ptr noundef, i32 noundef) #1

declare i32 @XString_Case(ptr noundef, i32 noundef, i64 noundef, i64 noundef) #1

declare i32 @XString_Search(ptr noundef, i64 noundef, ptr noundef) #1

declare i32 @XString_Color(ptr noundef, ptr noundef, i64 noundef, i64 noundef) #1

declare i32 @XString_ChangeColor(ptr noundef, ptr noundef) #1

declare i32 @XString_Replace(ptr noundef, ptr noundef, ptr noundef) #1

declare i32 @XString_Token(ptr noundef, ptr noundef, i64 noundef, ptr noundef) #1

declare ptr @XString_SplitStr(ptr noundef, ptr noundef) #1

declare i32 @XString_SubStr(ptr noundef, ptr noundef, i64 noundef, i64 noundef) #1

declare ptr @XString_FromFmt(ptr noundef, ...) #1

declare ptr @XString_From(ptr noundef, i64 noundef) #1

declare ptr @XString_SubNew(ptr noundef, i64 noundef, i64 noundef) #1

declare ptr @XString_CutNew(ptr noundef, ptr noundef, ptr noundef) #1

declare i32 @XString_CutSub(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare ptr @XString_Split(ptr noundef, ptr noundef) #1

; 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) #5

declare zeroext i8 @xstrmatch(ptr noundef, i64 noundef, ptr noundef) #1

declare i32 @printf(ptr noundef, ...) #1

declare zeroext i8 @xstrmatchm(ptr noundef, i64 noundef, ptr noundef, ptr noundef) #1

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

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

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


; 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.XLogConfig = type { i32, i32, ptr, ptr, i8, i8, i8, i8, i8, i8, i8, i8, i16, [256 x i8], [2048 x i8], [256 x i8] }
%struct.XString = type { ptr, i64, i64, i16, i8, i8 }

@.str = external hidden unnamed_addr constant [31 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [21 x i8], align 1
@__const.main.pattern = external hidden unnamed_addr constant [9 x i8], align 1
@__const.main.pattern2 = external hidden unnamed_addr constant [27 x i8], align 16
@__const.main.matchStr1 = external hidden unnamed_addr constant [8 x i8], align 1
@__const.main.matchStr2 = external hidden unnamed_addr constant [13 x i8], align 1
@__const.main.matchStr3 = external hidden unnamed_addr constant [18 x i8], align 16
@__const.main.matchStr4 = external hidden unnamed_addr constant [32 x i8], align 16
@.str.46 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [9 x i8], align 1
@__const.main.multiPattern = external hidden unnamed_addr constant [41 x i8], align 16
@__const.main.multiMatchStr1 = external hidden unnamed_addr constant [8 x i8], align 1
@__const.main.multiMatchStr1a = external hidden unnamed_addr constant [9 x i8], align 1
@__const.main.multiMatchStr2 = external hidden unnamed_addr constant [20 x i8], align 16
@__const.main.multiMatchStr3 = external hidden unnamed_addr constant [20 x i8], align 16
@.str.50 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.51 = external hidden unnamed_addr constant [59 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 -1, 1) i32 @main() local_unnamed_addr #0 {
  %1 = alloca %struct.XLogConfig, align 8
  %2 = alloca [128 x i8], align 16
  %3 = alloca [128 x i8], align 16
  %4 = alloca [128 x i8], align 16
  %5 = alloca [32 x i8], align 16
  %6 = alloca %struct.XString, align 8
  %7 = alloca %struct.XString, align 8
  %8 = alloca %struct.XString, align 8
  %9 = alloca %struct.XString, align 8
  %10 = alloca %struct.XString, align 8
  %11 = alloca [9 x i8], align 1
  %12 = alloca [27 x i8], align 16
  %13 = alloca [8 x i8], align 8
  %14 = alloca [13 x i8], align 1
  %15 = alloca [18 x i8], align 16
  %16 = alloca [32 x i8], align 16
  %17 = alloca [41 x i8], align 16
  %18 = alloca [8 x i8], align 8
  %19 = alloca [9 x i8], align 1
  %20 = alloca [20 x i8], align 16
  %21 = alloca [20 x i8], align 16
  tail call void @XLog_Init(ptr noundef null, i16 noundef zeroext 203, i8 noundef zeroext 0) #7
  %22 = tail call ptr (ptr, ...) @xstracpy(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, i32 noundef 1, ptr noundef nonnull @.str.3, double noundef 3.000000e+00) #7
  %.not = icmp eq ptr %22, null
  br i1 %.not, label %35, label %23

23:                                               ; preds = %0
  call void @llvm.lifetime.start.p0(i64 2600, ptr nonnull %1) #7
  call void @XLog_ConfigGet(ptr noundef nonnull %1) #7
  %24 = getelementptr inbounds i8, ptr %1, i64 27
  store i8 1, ptr %24, align 1, !tbaa !5
  call void @XLog_ConfigSet(ptr noundef nonnull %1) #7
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef nonnull @.str.4, ptr noundef nonnull %22) #7
  call void @free(ptr noundef nonnull %22) #7
  store i8 0, ptr %24, align 1, !tbaa !5
  call void @XLog_ConfigSet(ptr noundef nonnull %1) #7
  call void @llvm.lifetime.end.p0(i64 2600, ptr nonnull %1) #7
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %2) #7
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %3) #7
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.8) #7
  %25 = call ptr @xstrrep(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.10) #7
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef nonnull @.str.11, ptr noundef %25) #7
  %26 = call i64 @xstrncase(ptr noundef nonnull %2, i64 noundef 128, i32 noundef 0, ptr noundef %25) #7
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef nonnull @.str.12, ptr noundef nonnull %2) #7
  call void @free(ptr noundef %25) #7
  %27 = call ptr @xstrrep(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.14) #7
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef nonnull @.str.15, ptr noundef %27) #7
  %28 = call i64 @xstrncase(ptr noundef nonnull %3, i64 noundef 128, i32 noundef 1, ptr noundef %27) #7
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef nonnull @.str.16, ptr noundef nonnull %3) #7
  call void @free(ptr noundef %27) #7
  %29 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %2) #8
  %30 = shl i64 %29, 32
  %sext = sub i64 549755813888, %30
  %31 = ashr exact i64 %sext, 32
  %32 = call i64 (ptr, i64, ptr, ...) @xstrncatf(ptr noundef nonnull %2, i64 noundef %31, ptr noundef nonnull @.str.17) #7
  %33 = trunc i64 %32 to i32
  %34 = icmp sgt i32 %33, 0
  br i1 %34, label %36, label %39

35:                                               ; preds = %0
  tail call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef nonnull @.str.5) #7
  br label %195

36:                                               ; preds = %23
  %37 = and i64 %32, 2147483647
  %38 = call i64 (ptr, i64, ptr, ...) @xstrncatf(ptr noundef nonnull %2, i64 noundef %37, ptr noundef nonnull %3) #7
  br label %39

39:                                               ; preds = %36, %23
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %4) #7
  %40 = call i64 (ptr, i64, ptr, ptr, ...) @xstrnclr(ptr noundef nonnull %4, i64 noundef 128, ptr noundef nonnull @.str.18, ptr noundef nonnull %2) #7
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef nonnull @.str.19, ptr noundef nonnull %4) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #7
  br label %41

41:                                               ; preds = %45, %39
  %.096 = phi i32 [ 0, %39 ], [ %43, %45 ]
  %42 = zext nneg i32 %.096 to i64
  %43 = call i32 @xstrntok(ptr noundef nonnull %5, i64 noundef 32, ptr noundef nonnull %2, i64 noundef %42, ptr noundef nonnull @.str.20) #7
  %44 = icmp sgt i32 %43, -1
  br i1 %44, label %45, label %46

45:                                               ; preds = %41
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef nonnull @.str.21, ptr noundef nonnull %5) #7
  %.not113 = icmp eq i32 %43, 0
  br i1 %.not113, label %46, label %41, !llvm.loop !12

46:                                               ; preds = %45, %41
  %47 = call ptr @xstrsplit(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.23) #7
  %.not114 = icmp eq ptr %47, null
  br i1 %.not114, label %75, label %.preheader138

.preheader138:                                    ; preds = %46
  %48 = getelementptr inbounds i8, ptr %47, i64 48
  %49 = load i64, ptr %48, align 8, !tbaa !14
  %.not146 = icmp eq i64 %49, 0
  br i1 %.not146, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader138, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %.preheader138 ]
  %50 = call ptr @XArray_GetData(ptr noundef nonnull %47, i64 noundef %indvars.iv) #7
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef nonnull @.str.24, ptr noundef %50) #7
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %51 = load i64, ptr %48, align 8, !tbaa !14
  %52 = icmp ugt i64 %51, %indvars.iv.next
  br i1 %52, label %.lr.ph, label %._crit_edge, !llvm.loop !17

._crit_edge:                                      ; preds = %.lr.ph, %.preheader138
  call void @XArray_Destroy(ptr noundef nonnull %47) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %6) #7
  %53 = call i32 @XString_Init(ptr noundef nonnull %6, i64 noundef 1, i8 noundef zeroext 1) #7
  %54 = call i32 (ptr, ptr, ...) @XString_Append(ptr noundef nonnull %6, ptr noundef nonnull @.str.26) #7
  %55 = call i32 (ptr, ptr, ...) @XString_Append(ptr noundef nonnull %6, ptr noundef nonnull @.str.27) #7
  %56 = call i32 (ptr, ptr, ...) @XString_Append(ptr noundef nonnull %6, ptr noundef nonnull @.str.28) #7
  %57 = load ptr, ptr %6, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %57) #7
  %58 = call i32 @XString_Remove(ptr noundef nonnull %6, i64 noundef 6, i64 noundef 5) #7
  %59 = load ptr, ptr %6, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %59) #7
  %60 = call i32 @XString_Insert(ptr noundef nonnull %6, i64 noundef 6, ptr noundef nonnull @.str.27, i64 noundef 5) #7
  %61 = load ptr, ptr %6, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %61) #7
  %62 = call i32 (ptr, ptr, ...) @XString_Append(ptr noundef nonnull %6, ptr noundef nonnull @.str.29) #7
  %63 = call i32 @XString_Add(ptr noundef nonnull %6, ptr noundef nonnull @.str.30, i64 noundef 3) #7
  %64 = load ptr, ptr %6, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %64) #7
  %65 = call i32 @XString_Delete(ptr noundef nonnull %6, i64 noundef 36, i64 noundef 3) #7
  %66 = load ptr, ptr %6, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %66) #7
  %67 = call i32 (ptr, i64, ptr, ...) @XString_InsertFmt(ptr noundef nonnull %6, i64 noundef 36, ptr noundef nonnull @.str.31) #7
  %68 = load ptr, ptr %6, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %68) #7
  %69 = call i32 @XString_Advance(ptr noundef nonnull %6, i64 noundef 40) #7
  %70 = load ptr, ptr %6, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %70) #7
  %71 = load ptr, ptr %6, align 8, !tbaa !18
  %72 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %71) #8
  %73 = getelementptr inbounds i8, ptr %6, i64 8
  %74 = load i64, ptr %73, align 8, !tbaa !20
  %.not115 = icmp eq i64 %72, %74
  br i1 %.not115, label %77, label %76

75:                                               ; preds = %46
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef nonnull @.str.25) #7
  br label %194

76:                                               ; preds = %._crit_edge
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef nonnull @.str.32, i64 noundef %72, i64 noundef %74) #7
  call void @XString_Clear(ptr noundef nonnull %6) #7
  br label %193

77:                                               ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %7) #7
  %78 = call i32 @XString_Copy(ptr noundef nonnull %7, ptr noundef nonnull %6) #7
  %79 = load ptr, ptr %7, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %79) #7
  %80 = call i32 @XString_ChangeCase(ptr noundef nonnull %7, i32 noundef 1) #7
  %81 = load ptr, ptr %7, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %81) #7
  %82 = call i32 @XString_Case(ptr noundef nonnull %7, i32 noundef 0, i64 noundef 6, i64 noundef 8) #7
  %83 = load ptr, ptr %7, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %83) #7
  %84 = call i32 @XString_Search(ptr noundef nonnull %7, i64 noundef 0, ptr noundef nonnull @.str.33) #7
  %85 = icmp sgt i32 %84, -1
  br i1 %85, label %86, label %100

86:                                               ; preds = %77
  %87 = zext nneg i32 %84 to i64
  %88 = call i32 @XString_Case(ptr noundef nonnull %7, i32 noundef 1, i64 noundef %87, i64 noundef 8) #7
  %89 = load ptr, ptr %7, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %89) #7
  %90 = call i32 @XString_Color(ptr noundef nonnull %7, ptr noundef nonnull @.str.34, i64 noundef %87, i64 noundef 8) #7
  %91 = load ptr, ptr %7, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %91) #7
  %92 = call i32 @XString_Delete(ptr noundef nonnull %7, i64 noundef 6, i64 noundef 5) #7
  %93 = call i32 @XString_Delete(ptr noundef nonnull %7, i64 noundef 14, i64 noundef 4) #7
  %94 = load ptr, ptr %7, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %94) #7
  %95 = call i32 @XString_ChangeColor(ptr noundef nonnull %7, ptr noundef nonnull @.str.34) #7
  %96 = load ptr, ptr %7, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %96) #7
  %97 = call i32 @XString_Replace(ptr noundef nonnull %7, ptr noundef nonnull @.str.36, ptr noundef nonnull @.str.37) #7
  %98 = load ptr, ptr %7, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %98) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #7
  %99 = call i32 @XString_Init(ptr noundef nonnull %8, i64 noundef 32, i8 noundef zeroext 0) #7
  br label %101

100:                                              ; preds = %77
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef nonnull @.str.35) #7
  call void @XString_Clear(ptr noundef nonnull %6) #7
  call void @XString_Clear(ptr noundef nonnull %7) #7
  br label %192

101:                                              ; preds = %105, %86
  %.197 = phi i32 [ 0, %86 ], [ %103, %105 ]
  %102 = zext nneg i32 %.197 to i64
  %103 = call i32 @XString_Token(ptr noundef nonnull %6, ptr noundef nonnull %8, i64 noundef %102, ptr noundef nonnull @.str.20) #7
  %104 = icmp sgt i32 %103, -1
  br i1 %104, label %105, label %107

105:                                              ; preds = %101
  %106 = load ptr, ptr %8, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef nonnull @.str.21, ptr noundef %106) #7
  %.not116 = icmp eq i32 %103, 0
  br i1 %.not116, label %107, label %101, !llvm.loop !21

107:                                              ; preds = %105, %101
  call void @XString_Clear(ptr noundef nonnull %8) #7
  %108 = call ptr @XString_SplitStr(ptr noundef nonnull %6, ptr noundef nonnull @.str.20) #7
  %.not117 = icmp eq ptr %108, null
  br i1 %.not117, label %124, label %.preheader137

.preheader137:                                    ; preds = %107
  %109 = getelementptr inbounds i8, ptr %108, i64 48
  %110 = load i64, ptr %109, align 8, !tbaa !14
  %.not147 = icmp eq i64 %110, 0
  br i1 %.not147, label %._crit_edge142, label %.lr.ph141

.lr.ph141:                                        ; preds = %.preheader137, %.lr.ph141
  %indvars.iv150 = phi i64 [ %indvars.iv.next151, %.lr.ph141 ], [ 0, %.preheader137 ]
  %111 = call ptr @XArray_GetData(ptr noundef nonnull %108, i64 noundef %indvars.iv150) #7
  %112 = load ptr, ptr %111, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef nonnull @.str.38, ptr noundef %112) #7
  %indvars.iv.next151 = add nuw nsw i64 %indvars.iv150, 1
  %113 = load i64, ptr %109, align 8, !tbaa !14
  %114 = icmp ugt i64 %113, %indvars.iv.next151
  br i1 %114, label %.lr.ph141, label %._crit_edge142, !llvm.loop !22

._crit_edge142:                                   ; preds = %.lr.ph141, %.preheader137
  call void @XArray_Destroy(ptr noundef nonnull %108) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #7
  %115 = call i32 @XString_SubStr(ptr noundef nonnull %6, ptr noundef nonnull %9, i64 noundef 6, i64 noundef 8) #7
  %116 = load ptr, ptr %9, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %116) #7
  call void @XString_Clear(ptr noundef nonnull %9) #7
  call void @XString_Clear(ptr noundef nonnull %7) #7
  %117 = call ptr (ptr, ...) @XString_FromFmt(ptr noundef nonnull @.str.40) #7
  %118 = load ptr, ptr %117, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %118) #7
  call void @XString_Clear(ptr noundef nonnull %117) #7
  %119 = call ptr @XString_From(ptr noundef nonnull @.str.41, i64 noundef 11) #7
  %120 = load ptr, ptr %119, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %120) #7
  call void @XString_Clear(ptr noundef nonnull %119) #7
  %121 = call ptr @XString_SubNew(ptr noundef nonnull %6, i64 noundef 6, i64 noundef 8) #7
  %122 = load ptr, ptr %121, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %122) #7
  call void @XString_Clear(ptr noundef nonnull %121) #7
  %123 = call ptr @XString_CutNew(ptr noundef nonnull %6, ptr noundef nonnull @.str.42, ptr noundef nonnull @.str.43) #7
  %.not118 = icmp eq ptr %123, null
  br i1 %.not118, label %127, label %125

124:                                              ; preds = %107
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef nonnull @.str.39) #7
  call void @XString_Clear(ptr noundef nonnull %6) #7
  call void @XString_Clear(ptr noundef nonnull %7) #7
  br label %191

125:                                              ; preds = %._crit_edge142
  %126 = load ptr, ptr %123, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %126) #7
  br label %127

127:                                              ; preds = %125, %._crit_edge142
  call void @XString_Clear(ptr noundef %123) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #7
  %128 = call i32 @XString_CutSub(ptr noundef nonnull %6, ptr noundef nonnull %10, ptr noundef nonnull @.str.42, ptr noundef nonnull @.str.43) #7
  %129 = getelementptr inbounds i8, ptr %10, i64 8
  %130 = load i64, ptr %129, align 8, !tbaa !20
  %.not119 = icmp eq i64 %130, 0
  br i1 %.not119, label %133, label %131

131:                                              ; preds = %127
  %132 = load ptr, ptr %10, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef %132) #7
  br label %133

133:                                              ; preds = %131, %127
  call void @XString_Clear(ptr noundef nonnull %10) #7
  %134 = call ptr @XString_Split(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.23) #7
  %.not120 = icmp eq ptr %134, null
  br i1 %.not120, label %154, label %.preheader

.preheader:                                       ; preds = %133
  %135 = getelementptr inbounds i8, ptr %134, i64 48
  %136 = load i64, ptr %135, align 8, !tbaa !14
  %.not148 = icmp eq i64 %136, 0
  br i1 %.not148, label %._crit_edge145, label %.lr.ph144

.lr.ph144:                                        ; preds = %.preheader, %.lr.ph144
  %indvars.iv153 = phi i64 [ %indvars.iv.next154, %.lr.ph144 ], [ 0, %.preheader ]
  %137 = call ptr @XArray_GetData(ptr noundef nonnull %134, i64 noundef %indvars.iv153) #7
  %138 = load ptr, ptr %137, align 8, !tbaa !18
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 1, i8 noundef zeroext 1, ptr noundef nonnull @.str.44, ptr noundef %138) #7
  %indvars.iv.next154 = add nuw nsw i64 %indvars.iv153, 1
  %139 = load i64, ptr %135, align 8, !tbaa !14
  %140 = icmp ugt i64 %139, %indvars.iv.next154
  br i1 %140, label %.lr.ph144, label %._crit_edge145, !llvm.loop !23

._crit_edge145:                                   ; preds = %.lr.ph144, %.preheader
  call void @XArray_Destroy(ptr noundef nonnull %134) #7
  call void @XString_Clear(ptr noundef nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 9, ptr nonnull %11) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(9) %11, ptr noundef nonnull align 1 dereferenceable(9) @__const.main.pattern, i64 9, i1 false)
  call void @llvm.lifetime.start.p0(i64 27, ptr nonnull %12) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(27) %12, ptr noundef nonnull align 16 dereferenceable(27) @__const.main.pattern2, i64 27, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  %141 = load i64, ptr @__const.main.matchStr1, align 1
  store i64 %141, ptr %13, align 8
  %142 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %13) #8
  call void @llvm.lifetime.start.p0(i64 13, ptr nonnull %14) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(13) %14, ptr noundef nonnull align 1 dereferenceable(13) @__const.main.matchStr2, i64 13, i1 false)
  %143 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %14) #8
  call void @llvm.lifetime.start.p0(i64 18, ptr nonnull %15) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(18) %15, ptr noundef nonnull align 16 dereferenceable(18) @__const.main.matchStr3, i64 18, i1 false)
  %144 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %15) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %16, ptr noundef nonnull align 16 dereferenceable(32) @__const.main.matchStr4, i64 32, i1 false)
  %145 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %16) #8
  %146 = call zeroext i8 @xstrmatch(ptr noundef nonnull %13, i64 noundef %142, ptr noundef nonnull %11) #7
  %147 = call zeroext i8 @xstrmatch(ptr noundef nonnull %14, i64 noundef %143, ptr noundef nonnull %11) #7
  %148 = call zeroext i8 @xstrmatch(ptr noundef nonnull %15, i64 noundef %144, ptr noundef nonnull %11) #7
  %149 = call zeroext i8 @xstrmatch(ptr noundef nonnull %16, i64 noundef %145, ptr noundef nonnull %12) #7
  %150 = icmp ne i8 %146, 0
  %151 = icmp ne i8 %147, 0
  %or.cond.not123.not128 = select i1 %150, i1 %151, i1 false
  %152 = icmp eq i8 %148, 0
  %or.cond4.not125 = select i1 %or.cond.not123.not128, i1 %152, i1 false
  %153 = icmp ne i8 %149, 0
  %or.cond6 = select i1 %or.cond4.not125, i1 %153, i1 false
  br i1 %or.cond6, label %160, label %155

154:                                              ; preds = %133
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef nonnull @.str.45) #7
  call void @XString_Clear(ptr noundef nonnull %6) #7
  br label %190

155:                                              ; preds = %._crit_edge145
  %156 = zext i8 %148 to i32
  %157 = zext i8 %146 to i32
  %158 = zext i8 %147 to i32
  %159 = zext i8 %149 to i32
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef nonnull @.str.46, i32 noundef %157, i32 noundef %158, i32 noundef %156, i32 noundef %159) #7
  br label %189

160:                                              ; preds = %._crit_edge145
  %161 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.47, ptr noundef nonnull %13, ptr noundef nonnull %11, ptr noundef nonnull @.str.48)
  %162 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.47, ptr noundef nonnull %14, ptr noundef nonnull %11, ptr noundef nonnull @.str.48)
  %163 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.47, ptr noundef nonnull %15, ptr noundef nonnull %11, ptr noundef nonnull @.str.49)
  %164 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.47, ptr noundef nonnull %16, ptr noundef nonnull %12, ptr noundef nonnull @.str.48)
  call void @llvm.lifetime.start.p0(i64 41, ptr nonnull %17) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(41) %17, ptr noundef nonnull align 16 dereferenceable(41) @__const.main.multiPattern, i64 41, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #7
  %165 = load i64, ptr @__const.main.multiMatchStr1, align 1
  store i64 %165, ptr %18, align 8
  call void @llvm.lifetime.start.p0(i64 9, ptr nonnull %19) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(9) %19, ptr noundef nonnull align 1 dereferenceable(9) @__const.main.multiMatchStr1a, i64 9, i1 false)
  call void @llvm.lifetime.start.p0(i64 20, ptr nonnull %20) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(20) %20, ptr noundef nonnull align 16 dereferenceable(20) @__const.main.multiMatchStr2, i64 20, i1 false)
  call void @llvm.lifetime.start.p0(i64 20, ptr nonnull %21) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 16 dereferenceable(20) %21, ptr noundef nonnull align 16 dereferenceable(20) @__const.main.multiMatchStr3, i64 20, i1 false)
  %166 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %18) #8
  %167 = call zeroext i8 @xstrmatchm(ptr noundef nonnull %18, i64 noundef %166, ptr noundef nonnull %17, ptr noundef nonnull @.str.50) #7
  %168 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %19) #8
  %169 = call zeroext i8 @xstrmatchm(ptr noundef nonnull %19, i64 noundef %168, ptr noundef nonnull %17, ptr noundef nonnull @.str.50) #7
  %170 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %20) #8
  %171 = call zeroext i8 @xstrmatchm(ptr noundef nonnull %20, i64 noundef %170, ptr noundef nonnull %17, ptr noundef nonnull @.str.50) #7
  %172 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %21) #8
  %173 = call zeroext i8 @xstrmatchm(ptr noundef nonnull %21, i64 noundef %172, ptr noundef nonnull %17, ptr noundef nonnull @.str.50) #7
  %174 = icmp eq i8 %167, 0
  %175 = icmp ne i8 %169, 0
  %or.cond9.not131.not136 = select i1 %174, i1 true, i1 %175
  %176 = icmp eq i8 %171, 0
  %or.cond11.not133 = select i1 %or.cond9.not131.not136, i1 true, i1 %176
  %177 = icmp ne i8 %173, 0
  %or.cond14 = select i1 %or.cond11.not133, i1 true, i1 %177
  br i1 %or.cond14, label %178, label %183

178:                                              ; preds = %160
  %179 = zext i8 %173 to i32
  %180 = zext i8 %169 to i32
  %181 = zext i8 %167 to i32
  %182 = zext i8 %171 to i32
  call void (i32, i8, ptr, ...) @XLog_Display(i32 noundef 64, i8 noundef zeroext 1, ptr noundef nonnull @.str.51, i32 noundef %181, i32 noundef %180, i32 noundef %182, i32 noundef %179) #7
  br label %188

183:                                              ; preds = %160
  %184 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.47, ptr noundef nonnull %18, ptr noundef nonnull %17, ptr noundef nonnull @.str.48)
  %185 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.47, ptr noundef nonnull %19, ptr noundef nonnull %17, ptr noundef nonnull @.str.49)
  %186 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.47, ptr noundef nonnull %20, ptr noundef nonnull %17, ptr noundef nonnull @.str.48)
  %187 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.47, ptr noundef nonnull %21, ptr noundef nonnull %17, ptr noundef nonnull @.str.49)
  br label %188

188:                                              ; preds = %183, %178
  %.0 = phi i32 [ -1, %178 ], [ 0, %183 ]
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 9, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 41, ptr nonnull %17) #7
  br label %189

189:                                              ; preds = %188, %155
  %.1 = phi i32 [ %.0, %188 ], [ -1, %155 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 18, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 13, ptr nonnull %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 27, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 9, ptr nonnull %11) #7
  br label %190

190:                                              ; preds = %189, %154
  %.2 = phi i32 [ %.1, %189 ], [ -1, %154 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #7
  br label %191

191:                                              ; preds = %190, %124
  %.3 = phi i32 [ %.2, %190 ], [ -1, %124 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  br label %192

192:                                              ; preds = %191, %100
  %.4 = phi i32 [ %.3, %191 ], [ -1, %100 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %7) #7
  br label %193

193:                                              ; preds = %192, %76
  %.5 = phi i32 [ -1, %76 ], [ %.4, %192 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %6) #7
  br label %194

194:                                              ; preds = %193, %75
  %.6 = phi i32 [ %.5, %193 ], [ -1, %75 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %3) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %2) #7
  br label %195

195:                                              ; preds = %194, %35
  %.7 = phi i32 [ %.6, %194 ], [ -1, %35 ]
  ret i32 %.7
}

declare void @XLog_Init(ptr noundef, i16 noundef zeroext, i8 noundef zeroext) local_unnamed_addr #1

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

declare ptr @xstracpy(ptr noundef, ...) local_unnamed_addr #1

declare void @XLog_ConfigGet(ptr noundef) local_unnamed_addr #1

declare void @XLog_ConfigSet(ptr noundef) local_unnamed_addr #1

declare void @XLog_Display(i32 noundef, i8 noundef zeroext, ptr noundef, ...) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #3

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

declare ptr @xstrrep(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare i64 @xstrncase(ptr noundef, i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #1

declare i64 @xstrncatf(ptr noundef, i64 noundef, ptr noundef, ...) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #4

declare i64 @xstrnclr(ptr noundef, i64 noundef, ptr noundef, ptr noundef, ...) local_unnamed_addr #1

declare i32 @xstrntok(ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

declare ptr @xstrsplit(ptr noundef, ptr noundef) local_unnamed_addr #1

declare ptr @XArray_GetData(ptr noundef, i64 noundef) local_unnamed_addr #1

declare void @XArray_Destroy(ptr noundef) local_unnamed_addr #1

declare i32 @XString_Init(ptr noundef, i64 noundef, i8 noundef zeroext) local_unnamed_addr #1

declare i32 @XString_Append(ptr noundef, ptr noundef, ...) local_unnamed_addr #1

declare i32 @XString_Remove(ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #1

declare i32 @XString_Insert(ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #1

declare i32 @XString_Add(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #1

declare i32 @XString_Delete(ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #1

declare i32 @XString_InsertFmt(ptr noundef, i64 noundef, ptr noundef, ...) local_unnamed_addr #1

declare i32 @XString_Advance(ptr noundef, i64 noundef) local_unnamed_addr #1

declare void @XString_Clear(ptr noundef) local_unnamed_addr #1

declare i32 @XString_Copy(ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @XString_ChangeCase(ptr noundef, i32 noundef) local_unnamed_addr #1

declare i32 @XString_Case(ptr noundef, i32 noundef, i64 noundef, i64 noundef) local_unnamed_addr #1

declare i32 @XString_Search(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

declare i32 @XString_Color(ptr noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #1

declare i32 @XString_ChangeColor(ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @XString_Replace(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @XString_Token(ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

declare ptr @XString_SplitStr(ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @XString_SubStr(ptr noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #1

declare ptr @XString_FromFmt(ptr noundef, ...) local_unnamed_addr #1

declare ptr @XString_From(ptr noundef, i64 noundef) local_unnamed_addr #1

declare ptr @XString_SubNew(ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #1

declare ptr @XString_CutNew(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @XString_CutSub(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare ptr @XString_Split(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress 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) #5

declare zeroext i8 @xstrmatch(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #6

declare zeroext i8 @xstrmatchm(ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

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


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SROAPass,SimplifyCFGPass,TailCallElimPass