; LLVM IR from tezc/sc :: array (array_test)

; 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.sc_array_int = type { i8, i64, i64, ptr }

@.str.4 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [20 x i8], align 1
@__PRETTY_FUNCTION__.test2 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [28 x i8], align 1

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

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

; Function Attrs: nounwind allocsize(1)
declare ptr @realloc(ptr noundef, i64 noundef) #2

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memmove.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) #4

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

; Function Attrs: nounwind uwtable
define dso_local void @test2() #6 {
  %1 = alloca i32, align 4
  %2 = alloca %struct.sc_array_int, align 8
  %3 = alloca i64, align 8
  %4 = alloca i64, align 8
  %5 = alloca i64, align 8
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca ptr, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %1) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %2) #7
  br label %32

32:                                               ; preds = %0
  call void @llvm.memset.p0.i64(ptr align 8 %2, i8 0, i64 32, i1 false)
  br label %33

33:                                               ; preds = %32
  br label %34

34:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #7
  store i64 1, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #7
  store i64 0, ptr %4, align 8, !tbaa !5
  br label %35

35:                                               ; preds = %63, %34
  %36 = load i64, ptr %3, align 8, !tbaa !5
  %37 = icmp ne i64 %36, 0
  br i1 %37, label %38, label %43

38:                                               ; preds = %35
  %39 = load i64, ptr %4, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %41 = load i64, ptr %40, align 8, !tbaa !9
  %42 = icmp ne i64 %39, %41
  br label %43

43:                                               ; preds = %38, %35
  %44 = phi i1 [ false, %35 ], [ %42, %38 ]
  br i1 %44, label %46, label %45

45:                                               ; preds = %43
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #7
  br label %71

46:                                               ; preds = %43
  %47 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %48 = load ptr, ptr %47, align 8, !tbaa !13
  %49 = load i64, ptr %4, align 8, !tbaa !5
  %50 = getelementptr inbounds i32, ptr %48, i64 %49
  %51 = load i32, ptr %50, align 4, !tbaa !14
  store i32 %51, ptr %1, align 4, !tbaa !14
  br label %52

52:                                               ; preds = %56, %46
  %53 = load i64, ptr %3, align 8, !tbaa !5
  %54 = icmp ne i64 %53, 0
  br i1 %54, label %55, label %62

55:                                               ; preds = %52
  br label %56

56:                                               ; preds = %55
  %57 = load i64, ptr %3, align 8, !tbaa !5
  %58 = icmp ne i64 %57, 0
  %59 = xor i1 %58, true
  %60 = zext i1 %59 to i32
  %61 = sext i32 %60 to i64
  store i64 %61, ptr %3, align 8, !tbaa !5
  br label %52, !llvm.loop !16

62:                                               ; preds = %52
  br label %63

63:                                               ; preds = %62
  %64 = load i64, ptr %3, align 8, !tbaa !5
  %65 = icmp ne i64 %64, 0
  %66 = xor i1 %65, true
  %67 = zext i1 %66 to i32
  %68 = sext i32 %67 to i64
  store i64 %68, ptr %3, align 8, !tbaa !5
  %69 = load i64, ptr %4, align 8, !tbaa !5
  %70 = add i64 %69, 1
  store i64 %70, ptr %4, align 8, !tbaa !5
  br label %35, !llvm.loop !18

71:                                               ; preds = %45
  br label %72

72:                                               ; preds = %71
  %73 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %74 = load ptr, ptr %73, align 8, !tbaa !13
  call void @free(ptr noundef %74) #7
  br label %75

75:                                               ; preds = %72
  call void @llvm.memset.p0.i64(ptr align 8 %2, i8 0, i64 32, i1 false)
  br label %76

76:                                               ; preds = %75
  br label %77

77:                                               ; preds = %76
  br label %78

78:                                               ; preds = %77
  br label %79

79:                                               ; preds = %78
  br label %80

80:                                               ; preds = %79
  call void @llvm.memset.p0.i64(ptr align 8 %2, i8 0, i64 32, i1 false)
  br label %81

81:                                               ; preds = %80
  br label %82

82:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #7
  store i64 1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  store i64 0, ptr %6, align 8, !tbaa !5
  br label %83

83:                                               ; preds = %111, %82
  %84 = load i64, ptr %5, align 8, !tbaa !5
  %85 = icmp ne i64 %84, 0
  br i1 %85, label %86, label %91

86:                                               ; preds = %83
  %87 = load i64, ptr %6, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %89 = load i64, ptr %88, align 8, !tbaa !9
  %90 = icmp ne i64 %87, %89
  br label %91

91:                                               ; preds = %86, %83
  %92 = phi i1 [ false, %83 ], [ %90, %86 ]
  br i1 %92, label %94, label %93

93:                                               ; preds = %91
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #7
  br label %119

94:                                               ; preds = %91
  %95 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %96 = load ptr, ptr %95, align 8, !tbaa !13
  %97 = load i64, ptr %6, align 8, !tbaa !5
  %98 = getelementptr inbounds i32, ptr %96, i64 %97
  %99 = load i32, ptr %98, align 4, !tbaa !14
  store i32 %99, ptr %1, align 4, !tbaa !14
  br label %100

100:                                              ; preds = %104, %94
  %101 = load i64, ptr %5, align 8, !tbaa !5
  %102 = icmp ne i64 %101, 0
  br i1 %102, label %103, label %110

103:                                              ; preds = %100
  br label %104

104:                                              ; preds = %103
  %105 = load i64, ptr %5, align 8, !tbaa !5
  %106 = icmp ne i64 %105, 0
  %107 = xor i1 %106, true
  %108 = zext i1 %107 to i32
  %109 = sext i32 %108 to i64
  store i64 %109, ptr %5, align 8, !tbaa !5
  br label %100, !llvm.loop !19

110:                                              ; preds = %100
  br label %111

111:                                              ; preds = %110
  %112 = load i64, ptr %5, align 8, !tbaa !5
  %113 = icmp ne i64 %112, 0
  %114 = xor i1 %113, true
  %115 = zext i1 %114 to i32
  %116 = sext i32 %115 to i64
  store i64 %116, ptr %5, align 8, !tbaa !5
  %117 = load i64, ptr %6, align 8, !tbaa !5
  %118 = add i64 %117, 1
  store i64 %118, ptr %6, align 8, !tbaa !5
  br label %83, !llvm.loop !20

119:                                              ; preds = %93
  br label %120

120:                                              ; preds = %119
  %121 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %122 = load ptr, ptr %121, align 8, !tbaa !13
  call void @free(ptr noundef %122) #7
  br label %123

123:                                              ; preds = %120
  call void @llvm.memset.p0.i64(ptr align 8 %2, i8 0, i64 32, i1 false)
  br label %124

124:                                              ; preds = %123
  br label %125

125:                                              ; preds = %124
  br label %126

126:                                              ; preds = %125
  br label %127

127:                                              ; preds = %126
  br label %128

128:                                              ; preds = %127
  call void @llvm.memset.p0.i64(ptr align 8 %2, i8 0, i64 32, i1 false)
  br label %129

129:                                              ; preds = %128
  br label %130

130:                                              ; preds = %129
  br label %131

131:                                              ; preds = %130
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  store i64 4611686018427387903, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %132 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %133 = load i64, ptr %132, align 8, !tbaa !21
  %134 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %135 = load i64, ptr %134, align 8, !tbaa !9
  %136 = icmp eq i64 %133, %135
  br i1 %136, label %137, label %168

137:                                              ; preds = %131
  %138 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %139 = load i64, ptr %138, align 8, !tbaa !21
  %140 = icmp ugt i64 %139, 2305843009213693951
  br i1 %140, label %141, label %143

141:                                              ; preds = %137
  %142 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 1, ptr %142, align 8, !tbaa !22
  store i32 28, ptr %10, align 4
  br label %176

143:                                              ; preds = %137
  %144 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %145 = load i64, ptr %144, align 8, !tbaa !21
  %146 = icmp eq i64 %145, 0
  br i1 %146, label %147, label %148

147:                                              ; preds = %143
  br label %152

148:                                              ; preds = %143
  %149 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %150 = load i64, ptr %149, align 8, !tbaa !21
  %151 = mul i64 %150, 2
  br label %152

152:                                              ; preds = %148, %147
  %153 = phi i64 [ 8, %147 ], [ %151, %148 ]
  store i64 %153, ptr %8, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %155 = load ptr, ptr %154, align 8, !tbaa !13
  %156 = load i64, ptr %8, align 8, !tbaa !5
  %157 = mul i64 %156, 4
  %158 = call ptr @realloc(ptr noundef %155, i64 noundef %157) #8
  store ptr %158, ptr %9, align 8, !tbaa !23
  %159 = load ptr, ptr %9, align 8, !tbaa !23
  %160 = icmp eq ptr %159, null
  br i1 %160, label %161, label %163

161:                                              ; preds = %152
  %162 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 1, ptr %162, align 8, !tbaa !22
  store i32 28, ptr %10, align 4
  br label %176

163:                                              ; preds = %152
  %164 = load i64, ptr %8, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  store i64 %164, ptr %165, align 8, !tbaa !21
  %166 = load ptr, ptr %9, align 8, !tbaa !23
  %167 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  store ptr %166, ptr %167, align 8, !tbaa !13
  br label %168

168:                                              ; preds = %163, %131
  %169 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 0, ptr %169, align 8, !tbaa !22
  %170 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %171 = load ptr, ptr %170, align 8, !tbaa !13
  %172 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %173 = load i64, ptr %172, align 8, !tbaa !9
  %174 = add i64 %173, 1
  store i64 %174, ptr %172, align 8, !tbaa !9
  %175 = getelementptr inbounds i32, ptr %171, i64 %173
  store i32 1, ptr %175, align 4, !tbaa !14
  store i32 0, ptr %10, align 4
  br label %176

176:                                              ; preds = %168, %161, %141
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  %177 = load i32, ptr %10, align 4
  switch i32 %177, label %630 [
    i32 0, label %178
    i32 28, label %180
  ]

178:                                              ; preds = %176
  br label %179

179:                                              ; preds = %178
  br label %180

180:                                              ; preds = %179, %176
  %181 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  %182 = load i8, ptr %181, align 8, !tbaa !22, !range !24, !noundef !25
  %183 = trunc i8 %182 to i1
  br i1 %183, label %185, label %184

184:                                              ; preds = %180
  br label %186

185:                                              ; preds = %180
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.5, i32 noundef 126, ptr noundef @__PRETTY_FUNCTION__.test2) #9
  unreachable

186:                                              ; preds = %184
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  store i64 1, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #7
  store i64 0, ptr %12, align 8, !tbaa !5
  br label %187

187:                                              ; preds = %220, %186
  %188 = load i64, ptr %11, align 8, !tbaa !5
  %189 = icmp ne i64 %188, 0
  br i1 %189, label %190, label %195

190:                                              ; preds = %187
  %191 = load i64, ptr %12, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %193 = load i64, ptr %192, align 8, !tbaa !9
  %194 = icmp ne i64 %191, %193
  br label %195

195:                                              ; preds = %190, %187
  %196 = phi i1 [ false, %187 ], [ %194, %190 ]
  br i1 %196, label %198, label %197

197:                                              ; preds = %195
  store i32 30, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  br label %228

198:                                              ; preds = %195
  %199 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %200 = load ptr, ptr %199, align 8, !tbaa !13
  %201 = load i64, ptr %12, align 8, !tbaa !5
  %202 = getelementptr inbounds i32, ptr %200, i64 %201
  %203 = load i32, ptr %202, align 4, !tbaa !14
  store i32 %203, ptr %1, align 4, !tbaa !14
  br label %204

204:                                              ; preds = %213, %198
  %205 = load i64, ptr %11, align 8, !tbaa !5
  %206 = icmp ne i64 %205, 0
  br i1 %206, label %207, label %219

207:                                              ; preds = %204
  %208 = load i32, ptr %1, align 4, !tbaa !14
  %209 = icmp eq i32 %208, 1
  br i1 %209, label %210, label %211

210:                                              ; preds = %207
  br label %212

211:                                              ; preds = %207
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.5, i32 noundef 129, ptr noundef @__PRETTY_FUNCTION__.test2) #9
  unreachable

212:                                              ; preds = %210
  br label %213

213:                                              ; preds = %212
  %214 = load i64, ptr %11, align 8, !tbaa !5
  %215 = icmp ne i64 %214, 0
  %216 = xor i1 %215, true
  %217 = zext i1 %216 to i32
  %218 = sext i32 %217 to i64
  store i64 %218, ptr %11, align 8, !tbaa !5
  br label %204, !llvm.loop !26

219:                                              ; preds = %204
  br label %220

220:                                              ; preds = %219
  %221 = load i64, ptr %11, align 8, !tbaa !5
  %222 = icmp ne i64 %221, 0
  %223 = xor i1 %222, true
  %224 = zext i1 %223 to i32
  %225 = sext i32 %224 to i64
  store i64 %225, ptr %11, align 8, !tbaa !5
  %226 = load i64, ptr %12, align 8, !tbaa !5
  %227 = add i64 %226, 1
  store i64 %227, ptr %12, align 8, !tbaa !5
  br label %187, !llvm.loop !27

228:                                              ; preds = %197
  br label %229

229:                                              ; preds = %228
  %230 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %231 = load i64, ptr %230, align 8, !tbaa !9
  %232 = icmp ne i64 %231, 0
  br i1 %232, label %233, label %234

233:                                              ; preds = %229
  br label %235

234:                                              ; preds = %229
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.5, i32 noundef 131, ptr noundef @__PRETTY_FUNCTION__.test2) #9
  unreachable

235:                                              ; preds = %233
  %236 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %237 = load i64, ptr %236, align 8, !tbaa !9
  %238 = add i64 %237, -1
  store i64 %238, ptr %236, align 8, !tbaa !9
  br label %239

239:                                              ; preds = %235
  br label %240

240:                                              ; preds = %239
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #7
  store i64 1, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #7
  store i64 0, ptr %14, align 8, !tbaa !5
  br label %241

241:                                              ; preds = %269, %240
  %242 = load i64, ptr %13, align 8, !tbaa !5
  %243 = icmp ne i64 %242, 0
  br i1 %243, label %244, label %249

244:                                              ; preds = %241
  %245 = load i64, ptr %14, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %247 = load i64, ptr %246, align 8, !tbaa !9
  %248 = icmp ne i64 %245, %247
  br label %249

249:                                              ; preds = %244, %241
  %250 = phi i1 [ false, %241 ], [ %248, %244 ]
  br i1 %250, label %252, label %251

251:                                              ; preds = %249
  store i32 38, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #7
  br label %277

252:                                              ; preds = %249
  %253 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %254 = load ptr, ptr %253, align 8, !tbaa !13
  %255 = load i64, ptr %14, align 8, !tbaa !5
  %256 = getelementptr inbounds i32, ptr %254, i64 %255
  %257 = load i32, ptr %256, align 4, !tbaa !14
  store i32 %257, ptr %1, align 4, !tbaa !14
  br label %258

258:                                              ; preds = %262, %252
  %259 = load i64, ptr %13, align 8, !tbaa !5
  %260 = icmp ne i64 %259, 0
  br i1 %260, label %261, label %268

261:                                              ; preds = %258
  br label %262

262:                                              ; preds = %261
  %263 = load i64, ptr %13, align 8, !tbaa !5
  %264 = icmp ne i64 %263, 0
  %265 = xor i1 %264, true
  %266 = zext i1 %265 to i32
  %267 = sext i32 %266 to i64
  store i64 %267, ptr %13, align 8, !tbaa !5
  br label %258, !llvm.loop !28

268:                                              ; preds = %258
  br label %269

269:                                              ; preds = %268
  %270 = load i64, ptr %13, align 8, !tbaa !5
  %271 = icmp ne i64 %270, 0
  %272 = xor i1 %271, true
  %273 = zext i1 %272 to i32
  %274 = sext i32 %273 to i64
  store i64 %274, ptr %13, align 8, !tbaa !5
  %275 = load i64, ptr %14, align 8, !tbaa !5
  %276 = add i64 %275, 1
  store i64 %276, ptr %14, align 8, !tbaa !5
  br label %241, !llvm.loop !29

277:                                              ; preds = %251
  br label %278

278:                                              ; preds = %277
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #7
  store i64 4611686018427387903, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  %279 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %280 = load i64, ptr %279, align 8, !tbaa !21
  %281 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %282 = load i64, ptr %281, align 8, !tbaa !9
  %283 = icmp eq i64 %280, %282
  br i1 %283, label %284, label %315

284:                                              ; preds = %278
  %285 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %286 = load i64, ptr %285, align 8, !tbaa !21
  %287 = icmp ugt i64 %286, 2305843009213693951
  br i1 %287, label %288, label %290

288:                                              ; preds = %284
  %289 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 1, ptr %289, align 8, !tbaa !22
  store i32 44, ptr %10, align 4
  br label %323

290:                                              ; preds = %284
  %291 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %292 = load i64, ptr %291, align 8, !tbaa !21
  %293 = icmp eq i64 %292, 0
  br i1 %293, label %294, label %295

294:                                              ; preds = %290
  br label %299

295:                                              ; preds = %290
  %296 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %297 = load i64, ptr %296, align 8, !tbaa !21
  %298 = mul i64 %297, 2
  br label %299

299:                                              ; preds = %295, %294
  %300 = phi i64 [ 8, %294 ], [ %298, %295 ]
  store i64 %300, ptr %16, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %302 = load ptr, ptr %301, align 8, !tbaa !13
  %303 = load i64, ptr %16, align 8, !tbaa !5
  %304 = mul i64 %303, 4
  %305 = call ptr @realloc(ptr noundef %302, i64 noundef %304) #8
  store ptr %305, ptr %17, align 8, !tbaa !23
  %306 = load ptr, ptr %17, align 8, !tbaa !23
  %307 = icmp eq ptr %306, null
  br i1 %307, label %308, label %310

308:                                              ; preds = %299
  %309 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 1, ptr %309, align 8, !tbaa !22
  store i32 44, ptr %10, align 4
  br label %323

310:                                              ; preds = %299
  %311 = load i64, ptr %16, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  store i64 %311, ptr %312, align 8, !tbaa !21
  %313 = load ptr, ptr %17, align 8, !tbaa !23
  %314 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  store ptr %313, ptr %314, align 8, !tbaa !13
  br label %315

315:                                              ; preds = %310, %278
  %316 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 0, ptr %316, align 8, !tbaa !22
  %317 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %318 = load ptr, ptr %317, align 8, !tbaa !13
  %319 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %320 = load i64, ptr %319, align 8, !tbaa !9
  %321 = add i64 %320, 1
  store i64 %321, ptr %319, align 8, !tbaa !9
  %322 = getelementptr inbounds i32, ptr %318, i64 %320
  store i32 1, ptr %322, align 4, !tbaa !14
  store i32 0, ptr %10, align 4
  br label %323

323:                                              ; preds = %315, %308, %288
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #7
  %324 = load i32, ptr %10, align 4
  switch i32 %324, label %630 [
    i32 0, label %325
    i32 44, label %327
  ]

325:                                              ; preds = %323
  br label %326

326:                                              ; preds = %325
  br label %327

327:                                              ; preds = %326, %323
  %328 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  %329 = load i8, ptr %328, align 8, !tbaa !22, !range !24, !noundef !25
  %330 = trunc i8 %329 to i1
  br i1 %330, label %332, label %331

331:                                              ; preds = %327
  br label %333

332:                                              ; preds = %327
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.5, i32 noundef 137, ptr noundef @__PRETTY_FUNCTION__.test2) #9
  unreachable

333:                                              ; preds = %331
  br label %334

334:                                              ; preds = %333
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  store i64 0, ptr %18, align 8, !tbaa !5
  %335 = load i64, ptr %18, align 8, !tbaa !5
  %336 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %337 = load i64, ptr %336, align 8, !tbaa !9
  %338 = icmp ult i64 %335, %337
  br i1 %338, label %339, label %340

339:                                              ; preds = %334
  br label %341

340:                                              ; preds = %334
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.5, i32 noundef 139, ptr noundef @__PRETTY_FUNCTION__.test2) #9
  unreachable

341:                                              ; preds = %339
  %342 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %343 = load ptr, ptr %342, align 8, !tbaa !13
  %344 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %345 = load i64, ptr %344, align 8, !tbaa !9
  %346 = add i64 %345, -1
  store i64 %346, ptr %344, align 8, !tbaa !9
  %347 = getelementptr inbounds i32, ptr %343, i64 %346
  %348 = load i32, ptr %347, align 4, !tbaa !14
  %349 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %350 = load ptr, ptr %349, align 8, !tbaa !13
  %351 = load i64, ptr %18, align 8, !tbaa !5
  %352 = getelementptr inbounds i32, ptr %350, i64 %351
  store i32 %348, ptr %352, align 4, !tbaa !14
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  br label %353

353:                                              ; preds = %341
  br label %354

354:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  store i64 1, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  store i64 0, ptr %20, align 8, !tbaa !5
  br label %355

355:                                              ; preds = %383, %354
  %356 = load i64, ptr %19, align 8, !tbaa !5
  %357 = icmp ne i64 %356, 0
  br i1 %357, label %358, label %363

358:                                              ; preds = %355
  %359 = load i64, ptr %20, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %361 = load i64, ptr %360, align 8, !tbaa !9
  %362 = icmp ne i64 %359, %361
  br label %363

363:                                              ; preds = %358, %355
  %364 = phi i1 [ false, %355 ], [ %362, %358 ]
  br i1 %364, label %366, label %365

365:                                              ; preds = %363
  store i32 48, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %391

366:                                              ; preds = %363
  %367 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %368 = load ptr, ptr %367, align 8, !tbaa !13
  %369 = load i64, ptr %20, align 8, !tbaa !5
  %370 = getelementptr inbounds i32, ptr %368, i64 %369
  %371 = load i32, ptr %370, align 4, !tbaa !14
  store i32 %371, ptr %1, align 4, !tbaa !14
  br label %372

372:                                              ; preds = %376, %366
  %373 = load i64, ptr %19, align 8, !tbaa !5
  %374 = icmp ne i64 %373, 0
  br i1 %374, label %375, label %382

375:                                              ; preds = %372
  br label %376

376:                                              ; preds = %375
  %377 = load i64, ptr %19, align 8, !tbaa !5
  %378 = icmp ne i64 %377, 0
  %379 = xor i1 %378, true
  %380 = zext i1 %379 to i32
  %381 = sext i32 %380 to i64
  store i64 %381, ptr %19, align 8, !tbaa !5
  br label %372, !llvm.loop !30

382:                                              ; preds = %372
  br label %383

383:                                              ; preds = %382
  %384 = load i64, ptr %19, align 8, !tbaa !5
  %385 = icmp ne i64 %384, 0
  %386 = xor i1 %385, true
  %387 = zext i1 %386 to i32
  %388 = sext i32 %387 to i64
  store i64 %388, ptr %19, align 8, !tbaa !5
  %389 = load i64, ptr %20, align 8, !tbaa !5
  %390 = add i64 %389, 1
  store i64 %390, ptr %20, align 8, !tbaa !5
  br label %355, !llvm.loop !31

391:                                              ; preds = %365
  br label %392

392:                                              ; preds = %391
  %393 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %394 = load ptr, ptr %393, align 8, !tbaa !13
  call void @free(ptr noundef %394) #7
  br label %395

395:                                              ; preds = %392
  call void @llvm.memset.p0.i64(ptr align 8 %2, i8 0, i64 32, i1 false)
  br label %396

396:                                              ; preds = %395
  br label %397

397:                                              ; preds = %396
  br label %398

398:                                              ; preds = %397
  br label %399

399:                                              ; preds = %398
  br label %400

400:                                              ; preds = %399
  call void @llvm.memset.p0.i64(ptr align 8 %2, i8 0, i64 32, i1 false)
  br label %401

401:                                              ; preds = %400
  br label %402

402:                                              ; preds = %401
  br label %403

403:                                              ; preds = %402
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  store i64 4611686018427387903, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %404 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %405 = load i64, ptr %404, align 8, !tbaa !21
  %406 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %407 = load i64, ptr %406, align 8, !tbaa !9
  %408 = icmp eq i64 %405, %407
  br i1 %408, label %409, label %440

409:                                              ; preds = %403
  %410 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %411 = load i64, ptr %410, align 8, !tbaa !21
  %412 = icmp ugt i64 %411, 2305843009213693951
  br i1 %412, label %413, label %415

413:                                              ; preds = %409
  %414 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 1, ptr %414, align 8, !tbaa !22
  store i32 60, ptr %10, align 4
  br label %448

415:                                              ; preds = %409
  %416 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %417 = load i64, ptr %416, align 8, !tbaa !21
  %418 = icmp eq i64 %417, 0
  br i1 %418, label %419, label %420

419:                                              ; preds = %415
  br label %424

420:                                              ; preds = %415
  %421 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %422 = load i64, ptr %421, align 8, !tbaa !21
  %423 = mul i64 %422, 2
  br label %424

424:                                              ; preds = %420, %419
  %425 = phi i64 [ 8, %419 ], [ %423, %420 ]
  store i64 %425, ptr %22, align 8, !tbaa !5
  %426 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %427 = load ptr, ptr %426, align 8, !tbaa !13
  %428 = load i64, ptr %22, align 8, !tbaa !5
  %429 = mul i64 %428, 4
  %430 = call ptr @realloc(ptr noundef %427, i64 noundef %429) #8
  store ptr %430, ptr %23, align 8, !tbaa !23
  %431 = load ptr, ptr %23, align 8, !tbaa !23
  %432 = icmp eq ptr %431, null
  br i1 %432, label %433, label %435

433:                                              ; preds = %424
  %434 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 1, ptr %434, align 8, !tbaa !22
  store i32 60, ptr %10, align 4
  br label %448

435:                                              ; preds = %424
  %436 = load i64, ptr %22, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  store i64 %436, ptr %437, align 8, !tbaa !21
  %438 = load ptr, ptr %23, align 8, !tbaa !23
  %439 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  store ptr %438, ptr %439, align 8, !tbaa !13
  br label %440

440:                                              ; preds = %435, %403
  %441 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 0, ptr %441, align 8, !tbaa !22
  %442 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %443 = load ptr, ptr %442, align 8, !tbaa !13
  %444 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %445 = load i64, ptr %444, align 8, !tbaa !9
  %446 = add i64 %445, 1
  store i64 %446, ptr %444, align 8, !tbaa !9
  %447 = getelementptr inbounds i32, ptr %443, i64 %445
  store i32 100, ptr %447, align 4, !tbaa !14
  store i32 0, ptr %10, align 4
  br label %448

448:                                              ; preds = %440, %433, %413
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  %449 = load i32, ptr %10, align 4
  switch i32 %449, label %630 [
    i32 0, label %450
    i32 60, label %452
  ]

450:                                              ; preds = %448
  br label %451

451:                                              ; preds = %450
  br label %452

452:                                              ; preds = %451, %448
  br label %453

453:                                              ; preds = %452
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  store i64 4611686018427387903, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  %454 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %455 = load i64, ptr %454, align 8, !tbaa !21
  %456 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %457 = load i64, ptr %456, align 8, !tbaa !9
  %458 = icmp eq i64 %455, %457
  br i1 %458, label %459, label %490

459:                                              ; preds = %453
  %460 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %461 = load i64, ptr %460, align 8, !tbaa !21
  %462 = icmp ugt i64 %461, 2305843009213693951
  br i1 %462, label %463, label %465

463:                                              ; preds = %459
  %464 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 1, ptr %464, align 8, !tbaa !22
  store i32 62, ptr %10, align 4
  br label %498

465:                                              ; preds = %459
  %466 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %467 = load i64, ptr %466, align 8, !tbaa !21
  %468 = icmp eq i64 %467, 0
  br i1 %468, label %469, label %470

469:                                              ; preds = %465
  br label %474

470:                                              ; preds = %465
  %471 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %472 = load i64, ptr %471, align 8, !tbaa !21
  %473 = mul i64 %472, 2
  br label %474

474:                                              ; preds = %470, %469
  %475 = phi i64 [ 8, %469 ], [ %473, %470 ]
  store i64 %475, ptr %25, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %477 = load ptr, ptr %476, align 8, !tbaa !13
  %478 = load i64, ptr %25, align 8, !tbaa !5
  %479 = mul i64 %478, 4
  %480 = call ptr @realloc(ptr noundef %477, i64 noundef %479) #8
  store ptr %480, ptr %26, align 8, !tbaa !23
  %481 = load ptr, ptr %26, align 8, !tbaa !23
  %482 = icmp eq ptr %481, null
  br i1 %482, label %483, label %485

483:                                              ; preds = %474
  %484 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 1, ptr %484, align 8, !tbaa !22
  store i32 62, ptr %10, align 4
  br label %498

485:                                              ; preds = %474
  %486 = load i64, ptr %25, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  store i64 %486, ptr %487, align 8, !tbaa !21
  %488 = load ptr, ptr %26, align 8, !tbaa !23
  %489 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  store ptr %488, ptr %489, align 8, !tbaa !13
  br label %490

490:                                              ; preds = %485, %453
  %491 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 0, ptr %491, align 8, !tbaa !22
  %492 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %493 = load ptr, ptr %492, align 8, !tbaa !13
  %494 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %495 = load i64, ptr %494, align 8, !tbaa !9
  %496 = add i64 %495, 1
  store i64 %496, ptr %494, align 8, !tbaa !9
  %497 = getelementptr inbounds i32, ptr %493, i64 %495
  store i32 200, ptr %497, align 4, !tbaa !14
  store i32 0, ptr %10, align 4
  br label %498

498:                                              ; preds = %490, %483, %463
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  %499 = load i32, ptr %10, align 4
  switch i32 %499, label %630 [
    i32 0, label %500
    i32 62, label %502
  ]

500:                                              ; preds = %498
  br label %501

501:                                              ; preds = %500
  br label %502

502:                                              ; preds = %501, %498
  br label %503

503:                                              ; preds = %502
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  store i64 4611686018427387903, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  %504 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %505 = load i64, ptr %504, align 8, !tbaa !21
  %506 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %507 = load i64, ptr %506, align 8, !tbaa !9
  %508 = icmp eq i64 %505, %507
  br i1 %508, label %509, label %540

509:                                              ; preds = %503
  %510 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %511 = load i64, ptr %510, align 8, !tbaa !21
  %512 = icmp ugt i64 %511, 2305843009213693951
  br i1 %512, label %513, label %515

513:                                              ; preds = %509
  %514 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 1, ptr %514, align 8, !tbaa !22
  store i32 64, ptr %10, align 4
  br label %548

515:                                              ; preds = %509
  %516 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %517 = load i64, ptr %516, align 8, !tbaa !21
  %518 = icmp eq i64 %517, 0
  br i1 %518, label %519, label %520

519:                                              ; preds = %515
  br label %524

520:                                              ; preds = %515
  %521 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  %522 = load i64, ptr %521, align 8, !tbaa !21
  %523 = mul i64 %522, 2
  br label %524

524:                                              ; preds = %520, %519
  %525 = phi i64 [ 8, %519 ], [ %523, %520 ]
  store i64 %525, ptr %28, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %527 = load ptr, ptr %526, align 8, !tbaa !13
  %528 = load i64, ptr %28, align 8, !tbaa !5
  %529 = mul i64 %528, 4
  %530 = call ptr @realloc(ptr noundef %527, i64 noundef %529) #8
  store ptr %530, ptr %29, align 8, !tbaa !23
  %531 = load ptr, ptr %29, align 8, !tbaa !23
  %532 = icmp eq ptr %531, null
  br i1 %532, label %533, label %535

533:                                              ; preds = %524
  %534 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 1, ptr %534, align 8, !tbaa !22
  store i32 64, ptr %10, align 4
  br label %548

535:                                              ; preds = %524
  %536 = load i64, ptr %28, align 8, !tbaa !5
  %537 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 1
  store i64 %536, ptr %537, align 8, !tbaa !21
  %538 = load ptr, ptr %29, align 8, !tbaa !23
  %539 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  store ptr %538, ptr %539, align 8, !tbaa !13
  br label %540

540:                                              ; preds = %535, %503
  %541 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 0
  store i8 0, ptr %541, align 8, !tbaa !22
  %542 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %543 = load ptr, ptr %542, align 8, !tbaa !13
  %544 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %545 = load i64, ptr %544, align 8, !tbaa !9
  %546 = add i64 %545, 1
  store i64 %546, ptr %544, align 8, !tbaa !9
  %547 = getelementptr inbounds i32, ptr %543, i64 %545
  store i32 300, ptr %547, align 4, !tbaa !14
  store i32 0, ptr %10, align 4
  br label %548

548:                                              ; preds = %540, %533, %513
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  %549 = load i32, ptr %10, align 4
  switch i32 %549, label %630 [
    i32 0, label %550
    i32 64, label %552
  ]

550:                                              ; preds = %548
  br label %551

551:                                              ; preds = %550
  br label %552

552:                                              ; preds = %551, %548
  %553 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %554 = load ptr, ptr %553, align 8, !tbaa !13
  %555 = getelementptr inbounds i32, ptr %554, i64 0
  %556 = load i32, ptr %555, align 4, !tbaa !14
  %557 = icmp eq i32 %556, 100
  br i1 %557, label %558, label %559

558:                                              ; preds = %552
  br label %560

559:                                              ; preds = %552
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.5, i32 noundef 151, ptr noundef @__PRETTY_FUNCTION__.test2) #9
  unreachable

560:                                              ; preds = %558
  br label %561

561:                                              ; preds = %560
  %562 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %563 = load i64, ptr %562, align 8, !tbaa !9
  %564 = icmp ne i64 %563, 0
  br i1 %564, label %565, label %566

565:                                              ; preds = %561
  br label %567

566:                                              ; preds = %561
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.5, i32 noundef 152, ptr noundef @__PRETTY_FUNCTION__.test2) #9
  unreachable

567:                                              ; preds = %565
  %568 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %569 = load i64, ptr %568, align 8, !tbaa !9
  %570 = add i64 %569, -1
  store i64 %570, ptr %568, align 8, !tbaa !9
  br label %571

571:                                              ; preds = %567
  br label %572

572:                                              ; preds = %571
  %573 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %574 = load ptr, ptr %573, align 8, !tbaa !13
  %575 = getelementptr inbounds i32, ptr %574, i64 0
  %576 = load i32, ptr %575, align 4, !tbaa !14
  %577 = icmp eq i32 %576, 100
  br i1 %577, label %578, label %579

578:                                              ; preds = %572
  br label %580

579:                                              ; preds = %572
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.5, i32 noundef 153, ptr noundef @__PRETTY_FUNCTION__.test2) #9
  unreachable

580:                                              ; preds = %578
  br label %581

581:                                              ; preds = %580
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #7
  store i64 0, ptr %30, align 8, !tbaa !5
  %582 = load i64, ptr %30, align 8, !tbaa !5
  %583 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %584 = load i64, ptr %583, align 8, !tbaa !9
  %585 = icmp ult i64 %582, %584
  br i1 %585, label %586, label %587

586:                                              ; preds = %581
  br label %588

587:                                              ; preds = %581
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.5, i32 noundef 154, ptr noundef @__PRETTY_FUNCTION__.test2) #9
  unreachable

588:                                              ; preds = %586
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  %589 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %590 = load i64, ptr %589, align 8, !tbaa !9
  %591 = load i64, ptr %30, align 8, !tbaa !5
  %592 = sub i64 %590, %591
  %593 = sub i64 %592, 1
  store i64 %593, ptr %31, align 8, !tbaa !5
  %594 = load i64, ptr %31, align 8, !tbaa !5
  %595 = icmp ugt i64 %594, 0
  br i1 %595, label %596, label %608

596:                                              ; preds = %588
  %597 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %598 = load ptr, ptr %597, align 8, !tbaa !13
  %599 = load i64, ptr %30, align 8, !tbaa !5
  %600 = getelementptr inbounds i32, ptr %598, i64 %599
  %601 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %602 = load ptr, ptr %601, align 8, !tbaa !13
  %603 = load i64, ptr %30, align 8, !tbaa !5
  %604 = add i64 %603, 1
  %605 = getelementptr inbounds i32, ptr %602, i64 %604
  %606 = load i64, ptr %31, align 8, !tbaa !5
  %607 = mul i64 %606, 4
  call void @llvm.memmove.p0.p0.i64(ptr align 4 %600, ptr align 4 %605, i64 %607, i1 false)
  br label %608

608:                                              ; preds = %596, %588
  %609 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 2
  %610 = load i64, ptr %609, align 8, !tbaa !9
  %611 = add i64 %610, -1
  store i64 %611, ptr %609, align 8, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #7
  br label %612

612:                                              ; preds = %608
  br label %613

613:                                              ; preds = %612
  %614 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %615 = load ptr, ptr %614, align 8, !tbaa !13
  %616 = getelementptr inbounds i32, ptr %615, i64 0
  %617 = load i32, ptr %616, align 4, !tbaa !14
  %618 = icmp eq i32 %617, 200
  br i1 %618, label %619, label %620

619:                                              ; preds = %613
  br label %621

620:                                              ; preds = %613
  call void @__assert_fail(ptr noundef @.str.12, ptr noundef @.str.5, i32 noundef 155, ptr noundef @__PRETTY_FUNCTION__.test2) #9
  unreachable

621:                                              ; preds = %619
  br label %622

622:                                              ; preds = %621
  %623 = getelementptr inbounds %struct.sc_array_int, ptr %2, i32 0, i32 3
  %624 = load ptr, ptr %623, align 8, !tbaa !13
  call void @free(ptr noundef %624) #7
  br label %625

625:                                              ; preds = %622
  call void @llvm.memset.p0.i64(ptr align 8 %2, i8 0, i64 32, i1 false)
  br label %626

626:                                              ; preds = %625
  br label %627

627:                                              ; preds = %626
  br label %628

628:                                              ; preds = %627
  br label %629

629:                                              ; preds = %628
  call void @llvm.lifetime.end.p0(i64 32, ptr %2) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %1) #7
  ret void

630:                                              ; preds = %548, %498, %448, %323, %176
  unreachable
}

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


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

@.str.4 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [60 x i8], align 1
@__PRETTY_FUNCTION__.test2 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [18 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [28 x i8], align 1

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memmove.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1 immarg) #1

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

; Function Attrs: nounwind uwtable
define dso_local void @test2() local_unnamed_addr #3 {
  %malloc225 = tail call dereferenceable_or_null(32) ptr @malloc(i64 32)
  %1 = icmp eq ptr %malloc225, null
  br i1 %1, label %3, label %.thread248

.thread248:                                       ; preds = %0
  store i32 100, ptr %malloc225, align 4, !tbaa !5
  %2 = getelementptr inbounds i8, ptr %malloc225, i64 4
  br label %.sink.split

3:                                                ; preds = %0
  %malloc252 = tail call dereferenceable_or_null(32) ptr @malloc(i64 32)
  %4 = icmp eq ptr %malloc252, null
  br i1 %4, label %5, label %.sink.split

5:                                                ; preds = %3
  %malloc253 = tail call dereferenceable_or_null(32) ptr @malloc(i64 32)
  %6 = icmp eq ptr %malloc253, null
  br i1 %6, label %10, label %7

.sink.split:                                      ; preds = %3, %.thread248
  %malloc252.sink = phi ptr [ %2, %.thread248 ], [ %malloc252, %3 ]
  %.sroa.52.3245.ph = phi i64 [ 2, %.thread248 ], [ 1, %3 ]
  %.sroa.85.8.ph = phi ptr [ %malloc225, %.thread248 ], [ %malloc252, %3 ]
  store i32 200, ptr %malloc252.sink, align 4, !tbaa !5
  br label %7

7:                                                ; preds = %.sink.split, %5
  %.sroa.52.3245 = phi i64 [ 0, %5 ], [ %.sroa.52.3245.ph, %.sink.split ]
  %.sroa.85.8 = phi ptr [ %malloc253, %5 ], [ %.sroa.85.8.ph, %.sink.split ]
  %8 = add nuw nsw i64 %.sroa.52.3245, 1
  %9 = getelementptr inbounds i32, ptr %.sroa.85.8, i64 %.sroa.52.3245
  store i32 300, ptr %9, align 4, !tbaa !5
  br label %10

10:                                               ; preds = %5, %7
  %.sroa.85.9 = phi ptr [ %.sroa.85.8, %7 ], [ null, %5 ]
  %.sroa.52.4 = phi i64 [ %8, %7 ], [ 0, %5 ]
  %11 = load i32, ptr %.sroa.85.9, align 4, !tbaa !5
  %12 = icmp eq i32 %11, 100
  br i1 %12, label %14, label %13

13:                                               ; preds = %10
  tail call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.5, i32 noundef 151, ptr noundef nonnull @__PRETTY_FUNCTION__.test2) #5
  unreachable

14:                                               ; preds = %10
  switch i64 %.sroa.52.4, label %17 [
    i64 0, label %15
    i64 1, label %16
  ]

15:                                               ; preds = %14
  tail call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.5, i32 noundef 152, ptr noundef nonnull @__PRETTY_FUNCTION__.test2) #5
  unreachable

16:                                               ; preds = %14
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, i32 noundef 154, ptr noundef nonnull @__PRETTY_FUNCTION__.test2) #5
  unreachable

17:                                               ; preds = %14
  %18 = add nsw i64 %.sroa.52.4, -2
  %.not228 = icmp eq i64 %18, 0
  br i1 %.not228, label %.thread, label %19

19:                                               ; preds = %17
  %20 = getelementptr inbounds i8, ptr %.sroa.85.9, i64 4
  %21 = shl nuw nsw i64 %18, 2
  tail call void @llvm.memmove.p0.p0.i64(ptr nonnull align 4 %.sroa.85.9, ptr nonnull align 4 %20, i64 %21, i1 false)
  %.pre = load i32, ptr %.sroa.85.9, align 4, !tbaa !5
  %22 = icmp eq i32 %.pre, 200
  br i1 %22, label %23, label %.thread

.thread:                                          ; preds = %17, %19
  tail call void @__assert_fail(ptr noundef nonnull @.str.12, ptr noundef nonnull @.str.5, i32 noundef 155, ptr noundef nonnull @__PRETTY_FUNCTION__.test2) #5
  unreachable

23:                                               ; preds = %19
  tail call void @free(ptr noundef nonnull %.sroa.85.9) #6
  ret void
}

; Function Attrs: nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #4

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


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass