; LLVM IR from marcinbor85/microshell :: src/src/commands (ush_cmd_xxd)

; 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.ush_object = type { ptr, i32, i32, i32, ptr, i64, i64, i32, i64, i64, i64, i8, ptr, ptr, ptr, %struct.ush_node_object, ptr, ptr, ptr, i64, i64, ptr, i64, i32, i32, ptr, ptr, ptr, i64, i64, i64 }
%struct.ush_node_object = type { ptr, i64, ptr, ptr, ptr, ptr }
%struct.ush_descriptor = type { ptr, ptr, i64, ptr, i64, i64, ptr, ptr }

@.str = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [3 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
define dso_local zeroext i1 @ush_buildin_cmd_xxd_service(ptr noundef %0, ptr noundef %1) #1 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i8, align 1
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i8, align 1
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i8, align 1
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %12 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #5
  store i8 1, ptr %5, align 1, !tbaa !9
  %13 = load ptr, ptr %3, align 8, !tbaa !5
  %14 = getelementptr inbounds %struct.ush_object, ptr %13, i32 0, i32 1
  %15 = load i32, ptr %14, align 8, !tbaa !11
  switch i32 %15, label %225 [
    i32 14, label %16
    i32 15, label %23
    i32 16, label %222
  ]

16:                                               ; preds = %2
  %17 = load ptr, ptr %3, align 8, !tbaa !5
  %18 = getelementptr inbounds %struct.ush_object, ptr %17, i32 0, i32 19
  store i64 0, ptr %18, align 8, !tbaa !16
  %19 = load ptr, ptr %3, align 8, !tbaa !5
  %20 = getelementptr inbounds %struct.ush_object, ptr %19, i32 0, i32 20
  store i64 0, ptr %20, align 8, !tbaa !17
  %21 = load ptr, ptr %3, align 8, !tbaa !5
  %22 = getelementptr inbounds %struct.ush_object, ptr %21, i32 0, i32 1
  store i32 15, ptr %22, align 8, !tbaa !11
  br label %226

23:                                               ; preds = %2
  %24 = load ptr, ptr %3, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.ush_object, ptr %24, i32 0, i32 19
  %26 = load i64, ptr %25, align 8, !tbaa !16
  switch i64 %26, label %220 [
    i64 0, label %27
    i64 1, label %48
    i64 2, label %121
    i64 3, label %203
  ]

27:                                               ; preds = %23
  %28 = load ptr, ptr %3, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.ush_object, ptr %28, i32 0, i32 0
  %30 = load ptr, ptr %29, align 8, !tbaa !18
  %31 = getelementptr inbounds %struct.ush_descriptor, ptr %30, i32 0, i32 3
  %32 = load ptr, ptr %31, align 8, !tbaa !19
  %33 = load ptr, ptr %3, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.ush_object, ptr %33, i32 0, i32 20
  %35 = load i64, ptr %34, align 8, !tbaa !17
  %36 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %32, ptr noundef @.str, i64 noundef %35) #5
  %37 = load ptr, ptr %3, align 8, !tbaa !5
  %38 = load ptr, ptr %3, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.ush_object, ptr %38, i32 0, i32 0
  %40 = load ptr, ptr %39, align 8, !tbaa !18
  %41 = getelementptr inbounds %struct.ush_descriptor, ptr %40, i32 0, i32 3
  %42 = load ptr, ptr %41, align 8, !tbaa !19
  %43 = load ptr, ptr %3, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.ush_object, ptr %43, i32 0, i32 1
  %45 = load i32, ptr %44, align 8, !tbaa !11
  call void @ush_write_pointer(ptr noundef %37, ptr noundef %42, i32 noundef %45)
  %46 = load ptr, ptr %3, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.ush_object, ptr %46, i32 0, i32 19
  store i64 1, ptr %47, align 8, !tbaa !16
  br label %221

48:                                               ; preds = %23
  %49 = load ptr, ptr %3, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.ush_object, ptr %49, i32 0, i32 0
  %51 = load ptr, ptr %50, align 8, !tbaa !18
  %52 = getelementptr inbounds %struct.ush_descriptor, ptr %51, i32 0, i32 3
  %53 = load ptr, ptr %52, align 8, !tbaa !19
  %54 = getelementptr inbounds i8, ptr %53, i64 0
  store i8 0, ptr %54, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  store i64 0, ptr %6, align 8, !tbaa !22
  br label %55

55:                                               ; preds = %100, %48
  %56 = load i64, ptr %6, align 8, !tbaa !22
  %57 = icmp ult i64 %56, 8
  br i1 %57, label %59, label %58

58:                                               ; preds = %55
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  br label %103

59:                                               ; preds = %55
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  %60 = load ptr, ptr %3, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.ush_object, ptr %60, i32 0, i32 20
  %62 = load i64, ptr %61, align 8, !tbaa !17
  %63 = load i64, ptr %6, align 8, !tbaa !22
  %64 = add i64 %62, %63
  store i64 %64, ptr %7, align 8, !tbaa !22
  %65 = load i64, ptr %7, align 8, !tbaa !22
  %66 = load ptr, ptr %3, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.ush_object, ptr %66, i32 0, i32 22
  %68 = load i64, ptr %67, align 8, !tbaa !23
  %69 = icmp ult i64 %65, %68
  br i1 %69, label %70, label %92

70:                                               ; preds = %59
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #5
  %71 = load ptr, ptr %3, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.ush_object, ptr %71, i32 0, i32 21
  %73 = load ptr, ptr %72, align 8, !tbaa !24
  %74 = load i64, ptr %7, align 8, !tbaa !22
  %75 = getelementptr inbounds i8, ptr %73, i64 %74
  %76 = load i8, ptr %75, align 1, !tbaa !21
  store i8 %76, ptr %8, align 1, !tbaa !21
  %77 = load ptr, ptr %3, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.ush_object, ptr %77, i32 0, i32 0
  %79 = load ptr, ptr %78, align 8, !tbaa !18
  %80 = getelementptr inbounds %struct.ush_descriptor, ptr %79, i32 0, i32 3
  %81 = load ptr, ptr %80, align 8, !tbaa !19
  %82 = load ptr, ptr %3, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.ush_object, ptr %82, i32 0, i32 0
  %84 = load ptr, ptr %83, align 8, !tbaa !18
  %85 = getelementptr inbounds %struct.ush_descriptor, ptr %84, i32 0, i32 3
  %86 = load ptr, ptr %85, align 8, !tbaa !19
  %87 = call i64 @strlen(ptr noundef %86) #6
  %88 = getelementptr inbounds i8, ptr %81, i64 %87
  %89 = load i8, ptr %8, align 1, !tbaa !21
  %90 = zext i8 %89 to i32
  %91 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %88, ptr noundef @.str.1, i32 noundef %90) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #5
  br label %99

92:                                               ; preds = %59
  %93 = load ptr, ptr %3, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.ush_object, ptr %93, i32 0, i32 0
  %95 = load ptr, ptr %94, align 8, !tbaa !18
  %96 = getelementptr inbounds %struct.ush_descriptor, ptr %95, i32 0, i32 3
  %97 = load ptr, ptr %96, align 8, !tbaa !19
  %98 = call ptr @strcat(ptr noundef %97, ptr noundef @.str.2) #5
  br label %99

99:                                               ; preds = %92, %70
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  br label %100

100:                                              ; preds = %99
  %101 = load i64, ptr %6, align 8, !tbaa !22
  %102 = add i64 %101, 1
  store i64 %102, ptr %6, align 8, !tbaa !22
  br label %55, !llvm.loop !25

103:                                              ; preds = %58
  %104 = load ptr, ptr %3, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.ush_object, ptr %104, i32 0, i32 0
  %106 = load ptr, ptr %105, align 8, !tbaa !18
  %107 = getelementptr inbounds %struct.ush_descriptor, ptr %106, i32 0, i32 3
  %108 = load ptr, ptr %107, align 8, !tbaa !19
  %109 = call ptr @strcat(ptr noundef %108, ptr noundef @.str.3) #5
  %110 = load ptr, ptr %3, align 8, !tbaa !5
  %111 = load ptr, ptr %3, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.ush_object, ptr %111, i32 0, i32 0
  %113 = load ptr, ptr %112, align 8, !tbaa !18
  %114 = getelementptr inbounds %struct.ush_descriptor, ptr %113, i32 0, i32 3
  %115 = load ptr, ptr %114, align 8, !tbaa !19
  %116 = load ptr, ptr %3, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.ush_object, ptr %116, i32 0, i32 1
  %118 = load i32, ptr %117, align 8, !tbaa !11
  call void @ush_write_pointer(ptr noundef %110, ptr noundef %115, i32 noundef %118)
  %119 = load ptr, ptr %3, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.ush_object, ptr %119, i32 0, i32 19
  store i64 2, ptr %120, align 8, !tbaa !16
  br label %221

121:                                              ; preds = %23
  %122 = load ptr, ptr %3, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.ush_object, ptr %122, i32 0, i32 0
  %124 = load ptr, ptr %123, align 8, !tbaa !18
  %125 = getelementptr inbounds %struct.ush_descriptor, ptr %124, i32 0, i32 3
  %126 = load ptr, ptr %125, align 8, !tbaa !19
  %127 = getelementptr inbounds i8, ptr %126, i64 0
  store i8 0, ptr %127, align 1, !tbaa !21
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  store i64 0, ptr %9, align 8, !tbaa !22
  br label %128

128:                                              ; preds = %188, %121
  %129 = load i64, ptr %9, align 8, !tbaa !22
  %130 = icmp ult i64 %129, 8
  br i1 %130, label %132, label %131

131:                                              ; preds = %128
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  br label %191

132:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  %133 = load ptr, ptr %3, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.ush_object, ptr %133, i32 0, i32 20
  %135 = load i64, ptr %134, align 8, !tbaa !17
  store i64 %135, ptr %10, align 8, !tbaa !22
  %136 = load i64, ptr %10, align 8, !tbaa !22
  %137 = load ptr, ptr %3, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.ush_object, ptr %137, i32 0, i32 22
  %139 = load i64, ptr %138, align 8, !tbaa !23
  %140 = icmp ult i64 %136, %139
  br i1 %140, label %141, label %176

141:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #5
  %142 = load ptr, ptr %3, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.ush_object, ptr %142, i32 0, i32 21
  %144 = load ptr, ptr %143, align 8, !tbaa !24
  %145 = load i64, ptr %10, align 8, !tbaa !22
  %146 = getelementptr inbounds i8, ptr %144, i64 %145
  %147 = load i8, ptr %146, align 1, !tbaa !21
  store i8 %147, ptr %11, align 1, !tbaa !21
  %148 = load i8, ptr %11, align 1, !tbaa !21
  %149 = call zeroext i1 @ush_utils_is_printable(i8 noundef zeroext %148)
  %150 = zext i1 %149 to i32
  %151 = icmp ne i32 %150, 0
  br i1 %151, label %152, label %168

152:                                              ; preds = %141
  %153 = load ptr, ptr %3, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.ush_object, ptr %153, i32 0, i32 0
  %155 = load ptr, ptr %154, align 8, !tbaa !18
  %156 = getelementptr inbounds %struct.ush_descriptor, ptr %155, i32 0, i32 3
  %157 = load ptr, ptr %156, align 8, !tbaa !19
  %158 = load ptr, ptr %3, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.ush_object, ptr %158, i32 0, i32 0
  %160 = load ptr, ptr %159, align 8, !tbaa !18
  %161 = getelementptr inbounds %struct.ush_descriptor, ptr %160, i32 0, i32 3
  %162 = load ptr, ptr %161, align 8, !tbaa !19
  %163 = call i64 @strlen(ptr noundef %162) #6
  %164 = getelementptr inbounds i8, ptr %157, i64 %163
  %165 = load i8, ptr %11, align 1, !tbaa !21
  %166 = sext i8 %165 to i32
  %167 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %164, ptr noundef @.str.4, i32 noundef %166) #5
  br label %175

168:                                              ; preds = %141
  %169 = load ptr, ptr %3, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.ush_object, ptr %169, i32 0, i32 0
  %171 = load ptr, ptr %170, align 8, !tbaa !18
  %172 = getelementptr inbounds %struct.ush_descriptor, ptr %171, i32 0, i32 3
  %173 = load ptr, ptr %172, align 8, !tbaa !19
  %174 = call ptr @strcat(ptr noundef %173, ptr noundef @.str.5) #5
  br label %175

175:                                              ; preds = %168, %152
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #5
  br label %183

176:                                              ; preds = %132
  %177 = load ptr, ptr %3, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.ush_object, ptr %177, i32 0, i32 0
  %179 = load ptr, ptr %178, align 8, !tbaa !18
  %180 = getelementptr inbounds %struct.ush_descriptor, ptr %179, i32 0, i32 3
  %181 = load ptr, ptr %180, align 8, !tbaa !19
  %182 = call ptr @strcat(ptr noundef %181, ptr noundef @.str.3) #5
  br label %183

183:                                              ; preds = %176, %175
  %184 = load ptr, ptr %3, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.ush_object, ptr %184, i32 0, i32 20
  %186 = load i64, ptr %185, align 8, !tbaa !17
  %187 = add i64 %186, 1
  store i64 %187, ptr %185, align 8, !tbaa !17
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  br label %188

188:                                              ; preds = %183
  %189 = load i64, ptr %9, align 8, !tbaa !22
  %190 = add i64 %189, 1
  store i64 %190, ptr %9, align 8, !tbaa !22
  br label %128, !llvm.loop !27

191:                                              ; preds = %131
  %192 = load ptr, ptr %3, align 8, !tbaa !5
  %193 = load ptr, ptr %3, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.ush_object, ptr %193, i32 0, i32 0
  %195 = load ptr, ptr %194, align 8, !tbaa !18
  %196 = getelementptr inbounds %struct.ush_descriptor, ptr %195, i32 0, i32 3
  %197 = load ptr, ptr %196, align 8, !tbaa !19
  %198 = load ptr, ptr %3, align 8, !tbaa !5
  %199 = getelementptr inbounds %struct.ush_object, ptr %198, i32 0, i32 1
  %200 = load i32, ptr %199, align 8, !tbaa !11
  call void @ush_write_pointer(ptr noundef %192, ptr noundef %197, i32 noundef %200)
  %201 = load ptr, ptr %3, align 8, !tbaa !5
  %202 = getelementptr inbounds %struct.ush_object, ptr %201, i32 0, i32 19
  store i64 3, ptr %202, align 8, !tbaa !16
  br label %221

203:                                              ; preds = %23
  %204 = load ptr, ptr %3, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.ush_object, ptr %204, i32 0, i32 20
  %206 = load i64, ptr %205, align 8, !tbaa !17
  %207 = load ptr, ptr %3, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.ush_object, ptr %207, i32 0, i32 22
  %209 = load i64, ptr %208, align 8, !tbaa !23
  %210 = icmp uge i64 %206, %209
  br i1 %210, label %211, label %213

211:                                              ; preds = %203
  %212 = load ptr, ptr %3, align 8, !tbaa !5
  call void @ush_write_pointer(ptr noundef %212, ptr noundef @.str.6, i32 noundef 16)
  br label %221

213:                                              ; preds = %203
  %214 = load ptr, ptr %3, align 8, !tbaa !5
  %215 = load ptr, ptr %3, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.ush_object, ptr %215, i32 0, i32 1
  %217 = load i32, ptr %216, align 8, !tbaa !11
  call void @ush_write_pointer(ptr noundef %214, ptr noundef @.str.6, i32 noundef %217)
  %218 = load ptr, ptr %3, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.ush_object, ptr %218, i32 0, i32 19
  store i64 0, ptr %219, align 8, !tbaa !16
  br label %221

220:                                              ; preds = %23
  br label %221

221:                                              ; preds = %220, %213, %211, %191, %103, %27
  br label %226

222:                                              ; preds = %2
  %223 = load ptr, ptr %3, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.ush_object, ptr %223, i32 0, i32 1
  store i32 1, ptr %224, align 8, !tbaa !11
  br label %226

225:                                              ; preds = %2
  store i8 0, ptr %5, align 1, !tbaa !9
  br label %226

226:                                              ; preds = %225, %222, %221, %16
  %227 = load i8, ptr %5, align 1, !tbaa !9, !range !28, !noundef !29
  %228 = trunc i8 %227 to i1
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #5
  ret i1 %228
}

; Function Attrs: nounwind
declare i32 @sprintf(ptr noundef, ptr noundef, ...) #2

declare void @ush_write_pointer(ptr noundef, ptr noundef, i32 noundef) #3

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

; Function Attrs: nounwind
declare ptr @strcat(ptr noundef, ptr noundef) #2

declare zeroext i1 @ush_utils_is_printable(i8 noundef zeroext) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind 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 = { nounwind }
attributes #6 = { 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, !10, i64 0}
!10 = !{!"_Bool", !7, i64 0}
!11 = !{!12, !13, i64 8}
!12 = !{!"ush_object", !6, i64 0, !13, i64 8, !13, i64 12, !13, i64 16, !6, i64 24, !14, i64 32, !14, i64 40, !13, i64 48, !14, i64 56, !14, i64 64, !14, i64 72, !10, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !15, i64 112, !6, i64 160, !6, i64 168, !6, i64 176, !14, i64 184, !14, i64 192, !6, i64 200, !14, i64 208, !13, i64 216, !13, i64 220, !6, i64 224, !6, i64 232, !6, i64 240, !14, i64 248, !14, i64 256, !14, i64 264}
!13 = !{!"int", !7, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!"ush_node_object", !6, i64 0, !14, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40}
!16 = !{!12, !14, i64 184}
!17 = !{!12, !14, i64 192}
!18 = !{!12, !6, i64 0}
!19 = !{!20, !6, i64 24}
!20 = !{!"ush_descriptor", !6, i64 0, !6, i64 8, !14, i64 16, !6, i64 24, !14, i64 32, !14, i64 40, !6, i64 48, !6, i64 56}
!21 = !{!7, !7, i64 0}
!22 = !{!14, !14, i64 0}
!23 = !{!12, !14, i64 208}
!24 = !{!12, !6, i64 200}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.mustprogress"}
!27 = distinct !{!27, !26}
!28 = !{i8 0, i8 2}
!29 = !{}


; 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"

@.str = external hidden unnamed_addr constant [8 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [3 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef zeroext i1 @ush_buildin_cmd_xxd_service(ptr noundef %0, ptr nocapture noundef readnone %1) local_unnamed_addr #0 {
  %3 = getelementptr inbounds i8, ptr %0, i64 8
  %4 = load i32, ptr %3, align 8, !tbaa !5
  switch i32 %4, label %423 [
    i32 14, label %5
    i32 15, label %7
    i32 16, label %422
  ]

5:                                                ; preds = %2
  %6 = getelementptr inbounds i8, ptr %0, i64 184
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %6, i8 0, i64 16, i1 false)
  store i32 15, ptr %3, align 8, !tbaa !5
  br label %423

7:                                                ; preds = %2
  %8 = getelementptr inbounds i8, ptr %0, i64 184
  %9 = load i64, ptr %8, align 8, !tbaa !14
  switch i64 %9, label %423 [
    i64 0, label %10
    i64 1, label %21
    i64 2, label %203
    i64 3, label %415
  ]

10:                                               ; preds = %7
  %11 = load ptr, ptr %0, align 8, !tbaa !15
  %12 = getelementptr inbounds i8, ptr %11, i64 24
  %13 = load ptr, ptr %12, align 8, !tbaa !16
  %14 = getelementptr inbounds i8, ptr %0, i64 192
  %15 = load i64, ptr %14, align 8, !tbaa !18
  %16 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %13, ptr noundef nonnull dereferenceable(1) @.str, i64 noundef %15) #6
  %17 = load ptr, ptr %0, align 8, !tbaa !15
  %18 = getelementptr inbounds i8, ptr %17, i64 24
  %19 = load ptr, ptr %18, align 8, !tbaa !16
  %20 = load i32, ptr %3, align 8, !tbaa !5
  tail call void @ush_write_pointer(ptr noundef nonnull %0, ptr noundef %19, i32 noundef %20) #6
  store i64 1, ptr %8, align 8, !tbaa !14
  br label %423

21:                                               ; preds = %7
  %22 = load ptr, ptr %0, align 8, !tbaa !15
  %23 = getelementptr inbounds i8, ptr %22, i64 24
  %24 = load ptr, ptr %23, align 8, !tbaa !16
  store i8 0, ptr %24, align 1, !tbaa !19
  %25 = getelementptr inbounds i8, ptr %0, i64 192
  %26 = getelementptr inbounds i8, ptr %0, i64 208
  %27 = getelementptr inbounds i8, ptr %0, i64 200
  %28 = load i64, ptr %25, align 8, !tbaa !18
  %29 = load i64, ptr %26, align 8, !tbaa !20
  %30 = icmp ult i64 %28, %29
  br i1 %30, label %31, label %42

31:                                               ; preds = %21
  %32 = load ptr, ptr %27, align 8, !tbaa !21
  %33 = getelementptr inbounds i8, ptr %32, i64 %28
  %34 = load i8, ptr %33, align 1, !tbaa !19
  %35 = load ptr, ptr %0, align 8, !tbaa !15
  %36 = getelementptr inbounds i8, ptr %35, i64 24
  %37 = load ptr, ptr %36, align 8, !tbaa !16
  %38 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %37) #7
  %39 = getelementptr inbounds i8, ptr %37, i64 %38
  %40 = zext i8 %34 to i32
  %41 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %39, ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef %40) #6
  br label %47

42:                                               ; preds = %21
  %43 = load ptr, ptr %0, align 8, !tbaa !15
  %44 = getelementptr inbounds i8, ptr %43, i64 24
  %45 = load ptr, ptr %44, align 8, !tbaa !16
  %46 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %45, ptr noundef nonnull dereferenceable(1) @.str.2) #6
  br label %47

47:                                               ; preds = %42, %31
  %48 = load i64, ptr %25, align 8, !tbaa !18
  %49 = add i64 %48, 1
  %50 = load i64, ptr %26, align 8, !tbaa !20
  %51 = icmp ult i64 %49, %50
  br i1 %51, label %57, label %52

52:                                               ; preds = %47
  %53 = load ptr, ptr %0, align 8, !tbaa !15
  %54 = getelementptr inbounds i8, ptr %53, i64 24
  %55 = load ptr, ptr %54, align 8, !tbaa !16
  %56 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %55, ptr noundef nonnull dereferenceable(1) @.str.2) #6
  br label %68

57:                                               ; preds = %47
  %58 = load ptr, ptr %27, align 8, !tbaa !21
  %59 = getelementptr inbounds i8, ptr %58, i64 %49
  %60 = load i8, ptr %59, align 1, !tbaa !19
  %61 = load ptr, ptr %0, align 8, !tbaa !15
  %62 = getelementptr inbounds i8, ptr %61, i64 24
  %63 = load ptr, ptr %62, align 8, !tbaa !16
  %64 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %63) #7
  %65 = getelementptr inbounds i8, ptr %63, i64 %64
  %66 = zext i8 %60 to i32
  %67 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %65, ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef %66) #6
  br label %68

68:                                               ; preds = %57, %52
  %69 = load i64, ptr %25, align 8, !tbaa !18
  %70 = add i64 %69, 2
  %71 = load i64, ptr %26, align 8, !tbaa !20
  %72 = icmp ult i64 %70, %71
  br i1 %72, label %78, label %73

73:                                               ; preds = %68
  %74 = load ptr, ptr %0, align 8, !tbaa !15
  %75 = getelementptr inbounds i8, ptr %74, i64 24
  %76 = load ptr, ptr %75, align 8, !tbaa !16
  %77 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %76, ptr noundef nonnull dereferenceable(1) @.str.2) #6
  br label %89

78:                                               ; preds = %68
  %79 = load ptr, ptr %27, align 8, !tbaa !21
  %80 = getelementptr inbounds i8, ptr %79, i64 %70
  %81 = load i8, ptr %80, align 1, !tbaa !19
  %82 = load ptr, ptr %0, align 8, !tbaa !15
  %83 = getelementptr inbounds i8, ptr %82, i64 24
  %84 = load ptr, ptr %83, align 8, !tbaa !16
  %85 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %84) #7
  %86 = getelementptr inbounds i8, ptr %84, i64 %85
  %87 = zext i8 %81 to i32
  %88 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %86, ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef %87) #6
  br label %89

89:                                               ; preds = %78, %73
  %90 = load i64, ptr %25, align 8, !tbaa !18
  %91 = add i64 %90, 3
  %92 = load i64, ptr %26, align 8, !tbaa !20
  %93 = icmp ult i64 %91, %92
  br i1 %93, label %99, label %94

94:                                               ; preds = %89
  %95 = load ptr, ptr %0, align 8, !tbaa !15
  %96 = getelementptr inbounds i8, ptr %95, i64 24
  %97 = load ptr, ptr %96, align 8, !tbaa !16
  %98 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %97, ptr noundef nonnull dereferenceable(1) @.str.2) #6
  br label %110

99:                                               ; preds = %89
  %100 = load ptr, ptr %27, align 8, !tbaa !21
  %101 = getelementptr inbounds i8, ptr %100, i64 %91
  %102 = load i8, ptr %101, align 1, !tbaa !19
  %103 = load ptr, ptr %0, align 8, !tbaa !15
  %104 = getelementptr inbounds i8, ptr %103, i64 24
  %105 = load ptr, ptr %104, align 8, !tbaa !16
  %106 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %105) #7
  %107 = getelementptr inbounds i8, ptr %105, i64 %106
  %108 = zext i8 %102 to i32
  %109 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %107, ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef %108) #6
  br label %110

110:                                              ; preds = %99, %94
  %111 = load i64, ptr %25, align 8, !tbaa !18
  %112 = add i64 %111, 4
  %113 = load i64, ptr %26, align 8, !tbaa !20
  %114 = icmp ult i64 %112, %113
  br i1 %114, label %120, label %115

115:                                              ; preds = %110
  %116 = load ptr, ptr %0, align 8, !tbaa !15
  %117 = getelementptr inbounds i8, ptr %116, i64 24
  %118 = load ptr, ptr %117, align 8, !tbaa !16
  %119 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %118, ptr noundef nonnull dereferenceable(1) @.str.2) #6
  br label %131

120:                                              ; preds = %110
  %121 = load ptr, ptr %27, align 8, !tbaa !21
  %122 = getelementptr inbounds i8, ptr %121, i64 %112
  %123 = load i8, ptr %122, align 1, !tbaa !19
  %124 = load ptr, ptr %0, align 8, !tbaa !15
  %125 = getelementptr inbounds i8, ptr %124, i64 24
  %126 = load ptr, ptr %125, align 8, !tbaa !16
  %127 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %126) #7
  %128 = getelementptr inbounds i8, ptr %126, i64 %127
  %129 = zext i8 %123 to i32
  %130 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %128, ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef %129) #6
  br label %131

131:                                              ; preds = %120, %115
  %132 = load i64, ptr %25, align 8, !tbaa !18
  %133 = add i64 %132, 5
  %134 = load i64, ptr %26, align 8, !tbaa !20
  %135 = icmp ult i64 %133, %134
  br i1 %135, label %141, label %136

136:                                              ; preds = %131
  %137 = load ptr, ptr %0, align 8, !tbaa !15
  %138 = getelementptr inbounds i8, ptr %137, i64 24
  %139 = load ptr, ptr %138, align 8, !tbaa !16
  %140 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %139, ptr noundef nonnull dereferenceable(1) @.str.2) #6
  br label %152

141:                                              ; preds = %131
  %142 = load ptr, ptr %27, align 8, !tbaa !21
  %143 = getelementptr inbounds i8, ptr %142, i64 %133
  %144 = load i8, ptr %143, align 1, !tbaa !19
  %145 = load ptr, ptr %0, align 8, !tbaa !15
  %146 = getelementptr inbounds i8, ptr %145, i64 24
  %147 = load ptr, ptr %146, align 8, !tbaa !16
  %148 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %147) #7
  %149 = getelementptr inbounds i8, ptr %147, i64 %148
  %150 = zext i8 %144 to i32
  %151 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %149, ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef %150) #6
  br label %152

152:                                              ; preds = %141, %136
  %153 = load i64, ptr %25, align 8, !tbaa !18
  %154 = add i64 %153, 6
  %155 = load i64, ptr %26, align 8, !tbaa !20
  %156 = icmp ult i64 %154, %155
  br i1 %156, label %162, label %157

157:                                              ; preds = %152
  %158 = load ptr, ptr %0, align 8, !tbaa !15
  %159 = getelementptr inbounds i8, ptr %158, i64 24
  %160 = load ptr, ptr %159, align 8, !tbaa !16
  %161 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %160, ptr noundef nonnull dereferenceable(1) @.str.2) #6
  br label %173

162:                                              ; preds = %152
  %163 = load ptr, ptr %27, align 8, !tbaa !21
  %164 = getelementptr inbounds i8, ptr %163, i64 %154
  %165 = load i8, ptr %164, align 1, !tbaa !19
  %166 = load ptr, ptr %0, align 8, !tbaa !15
  %167 = getelementptr inbounds i8, ptr %166, i64 24
  %168 = load ptr, ptr %167, align 8, !tbaa !16
  %169 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %168) #7
  %170 = getelementptr inbounds i8, ptr %168, i64 %169
  %171 = zext i8 %165 to i32
  %172 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %170, ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef %171) #6
  br label %173

173:                                              ; preds = %162, %157
  %174 = load i64, ptr %25, align 8, !tbaa !18
  %175 = add i64 %174, 7
  %176 = load i64, ptr %26, align 8, !tbaa !20
  %177 = icmp ult i64 %175, %176
  br i1 %177, label %183, label %178

178:                                              ; preds = %173
  %179 = load ptr, ptr %0, align 8, !tbaa !15
  %180 = getelementptr inbounds i8, ptr %179, i64 24
  %181 = load ptr, ptr %180, align 8, !tbaa !16
  %182 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %181, ptr noundef nonnull dereferenceable(1) @.str.2) #6
  br label %194

183:                                              ; preds = %173
  %184 = load ptr, ptr %27, align 8, !tbaa !21
  %185 = getelementptr inbounds i8, ptr %184, i64 %175
  %186 = load i8, ptr %185, align 1, !tbaa !19
  %187 = load ptr, ptr %0, align 8, !tbaa !15
  %188 = getelementptr inbounds i8, ptr %187, i64 24
  %189 = load ptr, ptr %188, align 8, !tbaa !16
  %190 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %189) #7
  %191 = getelementptr inbounds i8, ptr %189, i64 %190
  %192 = zext i8 %186 to i32
  %193 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %191, ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef %192) #6
  br label %194

194:                                              ; preds = %183, %178
  %195 = load ptr, ptr %0, align 8, !tbaa !15
  %196 = getelementptr inbounds i8, ptr %195, i64 24
  %197 = load ptr, ptr %196, align 8, !tbaa !16
  %198 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %197, ptr noundef nonnull dereferenceable(1) @.str.3) #6
  %199 = load ptr, ptr %0, align 8, !tbaa !15
  %200 = getelementptr inbounds i8, ptr %199, i64 24
  %201 = load ptr, ptr %200, align 8, !tbaa !16
  %202 = load i32, ptr %3, align 8, !tbaa !5
  tail call void @ush_write_pointer(ptr noundef nonnull %0, ptr noundef %201, i32 noundef %202) #6
  store i64 2, ptr %8, align 8, !tbaa !14
  br label %423

203:                                              ; preds = %7
  %204 = load ptr, ptr %0, align 8, !tbaa !15
  %205 = getelementptr inbounds i8, ptr %204, i64 24
  %206 = load ptr, ptr %205, align 8, !tbaa !16
  store i8 0, ptr %206, align 1, !tbaa !19
  %207 = getelementptr inbounds i8, ptr %0, i64 192
  %208 = getelementptr inbounds i8, ptr %0, i64 208
  %209 = getelementptr inbounds i8, ptr %0, i64 200
  %210 = load i64, ptr %207, align 8, !tbaa !18
  %211 = load i64, ptr %208, align 8, !tbaa !20
  %212 = icmp ult i64 %210, %211
  br i1 %212, label %213, label %228

213:                                              ; preds = %203
  %214 = load ptr, ptr %209, align 8, !tbaa !21
  %215 = getelementptr inbounds i8, ptr %214, i64 %210
  %216 = load i8, ptr %215, align 1, !tbaa !19
  %217 = tail call zeroext i1 @ush_utils_is_printable(i8 noundef zeroext %216) #6
  %218 = load ptr, ptr %0, align 8, !tbaa !15
  %219 = getelementptr inbounds i8, ptr %218, i64 24
  %220 = load ptr, ptr %219, align 8, !tbaa !16
  br i1 %217, label %221, label %226

221:                                              ; preds = %213
  %222 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %220) #7
  %223 = getelementptr inbounds i8, ptr %220, i64 %222
  %224 = sext i8 %216 to i32
  %225 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %223, ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %224) #6
  br label %233

226:                                              ; preds = %213
  %227 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %220, ptr noundef nonnull dereferenceable(1) @.str.5) #6
  br label %233

228:                                              ; preds = %203
  %229 = load ptr, ptr %0, align 8, !tbaa !15
  %230 = getelementptr inbounds i8, ptr %229, i64 24
  %231 = load ptr, ptr %230, align 8, !tbaa !16
  %232 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %231, ptr noundef nonnull dereferenceable(1) @.str.3) #6
  br label %233

233:                                              ; preds = %221, %226, %228
  %234 = load i64, ptr %207, align 8, !tbaa !18
  %235 = add i64 %234, 1
  store i64 %235, ptr %207, align 8, !tbaa !18
  %236 = load i64, ptr %208, align 8, !tbaa !20
  %237 = icmp ult i64 %235, %236
  br i1 %237, label %243, label %238

238:                                              ; preds = %233
  %239 = load ptr, ptr %0, align 8, !tbaa !15
  %240 = getelementptr inbounds i8, ptr %239, i64 24
  %241 = load ptr, ptr %240, align 8, !tbaa !16
  %242 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %241, ptr noundef nonnull dereferenceable(1) @.str.3) #6
  br label %258

243:                                              ; preds = %233
  %244 = load ptr, ptr %209, align 8, !tbaa !21
  %245 = getelementptr inbounds i8, ptr %244, i64 %235
  %246 = load i8, ptr %245, align 1, !tbaa !19
  %247 = tail call zeroext i1 @ush_utils_is_printable(i8 noundef zeroext %246) #6
  %248 = load ptr, ptr %0, align 8, !tbaa !15
  %249 = getelementptr inbounds i8, ptr %248, i64 24
  %250 = load ptr, ptr %249, align 8, !tbaa !16
  br i1 %247, label %253, label %251

251:                                              ; preds = %243
  %252 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %250, ptr noundef nonnull dereferenceable(1) @.str.5) #6
  br label %258

253:                                              ; preds = %243
  %254 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %250) #7
  %255 = getelementptr inbounds i8, ptr %250, i64 %254
  %256 = sext i8 %246 to i32
  %257 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %255, ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %256) #6
  br label %258

258:                                              ; preds = %253, %251, %238
  %259 = load i64, ptr %207, align 8, !tbaa !18
  %260 = add i64 %259, 1
  store i64 %260, ptr %207, align 8, !tbaa !18
  %261 = load i64, ptr %208, align 8, !tbaa !20
  %262 = icmp ult i64 %260, %261
  br i1 %262, label %268, label %263

263:                                              ; preds = %258
  %264 = load ptr, ptr %0, align 8, !tbaa !15
  %265 = getelementptr inbounds i8, ptr %264, i64 24
  %266 = load ptr, ptr %265, align 8, !tbaa !16
  %267 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %266, ptr noundef nonnull dereferenceable(1) @.str.3) #6
  br label %283

268:                                              ; preds = %258
  %269 = load ptr, ptr %209, align 8, !tbaa !21
  %270 = getelementptr inbounds i8, ptr %269, i64 %260
  %271 = load i8, ptr %270, align 1, !tbaa !19
  %272 = tail call zeroext i1 @ush_utils_is_printable(i8 noundef zeroext %271) #6
  %273 = load ptr, ptr %0, align 8, !tbaa !15
  %274 = getelementptr inbounds i8, ptr %273, i64 24
  %275 = load ptr, ptr %274, align 8, !tbaa !16
  br i1 %272, label %278, label %276

276:                                              ; preds = %268
  %277 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %275, ptr noundef nonnull dereferenceable(1) @.str.5) #6
  br label %283

278:                                              ; preds = %268
  %279 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %275) #7
  %280 = getelementptr inbounds i8, ptr %275, i64 %279
  %281 = sext i8 %271 to i32
  %282 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %280, ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %281) #6
  br label %283

283:                                              ; preds = %278, %276, %263
  %284 = load i64, ptr %207, align 8, !tbaa !18
  %285 = add i64 %284, 1
  store i64 %285, ptr %207, align 8, !tbaa !18
  %286 = load i64, ptr %208, align 8, !tbaa !20
  %287 = icmp ult i64 %285, %286
  br i1 %287, label %293, label %288

288:                                              ; preds = %283
  %289 = load ptr, ptr %0, align 8, !tbaa !15
  %290 = getelementptr inbounds i8, ptr %289, i64 24
  %291 = load ptr, ptr %290, align 8, !tbaa !16
  %292 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %291, ptr noundef nonnull dereferenceable(1) @.str.3) #6
  br label %308

293:                                              ; preds = %283
  %294 = load ptr, ptr %209, align 8, !tbaa !21
  %295 = getelementptr inbounds i8, ptr %294, i64 %285
  %296 = load i8, ptr %295, align 1, !tbaa !19
  %297 = tail call zeroext i1 @ush_utils_is_printable(i8 noundef zeroext %296) #6
  %298 = load ptr, ptr %0, align 8, !tbaa !15
  %299 = getelementptr inbounds i8, ptr %298, i64 24
  %300 = load ptr, ptr %299, align 8, !tbaa !16
  br i1 %297, label %303, label %301

301:                                              ; preds = %293
  %302 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %300, ptr noundef nonnull dereferenceable(1) @.str.5) #6
  br label %308

303:                                              ; preds = %293
  %304 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %300) #7
  %305 = getelementptr inbounds i8, ptr %300, i64 %304
  %306 = sext i8 %296 to i32
  %307 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %305, ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %306) #6
  br label %308

308:                                              ; preds = %303, %301, %288
  %309 = load i64, ptr %207, align 8, !tbaa !18
  %310 = add i64 %309, 1
  store i64 %310, ptr %207, align 8, !tbaa !18
  %311 = load i64, ptr %208, align 8, !tbaa !20
  %312 = icmp ult i64 %310, %311
  br i1 %312, label %318, label %313

313:                                              ; preds = %308
  %314 = load ptr, ptr %0, align 8, !tbaa !15
  %315 = getelementptr inbounds i8, ptr %314, i64 24
  %316 = load ptr, ptr %315, align 8, !tbaa !16
  %317 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %316, ptr noundef nonnull dereferenceable(1) @.str.3) #6
  br label %333

318:                                              ; preds = %308
  %319 = load ptr, ptr %209, align 8, !tbaa !21
  %320 = getelementptr inbounds i8, ptr %319, i64 %310
  %321 = load i8, ptr %320, align 1, !tbaa !19
  %322 = tail call zeroext i1 @ush_utils_is_printable(i8 noundef zeroext %321) #6
  %323 = load ptr, ptr %0, align 8, !tbaa !15
  %324 = getelementptr inbounds i8, ptr %323, i64 24
  %325 = load ptr, ptr %324, align 8, !tbaa !16
  br i1 %322, label %328, label %326

326:                                              ; preds = %318
  %327 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %325, ptr noundef nonnull dereferenceable(1) @.str.5) #6
  br label %333

328:                                              ; preds = %318
  %329 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %325) #7
  %330 = getelementptr inbounds i8, ptr %325, i64 %329
  %331 = sext i8 %321 to i32
  %332 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %330, ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %331) #6
  br label %333

333:                                              ; preds = %328, %326, %313
  %334 = load i64, ptr %207, align 8, !tbaa !18
  %335 = add i64 %334, 1
  store i64 %335, ptr %207, align 8, !tbaa !18
  %336 = load i64, ptr %208, align 8, !tbaa !20
  %337 = icmp ult i64 %335, %336
  br i1 %337, label %343, label %338

338:                                              ; preds = %333
  %339 = load ptr, ptr %0, align 8, !tbaa !15
  %340 = getelementptr inbounds i8, ptr %339, i64 24
  %341 = load ptr, ptr %340, align 8, !tbaa !16
  %342 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %341, ptr noundef nonnull dereferenceable(1) @.str.3) #6
  br label %358

343:                                              ; preds = %333
  %344 = load ptr, ptr %209, align 8, !tbaa !21
  %345 = getelementptr inbounds i8, ptr %344, i64 %335
  %346 = load i8, ptr %345, align 1, !tbaa !19
  %347 = tail call zeroext i1 @ush_utils_is_printable(i8 noundef zeroext %346) #6
  %348 = load ptr, ptr %0, align 8, !tbaa !15
  %349 = getelementptr inbounds i8, ptr %348, i64 24
  %350 = load ptr, ptr %349, align 8, !tbaa !16
  br i1 %347, label %353, label %351

351:                                              ; preds = %343
  %352 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %350, ptr noundef nonnull dereferenceable(1) @.str.5) #6
  br label %358

353:                                              ; preds = %343
  %354 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %350) #7
  %355 = getelementptr inbounds i8, ptr %350, i64 %354
  %356 = sext i8 %346 to i32
  %357 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %355, ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %356) #6
  br label %358

358:                                              ; preds = %353, %351, %338
  %359 = load i64, ptr %207, align 8, !tbaa !18
  %360 = add i64 %359, 1
  store i64 %360, ptr %207, align 8, !tbaa !18
  %361 = load i64, ptr %208, align 8, !tbaa !20
  %362 = icmp ult i64 %360, %361
  br i1 %362, label %368, label %363

363:                                              ; preds = %358
  %364 = load ptr, ptr %0, align 8, !tbaa !15
  %365 = getelementptr inbounds i8, ptr %364, i64 24
  %366 = load ptr, ptr %365, align 8, !tbaa !16
  %367 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %366, ptr noundef nonnull dereferenceable(1) @.str.3) #6
  br label %383

368:                                              ; preds = %358
  %369 = load ptr, ptr %209, align 8, !tbaa !21
  %370 = getelementptr inbounds i8, ptr %369, i64 %360
  %371 = load i8, ptr %370, align 1, !tbaa !19
  %372 = tail call zeroext i1 @ush_utils_is_printable(i8 noundef zeroext %371) #6
  %373 = load ptr, ptr %0, align 8, !tbaa !15
  %374 = getelementptr inbounds i8, ptr %373, i64 24
  %375 = load ptr, ptr %374, align 8, !tbaa !16
  br i1 %372, label %378, label %376

376:                                              ; preds = %368
  %377 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %375, ptr noundef nonnull dereferenceable(1) @.str.5) #6
  br label %383

378:                                              ; preds = %368
  %379 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %375) #7
  %380 = getelementptr inbounds i8, ptr %375, i64 %379
  %381 = sext i8 %371 to i32
  %382 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %380, ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %381) #6
  br label %383

383:                                              ; preds = %378, %376, %363
  %384 = load i64, ptr %207, align 8, !tbaa !18
  %385 = add i64 %384, 1
  store i64 %385, ptr %207, align 8, !tbaa !18
  %386 = load i64, ptr %208, align 8, !tbaa !20
  %387 = icmp ult i64 %385, %386
  br i1 %387, label %393, label %388

388:                                              ; preds = %383
  %389 = load ptr, ptr %0, align 8, !tbaa !15
  %390 = getelementptr inbounds i8, ptr %389, i64 24
  %391 = load ptr, ptr %390, align 8, !tbaa !16
  %392 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %391, ptr noundef nonnull dereferenceable(1) @.str.3) #6
  br label %408

393:                                              ; preds = %383
  %394 = load ptr, ptr %209, align 8, !tbaa !21
  %395 = getelementptr inbounds i8, ptr %394, i64 %385
  %396 = load i8, ptr %395, align 1, !tbaa !19
  %397 = tail call zeroext i1 @ush_utils_is_printable(i8 noundef zeroext %396) #6
  %398 = load ptr, ptr %0, align 8, !tbaa !15
  %399 = getelementptr inbounds i8, ptr %398, i64 24
  %400 = load ptr, ptr %399, align 8, !tbaa !16
  br i1 %397, label %403, label %401

401:                                              ; preds = %393
  %402 = tail call ptr @strcat(ptr noundef nonnull dereferenceable(1) %400, ptr noundef nonnull dereferenceable(1) @.str.5) #6
  br label %408

403:                                              ; preds = %393
  %404 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) %400) #7
  %405 = getelementptr inbounds i8, ptr %400, i64 %404
  %406 = sext i8 %396 to i32
  %407 = tail call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %405, ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef %406) #6
  br label %408

408:                                              ; preds = %403, %401, %388
  %409 = load i64, ptr %207, align 8, !tbaa !18
  %410 = add i64 %409, 1
  store i64 %410, ptr %207, align 8, !tbaa !18
  %411 = load ptr, ptr %0, align 8, !tbaa !15
  %412 = getelementptr inbounds i8, ptr %411, i64 24
  %413 = load ptr, ptr %412, align 8, !tbaa !16
  %414 = load i32, ptr %3, align 8, !tbaa !5
  tail call void @ush_write_pointer(ptr noundef nonnull %0, ptr noundef %413, i32 noundef %414) #6
  store i64 3, ptr %8, align 8, !tbaa !14
  br label %423

415:                                              ; preds = %7
  %416 = getelementptr inbounds i8, ptr %0, i64 192
  %417 = load i64, ptr %416, align 8, !tbaa !18
  %418 = getelementptr inbounds i8, ptr %0, i64 208
  %419 = load i64, ptr %418, align 8, !tbaa !20
  %.not = icmp ult i64 %417, %419
  br i1 %.not, label %421, label %420

420:                                              ; preds = %415
  tail call void @ush_write_pointer(ptr noundef nonnull %0, ptr noundef nonnull @.str.6, i32 noundef 16) #6
  br label %423

421:                                              ; preds = %415
  tail call void @ush_write_pointer(ptr noundef nonnull %0, ptr noundef nonnull @.str.6, i32 noundef 15) #6
  store i64 0, ptr %8, align 8, !tbaa !14
  br label %423

422:                                              ; preds = %2
  store i32 1, ptr %3, align 8, !tbaa !5
  br label %423

423:                                              ; preds = %2, %10, %194, %408, %420, %421, %7, %422, %5
  %.0 = phi i1 [ true, %422 ], [ true, %7 ], [ true, %420 ], [ true, %421 ], [ true, %408 ], [ true, %194 ], [ true, %10 ], [ true, %5 ], [ false, %2 ]
  ret i1 %.0
}

; Function Attrs: nofree nounwind
declare noundef i32 @sprintf(ptr noalias nocapture noundef writeonly, ptr nocapture noundef readonly, ...) local_unnamed_addr #1

declare void @ush_write_pointer(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: readwrite)
declare ptr @strcat(ptr noalias noundef returned, ptr noalias nocapture noundef readonly) local_unnamed_addr #4

declare zeroext i1 @ush_utils_is_printable(i8 noundef zeroext) local_unnamed_addr #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #5

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 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress 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 #4 = { mustprogress nofree nounwind willreturn memory(argmem: readwrite) "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: write) }
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, !10, i64 8}
!6 = !{!"ush_object", !7, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !7, i64 24, !11, i64 32, !11, i64 40, !10, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !12, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !13, i64 112, !7, i64 160, !7, i64 168, !7, i64 176, !11, i64 184, !11, i64 192, !7, i64 200, !11, i64 208, !10, i64 216, !10, i64 220, !7, i64 224, !7, i64 232, !7, i64 240, !11, i64 248, !11, i64 256, !11, i64 264}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"long", !8, i64 0}
!12 = !{!"_Bool", !8, i64 0}
!13 = !{!"ush_node_object", !7, i64 0, !11, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40}
!14 = !{!6, !11, i64 184}
!15 = !{!6, !7, i64 0}
!16 = !{!17, !7, i64 24}
!17 = !{!"ush_descriptor", !7, i64 0, !7, i64 8, !11, i64 16, !7, i64 24, !11, i64 32, !11, i64 40, !7, i64 48, !7, i64 56}
!18 = !{!6, !11, i64 192}
!19 = !{!8, !8, i64 0}
!20 = !{!6, !11, i64 208}
!21 = !{!6, !7, i64 200}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,LICMPass,LoopRotatePass,MemCpyOptPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass