; LLVM IR from joembedded/JesFs :: jesfs_hl (fs_start)

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

%struct.SFLASH_INFO = type { i32, i32, i32, i32, i32, i16, i16, i16, i16, i16, %union.SF_BUFFER, i8 }
%union.SF_BUFFER = type { [32 x i32] }

@sflash_info = external global %struct.SFLASH_INFO, align 4

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

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

; Function Attrs: nounwind uwtable
define dso_local signext i16 @fs_start(i8 noundef zeroext %0) #1 {
  %2 = alloca i16, align 2
  %3 = alloca i8, align 1
  %4 = alloca i16, align 2
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i16, align 2
  %10 = alloca i32, align 4
  store i8 %0, ptr %3, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 2, ptr %4) #3
  store i16 0, ptr %4, align 2, !tbaa !8
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %9) #3
  %11 = call signext i16 @sflash_spi_init()
  %12 = call signext i16 @_supply_voltage_check()
  %13 = icmp ne i16 %12, 0
  br i1 %13, label %14, label %19

14:                                               ; preds = %1
  store i32 -1, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 2), align 4, !tbaa !10
  store i32 0, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 1), align 4, !tbaa !13
  store i32 0, ptr @sflash_info, align 4, !tbaa !14
  %15 = load i8, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 11), align 4, !tbaa !15
  %16 = zext i8 %15 to i32
  %17 = or i32 %16, 2
  %18 = trunc i32 %17 to i8
  store i8 %18, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 11), align 4, !tbaa !15
  store i16 -147, ptr %2, align 2
  store i32 1, ptr %10, align 4
  br label %211

19:                                               ; preds = %1
  store i16 3, ptr %9, align 2, !tbaa !8
  br label %20

20:                                               ; preds = %49, %19
  %21 = load i16, ptr %9, align 2, !tbaa !8
  %22 = add i16 %21, -1
  store i16 %22, ptr %9, align 2, !tbaa !8
  %23 = icmp ne i16 %21, 0
  br i1 %23, label %24, label %50

24:                                               ; preds = %20
  call void @sflash_ReleaseFromDeepPowerDown()
  call void @sflash_wait_usec(i32 noundef 45)
  %25 = load i8, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 11), align 4, !tbaa !15
  %26 = zext i8 %25 to i32
  %27 = and i32 %26, -4
  %28 = trunc i32 %27 to i8
  store i8 %28, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 11), align 4, !tbaa !15
  %29 = call i32 @sflash_QuickScanIdentification()
  store i32 %29, ptr %5, align 4, !tbaa !16
  %30 = load i8, ptr %3, align 1, !tbaa !5
  %31 = zext i8 %30 to i32
  %32 = and i32 %31, 128
  %33 = icmp ne i32 %32, 0
  br i1 %33, label %34, label %43

34:                                               ; preds = %24
  %35 = load i32, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 1), align 4, !tbaa !13
  %36 = icmp ne i32 %35, 0
  br i1 %36, label %37, label %42

37:                                               ; preds = %34
  %38 = load i32, ptr %5, align 4, !tbaa !16
  %39 = load i32, ptr @sflash_info, align 4, !tbaa !14
  %40 = icmp eq i32 %38, %39
  br i1 %40, label %41, label %42

41:                                               ; preds = %37
  store i16 0, ptr %2, align 2
  store i32 1, ptr %10, align 4
  br label %211

42:                                               ; preds = %37, %34
  br label %43

43:                                               ; preds = %42, %24
  store i32 -1, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 2), align 4, !tbaa !10
  %44 = load i32, ptr %5, align 4, !tbaa !16
  %45 = call signext i16 @sflash_interpret_id(i32 noundef %44)
  store i16 %45, ptr %4, align 2, !tbaa !8
  %46 = load i16, ptr %4, align 2, !tbaa !8
  %47 = icmp ne i16 %46, 0
  br i1 %47, label %49, label %48

48:                                               ; preds = %43
  br label %50

49:                                               ; preds = %43
  br label %20, !llvm.loop !17

50:                                               ; preds = %48, %20
  %51 = load i16, ptr %4, align 2, !tbaa !8
  %52 = icmp ne i16 %51, 0
  br i1 %52, label %53, label %55

53:                                               ; preds = %50
  %54 = load i16, ptr %4, align 2, !tbaa !8
  store i16 %54, ptr %2, align 2
  store i32 1, ptr %10, align 4
  br label %211

55:                                               ; preds = %50
  call void @sflash_read(i32 noundef 0, ptr noundef getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), i16 noundef zeroext 12)
  %56 = load i32, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), align 4, !tbaa !5
  %57 = icmp eq i32 %56, -1
  br i1 %57, label %58, label %59

58:                                               ; preds = %55
  store i16 -108, ptr %2, align 2
  store i32 1, ptr %10, align 4
  br label %211

59:                                               ; preds = %55
  %60 = load i32, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), align 4, !tbaa !5
  %61 = icmp ne i32 %60, 1181967690
  br i1 %61, label %62, label %63

62:                                               ; preds = %59
  store i16 -146, ptr %2, align 2
  store i32 1, ptr %10, align 4
  br label %211

63:                                               ; preds = %59
  %64 = load i32, ptr getelementptr inbounds ([32 x i32], ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), i64 0, i64 1), align 4, !tbaa !5
  %65 = load i32, ptr @sflash_info, align 4, !tbaa !14
  %66 = icmp ne i32 %64, %65
  br i1 %66, label %67, label %68

67:                                               ; preds = %63
  store i16 -109, ptr %2, align 2
  store i32 1, ptr %10, align 4
  br label %211

68:                                               ; preds = %63
  %69 = load i32, ptr getelementptr inbounds ([32 x i32], ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), i64 0, i64 2), align 4, !tbaa !5
  store i32 %69, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 2), align 4, !tbaa !10
  store i16 0, ptr %9, align 2, !tbaa !8
  %70 = load i32, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 1), align 4, !tbaa !13
  %71 = sub i32 %70, 4096
  store i32 %71, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 4), align 4, !tbaa !19
  store i16 0, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 7), align 4, !tbaa !20
  store i16 0, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 8), align 2, !tbaa !21
  store i16 0, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 9), align 4, !tbaa !22
  store i16 0, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 5), align 4, !tbaa !23
  store i16 0, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 6), align 2, !tbaa !24
  store i32 0, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 3), align 4, !tbaa !25
  store i32 4096, ptr %6, align 4, !tbaa !16
  br label %72

72:                                               ; preds = %161, %68
  %73 = load i32, ptr %6, align 4, !tbaa !16
  %74 = load i32, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 1), align 4, !tbaa !13
  %75 = icmp ult i32 %73, %74
  br i1 %75, label %76, label %164

76:                                               ; preds = %72
  %77 = load i32, ptr %6, align 4, !tbaa !16
  %78 = load i8, ptr %3, align 1, !tbaa !5
  %79 = zext i8 %78 to i32
  %80 = and i32 %79, 1
  %81 = icmp ne i32 %80, 0
  %82 = zext i1 %81 to i64
  %83 = select i1 %81, i32 4, i32 12
  %84 = trunc i32 %83 to i16
  call void @sflash_read(i32 noundef %77, ptr noundef getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), i16 noundef zeroext %84)
  %85 = load i32, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), align 4, !tbaa !5
  switch i32 %85, label %103 [
    i32 -1, label %86
    i32 -49088, label %89
    i32 -54982, label %93
    i32 -57040, label %96
    i32 -41637, label %99
  ]

86:                                               ; preds = %76
  %87 = load i16, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 8), align 2, !tbaa !21
  %88 = add i16 %87, 1
  store i16 %88, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 8), align 2, !tbaa !21
  br label %108

89:                                               ; preds = %76
  %90 = load i16, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 7), align 4, !tbaa !20
  %91 = add i16 %90, 1
  store i16 %91, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 7), align 4, !tbaa !20
  %92 = load i32, ptr %6, align 4, !tbaa !16
  store i32 %92, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 3), align 4, !tbaa !25
  br label %108

93:                                               ; preds = %76
  %94 = load i16, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 6), align 2, !tbaa !24
  %95 = add i16 %94, 1
  store i16 %95, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 6), align 2, !tbaa !24
  br label %96

96:                                               ; preds = %93, %76
  %97 = load i16, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 5), align 4, !tbaa !23
  %98 = add i16 %97, 1
  store i16 %98, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 5), align 4, !tbaa !23
  br label %99

99:                                               ; preds = %96, %76
  %100 = load i32, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 4), align 4, !tbaa !19
  %101 = sub i32 %100, 4096
  store i32 %101, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 4), align 4, !tbaa !19
  %102 = load i32, ptr %6, align 4, !tbaa !16
  store i32 %102, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 3), align 4, !tbaa !25
  br label %108

103:                                              ; preds = %76
  %104 = load i16, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 9), align 4, !tbaa !22
  %105 = add i16 %104, 1
  store i16 %105, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 9), align 4, !tbaa !22
  %106 = load i16, ptr %9, align 2, !tbaa !8
  %107 = add i16 %106, 1
  store i16 %107, ptr %9, align 2, !tbaa !8
  br label %108

108:                                              ; preds = %103, %99, %89, %86
  %109 = load i8, ptr %3, align 1, !tbaa !5
  %110 = zext i8 %109 to i32
  %111 = and i32 %110, 1
  %112 = icmp ne i32 %111, 0
  br i1 %112, label %160, label %113

113:                                              ; preds = %108
  %114 = load i32, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), align 4, !tbaa !5
  switch i32 %114, label %159 [
    i32 -1, label %115
    i32 -54982, label %125
    i32 -57040, label %125
    i32 -41637, label %139
    i32 -49088, label %139
  ]

115:                                              ; preds = %113
  %116 = load i32, ptr getelementptr inbounds ([32 x i32], ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), i64 0, i64 1), align 4, !tbaa !5
  %117 = icmp ne i32 %116, -1
  br i1 %117, label %121, label %118

118:                                              ; preds = %115
  %119 = load i32, ptr getelementptr inbounds ([32 x i32], ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), i64 0, i64 2), align 4, !tbaa !5
  %120 = icmp ne i32 %119, -1
  br i1 %120, label %121, label %124

121:                                              ; preds = %118, %115
  %122 = load i16, ptr %9, align 2, !tbaa !8
  %123 = add i16 %122, 1
  store i16 %123, ptr %9, align 2, !tbaa !8
  br label %124

124:                                              ; preds = %121, %118
  br label %159

125:                                              ; preds = %113, %113
  %126 = load i32, ptr getelementptr inbounds ([32 x i32], ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), i64 0, i64 1), align 4, !tbaa !5
  %127 = icmp ne i32 %126, -1
  br i1 %127, label %128, label %131

128:                                              ; preds = %125
  %129 = load i16, ptr %9, align 2, !tbaa !8
  %130 = add i16 %129, 1
  store i16 %130, ptr %9, align 2, !tbaa !8
  br label %131

131:                                              ; preds = %128, %125
  %132 = load i32, ptr getelementptr inbounds ([32 x i32], ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), i64 0, i64 2), align 4, !tbaa !5
  %133 = call signext i16 @sflash_sadr_invalid(i32 noundef %132)
  %134 = icmp ne i16 %133, 0
  br i1 %134, label %135, label %138

135:                                              ; preds = %131
  %136 = load i16, ptr %9, align 2, !tbaa !8
  %137 = add i16 %136, 1
  store i16 %137, ptr %9, align 2, !tbaa !8
  br label %138

138:                                              ; preds = %135, %131
  br label %159

139:                                              ; preds = %113, %113
  %140 = load i32, ptr getelementptr inbounds ([32 x i32], ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), i64 0, i64 1), align 4, !tbaa !5
  store i32 %140, ptr %7, align 4, !tbaa !16
  %141 = load i32, ptr %7, align 4, !tbaa !16
  %142 = icmp eq i32 %141, -1
  br i1 %142, label %148, label %143

143:                                              ; preds = %139
  %144 = load i32, ptr %7, align 4, !tbaa !16
  %145 = call signext i16 @sflash_sadr_invalid(i32 noundef %144)
  %146 = sext i16 %145 to i32
  %147 = icmp ne i32 %146, 0
  br i1 %147, label %148, label %151

148:                                              ; preds = %143, %139
  %149 = load i16, ptr %9, align 2, !tbaa !8
  %150 = add i16 %149, 1
  store i16 %150, ptr %9, align 2, !tbaa !8
  br label %151

151:                                              ; preds = %148, %143
  %152 = load i32, ptr getelementptr inbounds ([32 x i32], ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 10), i64 0, i64 2), align 4, !tbaa !5
  %153 = call signext i16 @sflash_sadr_invalid(i32 noundef %152)
  %154 = icmp ne i16 %153, 0
  br i1 %154, label %155, label %158

155:                                              ; preds = %151
  %156 = load i16, ptr %9, align 2, !tbaa !8
  %157 = add i16 %156, 1
  store i16 %157, ptr %9, align 2, !tbaa !8
  br label %158

158:                                              ; preds = %155, %151
  br label %159

159:                                              ; preds = %158, %138, %124, %113
  br label %160

160:                                              ; preds = %159, %108
  br label %161

161:                                              ; preds = %160
  %162 = load i32, ptr %6, align 4, !tbaa !16
  %163 = add i32 %162, 4096
  store i32 %163, ptr %6, align 4, !tbaa !16
  br label %72, !llvm.loop !26

164:                                              ; preds = %72
  store i32 12, ptr %6, align 4, !tbaa !16
  store i32 0, ptr %5, align 4, !tbaa !16
  br label %165

165:                                              ; preds = %195, %164
  %166 = load i32, ptr %6, align 4, !tbaa !16
  %167 = icmp ne i32 %166, 4096
  br i1 %167, label %168, label %198

168:                                              ; preds = %165
  %169 = load i32, ptr %6, align 4, !tbaa !16
  call void @sflash_read(i32 noundef %169, ptr noundef %7, i16 noundef zeroext 4)
  %170 = load i32, ptr %7, align 4, !tbaa !16
  %171 = icmp eq i32 %170, -1
  br i1 %171, label %172, label %173

172:                                              ; preds = %168
  br label %198

173:                                              ; preds = %168
  %174 = load i32, ptr %7, align 4, !tbaa !16
  %175 = call signext i16 @sflash_sadr_invalid(i32 noundef %174)
  %176 = icmp ne i16 %175, 0
  br i1 %176, label %177, label %180

177:                                              ; preds = %173
  %178 = load i16, ptr %9, align 2, !tbaa !8
  %179 = add i16 %178, 1
  store i16 %179, ptr %9, align 2, !tbaa !8
  br label %194

180:                                              ; preds = %173
  %181 = load i32, ptr %7, align 4, !tbaa !16
  call void @sflash_read(i32 noundef %181, ptr noundef %8, i16 noundef zeroext 4)
  %182 = load i32, ptr %8, align 4, !tbaa !16
  %183 = icmp eq i32 %182, -54982
  br i1 %183, label %187, label %184

184:                                              ; preds = %180
  %185 = load i32, ptr %8, align 4, !tbaa !16
  %186 = icmp eq i32 %185, -57040
  br i1 %186, label %187, label %190

187:                                              ; preds = %184, %180
  %188 = load i32, ptr %5, align 4, !tbaa !16
  %189 = add i32 %188, 1
  store i32 %189, ptr %5, align 4, !tbaa !16
  br label %193

190:                                              ; preds = %184
  %191 = load i16, ptr %9, align 2, !tbaa !8
  %192 = add i16 %191, 1
  store i16 %192, ptr %9, align 2, !tbaa !8
  br label %193

193:                                              ; preds = %190, %187
  br label %194

194:                                              ; preds = %193, %177
  br label %195

195:                                              ; preds = %194
  %196 = load i32, ptr %6, align 4, !tbaa !16
  %197 = add i32 %196, 4
  store i32 %197, ptr %6, align 4, !tbaa !16
  br label %165, !llvm.loop !27

198:                                              ; preds = %172, %165
  %199 = load i16, ptr %9, align 2, !tbaa !8
  %200 = zext i16 %199 to i32
  %201 = icmp ne i32 %200, 0
  br i1 %201, label %209, label %202

202:                                              ; preds = %198
  %203 = load i32, ptr %5, align 4, !tbaa !16
  %204 = trunc i32 %203 to i16
  %205 = zext i16 %204 to i32
  %206 = load i16, ptr getelementptr inbounds (%struct.SFLASH_INFO, ptr @sflash_info, i32 0, i32 5), align 4, !tbaa !23
  %207 = zext i16 %206 to i32
  %208 = icmp ne i32 %205, %207
  br i1 %208, label %209, label %210

209:                                              ; preds = %202, %198
  store i16 -107, ptr %2, align 2
  store i32 1, ptr %10, align 4
  br label %211

210:                                              ; preds = %202
  store i16 0, ptr %2, align 2
  store i32 1, ptr %10, align 4
  br label %211

211:                                              ; preds = %210, %209, %67, %62, %58, %53, %41, %14
  call void @llvm.lifetime.end.p0(i64 2, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %4) #3
  %212 = load i16, ptr %2, align 2
  ret i16 %212
}

declare signext i16 @sflash_spi_init() #2

declare signext i16 @_supply_voltage_check() #2

declare void @sflash_ReleaseFromDeepPowerDown() #2

declare void @sflash_wait_usec(i32 noundef) #2

declare i32 @sflash_QuickScanIdentification() #2

declare signext i16 @sflash_interpret_id(i32 noundef) #2

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

; Function Attrs: nounwind uwtable
declare hidden signext i16 @sflash_sadr_invalid(i32 noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"short", !6, i64 0}
!10 = !{!11, !12, i64 8}
!11 = !{!"", !12, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !12, i64 16, !9, i64 20, !9, i64 22, !9, i64 24, !9, i64 26, !9, i64 28, !6, i64 32, !6, i64 160}
!12 = !{!"int", !6, i64 0}
!13 = !{!11, !12, i64 4}
!14 = !{!11, !12, i64 0}
!15 = !{!11, !6, i64 160}
!16 = !{!12, !12, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{!11, !12, i64 16}
!20 = !{!11, !9, i64 24}
!21 = !{!11, !9, i64 26}
!22 = !{!11, !9, i64 28}
!23 = !{!11, !9, i64 20}
!24 = !{!11, !9, i64 22}
!25 = !{!11, !12, i64 12}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}


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

%struct.SFLASH_INFO = type { i32, i32, i32, i32, i32, i16, i16, i16, i16, i16, %union.SF_BUFFER, i8 }
%union.SF_BUFFER = type { [32 x i32] }

@sflash_info = external global %struct.SFLASH_INFO, align 4

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

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

; Function Attrs: nounwind uwtable
define dso_local signext i16 @fs_start(i8 noundef zeroext %0) local_unnamed_addr #1 {
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %2) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #4
  %4 = tail call signext i16 @sflash_spi_init() #4
  %5 = tail call signext i16 @_supply_voltage_check() #4
  %.not = icmp eq i16 %5, 0
  br i1 %.not, label %.preheader70, label %23

.preheader70:                                     ; preds = %1
  %6 = icmp slt i8 %0, 0
  tail call void @sflash_ReleaseFromDeepPowerDown() #4
  tail call void @sflash_wait_usec(i32 noundef 45) #4
  %7 = load i8, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 160), align 4, !tbaa !5
  %8 = and i8 %7, -4
  store i8 %8, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 160), align 4, !tbaa !5
  %9 = tail call i32 @sflash_QuickScanIdentification() #4
  br i1 %6, label %.preheader70.split.preheader, label %.preheader70.split.us.preheader

.preheader70.split.us.preheader:                  ; preds = %.preheader70
  store i32 -1, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 8), align 4, !tbaa !11
  %10 = tail call signext i16 @sflash_interpret_id(i32 noundef %9) #4
  %.not47.us = icmp eq i16 %10, 0
  br i1 %.not47.us, label %.thread, label %.preheader70.split.us.1, !llvm.loop !12

.preheader70.split.preheader:                     ; preds = %.preheader70
  %11 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 4), align 4
  %12 = icmp ne i32 %11, 0
  %13 = load i32, ptr @sflash_info, align 4
  %14 = icmp eq i32 %9, %13
  %or.cond61 = select i1 %12, i1 %14, i1 false
  br i1 %or.cond61, label %.loopexit, label %44

.preheader70.split.us.1:                          ; preds = %.preheader70.split.us.preheader
  tail call void @sflash_ReleaseFromDeepPowerDown() #4
  tail call void @sflash_wait_usec(i32 noundef 45) #4
  %15 = load i8, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 160), align 4, !tbaa !5
  %16 = and i8 %15, -4
  store i8 %16, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 160), align 4, !tbaa !5
  %17 = tail call i32 @sflash_QuickScanIdentification() #4
  store i32 -1, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 8), align 4, !tbaa !11
  %18 = tail call signext i16 @sflash_interpret_id(i32 noundef %17) #4
  %.not47.us.1 = icmp eq i16 %18, 0
  br i1 %.not47.us.1, label %.thread, label %.preheader70.split.us.2, !llvm.loop !12

.preheader70.split.us.2:                          ; preds = %.preheader70.split.us.1
  tail call void @sflash_ReleaseFromDeepPowerDown() #4
  tail call void @sflash_wait_usec(i32 noundef 45) #4
  %19 = load i8, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 160), align 4, !tbaa !5
  %20 = and i8 %19, -4
  store i8 %20, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 160), align 4, !tbaa !5
  %21 = tail call i32 @sflash_QuickScanIdentification() #4
  store i32 -1, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 8), align 4, !tbaa !11
  %22 = tail call signext i16 @sflash_interpret_id(i32 noundef %21) #4
  %.not47.us.2 = icmp eq i16 %22, 0
  br i1 %.not47.us.2, label %.thread, label %.loopexit, !llvm.loop !12

23:                                               ; preds = %1
  store i32 -1, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 8), align 4, !tbaa !11
  store i32 0, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 4), align 4, !tbaa !14
  store i32 0, ptr @sflash_info, align 4, !tbaa !15
  %24 = load i8, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 160), align 4, !tbaa !5
  %25 = or i8 %24, 2
  store i8 %25, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 160), align 4, !tbaa !5
  br label %.loopexit

.preheader70.split.1:                             ; preds = %44
  tail call void @sflash_ReleaseFromDeepPowerDown() #4
  tail call void @sflash_wait_usec(i32 noundef 45) #4
  %26 = load i8, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 160), align 4, !tbaa !5
  %27 = and i8 %26, -4
  store i8 %27, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 160), align 4, !tbaa !5
  %28 = tail call i32 @sflash_QuickScanIdentification() #4
  %29 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 4), align 4
  %30 = icmp ne i32 %29, 0
  %31 = load i32, ptr @sflash_info, align 4
  %32 = icmp eq i32 %28, %31
  %or.cond61.1 = select i1 %30, i1 %32, i1 false
  br i1 %or.cond61.1, label %.loopexit, label %33

33:                                               ; preds = %.preheader70.split.1
  store i32 -1, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 8), align 4, !tbaa !11
  %34 = tail call signext i16 @sflash_interpret_id(i32 noundef %28) #4
  %.not47.1 = icmp eq i16 %34, 0
  br i1 %.not47.1, label %.thread, label %.preheader70.split.2, !llvm.loop !12

.preheader70.split.2:                             ; preds = %33
  tail call void @sflash_ReleaseFromDeepPowerDown() #4
  tail call void @sflash_wait_usec(i32 noundef 45) #4
  %35 = load i8, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 160), align 4, !tbaa !5
  %36 = and i8 %35, -4
  store i8 %36, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 160), align 4, !tbaa !5
  %37 = tail call i32 @sflash_QuickScanIdentification() #4
  %38 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 4), align 4
  %39 = icmp ne i32 %38, 0
  %40 = load i32, ptr @sflash_info, align 4
  %41 = icmp eq i32 %37, %40
  %or.cond61.2 = select i1 %39, i1 %41, i1 false
  br i1 %or.cond61.2, label %.loopexit, label %42

42:                                               ; preds = %.preheader70.split.2
  store i32 -1, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 8), align 4, !tbaa !11
  %43 = tail call signext i16 @sflash_interpret_id(i32 noundef %37) #4
  %.not47.2 = icmp eq i16 %43, 0
  br i1 %.not47.2, label %.thread, label %.loopexit, !llvm.loop !12

44:                                               ; preds = %.preheader70.split.preheader
  store i32 -1, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 8), align 4, !tbaa !11
  %45 = tail call signext i16 @sflash_interpret_id(i32 noundef %9) #4
  %.not47 = icmp eq i16 %45, 0
  br i1 %.not47, label %.thread, label %.preheader70.split.1, !llvm.loop !12

.thread:                                          ; preds = %.preheader70.split.us.preheader, %.preheader70.split.us.1, %.preheader70.split.us.2, %44, %33, %42
  tail call void @sflash_read(i32 noundef 0, ptr noundef nonnull getelementptr inbounds (i8, ptr @sflash_info, i64 32), i16 noundef zeroext 12) #4
  %46 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 32), align 4, !tbaa !16
  switch i32 %46, label %47 [
    i32 -1, label %.loopexit
    i32 1181967690, label %48
  ]

47:                                               ; preds = %.thread
  br label %.loopexit

48:                                               ; preds = %.thread
  %49 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 36), align 4, !tbaa !16
  %50 = load i32, ptr @sflash_info, align 4, !tbaa !15
  %.not50 = icmp eq i32 %49, %50
  br i1 %.not50, label %51, label %.loopexit

51:                                               ; preds = %48
  %52 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 40), align 4, !tbaa !16
  store i32 %52, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 8), align 4, !tbaa !11
  %53 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 4), align 4, !tbaa !14
  %54 = add i32 %53, -4096
  store i32 %54, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 16), align 4, !tbaa !17
  store i32 0, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 12), align 4, !tbaa !18
  %55 = icmp ugt i32 %53, 4096
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(10) getelementptr inbounds (i8, ptr @sflash_info, i64 20), i8 0, i64 10, i1 false)
  br i1 %55, label %.lr.ph, label %.preheader

.lr.ph:                                           ; preds = %51
  %56 = and i8 %0, 1
  %.not55 = icmp eq i8 %56, 0
  %57 = select i1 %.not55, i16 12, i16 4
  br label %58

.preheader:                                       ; preds = %105, %51
  %.lcssa = phi i32 [ undef, %51 ], [ %106, %105 ]
  %.1.lcssa = phi i16 [ 0, %51 ], [ %.5, %105 ]
  store i32 %.lcssa, ptr %2, align 4, !tbaa !19
  br label %110

58:                                               ; preds = %.lr.ph, %105
  %.174 = phi i16 [ 0, %.lr.ph ], [ %.5, %105 ]
  %.03473 = phi i32 [ 4096, %.lr.ph ], [ %107, %105 ]
  %59 = phi i32 [ undef, %.lr.ph ], [ %106, %105 ]
  tail call void @sflash_read(i32 noundef %.03473, ptr noundef nonnull getelementptr inbounds (i8, ptr @sflash_info, i64 32), i16 noundef zeroext %57) #4
  %60 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 32), align 4, !tbaa !16
  switch i32 %60, label %76 [
    i32 -1, label %61
    i32 -49088, label %64
    i32 -54982, label %67
    i32 -57040, label %70
    i32 -41637, label %73
  ]

61:                                               ; preds = %58
  %62 = load i16, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 26), align 2, !tbaa !20
  %63 = add i16 %62, 1
  store i16 %63, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 26), align 2, !tbaa !20
  br label %80

64:                                               ; preds = %58
  %65 = load i16, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 24), align 4, !tbaa !21
  %66 = add i16 %65, 1
  store i16 %66, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 24), align 4, !tbaa !21
  store i32 %.03473, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 12), align 4, !tbaa !18
  br label %80

67:                                               ; preds = %58
  %68 = load i16, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 22), align 2, !tbaa !22
  %69 = add i16 %68, 1
  store i16 %69, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 22), align 2, !tbaa !22
  br label %70

70:                                               ; preds = %67, %58
  %71 = load i16, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 20), align 4, !tbaa !23
  %72 = add i16 %71, 1
  store i16 %72, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 20), align 4, !tbaa !23
  br label %73

73:                                               ; preds = %70, %58
  %74 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 16), align 4, !tbaa !17
  %75 = add i32 %74, -4096
  store i32 %75, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 16), align 4, !tbaa !17
  store i32 %.03473, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 12), align 4, !tbaa !18
  br label %80

76:                                               ; preds = %58
  %77 = load i16, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 28), align 4, !tbaa !24
  %78 = add i16 %77, 1
  store i16 %78, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 28), align 4, !tbaa !24
  %79 = add i16 %.174, 1
  br label %80

80:                                               ; preds = %76, %73, %64, %61
  %.2 = phi i16 [ %79, %76 ], [ %.174, %73 ], [ %.174, %64 ], [ %.174, %61 ]
  br i1 %.not55, label %81, label %105

81:                                               ; preds = %80
  switch i32 %60, label %105 [
    i32 -1, label %82
    i32 -54982, label %88
    i32 -57040, label %88
    i32 -41637, label %94
    i32 -49088, label %94
  ]

82:                                               ; preds = %81
  %83 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 36), align 4, !tbaa !16
  %84 = icmp ne i32 %83, -1
  %85 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 40), align 4
  %86 = icmp ne i32 %85, -1
  %or.cond = select i1 %84, i1 true, i1 %86
  %87 = zext i1 %or.cond to i16
  %spec.select = add i16 %.2, %87
  br label %105

88:                                               ; preds = %81, %81
  %89 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 36), align 4, !tbaa !16
  %.not58 = icmp ne i32 %89, -1
  %90 = zext i1 %.not58 to i16
  %spec.select62 = add i16 %.2, %90
  %91 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 40), align 4, !tbaa !16
  %92 = tail call signext i16 @sflash_sadr_invalid(i32 noundef %91)
  %.not59 = icmp ne i16 %92, 0
  %93 = zext i1 %.not59 to i16
  %spec.select66 = add i16 %spec.select62, %93
  br label %105

94:                                               ; preds = %81, %81
  %95 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 36), align 4, !tbaa !16
  %96 = icmp eq i32 %95, -1
  br i1 %96, label %99, label %97

97:                                               ; preds = %94
  %98 = tail call signext i16 @sflash_sadr_invalid(i32 noundef %95)
  %.not56 = icmp eq i16 %98, 0
  br i1 %.not56, label %101, label %99

99:                                               ; preds = %97, %94
  %100 = add i16 %.2, 1
  br label %101

101:                                              ; preds = %99, %97
  %.4 = phi i16 [ %100, %99 ], [ %.2, %97 ]
  %102 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 40), align 4, !tbaa !16
  %103 = tail call signext i16 @sflash_sadr_invalid(i32 noundef %102)
  %.not57 = icmp ne i16 %103, 0
  %104 = zext i1 %.not57 to i16
  %spec.select63 = add i16 %.4, %104
  br label %105

105:                                              ; preds = %88, %101, %82, %80, %81
  %106 = phi i32 [ %59, %80 ], [ %59, %81 ], [ %59, %82 ], [ %95, %101 ], [ %59, %88 ]
  %.5 = phi i16 [ %.2, %80 ], [ %.2, %81 ], [ %spec.select, %82 ], [ %spec.select63, %101 ], [ %spec.select66, %88 ]
  %107 = add i32 %.03473, 4096
  %108 = load i32, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 4), align 4, !tbaa !14
  %109 = icmp ult i32 %107, %108
  br i1 %109, label %58, label %.preheader, !llvm.loop !25

110:                                              ; preds = %.preheader, %124
  %.678 = phi i16 [ %.1.lcssa, %.preheader ], [ %.7, %124 ]
  %.13577 = phi i32 [ 12, %.preheader ], [ %125, %124 ]
  %.03676 = phi i16 [ 0, %.preheader ], [ %.137, %124 ]
  call void @sflash_read(i32 noundef %.13577, ptr noundef nonnull %2, i16 noundef zeroext 4) #4
  %111 = load i32, ptr %2, align 4, !tbaa !19
  %112 = icmp eq i32 %111, -1
  br i1 %112, label %126, label %113

113:                                              ; preds = %110
  %114 = call signext i16 @sflash_sadr_invalid(i32 noundef %111)
  %.not52 = icmp eq i16 %114, 0
  br i1 %.not52, label %117, label %115

115:                                              ; preds = %113
  %116 = add i16 %.678, 1
  br label %124

117:                                              ; preds = %113
  %118 = load i32, ptr %2, align 4, !tbaa !19
  call void @sflash_read(i32 noundef %118, ptr noundef nonnull %3, i16 noundef zeroext 4) #4
  %119 = load i32, ptr %3, align 4
  switch i32 %119, label %122 [
    i32 -54982, label %120
    i32 -57040, label %120
  ]

120:                                              ; preds = %117, %117
  %121 = add i16 %.03676, 1
  br label %124

122:                                              ; preds = %117
  %123 = add i16 %.678, 1
  br label %124

124:                                              ; preds = %115, %122, %120
  %.137 = phi i16 [ %.03676, %115 ], [ %121, %120 ], [ %.03676, %122 ]
  %.7 = phi i16 [ %116, %115 ], [ %.678, %120 ], [ %123, %122 ]
  %125 = add nuw nsw i32 %.13577, 4
  %.not51 = icmp eq i32 %125, 4096
  br i1 %.not51, label %126, label %110, !llvm.loop !26

126:                                              ; preds = %110, %124
  %.036.lcssa = phi i16 [ %.03676, %110 ], [ %.137, %124 ]
  %.6.lcssa = phi i16 [ %.678, %110 ], [ %.7, %124 ]
  %.not53 = icmp eq i16 %.6.lcssa, 0
  %127 = load i16, ptr getelementptr inbounds (i8, ptr @sflash_info, i64 20), align 4
  %.not54 = icmp eq i16 %127, %.036.lcssa
  %or.cond65 = select i1 %.not53, i1 %.not54, i1 false
  %spec.select67 = select i1 %or.cond65, i16 0, i16 -107
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader70.split.preheader, %.preheader70.split.1, %.preheader70.split.2, %.preheader70.split.us.2, %42, %126, %48, %.thread, %47, %23
  %.040 = phi i16 [ -147, %23 ], [ -146, %47 ], [ -108, %.thread ], [ -109, %48 ], [ %spec.select67, %126 ], [ %22, %.preheader70.split.us.2 ], [ %43, %42 ], [ 0, %.preheader70.split.2 ], [ 0, %.preheader70.split.1 ], [ 0, %.preheader70.split.preheader ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %2) #4
  ret i16 %.040
}

declare signext i16 @sflash_spi_init() local_unnamed_addr #2

declare signext i16 @_supply_voltage_check() local_unnamed_addr #2

declare void @sflash_ReleaseFromDeepPowerDown() local_unnamed_addr #2

declare void @sflash_wait_usec(i32 noundef) local_unnamed_addr #2

declare i32 @sflash_QuickScanIdentification() local_unnamed_addr #2

declare signext i16 @sflash_interpret_id(i32 noundef) local_unnamed_addr #2

declare void @sflash_read(i32 noundef, ptr noundef, i16 noundef zeroext) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare hidden signext i16 @sflash_sadr_invalid(i32 noundef) local_unnamed_addr #1

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { 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, !8, i64 160}
!6 = !{!"", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !10, i64 20, !10, i64 22, !10, i64 24, !10, i64 26, !10, i64 28, !8, i64 32, !8, i64 160}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"short", !8, i64 0}
!11 = !{!6, !7, i64 8}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!6, !7, i64 4}
!15 = !{!6, !7, i64 0}
!16 = !{!8, !8, i64 0}
!17 = !{!6, !7, i64 16}
!18 = !{!6, !7, i64 12}
!19 = !{!7, !7, i64 0}
!20 = !{!6, !10, i64 26}
!21 = !{!6, !10, i64 24}
!22 = !{!6, !10, i64 22}
!23 = !{!6, !10, i64 20}
!24 = !{!6, !10, i64 28}
!25 = distinct !{!25, !13}
!26 = distinct !{!26, !13}


; Effective O3 passes: AggressiveInstCombinePass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass