; LLVM IR from ritikbanger/Hacktoberfest2022-DSA :: 30. CPP Programs (BruteForce_StringMatching)

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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [57 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca [20 x i8], align 16
  %3 = alloca [4 x i8], align 1
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  call void @llvm.lifetime.start.p0(i64 20, ptr %2) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  %7 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str)
  %8 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.1)
  %9 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  store i32 0, ptr %4, align 4, !tbaa !5
  br label %10

10:                                               ; preds = %18, %0
  %11 = load i32, ptr %4, align 4, !tbaa !5
  %12 = icmp slt i32 %11, 4
  br i1 %12, label %13, label %21

13:                                               ; preds = %10
  %14 = load i32, ptr %4, align 4, !tbaa !5
  %15 = sext i32 %14 to i64
  %16 = getelementptr inbounds [4 x i8], ptr %3, i64 0, i64 %15
  %17 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str.2, ptr noundef %16)
  br label %18

18:                                               ; preds = %13
  %19 = load i32, ptr %4, align 4, !tbaa !5
  %20 = add nsw i32 %19, 1
  store i32 %20, ptr %4, align 4, !tbaa !5
  br label %10, !llvm.loop !9

21:                                               ; preds = %10
  %22 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.3)
  %23 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  store i32 0, ptr %4, align 4, !tbaa !5
  br label %24

24:                                               ; preds = %32, %21
  %25 = load i32, ptr %4, align 4, !tbaa !5
  %26 = icmp slt i32 %25, 20
  br i1 %26, label %27, label %35

27:                                               ; preds = %24
  %28 = load i32, ptr %4, align 4, !tbaa !5
  %29 = sext i32 %28 to i64
  %30 = getelementptr inbounds [20 x i8], ptr %2, i64 0, i64 %29
  %31 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str.2, ptr noundef %30)
  br label %32

32:                                               ; preds = %27
  %33 = load i32, ptr %4, align 4, !tbaa !5
  %34 = add nsw i32 %33, 1
  store i32 %34, ptr %4, align 4, !tbaa !5
  br label %24, !llvm.loop !11

35:                                               ; preds = %24
  store i32 -1, ptr %4, align 4, !tbaa !5
  store i32 -1, ptr %6, align 4, !tbaa !5
  br label %36

36:                                               ; preds = %72, %35
  %37 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %37, ptr %5, align 4, !tbaa !5
  br label %38

38:                                               ; preds = %58, %36
  %39 = load i32, ptr %4, align 4, !tbaa !5
  %40 = add nsw i32 %39, 1
  store i32 %40, ptr %4, align 4, !tbaa !5
  %41 = load i32, ptr %5, align 4, !tbaa !5
  %42 = add nsw i32 %41, 1
  store i32 %42, ptr %5, align 4, !tbaa !5
  br label %43

43:                                               ; preds = %38
  %44 = load i32, ptr %5, align 4, !tbaa !5
  %45 = sext i32 %44 to i64
  %46 = getelementptr inbounds [20 x i8], ptr %2, i64 0, i64 %45
  %47 = load i8, ptr %46, align 1, !tbaa !12
  %48 = sext i8 %47 to i32
  %49 = load i32, ptr %4, align 4, !tbaa !5
  %50 = sext i32 %49 to i64
  %51 = getelementptr inbounds [4 x i8], ptr %3, i64 0, i64 %50
  %52 = load i8, ptr %51, align 1, !tbaa !12
  %53 = sext i8 %52 to i32
  %54 = icmp eq i32 %48, %53
  br i1 %54, label %55, label %58

55:                                               ; preds = %43
  %56 = load i32, ptr %4, align 4, !tbaa !5
  %57 = icmp slt i32 %56, 4
  br label %58

58:                                               ; preds = %55, %43
  %59 = phi i1 [ false, %43 ], [ %57, %55 ]
  br i1 %59, label %38, label %60, !llvm.loop !13

60:                                               ; preds = %58
  %61 = load i32, ptr %4, align 4, !tbaa !5
  %62 = icmp slt i32 %61, 4
  br i1 %62, label %63, label %66

63:                                               ; preds = %60
  store i32 -1, ptr %4, align 4, !tbaa !5
  %64 = load i32, ptr %6, align 4, !tbaa !5
  %65 = add nsw i32 %64, 1
  store i32 %65, ptr %6, align 4, !tbaa !5
  br label %71

66:                                               ; preds = %60
  %67 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.4)
  %68 = load i32, ptr %6, align 4, !tbaa !5
  %69 = add nsw i32 %68, 1
  %70 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %67, i32 noundef %69)
  br label %75

71:                                               ; preds = %63
  br label %72

72:                                               ; preds = %71
  %73 = load i32, ptr %6, align 4, !tbaa !5
  %74 = icmp slt i32 %73, 20
  br i1 %74, label %36, label %75, !llvm.loop !14

75:                                               ; preds = %72, %66
  %76 = load i32, ptr %4, align 4, !tbaa !5
  %77 = icmp slt i32 %76, 4
  br i1 %77, label %78, label %80

78:                                               ; preds = %75
  %79 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @.str.5)
  br label %80

80:                                               ; preds = %78, %75
  %81 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %82 = call i32 @system(ptr noundef @.str.6)
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #5
  call void @llvm.lifetime.end.p0(i64 20, ptr %2) #5
  ret i32 0
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #2

declare i32 @__isoc99_scanf(ptr noundef, ...) #4

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #4

declare i32 @system(ptr noundef) #4

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = !{!7, !7, i64 0}
!13 = distinct !{!13, !10}
!14 = distinct !{!14, !10}


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

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@.str = external hidden unnamed_addr constant [57 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [6 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() local_unnamed_addr #0 {
.preheader.preheader:
  %0 = alloca [20 x i8], align 16
  %1 = alloca [4 x i8], align 1
  call void @llvm.lifetime.start.p0(i64 20, ptr nonnull %0) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %1) #7
  %2 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str)
  %3 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.1)
  %4 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %5 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %1)
  %6 = getelementptr inbounds i8, ptr %1, i64 1
  %7 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %6)
  %8 = getelementptr inbounds i8, ptr %1, i64 2
  %9 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %8)
  %10 = getelementptr inbounds i8, ptr %1, i64 3
  %11 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %10)
  %12 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.3)
  %13 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %14 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %0)
  %15 = getelementptr inbounds i8, ptr %0, i64 1
  %16 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %15)
  %17 = getelementptr inbounds i8, ptr %0, i64 2
  %18 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %17)
  %19 = getelementptr inbounds i8, ptr %0, i64 3
  %20 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %19)
  %21 = getelementptr inbounds i8, ptr %0, i64 4
  %22 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %21)
  %23 = getelementptr inbounds i8, ptr %0, i64 5
  %24 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %23)
  %25 = getelementptr inbounds i8, ptr %0, i64 6
  %26 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %25)
  %27 = getelementptr inbounds i8, ptr %0, i64 7
  %28 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %27)
  %29 = getelementptr inbounds i8, ptr %0, i64 8
  %30 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %29)
  %31 = getelementptr inbounds i8, ptr %0, i64 9
  %32 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %31)
  %33 = getelementptr inbounds i8, ptr %0, i64 10
  %34 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %33)
  %35 = getelementptr inbounds i8, ptr %0, i64 11
  %36 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %35)
  %37 = getelementptr inbounds i8, ptr %0, i64 12
  %38 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %37)
  %39 = getelementptr inbounds i8, ptr %0, i64 13
  %40 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %39)
  %41 = getelementptr inbounds i8, ptr %0, i64 14
  %42 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %41)
  %43 = getelementptr inbounds i8, ptr %0, i64 15
  %44 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %43)
  %45 = getelementptr inbounds i8, ptr %0, i64 16
  %46 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %45)
  %47 = getelementptr inbounds i8, ptr %0, i64 17
  %48 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %47)
  %49 = getelementptr inbounds i8, ptr %0, i64 18
  %50 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %49)
  %51 = getelementptr inbounds i8, ptr %0, i64 19
  %52 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.2, ptr noundef nonnull %51)
  %53 = load i8, ptr %0, align 16, !tbaa !5
  %54 = load i8, ptr %1, align 1, !tbaa !5
  %55 = icmp eq i8 %53, %54
  br i1 %55, label %56, label %.preheader.1, !llvm.loop !8

56:                                               ; preds = %.preheader.preheader
  %57 = getelementptr inbounds i8, ptr %0, i64 1
  %58 = load i8, ptr %57, align 1, !tbaa !5
  %59 = getelementptr inbounds i8, ptr %1, i64 1
  %60 = load i8, ptr %59, align 1, !tbaa !5
  %61 = icmp eq i8 %58, %60
  br i1 %61, label %62, label %.preheader.1, !llvm.loop !8

62:                                               ; preds = %56
  %63 = getelementptr inbounds i8, ptr %0, i64 2
  %64 = load i8, ptr %63, align 2, !tbaa !5
  %65 = getelementptr inbounds i8, ptr %1, i64 2
  %66 = load i8, ptr %65, align 1, !tbaa !5
  %67 = icmp eq i8 %64, %66
  br i1 %67, label %68, label %.preheader.1, !llvm.loop !8

68:                                               ; preds = %62
  %69 = getelementptr inbounds i8, ptr %0, i64 3
  %70 = load i8, ptr %69, align 1, !tbaa !5
  %71 = getelementptr inbounds i8, ptr %1, i64 3
  %72 = load i8, ptr %71, align 1, !tbaa !5
  %73 = icmp eq i8 %70, %72
  %spec.select = select i1 %73, i1 false, i1 true
  br i1 %spec.select, label %.preheader.1, label %455

.preheader.1:                                     ; preds = %.preheader.preheader, %56, %62, %68
  %74 = getelementptr inbounds i8, ptr %0, i64 1
  %75 = load i8, ptr %74, align 1, !tbaa !5
  %76 = load i8, ptr %1, align 1, !tbaa !5
  %77 = icmp eq i8 %75, %76
  br i1 %77, label %.preheader.1.1, label %.preheader.2, !llvm.loop !8

.preheader.1.1:                                   ; preds = %.preheader.1
  %78 = getelementptr inbounds i8, ptr %0, i64 2
  %79 = load i8, ptr %78, align 2, !tbaa !5
  %80 = getelementptr inbounds i8, ptr %1, i64 1
  %81 = load i8, ptr %80, align 1, !tbaa !5
  %82 = icmp eq i8 %79, %81
  br i1 %82, label %.preheader.1.2, label %.preheader.2, !llvm.loop !8

.preheader.1.2:                                   ; preds = %.preheader.1.1
  %83 = getelementptr inbounds i8, ptr %0, i64 3
  %84 = load i8, ptr %83, align 1, !tbaa !5
  %85 = getelementptr inbounds i8, ptr %1, i64 2
  %86 = load i8, ptr %85, align 1, !tbaa !5
  %87 = icmp eq i8 %84, %86
  br i1 %87, label %.preheader.1.3, label %.preheader.2, !llvm.loop !8

.preheader.1.3:                                   ; preds = %.preheader.1.2
  %88 = getelementptr inbounds i8, ptr %0, i64 4
  %89 = load i8, ptr %88, align 4, !tbaa !5
  %90 = getelementptr inbounds i8, ptr %1, i64 3
  %91 = load i8, ptr %90, align 1, !tbaa !5
  %92 = icmp eq i8 %89, %91
  %spec.select103 = select i1 %92, i1 false, i1 true
  br i1 %spec.select103, label %.preheader.2, label %455

.preheader.2:                                     ; preds = %.preheader.1, %.preheader.1.1, %.preheader.1.2, %.preheader.1.3
  %93 = getelementptr inbounds i8, ptr %0, i64 2
  %94 = load i8, ptr %93, align 2, !tbaa !5
  %95 = load i8, ptr %1, align 1, !tbaa !5
  %96 = icmp eq i8 %94, %95
  br i1 %96, label %.preheader.2.1, label %.preheader.3, !llvm.loop !8

.preheader.2.1:                                   ; preds = %.preheader.2
  %97 = getelementptr inbounds i8, ptr %0, i64 3
  %98 = load i8, ptr %97, align 1, !tbaa !5
  %99 = getelementptr inbounds i8, ptr %1, i64 1
  %100 = load i8, ptr %99, align 1, !tbaa !5
  %101 = icmp eq i8 %98, %100
  br i1 %101, label %.preheader.2.2, label %.preheader.3, !llvm.loop !8

.preheader.2.2:                                   ; preds = %.preheader.2.1
  %102 = getelementptr inbounds i8, ptr %0, i64 4
  %103 = load i8, ptr %102, align 4, !tbaa !5
  %104 = getelementptr inbounds i8, ptr %1, i64 2
  %105 = load i8, ptr %104, align 1, !tbaa !5
  %106 = icmp eq i8 %103, %105
  br i1 %106, label %.preheader.2.3, label %.preheader.3, !llvm.loop !8

.preheader.2.3:                                   ; preds = %.preheader.2.2
  %107 = getelementptr inbounds i8, ptr %0, i64 5
  %108 = load i8, ptr %107, align 1, !tbaa !5
  %109 = getelementptr inbounds i8, ptr %1, i64 3
  %110 = load i8, ptr %109, align 1, !tbaa !5
  %111 = icmp eq i8 %108, %110
  %spec.select104 = select i1 %111, i1 false, i1 true
  br i1 %spec.select104, label %.preheader.3, label %455

.preheader.3:                                     ; preds = %.preheader.2, %.preheader.2.1, %.preheader.2.2, %.preheader.2.3
  %112 = getelementptr inbounds i8, ptr %0, i64 3
  %113 = load i8, ptr %112, align 1, !tbaa !5
  %114 = load i8, ptr %1, align 1, !tbaa !5
  %115 = icmp eq i8 %113, %114
  br i1 %115, label %.preheader.3.1, label %.preheader.4, !llvm.loop !8

.preheader.3.1:                                   ; preds = %.preheader.3
  %116 = getelementptr inbounds i8, ptr %0, i64 4
  %117 = load i8, ptr %116, align 4, !tbaa !5
  %118 = getelementptr inbounds i8, ptr %1, i64 1
  %119 = load i8, ptr %118, align 1, !tbaa !5
  %120 = icmp eq i8 %117, %119
  br i1 %120, label %.preheader.3.2, label %.preheader.4, !llvm.loop !8

.preheader.3.2:                                   ; preds = %.preheader.3.1
  %121 = getelementptr inbounds i8, ptr %0, i64 5
  %122 = load i8, ptr %121, align 1, !tbaa !5
  %123 = getelementptr inbounds i8, ptr %1, i64 2
  %124 = load i8, ptr %123, align 1, !tbaa !5
  %125 = icmp eq i8 %122, %124
  br i1 %125, label %.preheader.3.3, label %.preheader.4, !llvm.loop !8

.preheader.3.3:                                   ; preds = %.preheader.3.2
  %126 = getelementptr inbounds i8, ptr %0, i64 6
  %127 = load i8, ptr %126, align 2, !tbaa !5
  %128 = getelementptr inbounds i8, ptr %1, i64 3
  %129 = load i8, ptr %128, align 1, !tbaa !5
  %130 = icmp eq i8 %127, %129
  %spec.select105 = select i1 %130, i1 false, i1 true
  br i1 %spec.select105, label %.preheader.4, label %455

.preheader.4:                                     ; preds = %.preheader.3, %.preheader.3.1, %.preheader.3.2, %.preheader.3.3
  %131 = getelementptr inbounds i8, ptr %0, i64 4
  %132 = load i8, ptr %131, align 4, !tbaa !5
  %133 = load i8, ptr %1, align 1, !tbaa !5
  %134 = icmp eq i8 %132, %133
  br i1 %134, label %.preheader.4.1, label %.preheader.5, !llvm.loop !8

.preheader.4.1:                                   ; preds = %.preheader.4
  %135 = getelementptr inbounds i8, ptr %0, i64 5
  %136 = load i8, ptr %135, align 1, !tbaa !5
  %137 = getelementptr inbounds i8, ptr %1, i64 1
  %138 = load i8, ptr %137, align 1, !tbaa !5
  %139 = icmp eq i8 %136, %138
  br i1 %139, label %.preheader.4.2, label %.preheader.5, !llvm.loop !8

.preheader.4.2:                                   ; preds = %.preheader.4.1
  %140 = getelementptr inbounds i8, ptr %0, i64 6
  %141 = load i8, ptr %140, align 2, !tbaa !5
  %142 = getelementptr inbounds i8, ptr %1, i64 2
  %143 = load i8, ptr %142, align 1, !tbaa !5
  %144 = icmp eq i8 %141, %143
  br i1 %144, label %.preheader.4.3, label %.preheader.5, !llvm.loop !8

.preheader.4.3:                                   ; preds = %.preheader.4.2
  %145 = getelementptr inbounds i8, ptr %0, i64 7
  %146 = load i8, ptr %145, align 1, !tbaa !5
  %147 = getelementptr inbounds i8, ptr %1, i64 3
  %148 = load i8, ptr %147, align 1, !tbaa !5
  %149 = icmp eq i8 %146, %148
  %spec.select106 = select i1 %149, i1 false, i1 true
  br i1 %spec.select106, label %.preheader.5, label %455

.preheader.5:                                     ; preds = %.preheader.4, %.preheader.4.1, %.preheader.4.2, %.preheader.4.3
  %150 = getelementptr inbounds i8, ptr %0, i64 5
  %151 = load i8, ptr %150, align 1, !tbaa !5
  %152 = load i8, ptr %1, align 1, !tbaa !5
  %153 = icmp eq i8 %151, %152
  br i1 %153, label %.preheader.5.1, label %.preheader.6, !llvm.loop !8

.preheader.5.1:                                   ; preds = %.preheader.5
  %154 = getelementptr inbounds i8, ptr %0, i64 6
  %155 = load i8, ptr %154, align 2, !tbaa !5
  %156 = getelementptr inbounds i8, ptr %1, i64 1
  %157 = load i8, ptr %156, align 1, !tbaa !5
  %158 = icmp eq i8 %155, %157
  br i1 %158, label %.preheader.5.2, label %.preheader.6, !llvm.loop !8

.preheader.5.2:                                   ; preds = %.preheader.5.1
  %159 = getelementptr inbounds i8, ptr %0, i64 7
  %160 = load i8, ptr %159, align 1, !tbaa !5
  %161 = getelementptr inbounds i8, ptr %1, i64 2
  %162 = load i8, ptr %161, align 1, !tbaa !5
  %163 = icmp eq i8 %160, %162
  br i1 %163, label %.preheader.5.3, label %.preheader.6, !llvm.loop !8

.preheader.5.3:                                   ; preds = %.preheader.5.2
  %164 = getelementptr inbounds i8, ptr %0, i64 8
  %165 = load i8, ptr %164, align 8, !tbaa !5
  %166 = getelementptr inbounds i8, ptr %1, i64 3
  %167 = load i8, ptr %166, align 1, !tbaa !5
  %168 = icmp eq i8 %165, %167
  %spec.select107 = select i1 %168, i1 false, i1 true
  br i1 %spec.select107, label %.preheader.6, label %455

.preheader.6:                                     ; preds = %.preheader.5, %.preheader.5.1, %.preheader.5.2, %.preheader.5.3
  %169 = getelementptr inbounds i8, ptr %0, i64 6
  %170 = load i8, ptr %169, align 2, !tbaa !5
  %171 = load i8, ptr %1, align 1, !tbaa !5
  %172 = icmp eq i8 %170, %171
  br i1 %172, label %.preheader.6.1, label %.preheader.7, !llvm.loop !8

.preheader.6.1:                                   ; preds = %.preheader.6
  %173 = getelementptr inbounds i8, ptr %0, i64 7
  %174 = load i8, ptr %173, align 1, !tbaa !5
  %175 = getelementptr inbounds i8, ptr %1, i64 1
  %176 = load i8, ptr %175, align 1, !tbaa !5
  %177 = icmp eq i8 %174, %176
  br i1 %177, label %.preheader.6.2, label %.preheader.7, !llvm.loop !8

.preheader.6.2:                                   ; preds = %.preheader.6.1
  %178 = getelementptr inbounds i8, ptr %0, i64 8
  %179 = load i8, ptr %178, align 8, !tbaa !5
  %180 = getelementptr inbounds i8, ptr %1, i64 2
  %181 = load i8, ptr %180, align 1, !tbaa !5
  %182 = icmp eq i8 %179, %181
  br i1 %182, label %.preheader.6.3, label %.preheader.7, !llvm.loop !8

.preheader.6.3:                                   ; preds = %.preheader.6.2
  %183 = getelementptr inbounds i8, ptr %0, i64 9
  %184 = load i8, ptr %183, align 1, !tbaa !5
  %185 = getelementptr inbounds i8, ptr %1, i64 3
  %186 = load i8, ptr %185, align 1, !tbaa !5
  %187 = icmp eq i8 %184, %186
  %spec.select108 = select i1 %187, i1 false, i1 true
  br i1 %spec.select108, label %.preheader.7, label %455

.preheader.7:                                     ; preds = %.preheader.6, %.preheader.6.1, %.preheader.6.2, %.preheader.6.3
  %188 = getelementptr inbounds i8, ptr %0, i64 7
  %189 = load i8, ptr %188, align 1, !tbaa !5
  %190 = load i8, ptr %1, align 1, !tbaa !5
  %191 = icmp eq i8 %189, %190
  br i1 %191, label %.preheader.7.1, label %.preheader.8, !llvm.loop !8

.preheader.7.1:                                   ; preds = %.preheader.7
  %192 = getelementptr inbounds i8, ptr %0, i64 8
  %193 = load i8, ptr %192, align 8, !tbaa !5
  %194 = getelementptr inbounds i8, ptr %1, i64 1
  %195 = load i8, ptr %194, align 1, !tbaa !5
  %196 = icmp eq i8 %193, %195
  br i1 %196, label %.preheader.7.2, label %.preheader.8, !llvm.loop !8

.preheader.7.2:                                   ; preds = %.preheader.7.1
  %197 = getelementptr inbounds i8, ptr %0, i64 9
  %198 = load i8, ptr %197, align 1, !tbaa !5
  %199 = getelementptr inbounds i8, ptr %1, i64 2
  %200 = load i8, ptr %199, align 1, !tbaa !5
  %201 = icmp eq i8 %198, %200
  br i1 %201, label %.preheader.7.3, label %.preheader.8, !llvm.loop !8

.preheader.7.3:                                   ; preds = %.preheader.7.2
  %202 = getelementptr inbounds i8, ptr %0, i64 10
  %203 = load i8, ptr %202, align 2, !tbaa !5
  %204 = getelementptr inbounds i8, ptr %1, i64 3
  %205 = load i8, ptr %204, align 1, !tbaa !5
  %206 = icmp eq i8 %203, %205
  %spec.select109 = select i1 %206, i1 false, i1 true
  br i1 %spec.select109, label %.preheader.8, label %455

.preheader.8:                                     ; preds = %.preheader.7, %.preheader.7.1, %.preheader.7.2, %.preheader.7.3
  %207 = getelementptr inbounds i8, ptr %0, i64 8
  %208 = load i8, ptr %207, align 8, !tbaa !5
  %209 = load i8, ptr %1, align 1, !tbaa !5
  %210 = icmp eq i8 %208, %209
  br i1 %210, label %.preheader.8.1, label %.preheader.9, !llvm.loop !8

.preheader.8.1:                                   ; preds = %.preheader.8
  %211 = getelementptr inbounds i8, ptr %0, i64 9
  %212 = load i8, ptr %211, align 1, !tbaa !5
  %213 = getelementptr inbounds i8, ptr %1, i64 1
  %214 = load i8, ptr %213, align 1, !tbaa !5
  %215 = icmp eq i8 %212, %214
  br i1 %215, label %.preheader.8.2, label %.preheader.9, !llvm.loop !8

.preheader.8.2:                                   ; preds = %.preheader.8.1
  %216 = getelementptr inbounds i8, ptr %0, i64 10
  %217 = load i8, ptr %216, align 2, !tbaa !5
  %218 = getelementptr inbounds i8, ptr %1, i64 2
  %219 = load i8, ptr %218, align 1, !tbaa !5
  %220 = icmp eq i8 %217, %219
  br i1 %220, label %.preheader.8.3, label %.preheader.9, !llvm.loop !8

.preheader.8.3:                                   ; preds = %.preheader.8.2
  %221 = getelementptr inbounds i8, ptr %0, i64 11
  %222 = load i8, ptr %221, align 1, !tbaa !5
  %223 = getelementptr inbounds i8, ptr %1, i64 3
  %224 = load i8, ptr %223, align 1, !tbaa !5
  %225 = icmp eq i8 %222, %224
  %spec.select110 = select i1 %225, i1 false, i1 true
  br i1 %spec.select110, label %.preheader.9, label %455

.preheader.9:                                     ; preds = %.preheader.8, %.preheader.8.1, %.preheader.8.2, %.preheader.8.3
  %226 = getelementptr inbounds i8, ptr %0, i64 9
  %227 = load i8, ptr %226, align 1, !tbaa !5
  %228 = load i8, ptr %1, align 1, !tbaa !5
  %229 = icmp eq i8 %227, %228
  br i1 %229, label %.preheader.9.1, label %.preheader.10, !llvm.loop !8

.preheader.9.1:                                   ; preds = %.preheader.9
  %230 = getelementptr inbounds i8, ptr %0, i64 10
  %231 = load i8, ptr %230, align 2, !tbaa !5
  %232 = getelementptr inbounds i8, ptr %1, i64 1
  %233 = load i8, ptr %232, align 1, !tbaa !5
  %234 = icmp eq i8 %231, %233
  br i1 %234, label %.preheader.9.2, label %.preheader.10, !llvm.loop !8

.preheader.9.2:                                   ; preds = %.preheader.9.1
  %235 = getelementptr inbounds i8, ptr %0, i64 11
  %236 = load i8, ptr %235, align 1, !tbaa !5
  %237 = getelementptr inbounds i8, ptr %1, i64 2
  %238 = load i8, ptr %237, align 1, !tbaa !5
  %239 = icmp eq i8 %236, %238
  br i1 %239, label %.preheader.9.3, label %.preheader.10, !llvm.loop !8

.preheader.9.3:                                   ; preds = %.preheader.9.2
  %240 = getelementptr inbounds i8, ptr %0, i64 12
  %241 = load i8, ptr %240, align 4, !tbaa !5
  %242 = getelementptr inbounds i8, ptr %1, i64 3
  %243 = load i8, ptr %242, align 1, !tbaa !5
  %244 = icmp eq i8 %241, %243
  %spec.select111 = select i1 %244, i1 false, i1 true
  br i1 %spec.select111, label %.preheader.10, label %455

.preheader.10:                                    ; preds = %.preheader.9, %.preheader.9.1, %.preheader.9.2, %.preheader.9.3
  %245 = getelementptr inbounds i8, ptr %0, i64 10
  %246 = load i8, ptr %245, align 2, !tbaa !5
  %247 = load i8, ptr %1, align 1, !tbaa !5
  %248 = icmp eq i8 %246, %247
  br i1 %248, label %.preheader.10.1, label %.preheader.11, !llvm.loop !8

.preheader.10.1:                                  ; preds = %.preheader.10
  %249 = getelementptr inbounds i8, ptr %0, i64 11
  %250 = load i8, ptr %249, align 1, !tbaa !5
  %251 = getelementptr inbounds i8, ptr %1, i64 1
  %252 = load i8, ptr %251, align 1, !tbaa !5
  %253 = icmp eq i8 %250, %252
  br i1 %253, label %.preheader.10.2, label %.preheader.11, !llvm.loop !8

.preheader.10.2:                                  ; preds = %.preheader.10.1
  %254 = getelementptr inbounds i8, ptr %0, i64 12
  %255 = load i8, ptr %254, align 4, !tbaa !5
  %256 = getelementptr inbounds i8, ptr %1, i64 2
  %257 = load i8, ptr %256, align 1, !tbaa !5
  %258 = icmp eq i8 %255, %257
  br i1 %258, label %.preheader.10.3, label %.preheader.11, !llvm.loop !8

.preheader.10.3:                                  ; preds = %.preheader.10.2
  %259 = getelementptr inbounds i8, ptr %0, i64 13
  %260 = load i8, ptr %259, align 1, !tbaa !5
  %261 = getelementptr inbounds i8, ptr %1, i64 3
  %262 = load i8, ptr %261, align 1, !tbaa !5
  %263 = icmp eq i8 %260, %262
  %spec.select112 = select i1 %263, i1 false, i1 true
  br i1 %spec.select112, label %.preheader.11, label %455

.preheader.11:                                    ; preds = %.preheader.10, %.preheader.10.1, %.preheader.10.2, %.preheader.10.3
  %264 = getelementptr inbounds i8, ptr %0, i64 11
  %265 = load i8, ptr %264, align 1, !tbaa !5
  %266 = load i8, ptr %1, align 1, !tbaa !5
  %267 = icmp eq i8 %265, %266
  br i1 %267, label %.preheader.11.1, label %.preheader.12, !llvm.loop !8

.preheader.11.1:                                  ; preds = %.preheader.11
  %268 = getelementptr inbounds i8, ptr %0, i64 12
  %269 = load i8, ptr %268, align 4, !tbaa !5
  %270 = getelementptr inbounds i8, ptr %1, i64 1
  %271 = load i8, ptr %270, align 1, !tbaa !5
  %272 = icmp eq i8 %269, %271
  br i1 %272, label %.preheader.11.2, label %.preheader.12, !llvm.loop !8

.preheader.11.2:                                  ; preds = %.preheader.11.1
  %273 = getelementptr inbounds i8, ptr %0, i64 13
  %274 = load i8, ptr %273, align 1, !tbaa !5
  %275 = getelementptr inbounds i8, ptr %1, i64 2
  %276 = load i8, ptr %275, align 1, !tbaa !5
  %277 = icmp eq i8 %274, %276
  br i1 %277, label %.preheader.11.3, label %.preheader.12, !llvm.loop !8

.preheader.11.3:                                  ; preds = %.preheader.11.2
  %278 = getelementptr inbounds i8, ptr %0, i64 14
  %279 = load i8, ptr %278, align 2, !tbaa !5
  %280 = getelementptr inbounds i8, ptr %1, i64 3
  %281 = load i8, ptr %280, align 1, !tbaa !5
  %282 = icmp eq i8 %279, %281
  %spec.select113 = select i1 %282, i1 false, i1 true
  br i1 %spec.select113, label %.preheader.12, label %455

.preheader.12:                                    ; preds = %.preheader.11, %.preheader.11.1, %.preheader.11.2, %.preheader.11.3
  %283 = getelementptr inbounds i8, ptr %0, i64 12
  %284 = load i8, ptr %283, align 4, !tbaa !5
  %285 = load i8, ptr %1, align 1, !tbaa !5
  %286 = icmp eq i8 %284, %285
  br i1 %286, label %.preheader.12.1, label %.preheader.13, !llvm.loop !8

.preheader.12.1:                                  ; preds = %.preheader.12
  %287 = getelementptr inbounds i8, ptr %0, i64 13
  %288 = load i8, ptr %287, align 1, !tbaa !5
  %289 = getelementptr inbounds i8, ptr %1, i64 1
  %290 = load i8, ptr %289, align 1, !tbaa !5
  %291 = icmp eq i8 %288, %290
  br i1 %291, label %.preheader.12.2, label %.preheader.13, !llvm.loop !8

.preheader.12.2:                                  ; preds = %.preheader.12.1
  %292 = getelementptr inbounds i8, ptr %0, i64 14
  %293 = load i8, ptr %292, align 2, !tbaa !5
  %294 = getelementptr inbounds i8, ptr %1, i64 2
  %295 = load i8, ptr %294, align 1, !tbaa !5
  %296 = icmp eq i8 %293, %295
  br i1 %296, label %.preheader.12.3, label %.preheader.13, !llvm.loop !8

.preheader.12.3:                                  ; preds = %.preheader.12.2
  %297 = getelementptr inbounds i8, ptr %0, i64 15
  %298 = load i8, ptr %297, align 1, !tbaa !5
  %299 = getelementptr inbounds i8, ptr %1, i64 3
  %300 = load i8, ptr %299, align 1, !tbaa !5
  %301 = icmp eq i8 %298, %300
  %spec.select114 = select i1 %301, i1 false, i1 true
  br i1 %spec.select114, label %.preheader.13, label %455

.preheader.13:                                    ; preds = %.preheader.12, %.preheader.12.1, %.preheader.12.2, %.preheader.12.3
  %302 = getelementptr inbounds i8, ptr %0, i64 13
  %303 = load i8, ptr %302, align 1, !tbaa !5
  %304 = load i8, ptr %1, align 1, !tbaa !5
  %305 = icmp eq i8 %303, %304
  br i1 %305, label %.preheader.13.1, label %.preheader.14, !llvm.loop !8

.preheader.13.1:                                  ; preds = %.preheader.13
  %306 = getelementptr inbounds i8, ptr %0, i64 14
  %307 = load i8, ptr %306, align 2, !tbaa !5
  %308 = getelementptr inbounds i8, ptr %1, i64 1
  %309 = load i8, ptr %308, align 1, !tbaa !5
  %310 = icmp eq i8 %307, %309
  br i1 %310, label %.preheader.13.2, label %.preheader.14, !llvm.loop !8

.preheader.13.2:                                  ; preds = %.preheader.13.1
  %311 = getelementptr inbounds i8, ptr %0, i64 15
  %312 = load i8, ptr %311, align 1, !tbaa !5
  %313 = getelementptr inbounds i8, ptr %1, i64 2
  %314 = load i8, ptr %313, align 1, !tbaa !5
  %315 = icmp eq i8 %312, %314
  br i1 %315, label %.preheader.13.3, label %.preheader.14, !llvm.loop !8

.preheader.13.3:                                  ; preds = %.preheader.13.2
  %316 = getelementptr inbounds i8, ptr %0, i64 16
  %317 = load i8, ptr %316, align 16, !tbaa !5
  %318 = getelementptr inbounds i8, ptr %1, i64 3
  %319 = load i8, ptr %318, align 1, !tbaa !5
  %320 = icmp eq i8 %317, %319
  %spec.select115 = select i1 %320, i1 false, i1 true
  br i1 %spec.select115, label %.preheader.14, label %455

.preheader.14:                                    ; preds = %.preheader.13, %.preheader.13.1, %.preheader.13.2, %.preheader.13.3
  %321 = getelementptr inbounds i8, ptr %0, i64 14
  %322 = load i8, ptr %321, align 2, !tbaa !5
  %323 = load i8, ptr %1, align 1, !tbaa !5
  %324 = icmp eq i8 %322, %323
  br i1 %324, label %.preheader.14.1, label %.preheader.15, !llvm.loop !8

.preheader.14.1:                                  ; preds = %.preheader.14
  %325 = getelementptr inbounds i8, ptr %0, i64 15
  %326 = load i8, ptr %325, align 1, !tbaa !5
  %327 = getelementptr inbounds i8, ptr %1, i64 1
  %328 = load i8, ptr %327, align 1, !tbaa !5
  %329 = icmp eq i8 %326, %328
  br i1 %329, label %.preheader.14.2, label %.preheader.15, !llvm.loop !8

.preheader.14.2:                                  ; preds = %.preheader.14.1
  %330 = getelementptr inbounds i8, ptr %0, i64 16
  %331 = load i8, ptr %330, align 16, !tbaa !5
  %332 = getelementptr inbounds i8, ptr %1, i64 2
  %333 = load i8, ptr %332, align 1, !tbaa !5
  %334 = icmp eq i8 %331, %333
  br i1 %334, label %.preheader.14.3, label %.preheader.15, !llvm.loop !8

.preheader.14.3:                                  ; preds = %.preheader.14.2
  %335 = getelementptr inbounds i8, ptr %0, i64 17
  %336 = load i8, ptr %335, align 1, !tbaa !5
  %337 = getelementptr inbounds i8, ptr %1, i64 3
  %338 = load i8, ptr %337, align 1, !tbaa !5
  %339 = icmp eq i8 %336, %338
  %spec.select116 = select i1 %339, i1 false, i1 true
  br i1 %spec.select116, label %.preheader.15, label %455

.preheader.15:                                    ; preds = %.preheader.14, %.preheader.14.1, %.preheader.14.2, %.preheader.14.3
  %340 = getelementptr inbounds i8, ptr %0, i64 15
  %341 = load i8, ptr %340, align 1, !tbaa !5
  %342 = load i8, ptr %1, align 1, !tbaa !5
  %343 = icmp eq i8 %341, %342
  br i1 %343, label %.preheader.15.1, label %.preheader.16, !llvm.loop !8

.preheader.15.1:                                  ; preds = %.preheader.15
  %344 = getelementptr inbounds i8, ptr %0, i64 16
  %345 = load i8, ptr %344, align 16, !tbaa !5
  %346 = getelementptr inbounds i8, ptr %1, i64 1
  %347 = load i8, ptr %346, align 1, !tbaa !5
  %348 = icmp eq i8 %345, %347
  br i1 %348, label %.preheader.15.2, label %.preheader.16, !llvm.loop !8

.preheader.15.2:                                  ; preds = %.preheader.15.1
  %349 = getelementptr inbounds i8, ptr %0, i64 17
  %350 = load i8, ptr %349, align 1, !tbaa !5
  %351 = getelementptr inbounds i8, ptr %1, i64 2
  %352 = load i8, ptr %351, align 1, !tbaa !5
  %353 = icmp eq i8 %350, %352
  br i1 %353, label %.preheader.15.3, label %.preheader.16, !llvm.loop !8

.preheader.15.3:                                  ; preds = %.preheader.15.2
  %354 = getelementptr inbounds i8, ptr %0, i64 18
  %355 = load i8, ptr %354, align 2, !tbaa !5
  %356 = getelementptr inbounds i8, ptr %1, i64 3
  %357 = load i8, ptr %356, align 1, !tbaa !5
  %358 = icmp eq i8 %355, %357
  %spec.select117 = select i1 %358, i1 false, i1 true
  br i1 %spec.select117, label %.preheader.16, label %455

.preheader.16:                                    ; preds = %.preheader.15, %.preheader.15.1, %.preheader.15.2, %.preheader.15.3
  %359 = getelementptr inbounds i8, ptr %0, i64 16
  %360 = load i8, ptr %359, align 16, !tbaa !5
  %361 = load i8, ptr %1, align 1, !tbaa !5
  %362 = icmp eq i8 %360, %361
  br i1 %362, label %.preheader.16.1, label %.preheader.17, !llvm.loop !8

.preheader.16.1:                                  ; preds = %.preheader.16
  %363 = getelementptr inbounds i8, ptr %0, i64 17
  %364 = load i8, ptr %363, align 1, !tbaa !5
  %365 = getelementptr inbounds i8, ptr %1, i64 1
  %366 = load i8, ptr %365, align 1, !tbaa !5
  %367 = icmp eq i8 %364, %366
  br i1 %367, label %.preheader.16.2, label %.preheader.17, !llvm.loop !8

.preheader.16.2:                                  ; preds = %.preheader.16.1
  %368 = getelementptr inbounds i8, ptr %0, i64 18
  %369 = load i8, ptr %368, align 2, !tbaa !5
  %370 = getelementptr inbounds i8, ptr %1, i64 2
  %371 = load i8, ptr %370, align 1, !tbaa !5
  %372 = icmp eq i8 %369, %371
  br i1 %372, label %.preheader.16.3, label %.preheader.17, !llvm.loop !8

.preheader.16.3:                                  ; preds = %.preheader.16.2
  %373 = getelementptr inbounds i8, ptr %0, i64 19
  %374 = load i8, ptr %373, align 1, !tbaa !5
  %375 = getelementptr inbounds i8, ptr %1, i64 3
  %376 = load i8, ptr %375, align 1, !tbaa !5
  %377 = icmp eq i8 %374, %376
  %spec.select118 = select i1 %377, i1 false, i1 true
  br i1 %spec.select118, label %.preheader.17, label %455

.preheader.17:                                    ; preds = %.preheader.16, %.preheader.16.1, %.preheader.16.2, %.preheader.16.3
  %378 = getelementptr inbounds i8, ptr %0, i64 17
  %379 = load i8, ptr %378, align 1, !tbaa !5
  %380 = load i8, ptr %1, align 1, !tbaa !5
  %381 = icmp eq i8 %379, %380
  br i1 %381, label %.preheader.17.1, label %.preheader.18, !llvm.loop !8

.preheader.17.1:                                  ; preds = %.preheader.17
  %382 = getelementptr inbounds i8, ptr %0, i64 18
  %383 = load i8, ptr %382, align 2, !tbaa !5
  %384 = getelementptr inbounds i8, ptr %1, i64 1
  %385 = load i8, ptr %384, align 1, !tbaa !5
  %386 = icmp eq i8 %383, %385
  br i1 %386, label %.preheader.17.2, label %.preheader.18, !llvm.loop !8

.preheader.17.2:                                  ; preds = %.preheader.17.1
  %387 = getelementptr inbounds i8, ptr %0, i64 19
  %388 = load i8, ptr %387, align 1, !tbaa !5
  %389 = getelementptr inbounds i8, ptr %1, i64 2
  %390 = load i8, ptr %389, align 1, !tbaa !5
  %391 = icmp eq i8 %388, %390
  br i1 %391, label %.preheader.17.3, label %.preheader.18, !llvm.loop !8

.preheader.17.3:                                  ; preds = %.preheader.17.2
  %392 = getelementptr inbounds i8, ptr %0, i64 20
  %393 = load i8, ptr %392, align 4, !tbaa !5
  %394 = getelementptr inbounds i8, ptr %1, i64 3
  %395 = load i8, ptr %394, align 1, !tbaa !5
  %396 = icmp eq i8 %393, %395
  %spec.select119 = select i1 %396, i1 false, i1 true
  br i1 %spec.select119, label %.preheader.18, label %455

.preheader.18:                                    ; preds = %.preheader.17, %.preheader.17.1, %.preheader.17.2, %.preheader.17.3
  %397 = getelementptr inbounds i8, ptr %0, i64 18
  %398 = load i8, ptr %397, align 2, !tbaa !5
  %399 = load i8, ptr %1, align 1, !tbaa !5
  %400 = icmp eq i8 %398, %399
  br i1 %400, label %.preheader.18.1, label %.preheader.19, !llvm.loop !8

.preheader.18.1:                                  ; preds = %.preheader.18
  %401 = getelementptr inbounds i8, ptr %0, i64 19
  %402 = load i8, ptr %401, align 1, !tbaa !5
  %403 = getelementptr inbounds i8, ptr %1, i64 1
  %404 = load i8, ptr %403, align 1, !tbaa !5
  %405 = icmp eq i8 %402, %404
  br i1 %405, label %.preheader.18.2, label %.preheader.19, !llvm.loop !8

.preheader.18.2:                                  ; preds = %.preheader.18.1
  %406 = getelementptr inbounds i8, ptr %0, i64 20
  %407 = load i8, ptr %406, align 4, !tbaa !5
  %408 = getelementptr inbounds i8, ptr %1, i64 2
  %409 = load i8, ptr %408, align 1, !tbaa !5
  %410 = icmp eq i8 %407, %409
  br i1 %410, label %.preheader.18.3, label %.preheader.19, !llvm.loop !8

.preheader.18.3:                                  ; preds = %.preheader.18.2
  %411 = getelementptr inbounds i8, ptr %0, i64 21
  %412 = load i8, ptr %411, align 1, !tbaa !5
  %413 = getelementptr inbounds i8, ptr %1, i64 3
  %414 = load i8, ptr %413, align 1, !tbaa !5
  %415 = icmp eq i8 %412, %414
  %spec.select120 = select i1 %415, i1 false, i1 true
  br i1 %spec.select120, label %.preheader.19, label %455

.preheader.19:                                    ; preds = %.preheader.18, %.preheader.18.1, %.preheader.18.2, %.preheader.18.3
  %416 = getelementptr inbounds i8, ptr %0, i64 19
  %417 = load i8, ptr %416, align 1, !tbaa !5
  %418 = load i8, ptr %1, align 1, !tbaa !5
  %419 = icmp eq i8 %417, %418
  br i1 %419, label %.preheader.19.1, label %.preheader.20, !llvm.loop !8

.preheader.19.1:                                  ; preds = %.preheader.19
  %420 = getelementptr inbounds i8, ptr %0, i64 20
  %421 = load i8, ptr %420, align 4, !tbaa !5
  %422 = getelementptr inbounds i8, ptr %1, i64 1
  %423 = load i8, ptr %422, align 1, !tbaa !5
  %424 = icmp eq i8 %421, %423
  br i1 %424, label %.preheader.19.2, label %.preheader.20, !llvm.loop !8

.preheader.19.2:                                  ; preds = %.preheader.19.1
  %425 = getelementptr inbounds i8, ptr %0, i64 21
  %426 = load i8, ptr %425, align 1, !tbaa !5
  %427 = getelementptr inbounds i8, ptr %1, i64 2
  %428 = load i8, ptr %427, align 1, !tbaa !5
  %429 = icmp eq i8 %426, %428
  br i1 %429, label %.preheader.19.3, label %.preheader.20, !llvm.loop !8

.preheader.19.3:                                  ; preds = %.preheader.19.2
  %430 = getelementptr inbounds i8, ptr %0, i64 22
  %431 = load i8, ptr %430, align 2, !tbaa !5
  %432 = getelementptr inbounds i8, ptr %1, i64 3
  %433 = load i8, ptr %432, align 1, !tbaa !5
  %434 = icmp eq i8 %431, %433
  %spec.select121 = select i1 %434, i1 false, i1 true
  br i1 %spec.select121, label %.preheader.20, label %455

.preheader.20:                                    ; preds = %.preheader.19, %.preheader.19.1, %.preheader.19.2, %.preheader.19.3
  %435 = getelementptr inbounds i8, ptr %0, i64 20
  %436 = load i8, ptr %435, align 4, !tbaa !5
  %437 = load i8, ptr %1, align 1, !tbaa !5
  %438 = icmp eq i8 %436, %437
  br i1 %438, label %.preheader.20.1, label %.critedge, !llvm.loop !8

.preheader.20.1:                                  ; preds = %.preheader.20
  %439 = getelementptr inbounds i8, ptr %0, i64 21
  %440 = load i8, ptr %439, align 1, !tbaa !5
  %441 = getelementptr inbounds i8, ptr %1, i64 1
  %442 = load i8, ptr %441, align 1, !tbaa !5
  %443 = icmp eq i8 %440, %442
  br i1 %443, label %.preheader.20.2, label %.critedge, !llvm.loop !8

.preheader.20.2:                                  ; preds = %.preheader.20.1
  %444 = getelementptr inbounds i8, ptr %0, i64 22
  %445 = load i8, ptr %444, align 2, !tbaa !5
  %446 = getelementptr inbounds i8, ptr %1, i64 2
  %447 = load i8, ptr %446, align 1, !tbaa !5
  %448 = icmp eq i8 %445, %447
  br i1 %448, label %.preheader.20.3, label %.critedge, !llvm.loop !8

.preheader.20.3:                                  ; preds = %.preheader.20.2
  %449 = getelementptr inbounds i8, ptr %0, i64 23
  %450 = load i8, ptr %449, align 1, !tbaa !5
  %451 = getelementptr inbounds i8, ptr %1, i64 3
  %452 = load i8, ptr %451, align 1, !tbaa !5
  %453 = icmp eq i8 %450, %452
  %spec.select122 = select i1 %453, i1 false, i1 true
  br i1 %spec.select122, label %.critedge, label %455

.critedge:                                        ; preds = %.preheader.20, %.preheader.20.1, %.preheader.20.2, %.preheader.20.3
  %454 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.5)
  br label %458

455:                                              ; preds = %.preheader.20.3, %.preheader.19.3, %.preheader.18.3, %.preheader.17.3, %.preheader.16.3, %.preheader.15.3, %.preheader.14.3, %.preheader.13.3, %.preheader.12.3, %.preheader.11.3, %.preheader.10.3, %.preheader.9.3, %.preheader.8.3, %.preheader.7.3, %.preheader.6.3, %.preheader.5.3, %.preheader.4.3, %.preheader.3.3, %.preheader.2.3, %.preheader.1.3, %68
  %.0.lcssa = phi i32 [ 0, %68 ], [ 1, %.preheader.1.3 ], [ 2, %.preheader.2.3 ], [ 3, %.preheader.3.3 ], [ 4, %.preheader.4.3 ], [ 5, %.preheader.5.3 ], [ 6, %.preheader.6.3 ], [ 7, %.preheader.7.3 ], [ 8, %.preheader.8.3 ], [ 9, %.preheader.9.3 ], [ 10, %.preheader.10.3 ], [ 11, %.preheader.11.3 ], [ 12, %.preheader.12.3 ], [ 13, %.preheader.13.3 ], [ 14, %.preheader.14.3 ], [ 15, %.preheader.15.3 ], [ 16, %.preheader.16.3 ], [ 17, %.preheader.17.3 ], [ 18, %.preheader.18.3 ], [ 19, %.preheader.19.3 ], [ 20, %.preheader.20.3 ]
  %456 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @.str.4)
  %457 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %456, i32 noundef %.0.lcssa)
  br label %458

458:                                              ; preds = %455, %.critedge
  %459 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  %460 = call i32 @system(ptr noundef nonnull @.str.6)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %1) #7
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %0) #7
  ret i32 0
}

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #2

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #5

; Function Attrs: nofree
declare noundef i32 @system(ptr nocapture noundef readonly) local_unnamed_addr #6

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

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

!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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = distinct !{!8, !9}
!9 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass