; LLVM IR from tastangh/TI-RSLK-Texas-Instruments-Robotics-System-The-Maze-Edition :: tirslk_maze_1_00_00/Flash (FlashTestMain)

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

@FlashPtr = external dso_local global ptr, align 8
@DataArray = external dso_local global [10 x i32], align 16
@SuccessfulWrites = external dso_local global i32, align 4
@.str.8 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [13 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @printscores() #0

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

declare void @UART0_OutString(ptr noundef) #2

declare void @UART0_OutUDec(i32 noundef) #2

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

; Function Attrs: nounwind uwtable
declare dso_local void @getnewscore() #0

declare i32 @Flash_Write(i32 noundef, i32 noundef) #2

declare void @UART0_OutUHex(i32 noundef) #2

declare i32 @Flash_Erase(i32 noundef) #2

; Function Attrs: nounwind uwtable
define dso_local i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i8, align 1
  store i32 0, ptr %1, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #3
  call void @Clock_Init48MHz()
  %5 = call i32 @Clock_GetFreq()
  %6 = udiv i32 %5, 1000000
  %7 = trunc i32 %6 to i8
  call void @Flash_Init(i8 noundef zeroext %7)
  call void @UART0_Init()
  call void @LaunchPad_Init()
  store i32 4369, ptr @DataArray, align 16, !tbaa !5
  store i32 139808, ptr getelementptr inbounds ([10 x i32], ptr @DataArray, i64 0, i64 1), align 4, !tbaa !5
  store i32 3355392, ptr getelementptr inbounds ([10 x i32], ptr @DataArray, i64 0, i64 2), align 8, !tbaa !5
  store i32 71581696, ptr getelementptr inbounds ([10 x i32], ptr @DataArray, i64 0, i64 3), align 4, !tbaa !5
  store i32 1431633920, ptr getelementptr inbounds ([10 x i32], ptr @DataArray, i64 0, i64 4), align 16, !tbaa !5
  store i32 1717567495, ptr getelementptr inbounds ([10 x i32], ptr @DataArray, i64 0, i64 5), align 4, !tbaa !5
  store i32 1996488840, ptr getelementptr inbounds ([10 x i32], ptr @DataArray, i64 0, i64 6), align 8, !tbaa !5
  store i32 -2147481191, ptr getelementptr inbounds ([10 x i32], ptr @DataArray, i64 0, i64 7), align 4, !tbaa !5
  store i32 43690, ptr getelementptr inbounds ([10 x i32], ptr @DataArray, i64 0, i64 8), align 16, !tbaa !5
  store i32 768944, ptr getelementptr inbounds ([10 x i32], ptr @DataArray, i64 0, i64 9), align 4, !tbaa !5
  %8 = call i32 @Flash_Erase(i32 noundef 131072)
  %9 = call i32 @Flash_Write(i32 noundef 131072, i32 noundef 269488144)
  %10 = call i32 @Flash_Write(i32 noundef 131076, i32 noundef 195935983)
  %11 = call i32 @Flash_Write(i32 noundef 131080, i32 noundef -1091571699)
  %12 = call i32 @Flash_Write(i32 noundef 135168, i32 noundef 1162232147)
  %13 = call i32 @Flash_Write(i32 noundef 135164, i32 noundef 1162760007)
  %14 = call i32 @Flash_Write(i32 noundef 135160, i32 noundef 267242400)
  call void @LaunchPad_Output(i8 noundef zeroext 0)
  %15 = call i32 @Flash_WriteArray(ptr noundef @DataArray, i32 noundef 131081, i16 noundef zeroext 10)
  store i32 %15, ptr @SuccessfulWrites, align 4, !tbaa !5
  call void @LaunchPad_Output(i8 noundef zeroext 1)
  %16 = call i32 @Flash_WriteArray(ptr noundef @DataArray, i32 noundef 131084, i16 noundef zeroext 10)
  store i32 %16, ptr @SuccessfulWrites, align 4, !tbaa !5
  call void @LaunchPad_Output(i8 noundef zeroext 0)
  %17 = call i32 @Flash_FastWrite(ptr noundef @DataArray, i32 noundef 131196, i16 noundef zeroext 10)
  store i32 %17, ptr @SuccessfulWrites, align 4, !tbaa !5
  call void @LaunchPad_Output(i8 noundef zeroext 4)
  %18 = call i32 @Flash_FastWrite(ptr noundef @DataArray, i32 noundef 131200, i16 noundef zeroext 10)
  store i32 %18, ptr @SuccessfulWrites, align 4, !tbaa !5
  call void @LaunchPad_Output(i8 noundef zeroext 0)
  store i32 0, ptr %2, align 4, !tbaa !5
  call void @UART0_OutString(ptr noundef @.str.8)
  %19 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %20 = getelementptr inbounds i32, ptr %19, i64 0
  %21 = load volatile i32, ptr %20, align 4, !tbaa !5
  %22 = icmp ne i32 %21, 269488144
  br i1 %22, label %23, label %29

23:                                               ; preds = %0
  call void @UART0_OutString(ptr noundef @.str.9)
  call void @UART0_OutUHex(i32 noundef 131072)
  call void @UART0_OutString(ptr noundef @.str.10)
  %24 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %25 = getelementptr inbounds i32, ptr %24, i64 0
  %26 = load volatile i32, ptr %25, align 4, !tbaa !5
  call void @UART0_OutUHex(i32 noundef %26)
  call void @UART0_OutString(ptr noundef @.str.11)
  %27 = load i32, ptr %2, align 4, !tbaa !5
  %28 = add i32 %27, 1
  store i32 %28, ptr %2, align 4, !tbaa !5
  br label %29

29:                                               ; preds = %23, %0
  %30 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %31 = getelementptr inbounds i32, ptr %30, i64 1
  %32 = load volatile i32, ptr %31, align 4, !tbaa !5
  %33 = icmp ne i32 %32, 195935983
  br i1 %33, label %34, label %40

34:                                               ; preds = %29
  call void @UART0_OutString(ptr noundef @.str.9)
  call void @UART0_OutUHex(i32 noundef 131076)
  call void @UART0_OutString(ptr noundef @.str.12)
  %35 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %36 = getelementptr inbounds i32, ptr %35, i64 1
  %37 = load volatile i32, ptr %36, align 4, !tbaa !5
  call void @UART0_OutUHex(i32 noundef %37)
  call void @UART0_OutString(ptr noundef @.str.11)
  %38 = load i32, ptr %2, align 4, !tbaa !5
  %39 = add i32 %38, 1
  store i32 %39, ptr %2, align 4, !tbaa !5
  br label %40

40:                                               ; preds = %34, %29
  %41 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %42 = getelementptr inbounds i32, ptr %41, i64 2
  %43 = load volatile i32, ptr %42, align 4, !tbaa !5
  %44 = icmp ne i32 %43, -1091571699
  br i1 %44, label %45, label %51

45:                                               ; preds = %40
  call void @UART0_OutString(ptr noundef @.str.9)
  call void @UART0_OutUHex(i32 noundef 131080)
  call void @UART0_OutString(ptr noundef @.str.13)
  %46 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %47 = getelementptr inbounds i32, ptr %46, i64 2
  %48 = load volatile i32, ptr %47, align 4, !tbaa !5
  call void @UART0_OutUHex(i32 noundef %48)
  call void @UART0_OutString(ptr noundef @.str.11)
  %49 = load i32, ptr %2, align 4, !tbaa !5
  %50 = add i32 %49, 1
  store i32 %50, ptr %2, align 4, !tbaa !5
  br label %51

51:                                               ; preds = %45, %40
  store i32 0, ptr %3, align 4, !tbaa !5
  br label %52

52:                                               ; preds = %84, %51
  %53 = load i32, ptr %3, align 4, !tbaa !5
  %54 = icmp slt i32 %53, 10
  br i1 %54, label %55, label %87

55:                                               ; preds = %52
  %56 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %57 = load i32, ptr %3, align 4, !tbaa !5
  %58 = add nsw i32 %57, 3
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds i32, ptr %56, i64 %59
  %61 = load volatile i32, ptr %60, align 4, !tbaa !5
  %62 = load i32, ptr %3, align 4, !tbaa !5
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds [10 x i32], ptr @DataArray, i64 0, i64 %63
  %65 = load i32, ptr %64, align 4, !tbaa !5
  %66 = icmp ne i32 %61, %65
  br i1 %66, label %67, label %83

67:                                               ; preds = %55
  call void @UART0_OutString(ptr noundef @.str.9)
  %68 = load i32, ptr %3, align 4, !tbaa !5
  %69 = mul nsw i32 4, %68
  %70 = add nsw i32 131084, %69
  call void @UART0_OutUHex(i32 noundef %70)
  call void @UART0_OutString(ptr noundef @.str.14)
  %71 = load i32, ptr %3, align 4, !tbaa !5
  %72 = sext i32 %71 to i64
  %73 = getelementptr inbounds [10 x i32], ptr @DataArray, i64 0, i64 %72
  %74 = load i32, ptr %73, align 4, !tbaa !5
  call void @UART0_OutUHex(i32 noundef %74)
  call void @UART0_OutString(ptr noundef @.str.15)
  %75 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %76 = load i32, ptr %3, align 4, !tbaa !5
  %77 = add nsw i32 %76, 3
  %78 = sext i32 %77 to i64
  %79 = getelementptr inbounds i32, ptr %75, i64 %78
  %80 = load volatile i32, ptr %79, align 4, !tbaa !5
  call void @UART0_OutUHex(i32 noundef %80)
  call void @UART0_OutString(ptr noundef @.str.11)
  %81 = load i32, ptr %2, align 4, !tbaa !5
  %82 = add i32 %81, 1
  store i32 %82, ptr %2, align 4, !tbaa !5
  br label %83

83:                                               ; preds = %67, %55
  br label %84

84:                                               ; preds = %83
  %85 = load i32, ptr %3, align 4, !tbaa !5
  %86 = add nsw i32 %85, 1
  store i32 %86, ptr %3, align 4, !tbaa !5
  br label %52, !llvm.loop !11

87:                                               ; preds = %52
  store i32 0, ptr %3, align 4, !tbaa !5
  br label %88

88:                                               ; preds = %120, %87
  %89 = load i32, ptr %3, align 4, !tbaa !5
  %90 = icmp slt i32 %89, 10
  br i1 %90, label %91, label %123

91:                                               ; preds = %88
  %92 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %93 = load i32, ptr %3, align 4, !tbaa !5
  %94 = add nsw i32 %93, 32
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds i32, ptr %92, i64 %95
  %97 = load volatile i32, ptr %96, align 4, !tbaa !5
  %98 = load i32, ptr %3, align 4, !tbaa !5
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds [10 x i32], ptr @DataArray, i64 0, i64 %99
  %101 = load i32, ptr %100, align 4, !tbaa !5
  %102 = icmp ne i32 %97, %101
  br i1 %102, label %103, label %119

103:                                              ; preds = %91
  call void @UART0_OutString(ptr noundef @.str.9)
  %104 = load i32, ptr %3, align 4, !tbaa !5
  %105 = mul nsw i32 4, %104
  %106 = add nsw i32 131200, %105
  call void @UART0_OutUHex(i32 noundef %106)
  call void @UART0_OutString(ptr noundef @.str.14)
  %107 = load i32, ptr %3, align 4, !tbaa !5
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds [10 x i32], ptr @DataArray, i64 0, i64 %108
  %110 = load i32, ptr %109, align 4, !tbaa !5
  call void @UART0_OutUHex(i32 noundef %110)
  call void @UART0_OutString(ptr noundef @.str.15)
  %111 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %112 = load i32, ptr %3, align 4, !tbaa !5
  %113 = add nsw i32 %112, 32
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds i32, ptr %111, i64 %114
  %116 = load volatile i32, ptr %115, align 4, !tbaa !5
  call void @UART0_OutUHex(i32 noundef %116)
  call void @UART0_OutString(ptr noundef @.str.11)
  %117 = load i32, ptr %2, align 4, !tbaa !5
  %118 = add i32 %117, 1
  store i32 %118, ptr %2, align 4, !tbaa !5
  br label %119

119:                                              ; preds = %103, %91
  br label %120

120:                                              ; preds = %119
  %121 = load i32, ptr %3, align 4, !tbaa !5
  %122 = add nsw i32 %121, 1
  store i32 %122, ptr %3, align 4, !tbaa !5
  br label %88, !llvm.loop !13

123:                                              ; preds = %88
  %124 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %125 = getelementptr inbounds i32, ptr %124, i64 1022
  %126 = load volatile i32, ptr %125, align 4, !tbaa !5
  %127 = icmp ne i32 %126, 267242400
  br i1 %127, label %128, label %134

128:                                              ; preds = %123
  call void @UART0_OutString(ptr noundef @.str.9)
  call void @UART0_OutUHex(i32 noundef 135160)
  call void @UART0_OutString(ptr noundef @.str.16)
  %129 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %130 = getelementptr inbounds i32, ptr %129, i64 1022
  %131 = load volatile i32, ptr %130, align 4, !tbaa !5
  call void @UART0_OutUHex(i32 noundef %131)
  call void @UART0_OutString(ptr noundef @.str.11)
  %132 = load i32, ptr %2, align 4, !tbaa !5
  %133 = add i32 %132, 1
  store i32 %133, ptr %2, align 4, !tbaa !5
  br label %134

134:                                              ; preds = %128, %123
  %135 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %136 = getelementptr inbounds i32, ptr %135, i64 1023
  %137 = load volatile i32, ptr %136, align 4, !tbaa !5
  %138 = icmp ne i32 %137, 1162760007
  br i1 %138, label %139, label %145

139:                                              ; preds = %134
  call void @UART0_OutString(ptr noundef @.str.9)
  call void @UART0_OutUHex(i32 noundef 135164)
  call void @UART0_OutString(ptr noundef @.str.17)
  %140 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %141 = getelementptr inbounds i32, ptr %140, i64 1023
  %142 = load volatile i32, ptr %141, align 4, !tbaa !5
  call void @UART0_OutUHex(i32 noundef %142)
  call void @UART0_OutString(ptr noundef @.str.11)
  %143 = load i32, ptr %2, align 4, !tbaa !5
  %144 = add i32 %143, 1
  store i32 %144, ptr %2, align 4, !tbaa !5
  br label %145

145:                                              ; preds = %139, %134
  call void @UART0_OutString(ptr noundef @.str.18)
  %146 = load i32, ptr %2, align 4, !tbaa !5
  call void @UART0_OutUDec(i32 noundef %146)
  call void @UART0_OutString(ptr noundef @.str.19)
  %147 = call ptr @Scoreboard_Init(i32 noundef 139264)
  call void @LaunchPad_Output(i8 noundef zeroext 1)
  br label %148

148:                                              ; preds = %149, %145
  br label %149

149:                                              ; preds = %148
  call void @llvm.lifetime.start.p0(i64 1, ptr %4) #3
  store i8 3, ptr %4, align 1, !tbaa !14
  call void @printscores()
  call void @getnewscore()
  %150 = load i8, ptr %4, align 1, !tbaa !14
  call void @LaunchPad_Output(i8 noundef zeroext %150)
  %151 = load i8, ptr %4, align 1, !tbaa !14
  %152 = zext i8 %151 to i32
  %153 = xor i32 %152, 7
  %154 = trunc i32 %153 to i8
  store i8 %154, ptr %4, align 1, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 1, ptr %4) #3
  br label %148
}

declare void @Clock_Init48MHz() #2

declare void @Flash_Init(i8 noundef zeroext) #2

declare i32 @Clock_GetFreq() #2

declare void @UART0_Init() #2

declare void @LaunchPad_Init() #2

declare void @LaunchPad_Output(i8 noundef zeroext) #2

declare i32 @Flash_WriteArray(ptr noundef, i32 noundef, i16 noundef zeroext) #2

declare i32 @Flash_FastWrite(ptr noundef, i32 noundef, i16 noundef zeroext) #2

declare ptr @Scoreboard_Init(i32 noundef) #2

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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { 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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = !{!7, !7, i64 0}


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

@FlashPtr = external dso_local local_unnamed_addr global ptr, align 8
@DataArray = external dso_local global [10 x i32], align 16
@SuccessfulWrites = external dso_local local_unnamed_addr global i32, align 4
@.str.8 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [13 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local void @printscores() local_unnamed_addr #0

declare void @UART0_OutString(ptr noundef) local_unnamed_addr #1

declare void @UART0_OutUDec(i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local void @getnewscore() local_unnamed_addr #0

declare i32 @Flash_Write(i32 noundef, i32 noundef) local_unnamed_addr #1

declare void @UART0_OutUHex(i32 noundef) local_unnamed_addr #1

declare i32 @Flash_Erase(i32 noundef) local_unnamed_addr #1

; Function Attrs: noreturn nounwind uwtable
define dso_local noundef i32 @main() local_unnamed_addr #2 {
  tail call void @Clock_Init48MHz() #3
  %1 = tail call i32 @Clock_GetFreq() #3
  %2 = udiv i32 %1, 1000000
  %3 = trunc i32 %2 to i8
  tail call void @Flash_Init(i8 noundef zeroext %3) #3
  tail call void @UART0_Init() #3
  tail call void @LaunchPad_Init() #3
  store <4 x i32> <i32 4369, i32 139808, i32 3355392, i32 71581696>, ptr @DataArray, align 16, !tbaa !5
  store <4 x i32> <i32 1431633920, i32 1717567495, i32 1996488840, i32 -2147481191>, ptr getelementptr inbounds (i8, ptr @DataArray, i64 16), align 16, !tbaa !5
  store i32 43690, ptr getelementptr inbounds (i8, ptr @DataArray, i64 32), align 16, !tbaa !5
  store i32 768944, ptr getelementptr inbounds (i8, ptr @DataArray, i64 36), align 4, !tbaa !5
  %4 = tail call i32 @Flash_Erase(i32 noundef 131072) #3
  %5 = tail call i32 @Flash_Write(i32 noundef 131072, i32 noundef 269488144) #3
  %6 = tail call i32 @Flash_Write(i32 noundef 131076, i32 noundef 195935983) #3
  %7 = tail call i32 @Flash_Write(i32 noundef 131080, i32 noundef -1091571699) #3
  %8 = tail call i32 @Flash_Write(i32 noundef 135168, i32 noundef 1162232147) #3
  %9 = tail call i32 @Flash_Write(i32 noundef 135164, i32 noundef 1162760007) #3
  %10 = tail call i32 @Flash_Write(i32 noundef 135160, i32 noundef 267242400) #3
  tail call void @LaunchPad_Output(i8 noundef zeroext 0) #3
  %11 = tail call i32 @Flash_WriteArray(ptr noundef nonnull @DataArray, i32 noundef 131081, i16 noundef zeroext 10) #3
  store i32 %11, ptr @SuccessfulWrites, align 4, !tbaa !5
  tail call void @LaunchPad_Output(i8 noundef zeroext 1) #3
  %12 = tail call i32 @Flash_WriteArray(ptr noundef nonnull @DataArray, i32 noundef 131084, i16 noundef zeroext 10) #3
  store i32 %12, ptr @SuccessfulWrites, align 4, !tbaa !5
  tail call void @LaunchPad_Output(i8 noundef zeroext 0) #3
  %13 = tail call i32 @Flash_FastWrite(ptr noundef nonnull @DataArray, i32 noundef 131196, i16 noundef zeroext 10) #3
  store i32 %13, ptr @SuccessfulWrites, align 4, !tbaa !5
  tail call void @LaunchPad_Output(i8 noundef zeroext 4) #3
  %14 = tail call i32 @Flash_FastWrite(ptr noundef nonnull @DataArray, i32 noundef 131200, i16 noundef zeroext 10) #3
  store i32 %14, ptr @SuccessfulWrites, align 4, !tbaa !5
  tail call void @LaunchPad_Output(i8 noundef zeroext 0) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.8) #3
  %15 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %16 = load volatile i32, ptr %15, align 4, !tbaa !5
  %.not = icmp eq i32 %16, 269488144
  br i1 %.not, label %20, label %17

17:                                               ; preds = %0
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131072) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.10) #3
  %18 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %19 = load volatile i32, ptr %18, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %19) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %.pre = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %20

20:                                               ; preds = %17, %0
  %21 = phi ptr [ %.pre, %17 ], [ %15, %0 ]
  %.0 = phi i32 [ 1, %17 ], [ 0, %0 ]
  %22 = getelementptr inbounds i8, ptr %21, i64 4
  %23 = load volatile i32, ptr %22, align 4, !tbaa !5
  %.not26 = icmp eq i32 %23, 195935983
  br i1 %.not26, label %29, label %24

24:                                               ; preds = %20
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131076) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.12) #3
  %25 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %26 = getelementptr inbounds i8, ptr %25, i64 4
  %27 = load volatile i32, ptr %26, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %27) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %28 = add nuw nsw i32 %.0, 1
  %.pre38 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %29

29:                                               ; preds = %24, %20
  %30 = phi ptr [ %.pre38, %24 ], [ %21, %20 ]
  %.1 = phi i32 [ %28, %24 ], [ %.0, %20 ]
  %31 = getelementptr inbounds i8, ptr %30, i64 8
  %32 = load volatile i32, ptr %31, align 4, !tbaa !5
  %.not27 = icmp eq i32 %32, -1091571699
  br i1 %.not27, label %38, label %33

33:                                               ; preds = %29
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131080) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.13) #3
  %34 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %35 = getelementptr inbounds i8, ptr %34, i64 8
  %36 = load volatile i32, ptr %35, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %36) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %37 = add nuw nsw i32 %.1, 1
  %.pre39 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %38

38:                                               ; preds = %33, %29
  %39 = phi ptr [ %.pre39, %33 ], [ %30, %29 ]
  %.2 = phi i32 [ %37, %33 ], [ %.1, %29 ]
  %40 = getelementptr inbounds i8, ptr %39, i64 12
  %41 = load volatile i32, ptr %40, align 4, !tbaa !5
  %42 = load i32, ptr @DataArray, align 16, !tbaa !5
  %.not31 = icmp eq i32 %41, %42
  br i1 %.not31, label %49, label %43

43:                                               ; preds = %38
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131084) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %44 = load i32, ptr @DataArray, align 16, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %44) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %45 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %46 = getelementptr inbounds i8, ptr %45, i64 12
  %47 = load volatile i32, ptr %46, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %47) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %48 = add nuw nsw i32 %.2, 1
  %.pre40 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %49

49:                                               ; preds = %38, %43
  %50 = phi ptr [ %.pre40, %43 ], [ %39, %38 ]
  %.4 = phi i32 [ %48, %43 ], [ %.2, %38 ]
  %51 = getelementptr inbounds i8, ptr %50, i64 16
  %52 = load volatile i32, ptr %51, align 4, !tbaa !5
  %53 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 4), align 4, !tbaa !5
  %.not31.1 = icmp eq i32 %52, %53
  br i1 %.not31.1, label %60, label %54

54:                                               ; preds = %49
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131088) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %55 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 4), align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %55) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %56 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %57 = getelementptr inbounds i8, ptr %56, i64 16
  %58 = load volatile i32, ptr %57, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %58) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %59 = add nuw nsw i32 %.4, 1
  %.pre41 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %60

60:                                               ; preds = %54, %49
  %61 = phi ptr [ %.pre41, %54 ], [ %50, %49 ]
  %.4.1 = phi i32 [ %59, %54 ], [ %.4, %49 ]
  %62 = getelementptr inbounds i8, ptr %61, i64 20
  %63 = load volatile i32, ptr %62, align 4, !tbaa !5
  %64 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 8), align 8, !tbaa !5
  %.not31.2 = icmp eq i32 %63, %64
  br i1 %.not31.2, label %71, label %65

65:                                               ; preds = %60
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131092) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %66 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 8), align 8, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %66) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %67 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %68 = getelementptr inbounds i8, ptr %67, i64 20
  %69 = load volatile i32, ptr %68, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %69) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %70 = add nuw nsw i32 %.4.1, 1
  %.pre42 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %71

71:                                               ; preds = %65, %60
  %72 = phi ptr [ %.pre42, %65 ], [ %61, %60 ]
  %.4.2 = phi i32 [ %70, %65 ], [ %.4.1, %60 ]
  %73 = getelementptr inbounds i8, ptr %72, i64 24
  %74 = load volatile i32, ptr %73, align 4, !tbaa !5
  %75 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 12), align 4, !tbaa !5
  %.not31.3 = icmp eq i32 %74, %75
  br i1 %.not31.3, label %82, label %76

76:                                               ; preds = %71
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131096) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %77 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 12), align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %77) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %78 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %79 = getelementptr inbounds i8, ptr %78, i64 24
  %80 = load volatile i32, ptr %79, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %80) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %81 = add nuw nsw i32 %.4.2, 1
  %.pre43 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %82

82:                                               ; preds = %76, %71
  %83 = phi ptr [ %.pre43, %76 ], [ %72, %71 ]
  %.4.3 = phi i32 [ %81, %76 ], [ %.4.2, %71 ]
  %84 = getelementptr inbounds i8, ptr %83, i64 28
  %85 = load volatile i32, ptr %84, align 4, !tbaa !5
  %86 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 16), align 16, !tbaa !5
  %.not31.4 = icmp eq i32 %85, %86
  br i1 %.not31.4, label %93, label %87

87:                                               ; preds = %82
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131100) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %88 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 16), align 16, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %88) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %89 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %90 = getelementptr inbounds i8, ptr %89, i64 28
  %91 = load volatile i32, ptr %90, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %91) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %92 = add nuw nsw i32 %.4.3, 1
  %.pre44 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %93

93:                                               ; preds = %87, %82
  %94 = phi ptr [ %.pre44, %87 ], [ %83, %82 ]
  %.4.4 = phi i32 [ %92, %87 ], [ %.4.3, %82 ]
  %95 = getelementptr inbounds i8, ptr %94, i64 32
  %96 = load volatile i32, ptr %95, align 4, !tbaa !5
  %97 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 20), align 4, !tbaa !5
  %.not31.5 = icmp eq i32 %96, %97
  br i1 %.not31.5, label %104, label %98

98:                                               ; preds = %93
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131104) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %99 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 20), align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %99) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %100 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %101 = getelementptr inbounds i8, ptr %100, i64 32
  %102 = load volatile i32, ptr %101, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %102) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %103 = add nuw nsw i32 %.4.4, 1
  %.pre45 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %104

104:                                              ; preds = %98, %93
  %105 = phi ptr [ %.pre45, %98 ], [ %94, %93 ]
  %.4.5 = phi i32 [ %103, %98 ], [ %.4.4, %93 ]
  %106 = getelementptr inbounds i8, ptr %105, i64 36
  %107 = load volatile i32, ptr %106, align 4, !tbaa !5
  %108 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 24), align 8, !tbaa !5
  %.not31.6 = icmp eq i32 %107, %108
  br i1 %.not31.6, label %115, label %109

109:                                              ; preds = %104
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131108) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %110 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 24), align 8, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %110) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %111 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %112 = getelementptr inbounds i8, ptr %111, i64 36
  %113 = load volatile i32, ptr %112, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %113) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %114 = add nuw nsw i32 %.4.5, 1
  %.pre46 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %115

115:                                              ; preds = %109, %104
  %116 = phi ptr [ %.pre46, %109 ], [ %105, %104 ]
  %.4.6 = phi i32 [ %114, %109 ], [ %.4.5, %104 ]
  %117 = getelementptr inbounds i8, ptr %116, i64 40
  %118 = load volatile i32, ptr %117, align 4, !tbaa !5
  %119 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 28), align 4, !tbaa !5
  %.not31.7 = icmp eq i32 %118, %119
  br i1 %.not31.7, label %126, label %120

120:                                              ; preds = %115
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131112) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %121 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 28), align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %121) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %122 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %123 = getelementptr inbounds i8, ptr %122, i64 40
  %124 = load volatile i32, ptr %123, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %124) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %125 = add nuw nsw i32 %.4.6, 1
  %.pre47 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %126

126:                                              ; preds = %120, %115
  %127 = phi ptr [ %.pre47, %120 ], [ %116, %115 ]
  %.4.7 = phi i32 [ %125, %120 ], [ %.4.6, %115 ]
  %128 = getelementptr inbounds i8, ptr %127, i64 44
  %129 = load volatile i32, ptr %128, align 4, !tbaa !5
  %130 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 32), align 16, !tbaa !5
  %.not31.8 = icmp eq i32 %129, %130
  br i1 %.not31.8, label %137, label %131

131:                                              ; preds = %126
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131116) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %132 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 32), align 16, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %132) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %133 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %134 = getelementptr inbounds i8, ptr %133, i64 44
  %135 = load volatile i32, ptr %134, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %135) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %136 = add nuw nsw i32 %.4.7, 1
  %.pre48 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %137

137:                                              ; preds = %131, %126
  %138 = phi ptr [ %.pre48, %131 ], [ %127, %126 ]
  %.4.8 = phi i32 [ %136, %131 ], [ %.4.7, %126 ]
  %139 = getelementptr inbounds i8, ptr %138, i64 48
  %140 = load volatile i32, ptr %139, align 4, !tbaa !5
  %141 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 36), align 4, !tbaa !5
  %.not31.9 = icmp eq i32 %140, %141
  br i1 %.not31.9, label %.preheader.preheader, label %142

142:                                              ; preds = %137
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131120) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %143 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 36), align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %143) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %144 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %145 = getelementptr inbounds i8, ptr %144, i64 48
  %146 = load volatile i32, ptr %145, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %146) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %147 = add nuw nsw i32 %.4.8, 1
  %.pre49 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %.preheader.preheader

.preheader.preheader:                             ; preds = %142, %137
  %148 = phi ptr [ %.pre49, %142 ], [ %138, %137 ]
  %.4.9 = phi i32 [ %147, %142 ], [ %.4.8, %137 ]
  %149 = getelementptr inbounds i8, ptr %148, i64 128
  %150 = load volatile i32, ptr %149, align 4, !tbaa !5
  %151 = load i32, ptr @DataArray, align 16, !tbaa !5
  %.not30 = icmp eq i32 %150, %151
  br i1 %.not30, label %.preheader.1, label %152

152:                                              ; preds = %.preheader.preheader
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131200) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %153 = load i32, ptr @DataArray, align 16, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %153) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %154 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %155 = getelementptr inbounds i8, ptr %154, i64 128
  %156 = load volatile i32, ptr %155, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %156) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %157 = add nuw nsw i32 %.4.9, 1
  %.pre50 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %.preheader.1

.preheader.1:                                     ; preds = %.preheader.preheader, %152
  %158 = phi ptr [ %.pre50, %152 ], [ %148, %.preheader.preheader ]
  %.6 = phi i32 [ %157, %152 ], [ %.4.9, %.preheader.preheader ]
  %159 = getelementptr inbounds i8, ptr %158, i64 132
  %160 = load volatile i32, ptr %159, align 4, !tbaa !5
  %161 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 4), align 4, !tbaa !5
  %.not30.1 = icmp eq i32 %160, %161
  br i1 %.not30.1, label %.preheader.2, label %162

162:                                              ; preds = %.preheader.1
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131204) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %163 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 4), align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %163) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %164 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %165 = getelementptr inbounds i8, ptr %164, i64 132
  %166 = load volatile i32, ptr %165, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %166) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %167 = add nuw nsw i32 %.6, 1
  %.pre51 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %.preheader.2

.preheader.2:                                     ; preds = %162, %.preheader.1
  %168 = phi ptr [ %.pre51, %162 ], [ %158, %.preheader.1 ]
  %.6.1 = phi i32 [ %167, %162 ], [ %.6, %.preheader.1 ]
  %169 = getelementptr inbounds i8, ptr %168, i64 136
  %170 = load volatile i32, ptr %169, align 4, !tbaa !5
  %171 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 8), align 8, !tbaa !5
  %.not30.2 = icmp eq i32 %170, %171
  br i1 %.not30.2, label %.preheader.3, label %172

172:                                              ; preds = %.preheader.2
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131208) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %173 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 8), align 8, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %173) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %174 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %175 = getelementptr inbounds i8, ptr %174, i64 136
  %176 = load volatile i32, ptr %175, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %176) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %177 = add nuw nsw i32 %.6.1, 1
  %.pre52 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %.preheader.3

.preheader.3:                                     ; preds = %172, %.preheader.2
  %178 = phi ptr [ %.pre52, %172 ], [ %168, %.preheader.2 ]
  %.6.2 = phi i32 [ %177, %172 ], [ %.6.1, %.preheader.2 ]
  %179 = getelementptr inbounds i8, ptr %178, i64 140
  %180 = load volatile i32, ptr %179, align 4, !tbaa !5
  %181 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 12), align 4, !tbaa !5
  %.not30.3 = icmp eq i32 %180, %181
  br i1 %.not30.3, label %.preheader.4, label %182

182:                                              ; preds = %.preheader.3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131212) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %183 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 12), align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %183) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %184 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %185 = getelementptr inbounds i8, ptr %184, i64 140
  %186 = load volatile i32, ptr %185, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %186) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %187 = add nuw nsw i32 %.6.2, 1
  %.pre53 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %.preheader.4

.preheader.4:                                     ; preds = %182, %.preheader.3
  %188 = phi ptr [ %.pre53, %182 ], [ %178, %.preheader.3 ]
  %.6.3 = phi i32 [ %187, %182 ], [ %.6.2, %.preheader.3 ]
  %189 = getelementptr inbounds i8, ptr %188, i64 144
  %190 = load volatile i32, ptr %189, align 4, !tbaa !5
  %191 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 16), align 16, !tbaa !5
  %.not30.4 = icmp eq i32 %190, %191
  br i1 %.not30.4, label %.preheader.5, label %192

192:                                              ; preds = %.preheader.4
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131216) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %193 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 16), align 16, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %193) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %194 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %195 = getelementptr inbounds i8, ptr %194, i64 144
  %196 = load volatile i32, ptr %195, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %196) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %197 = add nuw nsw i32 %.6.3, 1
  %.pre54 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %.preheader.5

.preheader.5:                                     ; preds = %192, %.preheader.4
  %198 = phi ptr [ %.pre54, %192 ], [ %188, %.preheader.4 ]
  %.6.4 = phi i32 [ %197, %192 ], [ %.6.3, %.preheader.4 ]
  %199 = getelementptr inbounds i8, ptr %198, i64 148
  %200 = load volatile i32, ptr %199, align 4, !tbaa !5
  %201 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 20), align 4, !tbaa !5
  %.not30.5 = icmp eq i32 %200, %201
  br i1 %.not30.5, label %.preheader.6, label %202

202:                                              ; preds = %.preheader.5
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131220) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %203 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 20), align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %203) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %204 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %205 = getelementptr inbounds i8, ptr %204, i64 148
  %206 = load volatile i32, ptr %205, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %206) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %207 = add nuw nsw i32 %.6.4, 1
  %.pre55 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %.preheader.6

.preheader.6:                                     ; preds = %202, %.preheader.5
  %208 = phi ptr [ %.pre55, %202 ], [ %198, %.preheader.5 ]
  %.6.5 = phi i32 [ %207, %202 ], [ %.6.4, %.preheader.5 ]
  %209 = getelementptr inbounds i8, ptr %208, i64 152
  %210 = load volatile i32, ptr %209, align 4, !tbaa !5
  %211 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 24), align 8, !tbaa !5
  %.not30.6 = icmp eq i32 %210, %211
  br i1 %.not30.6, label %.preheader.7, label %212

212:                                              ; preds = %.preheader.6
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131224) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %213 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 24), align 8, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %213) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %214 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %215 = getelementptr inbounds i8, ptr %214, i64 152
  %216 = load volatile i32, ptr %215, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %216) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %217 = add nuw nsw i32 %.6.5, 1
  %.pre56 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %.preheader.7

.preheader.7:                                     ; preds = %212, %.preheader.6
  %218 = phi ptr [ %.pre56, %212 ], [ %208, %.preheader.6 ]
  %.6.6 = phi i32 [ %217, %212 ], [ %.6.5, %.preheader.6 ]
  %219 = getelementptr inbounds i8, ptr %218, i64 156
  %220 = load volatile i32, ptr %219, align 4, !tbaa !5
  %221 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 28), align 4, !tbaa !5
  %.not30.7 = icmp eq i32 %220, %221
  br i1 %.not30.7, label %.preheader.8, label %222

222:                                              ; preds = %.preheader.7
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131228) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %223 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 28), align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %223) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %224 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %225 = getelementptr inbounds i8, ptr %224, i64 156
  %226 = load volatile i32, ptr %225, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %226) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %227 = add nuw nsw i32 %.6.6, 1
  %.pre57 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %.preheader.8

.preheader.8:                                     ; preds = %222, %.preheader.7
  %228 = phi ptr [ %.pre57, %222 ], [ %218, %.preheader.7 ]
  %.6.7 = phi i32 [ %227, %222 ], [ %.6.6, %.preheader.7 ]
  %229 = getelementptr inbounds i8, ptr %228, i64 160
  %230 = load volatile i32, ptr %229, align 4, !tbaa !5
  %231 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 32), align 16, !tbaa !5
  %.not30.8 = icmp eq i32 %230, %231
  br i1 %.not30.8, label %.preheader.9, label %232

232:                                              ; preds = %.preheader.8
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131232) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %233 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 32), align 16, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %233) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %234 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %235 = getelementptr inbounds i8, ptr %234, i64 160
  %236 = load volatile i32, ptr %235, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %236) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %237 = add nuw nsw i32 %.6.7, 1
  %.pre58 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %.preheader.9

.preheader.9:                                     ; preds = %232, %.preheader.8
  %238 = phi ptr [ %.pre58, %232 ], [ %228, %.preheader.8 ]
  %.6.8 = phi i32 [ %237, %232 ], [ %.6.7, %.preheader.8 ]
  %239 = getelementptr inbounds i8, ptr %238, i64 164
  %240 = load volatile i32, ptr %239, align 4, !tbaa !5
  %241 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 36), align 4, !tbaa !5
  %.not30.9 = icmp eq i32 %240, %241
  br i1 %.not30.9, label %248, label %242

242:                                              ; preds = %.preheader.9
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 131236) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.14) #3
  %243 = load i32, ptr getelementptr inbounds (i8, ptr @DataArray, i64 36), align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %243) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.15) #3
  %244 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %245 = getelementptr inbounds i8, ptr %244, i64 164
  %246 = load volatile i32, ptr %245, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %246) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %247 = add nuw nsw i32 %.6.8, 1
  %.pre59 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %248

248:                                              ; preds = %242, %.preheader.9
  %249 = phi ptr [ %.pre59, %242 ], [ %238, %.preheader.9 ]
  %.6.9 = phi i32 [ %247, %242 ], [ %.6.8, %.preheader.9 ]
  %250 = getelementptr inbounds i8, ptr %249, i64 4088
  %251 = load volatile i32, ptr %250, align 4, !tbaa !5
  %.not28 = icmp eq i32 %251, 267242400
  br i1 %.not28, label %257, label %252

252:                                              ; preds = %248
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 135160) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.16) #3
  %253 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %254 = getelementptr inbounds i8, ptr %253, i64 4088
  %255 = load volatile i32, ptr %254, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %255) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %256 = add nuw nsw i32 %.6.9, 1
  %.pre60 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  br label %257

257:                                              ; preds = %252, %248
  %258 = phi ptr [ %.pre60, %252 ], [ %249, %248 ]
  %.7 = phi i32 [ %256, %252 ], [ %.6.9, %248 ]
  %259 = getelementptr inbounds i8, ptr %258, i64 4092
  %260 = load volatile i32, ptr %259, align 4, !tbaa !5
  %.not29 = icmp eq i32 %260, 1162760007
  br i1 %.not29, label %266, label %261

261:                                              ; preds = %257
  tail call void @UART0_OutString(ptr noundef nonnull @.str.9) #3
  tail call void @UART0_OutUHex(i32 noundef 135164) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.17) #3
  %262 = load ptr, ptr @FlashPtr, align 8, !tbaa !9
  %263 = getelementptr inbounds i8, ptr %262, i64 4092
  %264 = load volatile i32, ptr %263, align 4, !tbaa !5
  tail call void @UART0_OutUHex(i32 noundef %264) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.11) #3
  %265 = add nuw nsw i32 %.7, 1
  br label %266

266:                                              ; preds = %261, %257
  %.8 = phi i32 [ %265, %261 ], [ %.7, %257 ]
  tail call void @UART0_OutString(ptr noundef nonnull @.str.18) #3
  tail call void @UART0_OutUDec(i32 noundef %.8) #3
  tail call void @UART0_OutString(ptr noundef nonnull @.str.19) #3
  %267 = tail call ptr @Scoreboard_Init(i32 noundef 139264) #3
  tail call void @LaunchPad_Output(i8 noundef zeroext 1) #3
  br label %268

268:                                              ; preds = %268, %266
  tail call void @printscores()
  tail call void @getnewscore()
  tail call void @LaunchPad_Output(i8 noundef zeroext 3) #3
  br label %268
}

declare void @Clock_Init48MHz() local_unnamed_addr #1

declare void @Flash_Init(i8 noundef zeroext) local_unnamed_addr #1

declare i32 @Clock_GetFreq() local_unnamed_addr #1

declare void @UART0_Init() local_unnamed_addr #1

declare void @LaunchPad_Init() local_unnamed_addr #1

declare void @LaunchPad_Output(i8 noundef zeroext) local_unnamed_addr #1

declare i32 @Flash_WriteArray(ptr noundef, i32 noundef, i16 noundef zeroext) local_unnamed_addr #1

declare i32 @Flash_FastWrite(ptr noundef, i32 noundef, i16 noundef zeroext) local_unnamed_addr #1

declare ptr @Scoreboard_Init(i32 noundef) local_unnamed_addr #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { noreturn nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,PostOrderFunctionAttrsPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass