; LLVM IR from FrancesoM/Bisc8FX :: sdk_projects/bisc8_platform/ps7_cortexa9_0/standalone_domain/bsp/ps7_cortexa9_0_ (SelfTest)

; 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.XBram = type { %struct.XBram_Config, i32 }
%struct.XBram_Config = type { i16, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i64, i64 }

@Xil_AssertStatus = external global i32, align 4
@.str = external hidden unnamed_addr constant [169 x i8], align 1
@XBram_SelfTest.Addr = external hidden global [2 x i32], align 4
@PrngResult = external hidden global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local i32 @XBram_SelfTest(ptr noundef %0, i8 noundef zeroext %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca i8, align 1
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca [2 x i32], align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store i8 %1, ptr %5, align 1, !tbaa !9
  %18 = load ptr, ptr %4, align 8, !tbaa !5
  %19 = icmp ne ptr %18, null
  br i1 %19, label %20, label %21

20:                                               ; preds = %2
  store i32 0, ptr @Xil_AssertStatus, align 4, !tbaa !10
  br label %22

21:                                               ; preds = %2
  call void @Xil_Assert(ptr noundef @.str, i32 noundef 245)
  store i32 1, ptr @Xil_AssertStatus, align 4, !tbaa !10
  store i32 0, ptr %3, align 4
  br label %648

22:                                               ; preds = %20
  %23 = load ptr, ptr %4, align 8, !tbaa !5
  %24 = getelementptr inbounds %struct.XBram, ptr %23, i32 0, i32 1
  %25 = load i32, ptr %24, align 8, !tbaa !12
  %26 = icmp eq i32 %25, 286331153
  br i1 %26, label %27, label %28

27:                                               ; preds = %22
  store i32 0, ptr @Xil_AssertStatus, align 4, !tbaa !10
  br label %29

28:                                               ; preds = %22
  call void @Xil_Assert(ptr noundef @.str, i32 noundef 246)
  store i32 1, ptr @Xil_AssertStatus, align 4, !tbaa !10
  store i32 0, ptr %3, align 4
  br label %648

29:                                               ; preds = %27
  %30 = load ptr, ptr %4, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.XBram, ptr %30, i32 0, i32 0
  %32 = getelementptr inbounds %struct.XBram_Config, ptr %31, i32 0, i32 2
  %33 = load i32, ptr %32, align 8, !tbaa !17
  %34 = icmp eq i32 %33, 0
  br i1 %34, label %35, label %36

35:                                               ; preds = %29
  store i32 0, ptr %3, align 4
  br label %648

36:                                               ; preds = %29
  %37 = load ptr, ptr %4, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.XBram, ptr %37, i32 0, i32 0
  %39 = getelementptr inbounds %struct.XBram_Config, ptr %38, i32 0, i32 15
  %40 = load i64, ptr %39, align 8, !tbaa !18
  %41 = icmp eq i64 %40, 0
  br i1 %41, label %42, label %43

42:                                               ; preds = %36
  store i32 0, ptr %3, align 4
  br label %648

43:                                               ; preds = %36
  %44 = load ptr, ptr %4, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.XBram, ptr %44, i32 0, i32 0
  %46 = getelementptr inbounds %struct.XBram_Config, ptr %45, i32 0, i32 1
  %47 = load i32, ptr %46, align 4, !tbaa !19
  %48 = icmp ne i32 %47, 32
  br i1 %48, label %49, label %50

49:                                               ; preds = %43
  store i32 0, ptr %3, align 4
  br label %648

50:                                               ; preds = %43
  %51 = load ptr, ptr %4, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.XBram, ptr %51, i32 0, i32 0
  %53 = getelementptr inbounds %struct.XBram_Config, ptr %52, i32 0, i32 4
  %54 = load i32, ptr %53, align 8, !tbaa !20
  %55 = icmp ne i32 %54, 0
  br i1 %55, label %56, label %63

56:                                               ; preds = %50
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.XBram, ptr %57, i32 0, i32 0
  %59 = getelementptr inbounds %struct.XBram_Config, ptr %58, i32 0, i32 15
  %60 = load i64, ptr %59, align 8, !tbaa !18
  %61 = add i64 %60, 448
  %62 = call i32 @Xil_In32(i64 noundef %61)
  br label %63

63:                                               ; preds = %56, %50
  %64 = load ptr, ptr %4, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.XBram, ptr %64, i32 0, i32 0
  %66 = getelementptr inbounds %struct.XBram_Config, ptr %65, i32 0, i32 5
  %67 = load i32, ptr %66, align 4, !tbaa !21
  %68 = icmp ne i32 %67, 0
  br i1 %68, label %69, label %82

69:                                               ; preds = %63
  %70 = load ptr, ptr %4, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.XBram, ptr %70, i32 0, i32 0
  %72 = getelementptr inbounds %struct.XBram_Config, ptr %71, i32 0, i32 15
  %73 = load i64, ptr %72, align 8, !tbaa !18
  %74 = add i64 %73, 256
  %75 = call i32 @Xil_In32(i64 noundef %74)
  %76 = load ptr, ptr %4, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.XBram, ptr %76, i32 0, i32 0
  %78 = getelementptr inbounds %struct.XBram_Config, ptr %77, i32 0, i32 15
  %79 = load i64, ptr %78, align 8, !tbaa !18
  %80 = add i64 %79, 384
  %81 = call i32 @Xil_In32(i64 noundef %80)
  br label %82

82:                                               ; preds = %69, %63
  %83 = load ptr, ptr %4, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.XBram, ptr %83, i32 0, i32 0
  %85 = getelementptr inbounds %struct.XBram_Config, ptr %84, i32 0, i32 6
  %86 = load i32, ptr %85, align 8, !tbaa !22
  %87 = icmp ne i32 %86, 0
  br i1 %87, label %88, label %95

88:                                               ; preds = %82
  %89 = load ptr, ptr %4, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.XBram, ptr %89, i32 0, i32 0
  %91 = getelementptr inbounds %struct.XBram_Config, ptr %90, i32 0, i32 15
  %92 = load i64, ptr %91, align 8, !tbaa !18
  %93 = add i64 %92, 704
  %94 = call i32 @Xil_In32(i64 noundef %93)
  br label %95

95:                                               ; preds = %88, %82
  %96 = load ptr, ptr %4, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.XBram, ptr %96, i32 0, i32 0
  %98 = getelementptr inbounds %struct.XBram_Config, ptr %97, i32 0, i32 7
  %99 = load i32, ptr %98, align 4, !tbaa !23
  %100 = icmp ne i32 %99, 0
  br i1 %100, label %101, label %114

101:                                              ; preds = %95
  %102 = load ptr, ptr %4, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.XBram, ptr %102, i32 0, i32 0
  %104 = getelementptr inbounds %struct.XBram_Config, ptr %103, i32 0, i32 15
  %105 = load i64, ptr %104, align 8, !tbaa !18
  %106 = add i64 %105, 512
  %107 = call i32 @Xil_In32(i64 noundef %106)
  %108 = load ptr, ptr %4, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.XBram, ptr %108, i32 0, i32 0
  %110 = getelementptr inbounds %struct.XBram_Config, ptr %109, i32 0, i32 15
  %111 = load i64, ptr %110, align 8, !tbaa !18
  %112 = add i64 %111, 640
  %113 = call i32 @Xil_In32(i64 noundef %112)
  br label %114

114:                                              ; preds = %101, %95
  %115 = load ptr, ptr %4, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.XBram, ptr %115, i32 0, i32 0
  %117 = getelementptr inbounds %struct.XBram_Config, ptr %116, i32 0, i32 8
  %118 = load i32, ptr %117, align 8, !tbaa !24
  %119 = icmp ne i32 %118, 0
  br i1 %119, label %120, label %135

120:                                              ; preds = %114
  %121 = load ptr, ptr %4, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.XBram, ptr %121, i32 0, i32 0
  %123 = getelementptr inbounds %struct.XBram_Config, ptr %122, i32 0, i32 15
  %124 = load i64, ptr %123, align 8, !tbaa !18
  %125 = add i64 %124, 4
  call void @Xil_Out32(i64 noundef %125, i32 noundef 0)
  %126 = load ptr, ptr %4, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.XBram, ptr %126, i32 0, i32 0
  %128 = getelementptr inbounds %struct.XBram_Config, ptr %127, i32 0, i32 15
  %129 = load i64, ptr %128, align 8, !tbaa !18
  %130 = add i64 %129, 4
  %131 = call i32 @Xil_In32(i64 noundef %130)
  %132 = icmp ne i32 %131, 0
  br i1 %132, label %133, label %134

133:                                              ; preds = %120
  store i32 1, ptr %3, align 4
  br label %648

134:                                              ; preds = %120
  br label %135

135:                                              ; preds = %134, %114
  %136 = load ptr, ptr %4, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.XBram, ptr %136, i32 0, i32 0
  %138 = getelementptr inbounds %struct.XBram_Config, ptr %137, i32 0, i32 9
  %139 = load i32, ptr %138, align 4, !tbaa !25
  %140 = icmp sgt i32 %139, 0
  br i1 %140, label %141, label %189

141:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #4
  %142 = load ptr, ptr %4, align 8, !tbaa !5
  %143 = getelementptr inbounds %struct.XBram, ptr %142, i32 0, i32 0
  %144 = getelementptr inbounds %struct.XBram_Config, ptr %143, i32 0, i32 9
  %145 = load i32, ptr %144, align 4, !tbaa !25
  %146 = icmp eq i32 %145, 32
  br i1 %146, label %147, label %148

147:                                              ; preds = %141
  store i32 -1, ptr %6, align 4, !tbaa !10
  br label %155

148:                                              ; preds = %141
  %149 = load ptr, ptr %4, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.XBram, ptr %149, i32 0, i32 0
  %151 = getelementptr inbounds %struct.XBram_Config, ptr %150, i32 0, i32 9
  %152 = load i32, ptr %151, align 4, !tbaa !25
  %153 = shl i32 1, %152
  %154 = sub nsw i32 %153, 1
  store i32 %154, ptr %6, align 4, !tbaa !10
  br label %155

155:                                              ; preds = %148, %147
  %156 = load ptr, ptr %4, align 8, !tbaa !5
  %157 = getelementptr inbounds %struct.XBram, ptr %156, i32 0, i32 0
  %158 = getelementptr inbounds %struct.XBram_Config, ptr %157, i32 0, i32 15
  %159 = load i64, ptr %158, align 8, !tbaa !18
  %160 = add i64 %159, 12
  %161 = load i32, ptr %6, align 4, !tbaa !10
  call void @Xil_Out32(i64 noundef %160, i32 noundef %161)
  %162 = load ptr, ptr %4, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.XBram, ptr %162, i32 0, i32 0
  %164 = getelementptr inbounds %struct.XBram_Config, ptr %163, i32 0, i32 15
  %165 = load i64, ptr %164, align 8, !tbaa !18
  %166 = add i64 %165, 12
  %167 = call i32 @Xil_In32(i64 noundef %166)
  %168 = load i32, ptr %6, align 4, !tbaa !10
  %169 = icmp ne i32 %167, %168
  br i1 %169, label %170, label %171

170:                                              ; preds = %155
  store i32 1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %186

171:                                              ; preds = %155
  %172 = load ptr, ptr %4, align 8, !tbaa !5
  %173 = getelementptr inbounds %struct.XBram, ptr %172, i32 0, i32 0
  %174 = getelementptr inbounds %struct.XBram_Config, ptr %173, i32 0, i32 15
  %175 = load i64, ptr %174, align 8, !tbaa !18
  %176 = add i64 %175, 12
  call void @Xil_Out32(i64 noundef %176, i32 noundef 0)
  %177 = load ptr, ptr %4, align 8, !tbaa !5
  %178 = getelementptr inbounds %struct.XBram, ptr %177, i32 0, i32 0
  %179 = getelementptr inbounds %struct.XBram_Config, ptr %178, i32 0, i32 15
  %180 = load i64, ptr %179, align 8, !tbaa !18
  %181 = add i64 %180, 12
  %182 = call i32 @Xil_In32(i64 noundef %181)
  %183 = icmp ne i32 %182, 0
  br i1 %183, label %184, label %185

184:                                              ; preds = %171
  store i32 1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %186

185:                                              ; preds = %171
  store i32 0, ptr %7, align 4
  br label %186

186:                                              ; preds = %185, %184, %170
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #4
  %187 = load i32, ptr %7, align 4
  switch i32 %187, label %650 [
    i32 0, label %188
    i32 1, label %648
  ]

188:                                              ; preds = %186
  br label %189

189:                                              ; preds = %188, %135
  %190 = load ptr, ptr %4, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.XBram, ptr %190, i32 0, i32 0
  %192 = getelementptr inbounds %struct.XBram_Config, ptr %191, i32 0, i32 3
  %193 = load i32, ptr %192, align 4, !tbaa !26
  %194 = icmp ne i32 %193, 0
  br i1 %194, label %195, label %647

195:                                              ; preds = %189
  %196 = load ptr, ptr %4, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.XBram, ptr %196, i32 0, i32 0
  %198 = getelementptr inbounds %struct.XBram_Config, ptr %197, i32 0, i32 12
  %199 = load i32, ptr %198, align 8, !tbaa !27
  %200 = icmp ne i32 %199, 0
  br i1 %200, label %201, label %647

201:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  store i32 0, ptr %11, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  store i32 0, ptr %13, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  store i32 0, ptr %14, align 4, !tbaa !10
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #4
  %202 = load ptr, ptr %4, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.XBram, ptr %202, i32 0, i32 0
  %204 = getelementptr inbounds %struct.XBram_Config, ptr %203, i32 0, i32 13
  %205 = load i64, ptr %204, align 8, !tbaa !28
  %206 = and i64 %205, -4
  %207 = trunc i64 %206 to i32
  store i32 %207, ptr @XBram_SelfTest.Addr, align 4, !tbaa !10
  %208 = load ptr, ptr %4, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.XBram, ptr %208, i32 0, i32 0
  %210 = getelementptr inbounds %struct.XBram_Config, ptr %209, i32 0, i32 14
  %211 = load i64, ptr %210, align 8, !tbaa !29
  %212 = and i64 %211, -4
  %213 = trunc i64 %212 to i32
  store i32 %213, ptr getelementptr inbounds ([2 x i32], ptr @XBram_SelfTest.Addr, i64 0, i64 1), align 4, !tbaa !10
  store i32 42, ptr @PrngResult, align 4, !tbaa !10
  %214 = load i32, ptr @XBram_SelfTest.Addr, align 4, !tbaa !10
  %215 = zext i32 %214 to i64
  %216 = call i32 @Xil_In32(i64 noundef %215)
  %217 = getelementptr inbounds [2 x i32], ptr %8, i64 0, i64 0
  store i32 %216, ptr %217, align 4, !tbaa !10
  %218 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @XBram_SelfTest.Addr, i64 0, i64 1), align 4, !tbaa !10
  %219 = zext i32 %218 to i64
  %220 = call i32 @Xil_In32(i64 noundef %219)
  %221 = getelementptr inbounds [2 x i32], ptr %8, i64 0, i64 1
  store i32 %220, ptr %221, align 4, !tbaa !10
  store i32 1, ptr %17, align 4, !tbaa !10
  br label %222

222:                                              ; preds = %641, %201
  %223 = load i32, ptr %17, align 4, !tbaa !10
  %224 = icmp sle i32 %223, 4
  br i1 %224, label %225, label %644

225:                                              ; preds = %222
  %226 = load ptr, ptr %4, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.XBram, ptr %226, i32 0, i32 0
  %228 = getelementptr inbounds %struct.XBram_Config, ptr %227, i32 0, i32 9
  %229 = load i32, ptr %228, align 4, !tbaa !25
  %230 = icmp eq i32 %229, 32
  br i1 %230, label %231, label %232

231:                                              ; preds = %225
  store i32 -1, ptr %12, align 4, !tbaa !10
  br label %239

232:                                              ; preds = %225
  %233 = load ptr, ptr %4, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.XBram, ptr %233, i32 0, i32 0
  %235 = getelementptr inbounds %struct.XBram_Config, ptr %234, i32 0, i32 9
  %236 = load i32, ptr %235, align 4, !tbaa !25
  %237 = shl i32 1, %236
  %238 = sub nsw i32 %237, 1
  store i32 %238, ptr %12, align 4, !tbaa !10
  br label %239

239:                                              ; preds = %232, %231
  store i32 0, ptr %15, align 4, !tbaa !10
  br label %240

240:                                              ; preds = %411, %239
  %241 = load i32, ptr %15, align 4, !tbaa !10
  %242 = icmp slt i32 %241, 39
  br i1 %242, label %243, label %414

243:                                              ; preds = %240
  %244 = load ptr, ptr %4, align 8, !tbaa !5
  %245 = getelementptr inbounds %struct.XBram, ptr %244, i32 0, i32 0
  %246 = getelementptr inbounds %struct.XBram_Config, ptr %245, i32 0, i32 9
  %247 = load i32, ptr %246, align 4, !tbaa !25
  %248 = icmp sgt i32 %247, 0
  br i1 %248, label %249, label %256

249:                                              ; preds = %243
  %250 = load ptr, ptr %4, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.XBram, ptr %250, i32 0, i32 0
  %252 = getelementptr inbounds %struct.XBram_Config, ptr %251, i32 0, i32 15
  %253 = load i64, ptr %252, align 8, !tbaa !18
  %254 = add i64 %253, 12
  %255 = call i32 @Xil_In32(i64 noundef %254)
  store i32 %255, ptr %11, align 4, !tbaa !10
  br label %256

256:                                              ; preds = %249, %243
  %257 = load ptr, ptr %4, align 8, !tbaa !5
  %258 = load i32, ptr %13, align 4, !tbaa !10
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds [2 x i32], ptr @XBram_SelfTest.Addr, i64 0, i64 %259
  %261 = load i32, ptr %260, align 4, !tbaa !10
  %262 = zext i32 %261 to i64
  %263 = load i32, ptr %15, align 4, !tbaa !10
  %264 = load i32, ptr %15, align 4, !tbaa !10
  %265 = load i32, ptr %17, align 4, !tbaa !10
  call void @InjectErrors(ptr noundef %257, i64 noundef %262, i32 noundef %263, i32 noundef %264, i32 noundef %265, ptr noundef %9, ptr noundef %10)
  %266 = load ptr, ptr %4, align 8, !tbaa !5
  %267 = getelementptr inbounds %struct.XBram, ptr %266, i32 0, i32 0
  %268 = getelementptr inbounds %struct.XBram_Config, ptr %267, i32 0, i32 8
  %269 = load i32, ptr %268, align 8, !tbaa !24
  %270 = icmp ne i32 %269, 0
  br i1 %270, label %271, label %285

271:                                              ; preds = %256
  %272 = load i32, ptr %14, align 4, !tbaa !10
  %273 = sext i32 %272 to i64
  %274 = icmp ne i64 %273, 0
  br i1 %274, label %283, label %275

275:                                              ; preds = %271
  %276 = load ptr, ptr %4, align 8, !tbaa !5
  %277 = getelementptr inbounds %struct.XBram, ptr %276, i32 0, i32 0
  %278 = getelementptr inbounds %struct.XBram_Config, ptr %277, i32 0, i32 15
  %279 = load i64, ptr %278, align 8, !tbaa !18
  %280 = add i64 %279, 0
  %281 = call i32 @Xil_In32(i64 noundef %280)
  %282 = icmp ne i32 %281, 2
  br i1 %282, label %283, label %284

283:                                              ; preds = %275, %271
  store i32 1, ptr %14, align 4, !tbaa !10
  br label %284

284:                                              ; preds = %283, %275
  br label %285

285:                                              ; preds = %284, %256
  %286 = load ptr, ptr %4, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.XBram, ptr %286, i32 0, i32 0
  %288 = getelementptr inbounds %struct.XBram_Config, ptr %287, i32 0, i32 4
  %289 = load i32, ptr %288, align 8, !tbaa !20
  %290 = icmp ne i32 %289, 0
  br i1 %290, label %291, label %309

291:                                              ; preds = %285
  %292 = load i32, ptr %14, align 4, !tbaa !10
  %293 = sext i32 %292 to i64
  %294 = icmp ne i64 %293, 0
  br i1 %294, label %307, label %295

295:                                              ; preds = %291
  %296 = load ptr, ptr %4, align 8, !tbaa !5
  %297 = getelementptr inbounds %struct.XBram, ptr %296, i32 0, i32 0
  %298 = getelementptr inbounds %struct.XBram_Config, ptr %297, i32 0, i32 15
  %299 = load i64, ptr %298, align 8, !tbaa !18
  %300 = add i64 %299, 448
  %301 = call i32 @Xil_In32(i64 noundef %300)
  %302 = load i32, ptr %13, align 4, !tbaa !10
  %303 = sext i32 %302 to i64
  %304 = getelementptr inbounds [2 x i32], ptr @XBram_SelfTest.Addr, i64 0, i64 %303
  %305 = load i32, ptr %304, align 4, !tbaa !10
  %306 = icmp ne i32 %301, %305
  br i1 %306, label %307, label %308

307:                                              ; preds = %295, %291
  store i32 1, ptr %14, align 4, !tbaa !10
  br label %308

308:                                              ; preds = %307, %295
  br label %309

309:                                              ; preds = %308, %285
  %310 = load ptr, ptr %4, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.XBram, ptr %310, i32 0, i32 0
  %312 = getelementptr inbounds %struct.XBram_Config, ptr %311, i32 0, i32 5
  %313 = load i32, ptr %312, align 4, !tbaa !21
  %314 = icmp ne i32 %313, 0
  br i1 %314, label %315, label %344

315:                                              ; preds = %309
  %316 = load i32, ptr %14, align 4, !tbaa !10
  %317 = sext i32 %316 to i64
  %318 = icmp ne i64 %317, 0
  br i1 %318, label %328, label %319

319:                                              ; preds = %315
  %320 = load ptr, ptr %4, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.XBram, ptr %320, i32 0, i32 0
  %322 = getelementptr inbounds %struct.XBram_Config, ptr %321, i32 0, i32 15
  %323 = load i64, ptr %322, align 8, !tbaa !18
  %324 = add i64 %323, 256
  %325 = call i32 @Xil_In32(i64 noundef %324)
  %326 = load i32, ptr %9, align 4, !tbaa !10
  %327 = icmp ne i32 %325, %326
  br i1 %327, label %328, label %329

328:                                              ; preds = %319, %315
  store i32 1, ptr %14, align 4, !tbaa !10
  br label %329

329:                                              ; preds = %328, %319
  %330 = load i32, ptr %14, align 4, !tbaa !10
  %331 = sext i32 %330 to i64
  %332 = icmp ne i64 %331, 0
  br i1 %332, label %342, label %333

333:                                              ; preds = %329
  %334 = load ptr, ptr %4, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.XBram, ptr %334, i32 0, i32 0
  %336 = getelementptr inbounds %struct.XBram_Config, ptr %335, i32 0, i32 15
  %337 = load i64, ptr %336, align 8, !tbaa !18
  %338 = add i64 %337, 384
  %339 = call i32 @Xil_In32(i64 noundef %338)
  %340 = load i32, ptr %10, align 4, !tbaa !10
  %341 = icmp ne i32 %339, %340
  br i1 %341, label %342, label %343

342:                                              ; preds = %333, %329
  store i32 1, ptr %14, align 4, !tbaa !10
  br label %343

343:                                              ; preds = %342, %333
  br label %344

344:                                              ; preds = %343, %309
  %345 = load ptr, ptr %4, align 8, !tbaa !5
  %346 = getelementptr inbounds %struct.XBram, ptr %345, i32 0, i32 0
  %347 = getelementptr inbounds %struct.XBram_Config, ptr %346, i32 0, i32 9
  %348 = load i32, ptr %347, align 4, !tbaa !25
  %349 = icmp sgt i32 %348, 0
  br i1 %349, label %350, label %370

350:                                              ; preds = %344
  %351 = load i32, ptr %11, align 4, !tbaa !10
  %352 = load i32, ptr %12, align 4, !tbaa !10
  %353 = icmp ult i32 %351, %352
  br i1 %353, label %354, label %370

354:                                              ; preds = %350
  %355 = load i32, ptr %14, align 4, !tbaa !10
  %356 = sext i32 %355 to i64
  %357 = icmp ne i64 %356, 0
  br i1 %357, label %368, label %358

358:                                              ; preds = %354
  %359 = load ptr, ptr %4, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.XBram, ptr %359, i32 0, i32 0
  %361 = getelementptr inbounds %struct.XBram_Config, ptr %360, i32 0, i32 15
  %362 = load i64, ptr %361, align 8, !tbaa !18
  %363 = add i64 %362, 12
  %364 = call i32 @Xil_In32(i64 noundef %363)
  %365 = load i32, ptr %11, align 4, !tbaa !10
  %366 = add i32 %365, 1
  %367 = icmp ne i32 %364, %366
  br i1 %367, label %368, label %369

368:                                              ; preds = %358, %354
  store i32 1, ptr %14, align 4, !tbaa !10
  br label %369

369:                                              ; preds = %368, %358
  br label %370

370:                                              ; preds = %369, %350, %344
  %371 = load i32, ptr %13, align 4, !tbaa !10
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds [2 x i32], ptr @XBram_SelfTest.Addr, i64 0, i64 %372
  %374 = load i32, ptr %373, align 4, !tbaa !10
  %375 = zext i32 %374 to i64
  %376 = load i32, ptr %13, align 4, !tbaa !10
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds [2 x i32], ptr %8, i64 0, i64 %377
  %379 = load i32, ptr %378, align 4, !tbaa !10
  call void @Xil_Out32(i64 noundef %375, i32 noundef %379)
  %380 = load ptr, ptr %4, align 8, !tbaa !5
  %381 = getelementptr inbounds %struct.XBram, ptr %380, i32 0, i32 0
  %382 = getelementptr inbounds %struct.XBram_Config, ptr %381, i32 0, i32 8
  %383 = load i32, ptr %382, align 8, !tbaa !24
  %384 = icmp ne i32 %383, 0
  br i1 %384, label %385, label %403

385:                                              ; preds = %370
  %386 = load ptr, ptr %4, align 8, !tbaa !5
  %387 = getelementptr inbounds %struct.XBram, ptr %386, i32 0, i32 0
  %388 = getelementptr inbounds %struct.XBram_Config, ptr %387, i32 0, i32 15
  %389 = load i64, ptr %388, align 8, !tbaa !18
  %390 = add i64 %389, 4
  %391 = load i8, ptr %5, align 1, !tbaa !9
  %392 = zext i8 %391 to i32
  call void @Xil_Out32(i64 noundef %390, i32 noundef %392)
  %393 = load ptr, ptr %4, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.XBram, ptr %393, i32 0, i32 0
  %395 = getelementptr inbounds %struct.XBram_Config, ptr %394, i32 0, i32 15
  %396 = load i64, ptr %395, align 8, !tbaa !18
  %397 = add i64 %396, 0
  call void @Xil_Out32(i64 noundef %397, i32 noundef 3)
  %398 = load ptr, ptr %4, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.XBram, ptr %398, i32 0, i32 0
  %400 = getelementptr inbounds %struct.XBram_Config, ptr %399, i32 0, i32 15
  %401 = load i64, ptr %400, align 8, !tbaa !18
  %402 = add i64 %401, 4
  call void @Xil_Out32(i64 noundef %402, i32 noundef 0)
  br label %403

403:                                              ; preds = %385, %370
  %404 = load i32, ptr %13, align 4, !tbaa !10
  %405 = xor i32 %404, 1
  store i32 %405, ptr %13, align 4, !tbaa !10
  %406 = load i32, ptr %14, align 4, !tbaa !10
  %407 = sext i32 %406 to i64
  %408 = icmp ne i64 %407, 0
  br i1 %408, label %409, label %410

409:                                              ; preds = %403
  br label %414

410:                                              ; preds = %403
  br label %411

411:                                              ; preds = %410
  %412 = load i32, ptr %15, align 4, !tbaa !10
  %413 = add nsw i32 %412, 1
  store i32 %413, ptr %15, align 4, !tbaa !10
  br label %240, !llvm.loop !30

414:                                              ; preds = %409, %240
  %415 = load i32, ptr %14, align 4, !tbaa !10
  %416 = sext i32 %415 to i64
  %417 = icmp ne i64 %416, 0
  br i1 %417, label %418, label %419

418:                                              ; preds = %414
  store i32 1, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %646

419:                                              ; preds = %414
  store i32 0, ptr %15, align 4, !tbaa !10
  br label %420

420:                                              ; preds = %563, %419
  %421 = load i32, ptr %15, align 4, !tbaa !10
  %422 = icmp slt i32 %421, 39
  br i1 %422, label %423, label %566

423:                                              ; preds = %420
  store i32 0, ptr %16, align 4, !tbaa !10
  br label %424

424:                                              ; preds = %554, %423
  %425 = load i32, ptr %16, align 4, !tbaa !10
  %426 = icmp slt i32 %425, 39
  br i1 %426, label %427, label %557

427:                                              ; preds = %424
  %428 = load i32, ptr %15, align 4, !tbaa !10
  %429 = load i32, ptr %16, align 4, !tbaa !10
  %430 = icmp ne i32 %428, %429
  br i1 %430, label %431, label %548

431:                                              ; preds = %427
  %432 = load ptr, ptr %4, align 8, !tbaa !5
  %433 = load i32, ptr %13, align 4, !tbaa !10
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds [2 x i32], ptr @XBram_SelfTest.Addr, i64 0, i64 %434
  %436 = load i32, ptr %435, align 4, !tbaa !10
  %437 = zext i32 %436 to i64
  %438 = load i32, ptr %15, align 4, !tbaa !10
  %439 = load i32, ptr %16, align 4, !tbaa !10
  %440 = load i32, ptr %17, align 4, !tbaa !10
  call void @InjectErrors(ptr noundef %432, i64 noundef %437, i32 noundef %438, i32 noundef %439, i32 noundef %440, ptr noundef %9, ptr noundef %10)
  %441 = load ptr, ptr %4, align 8, !tbaa !5
  %442 = getelementptr inbounds %struct.XBram, ptr %441, i32 0, i32 0
  %443 = getelementptr inbounds %struct.XBram_Config, ptr %442, i32 0, i32 8
  %444 = load i32, ptr %443, align 8, !tbaa !24
  %445 = icmp ne i32 %444, 0
  br i1 %445, label %446, label %460

446:                                              ; preds = %431
  %447 = load i32, ptr %14, align 4, !tbaa !10
  %448 = sext i32 %447 to i64
  %449 = icmp ne i64 %448, 0
  br i1 %449, label %458, label %450

450:                                              ; preds = %446
  %451 = load ptr, ptr %4, align 8, !tbaa !5
  %452 = getelementptr inbounds %struct.XBram, ptr %451, i32 0, i32 0
  %453 = getelementptr inbounds %struct.XBram_Config, ptr %452, i32 0, i32 15
  %454 = load i64, ptr %453, align 8, !tbaa !18
  %455 = add i64 %454, 0
  %456 = call i32 @Xil_In32(i64 noundef %455)
  %457 = icmp ne i32 %456, 1
  br i1 %457, label %458, label %459

458:                                              ; preds = %450, %446
  store i32 1, ptr %14, align 4, !tbaa !10
  br label %459

459:                                              ; preds = %458, %450
  br label %460

460:                                              ; preds = %459, %431
  %461 = load ptr, ptr %4, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.XBram, ptr %461, i32 0, i32 0
  %463 = getelementptr inbounds %struct.XBram_Config, ptr %462, i32 0, i32 6
  %464 = load i32, ptr %463, align 8, !tbaa !22
  %465 = icmp ne i32 %464, 0
  br i1 %465, label %466, label %512

466:                                              ; preds = %460
  %467 = load i32, ptr %14, align 4, !tbaa !10
  %468 = sext i32 %467 to i64
  %469 = icmp ne i64 %468, 0
  br i1 %469, label %482, label %470

470:                                              ; preds = %466
  %471 = load ptr, ptr %4, align 8, !tbaa !5
  %472 = getelementptr inbounds %struct.XBram, ptr %471, i32 0, i32 0
  %473 = getelementptr inbounds %struct.XBram_Config, ptr %472, i32 0, i32 15
  %474 = load i64, ptr %473, align 8, !tbaa !18
  %475 = add i64 %474, 704
  %476 = call i32 @Xil_In32(i64 noundef %475)
  %477 = load i32, ptr %13, align 4, !tbaa !10
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds [2 x i32], ptr @XBram_SelfTest.Addr, i64 0, i64 %478
  %480 = load i32, ptr %479, align 4, !tbaa !10
  %481 = icmp ne i32 %476, %480
  br i1 %481, label %482, label %483

482:                                              ; preds = %470, %466
  store i32 1, ptr %14, align 4, !tbaa !10
  br label %483

483:                                              ; preds = %482, %470
  %484 = load i32, ptr %14, align 4, !tbaa !10
  %485 = sext i32 %484 to i64
  %486 = icmp ne i64 %485, 0
  br i1 %486, label %496, label %487

487:                                              ; preds = %483
  %488 = load ptr, ptr %4, align 8, !tbaa !5
  %489 = getelementptr inbounds %struct.XBram, ptr %488, i32 0, i32 0
  %490 = getelementptr inbounds %struct.XBram_Config, ptr %489, i32 0, i32 15
  %491 = load i64, ptr %490, align 8, !tbaa !18
  %492 = add i64 %491, 512
  %493 = call i32 @Xil_In32(i64 noundef %492)
  %494 = load i32, ptr %9, align 4, !tbaa !10
  %495 = icmp ne i32 %493, %494
  br i1 %495, label %496, label %497

496:                                              ; preds = %487, %483
  store i32 1, ptr %14, align 4, !tbaa !10
  br label %497

497:                                              ; preds = %496, %487
  %498 = load i32, ptr %14, align 4, !tbaa !10
  %499 = sext i32 %498 to i64
  %500 = icmp ne i64 %499, 0
  br i1 %500, label %510, label %501

501:                                              ; preds = %497
  %502 = load ptr, ptr %4, align 8, !tbaa !5
  %503 = getelementptr inbounds %struct.XBram, ptr %502, i32 0, i32 0
  %504 = getelementptr inbounds %struct.XBram_Config, ptr %503, i32 0, i32 15
  %505 = load i64, ptr %504, align 8, !tbaa !18
  %506 = add i64 %505, 640
  %507 = call i32 @Xil_In32(i64 noundef %506)
  %508 = load i32, ptr %10, align 4, !tbaa !10
  %509 = icmp ne i32 %507, %508
  br i1 %509, label %510, label %511

510:                                              ; preds = %501, %497
  store i32 1, ptr %14, align 4, !tbaa !10
  br label %511

511:                                              ; preds = %510, %501
  br label %512

512:                                              ; preds = %511, %460
  %513 = load i32, ptr %13, align 4, !tbaa !10
  %514 = sext i32 %513 to i64
  %515 = getelementptr inbounds [2 x i32], ptr @XBram_SelfTest.Addr, i64 0, i64 %514
  %516 = load i32, ptr %515, align 4, !tbaa !10
  %517 = zext i32 %516 to i64
  %518 = load i32, ptr %13, align 4, !tbaa !10
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds [2 x i32], ptr %8, i64 0, i64 %519
  %521 = load i32, ptr %520, align 4, !tbaa !10
  call void @Xil_Out32(i64 noundef %517, i32 noundef %521)
  %522 = load ptr, ptr %4, align 8, !tbaa !5
  %523 = getelementptr inbounds %struct.XBram, ptr %522, i32 0, i32 0
  %524 = getelementptr inbounds %struct.XBram_Config, ptr %523, i32 0, i32 8
  %525 = load i32, ptr %524, align 8, !tbaa !24
  %526 = icmp ne i32 %525, 0
  br i1 %526, label %527, label %545

527:                                              ; preds = %512
  %528 = load ptr, ptr %4, align 8, !tbaa !5
  %529 = getelementptr inbounds %struct.XBram, ptr %528, i32 0, i32 0
  %530 = getelementptr inbounds %struct.XBram_Config, ptr %529, i32 0, i32 15
  %531 = load i64, ptr %530, align 8, !tbaa !18
  %532 = add i64 %531, 4
  %533 = load i8, ptr %5, align 1, !tbaa !9
  %534 = zext i8 %533 to i32
  call void @Xil_Out32(i64 noundef %532, i32 noundef %534)
  %535 = load ptr, ptr %4, align 8, !tbaa !5
  %536 = getelementptr inbounds %struct.XBram, ptr %535, i32 0, i32 0
  %537 = getelementptr inbounds %struct.XBram_Config, ptr %536, i32 0, i32 15
  %538 = load i64, ptr %537, align 8, !tbaa !18
  %539 = add i64 %538, 0
  call void @Xil_Out32(i64 noundef %539, i32 noundef 3)
  %540 = load ptr, ptr %4, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.XBram, ptr %540, i32 0, i32 0
  %542 = getelementptr inbounds %struct.XBram_Config, ptr %541, i32 0, i32 15
  %543 = load i64, ptr %542, align 8, !tbaa !18
  %544 = add i64 %543, 4
  call void @Xil_Out32(i64 noundef %544, i32 noundef 0)
  br label %545

545:                                              ; preds = %527, %512
  %546 = load i32, ptr %13, align 4, !tbaa !10
  %547 = xor i32 %546, 1
  store i32 %547, ptr %13, align 4, !tbaa !10
  br label %548

548:                                              ; preds = %545, %427
  %549 = load i32, ptr %14, align 4, !tbaa !10
  %550 = sext i32 %549 to i64
  %551 = icmp ne i64 %550, 0
  br i1 %551, label %552, label %553

552:                                              ; preds = %548
  br label %557

553:                                              ; preds = %548
  br label %554

554:                                              ; preds = %553
  %555 = load i32, ptr %16, align 4, !tbaa !10
  %556 = add nsw i32 %555, 1
  store i32 %556, ptr %16, align 4, !tbaa !10
  br label %424, !llvm.loop !32

557:                                              ; preds = %552, %424
  %558 = load i32, ptr %14, align 4, !tbaa !10
  %559 = sext i32 %558 to i64
  %560 = icmp ne i64 %559, 0
  br i1 %560, label %561, label %562

561:                                              ; preds = %557
  br label %566

562:                                              ; preds = %557
  br label %563

563:                                              ; preds = %562
  %564 = load i32, ptr %15, align 4, !tbaa !10
  %565 = add nsw i32 %564, 1
  store i32 %565, ptr %15, align 4, !tbaa !10
  br label %420, !llvm.loop !33

566:                                              ; preds = %561, %420
  %567 = load ptr, ptr %4, align 8, !tbaa !5
  %568 = getelementptr inbounds %struct.XBram, ptr %567, i32 0, i32 0
  %569 = getelementptr inbounds %struct.XBram_Config, ptr %568, i32 0, i32 9
  %570 = load i32, ptr %569, align 4, !tbaa !25
  %571 = icmp sgt i32 %570, 0
  br i1 %571, label %572, label %603

572:                                              ; preds = %566
  %573 = load i32, ptr %14, align 4, !tbaa !10
  %574 = sext i32 %573 to i64
  %575 = icmp eq i64 %574, 0
  br i1 %575, label %576, label %603

576:                                              ; preds = %572
  %577 = load ptr, ptr %4, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.XBram, ptr %577, i32 0, i32 0
  %579 = getelementptr inbounds %struct.XBram_Config, ptr %578, i32 0, i32 15
  %580 = load i64, ptr %579, align 8, !tbaa !18
  %581 = add i64 %580, 12
  %582 = load i32, ptr %12, align 4, !tbaa !10
  call void @Xil_Out32(i64 noundef %581, i32 noundef %582)
  %583 = load ptr, ptr %4, align 8, !tbaa !5
  %584 = load i32, ptr %13, align 4, !tbaa !10
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds [2 x i32], ptr @XBram_SelfTest.Addr, i64 0, i64 %585
  %587 = load i32, ptr %586, align 4, !tbaa !10
  %588 = zext i32 %587 to i64
  call void @InjectErrors(ptr noundef %583, i64 noundef %588, i32 noundef 0, i32 noundef 0, i32 noundef 4, ptr noundef %9, ptr noundef %10)
  %589 = load i32, ptr %14, align 4, !tbaa !10
  %590 = sext i32 %589 to i64
  %591 = icmp ne i64 %590, 0
  br i1 %591, label %601, label %592

592:                                              ; preds = %576
  %593 = load ptr, ptr %4, align 8, !tbaa !5
  %594 = getelementptr inbounds %struct.XBram, ptr %593, i32 0, i32 0
  %595 = getelementptr inbounds %struct.XBram_Config, ptr %594, i32 0, i32 15
  %596 = load i64, ptr %595, align 8, !tbaa !18
  %597 = add i64 %596, 12
  %598 = call i32 @Xil_In32(i64 noundef %597)
  %599 = load i32, ptr %12, align 4, !tbaa !10
  %600 = icmp ne i32 %598, %599
  br i1 %600, label %601, label %602

601:                                              ; preds = %592, %576
  store i32 1, ptr %14, align 4, !tbaa !10
  br label %602

602:                                              ; preds = %601, %592
  br label %603

603:                                              ; preds = %602, %572, %566
  %604 = load i32, ptr @XBram_SelfTest.Addr, align 4, !tbaa !10
  %605 = zext i32 %604 to i64
  %606 = getelementptr inbounds [2 x i32], ptr %8, i64 0, i64 0
  %607 = load i32, ptr %606, align 4, !tbaa !10
  call void @Xil_Out32(i64 noundef %605, i32 noundef %607)
  %608 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @XBram_SelfTest.Addr, i64 0, i64 1), align 4, !tbaa !10
  %609 = zext i32 %608 to i64
  %610 = getelementptr inbounds [2 x i32], ptr %8, i64 0, i64 1
  %611 = load i32, ptr %610, align 4, !tbaa !10
  call void @Xil_Out32(i64 noundef %609, i32 noundef %611)
  %612 = load ptr, ptr %4, align 8, !tbaa !5
  %613 = getelementptr inbounds %struct.XBram, ptr %612, i32 0, i32 0
  %614 = getelementptr inbounds %struct.XBram_Config, ptr %613, i32 0, i32 8
  %615 = load i32, ptr %614, align 8, !tbaa !24
  %616 = icmp ne i32 %615, 0
  br i1 %616, label %617, label %623

617:                                              ; preds = %603
  %618 = load ptr, ptr %4, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.XBram, ptr %618, i32 0, i32 0
  %620 = getelementptr inbounds %struct.XBram_Config, ptr %619, i32 0, i32 15
  %621 = load i64, ptr %620, align 8, !tbaa !18
  %622 = add i64 %621, 0
  call void @Xil_Out32(i64 noundef %622, i32 noundef 3)
  br label %623

623:                                              ; preds = %617, %603
  %624 = load ptr, ptr %4, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct.XBram, ptr %624, i32 0, i32 0
  %626 = getelementptr inbounds %struct.XBram_Config, ptr %625, i32 0, i32 9
  %627 = load i32, ptr %626, align 4, !tbaa !25
  %628 = icmp sgt i32 %627, 0
  br i1 %628, label %629, label %635

629:                                              ; preds = %623
  %630 = load ptr, ptr %4, align 8, !tbaa !5
  %631 = getelementptr inbounds %struct.XBram, ptr %630, i32 0, i32 0
  %632 = getelementptr inbounds %struct.XBram_Config, ptr %631, i32 0, i32 15
  %633 = load i64, ptr %632, align 8, !tbaa !18
  %634 = add i64 %633, 12
  call void @Xil_Out32(i64 noundef %634, i32 noundef 0)
  br label %635

635:                                              ; preds = %629, %623
  %636 = load i32, ptr %14, align 4, !tbaa !10
  %637 = sext i32 %636 to i64
  %638 = icmp ne i64 %637, 0
  br i1 %638, label %639, label %640

639:                                              ; preds = %635
  br label %644

640:                                              ; preds = %635
  br label %641

641:                                              ; preds = %640
  %642 = load i32, ptr %17, align 4, !tbaa !10
  %643 = shl i32 %642, 1
  store i32 %643, ptr %17, align 4, !tbaa !10
  br label %222, !llvm.loop !34

644:                                              ; preds = %639, %222
  %645 = load i32, ptr %14, align 4, !tbaa !10
  store i32 %645, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %646

646:                                              ; preds = %644, %418
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  br label %648

647:                                              ; preds = %195, %189
  store i32 0, ptr %3, align 4
  br label %648

648:                                              ; preds = %647, %646, %186, %133, %49, %42, %35, %28, %21
  %649 = load i32, ptr %3, align 4
  ret i32 %649

650:                                              ; preds = %186
  unreachable
}

declare void @Xil_Assert(ptr noundef, i32 noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @Xil_In32(i64 noundef) #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @Xil_Out32(i64 noundef, i32 noundef) #2

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

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

; Function Attrs: nounwind uwtable
declare hidden void @InjectErrors(ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) #0

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


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

@Xil_AssertStatus = external local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [169 x i8], align 1
@XBram_SelfTest.Addr = external hidden local_unnamed_addr global [2 x i32], align 4
@PrngResult = external hidden local_unnamed_addr global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @XBram_SelfTest(ptr noundef %0, i8 noundef zeroext %1) local_unnamed_addr #0 {
  %3 = alloca [2 x i32], align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %10, label %6

6:                                                ; preds = %2
  store i32 0, ptr @Xil_AssertStatus, align 4, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %0, i64 88
  %8 = load i32, ptr %7, align 8, !tbaa !9
  %9 = icmp eq i32 %8, 286331153
  br i1 %9, label %11, label %15

10:                                               ; preds = %2
  tail call void @Xil_Assert(ptr noundef nonnull @.str, i32 noundef 245) #4
  store i32 1, ptr @Xil_AssertStatus, align 4, !tbaa !5
  br label %.thread

11:                                               ; preds = %6
  %12 = getelementptr inbounds i8, ptr %0, i64 8
  %13 = load i32, ptr %12, align 8, !tbaa !14
  %14 = icmp eq i32 %13, 0
  br i1 %14, label %.thread, label %16

15:                                               ; preds = %6
  tail call void @Xil_Assert(ptr noundef nonnull @.str, i32 noundef 246) #4
  store i32 1, ptr @Xil_AssertStatus, align 4, !tbaa !5
  br label %.thread

16:                                               ; preds = %11
  %17 = getelementptr inbounds i8, ptr %0, i64 72
  %18 = load i64, ptr %17, align 8, !tbaa !15
  %19 = icmp eq i64 %18, 0
  br i1 %19, label %.thread, label %20

20:                                               ; preds = %16
  %21 = getelementptr inbounds i8, ptr %0, i64 4
  %22 = load i32, ptr %21, align 4, !tbaa !16
  %.not148 = icmp eq i32 %22, 32
  br i1 %.not148, label %23, label %.thread

23:                                               ; preds = %20
  %24 = getelementptr inbounds i8, ptr %0, i64 16
  %25 = load i32, ptr %24, align 8, !tbaa !17
  %.not149 = icmp eq i32 %25, 0
  br i1 %.not149, label %29, label %26

26:                                               ; preds = %23
  %27 = add i64 %18, 448
  %28 = tail call i32 @Xil_In32(i64 noundef %27)
  br label %29

29:                                               ; preds = %26, %23
  %30 = getelementptr inbounds i8, ptr %0, i64 20
  %31 = load i32, ptr %30, align 4, !tbaa !18
  %.not150 = icmp eq i32 %31, 0
  br i1 %.not150, label %39, label %32

32:                                               ; preds = %29
  %33 = load i64, ptr %17, align 8, !tbaa !15
  %34 = add i64 %33, 256
  %35 = tail call i32 @Xil_In32(i64 noundef %34)
  %36 = load i64, ptr %17, align 8, !tbaa !15
  %37 = add i64 %36, 384
  %38 = tail call i32 @Xil_In32(i64 noundef %37)
  br label %39

39:                                               ; preds = %32, %29
  %40 = getelementptr inbounds i8, ptr %0, i64 24
  %41 = load i32, ptr %40, align 8, !tbaa !19
  %.not151 = icmp eq i32 %41, 0
  br i1 %.not151, label %46, label %42

42:                                               ; preds = %39
  %43 = load i64, ptr %17, align 8, !tbaa !15
  %44 = add i64 %43, 704
  %45 = tail call i32 @Xil_In32(i64 noundef %44)
  br label %46

46:                                               ; preds = %42, %39
  %47 = getelementptr inbounds i8, ptr %0, i64 28
  %48 = load i32, ptr %47, align 4, !tbaa !20
  %.not152 = icmp eq i32 %48, 0
  br i1 %.not152, label %56, label %49

49:                                               ; preds = %46
  %50 = load i64, ptr %17, align 8, !tbaa !15
  %51 = add i64 %50, 512
  %52 = tail call i32 @Xil_In32(i64 noundef %51)
  %53 = load i64, ptr %17, align 8, !tbaa !15
  %54 = add i64 %53, 640
  %55 = tail call i32 @Xil_In32(i64 noundef %54)
  br label %56

56:                                               ; preds = %49, %46
  %57 = getelementptr inbounds i8, ptr %0, i64 32
  %58 = load i32, ptr %57, align 8, !tbaa !21
  %.not153 = icmp eq i32 %58, 0
  br i1 %.not153, label %65, label %59

59:                                               ; preds = %56
  %60 = load i64, ptr %17, align 8, !tbaa !15
  %61 = add i64 %60, 4
  tail call void @Xil_Out32(i64 noundef %61, i32 noundef 0)
  %62 = load i64, ptr %17, align 8, !tbaa !15
  %63 = add i64 %62, 4
  %64 = tail call i32 @Xil_In32(i64 noundef %63)
  %.not154 = icmp eq i32 %64, 0
  br i1 %.not154, label %65, label %.thread

65:                                               ; preds = %59, %56
  %66 = getelementptr inbounds i8, ptr %0, i64 36
  %67 = load i32, ptr %66, align 4, !tbaa !22
  %68 = icmp sgt i32 %67, 0
  br i1 %68, label %69, label %83

69:                                               ; preds = %65
  %70 = icmp eq i32 %67, 32
  %notmask = shl nsw i32 -1, %67
  %71 = xor i32 %notmask, -1
  %.0140 = select i1 %70, i32 -1, i32 %71
  %72 = load i64, ptr %17, align 8, !tbaa !15
  %73 = add i64 %72, 12
  tail call void @Xil_Out32(i64 noundef %73, i32 noundef %.0140)
  %74 = load i64, ptr %17, align 8, !tbaa !15
  %75 = add i64 %74, 12
  %76 = tail call i32 @Xil_In32(i64 noundef %75)
  %.not155 = icmp eq i32 %76, %.0140
  br i1 %.not155, label %77, label %.thread

77:                                               ; preds = %69
  %78 = load i64, ptr %17, align 8, !tbaa !15
  %79 = add i64 %78, 12
  tail call void @Xil_Out32(i64 noundef %79, i32 noundef 0)
  %80 = load i64, ptr %17, align 8, !tbaa !15
  %81 = add i64 %80, 12
  %82 = tail call i32 @Xil_In32(i64 noundef %81)
  %.not156 = icmp eq i32 %82, 0
  br i1 %.not156, label %83, label %.thread

83:                                               ; preds = %77, %65
  %84 = getelementptr inbounds i8, ptr %0, i64 12
  %85 = load i32, ptr %84, align 4, !tbaa !23
  %.not157 = icmp eq i32 %85, 0
  br i1 %.not157, label %.thread, label %86

86:                                               ; preds = %83
  %87 = getelementptr inbounds i8, ptr %0, i64 48
  %88 = load i32, ptr %87, align 8, !tbaa !24
  %.not158 = icmp eq i32 %88, 0
  br i1 %.not158, label %.thread, label %89

89:                                               ; preds = %86
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %5) #4
  %90 = getelementptr inbounds i8, ptr %0, i64 56
  %91 = load <2 x i64>, ptr %90, align 8, !tbaa !25
  %92 = trunc <2 x i64> %91 to <2 x i32>
  %93 = and <2 x i32> %92, <i32 -4, i32 -4>
  store <2 x i32> %93, ptr @XBram_SelfTest.Addr, align 4, !tbaa !5
  store i32 42, ptr @PrngResult, align 4, !tbaa !5
  %94 = extractelement <2 x i64> %91, i64 0
  %95 = and i64 %94, 4294967292
  %96 = tail call i32 @Xil_In32(i64 noundef %95)
  store i32 %96, ptr %3, align 4, !tbaa !5
  %97 = load i32, ptr getelementptr inbounds (i8, ptr @XBram_SelfTest.Addr, i64 4), align 4, !tbaa !5
  %98 = zext i32 %97 to i64
  %99 = tail call i32 @Xil_In32(i64 noundef %98)
  %100 = getelementptr inbounds i8, ptr %3, i64 4
  store i32 %99, ptr %100, align 4, !tbaa !5
  %101 = zext i8 %1 to i32
  br label %105

102:                                              ; preds = %248
  %103 = shl i32 %.0266, 1
  %104 = icmp slt i32 %103, 5
  br i1 %104, label %105, label %.thread214, !llvm.loop !26

105:                                              ; preds = %89, %102
  %.0266 = phi i32 [ 1, %89 ], [ %103, %102 ]
  %.0126265 = phi i32 [ 0, %89 ], [ %.7133250, %102 ]
  %.0135264 = phi i32 [ 0, %89 ], [ %.2137, %102 ]
  %106 = load i32, ptr %66, align 4, !tbaa !22
  %107 = icmp eq i32 %106, 32
  %notmask159 = shl nsw i32 -1, %106
  %108 = xor i32 %notmask159, -1
  %.0134 = select i1 %107, i32 -1, i32 %108
  br label %109

thread-pre-split:                                 ; preds = %174
  %.pr = load i32, ptr %66, align 4, !tbaa !22
  br label %109

109:                                              ; preds = %thread-pre-split, %105
  %110 = phi i32 [ %.pr, %thread-pre-split ], [ %106, %105 ]
  %.0123259 = phi i32 [ %176, %thread-pre-split ], [ 0, %105 ]
  %.1127258 = phi i32 [ %175, %thread-pre-split ], [ %.0126265, %105 ]
  %.1136257 = phi i32 [ %.2137, %thread-pre-split ], [ %.0135264, %105 ]
  %111 = icmp sgt i32 %110, 0
  br i1 %111, label %112, label %116

112:                                              ; preds = %109
  %113 = load i64, ptr %17, align 8, !tbaa !15
  %114 = add i64 %113, 12
  %115 = call i32 @Xil_In32(i64 noundef %114)
  br label %116

116:                                              ; preds = %112, %109
  %.2137 = phi i32 [ %115, %112 ], [ %.1136257, %109 ]
  %117 = zext nneg i32 %.1127258 to i64
  %118 = getelementptr inbounds [2 x i32], ptr @XBram_SelfTest.Addr, i64 0, i64 %117
  %119 = load i32, ptr %118, align 4, !tbaa !5
  %120 = zext i32 %119 to i64
  call void @InjectErrors(ptr noundef nonnull %0, i64 noundef %120, i32 noundef %.0123259, i32 noundef %.0123259, i32 noundef %.0266, ptr noundef nonnull %4, ptr noundef nonnull %5)
  %121 = load i32, ptr %57, align 8, !tbaa !21
  %.not160 = icmp eq i32 %121, 0
  br i1 %.not160, label %125, label %122

122:                                              ; preds = %116
  %123 = load i64, ptr %17, align 8, !tbaa !15
  %124 = call i32 @Xil_In32(i64 noundef %123)
  %.not162 = icmp eq i32 %124, 2
  br i1 %.not162, label %125, label %.thread196

125:                                              ; preds = %122, %116
  %126 = load i32, ptr %24, align 8, !tbaa !17
  %.not163 = icmp eq i32 %126, 0
  br i1 %.not163, label %133, label %128

.thread196:                                       ; preds = %122
  %127 = load i32, ptr %24, align 8, !tbaa !17
  %.not163198 = icmp eq i32 %127, 0
  br i1 %.not163198, label %133, label %.thread200

128:                                              ; preds = %125
  %129 = load i64, ptr %17, align 8, !tbaa !15
  %130 = add i64 %129, 448
  %131 = call i32 @Xil_In32(i64 noundef %130)
  %132 = load i32, ptr %118, align 4, !tbaa !5
  %.not165 = icmp eq i32 %131, %132
  br i1 %.not165, label %133, label %.thread200

.thread200:                                       ; preds = %.thread196, %128
  br label %133

133:                                              ; preds = %.thread196, %128, %.thread200, %125
  %.not167 = phi i1 [ false, %.thread200 ], [ true, %128 ], [ true, %125 ], [ false, %.thread196 ]
  %.3 = phi i32 [ 1, %.thread200 ], [ 0, %128 ], [ 0, %125 ], [ 1, %.thread196 ]
  %134 = load i32, ptr %30, align 4, !tbaa !18
  %.not166 = icmp eq i32 %134, 0
  br i1 %.not166, label %146, label %135

135:                                              ; preds = %133
  br i1 %.not167, label %136, label %.thread207

136:                                              ; preds = %135
  %137 = load i64, ptr %17, align 8, !tbaa !15
  %138 = add i64 %137, 256
  %139 = call i32 @Xil_In32(i64 noundef %138)
  %140 = load i32, ptr %4, align 4, !tbaa !5
  %.not168 = icmp eq i32 %139, %140
  br i1 %.not168, label %141, label %.thread207

141:                                              ; preds = %136
  %142 = load i64, ptr %17, align 8, !tbaa !15
  %143 = add i64 %142, 384
  %144 = call i32 @Xil_In32(i64 noundef %143)
  %145 = load i32, ptr %5, align 4, !tbaa !5
  %.not170 = icmp eq i32 %144, %145
  br i1 %.not170, label %.thread272, label %.thread207

146:                                              ; preds = %133
  %147 = load i32, ptr %66, align 4, !tbaa !22
  %148 = icmp sgt i32 %147, 0
  %149 = icmp ult i32 %.2137, %.0134
  %or.cond193 = select i1 %148, i1 %149, i1 false
  br i1 %or.cond193, label %156, label %161

.thread272:                                       ; preds = %141
  %150 = load i32, ptr %66, align 4, !tbaa !22
  %151 = icmp sgt i32 %150, 0
  %152 = icmp ult i32 %.2137, %.0134
  %or.cond193273 = select i1 %151, i1 %152, i1 false
  br i1 %or.cond193273, label %.thread274, label %161

.thread207:                                       ; preds = %141, %135, %136
  %153 = load i32, ptr %66, align 4, !tbaa !22
  %154 = icmp sgt i32 %153, 0
  %155 = icmp ult i32 %.2137, %.0134
  %or.cond193209 = select i1 %154, i1 %155, i1 false
  br i1 %or.cond193209, label %.thread211, label %161

156:                                              ; preds = %146
  br i1 %.not167, label %.thread274, label %.thread211

.thread274:                                       ; preds = %.thread272, %156
  %157 = load i64, ptr %17, align 8, !tbaa !15
  %158 = add i64 %157, 12
  %159 = call i32 @Xil_In32(i64 noundef %158)
  %160 = add nuw i32 %.2137, 1
  %.not172 = icmp eq i32 %159, %160
  br i1 %.not172, label %161, label %.thread211

.thread211:                                       ; preds = %.thread207, %.thread274, %156
  br label %161

161:                                              ; preds = %.thread272, %.thread207, %.thread274, %.thread211, %146
  %.6 = phi i32 [ 1, %.thread211 ], [ 0, %.thread274 ], [ %.3, %146 ], [ 1, %.thread207 ], [ %.3, %.thread272 ]
  %162 = load i32, ptr %118, align 4, !tbaa !5
  %163 = zext i32 %162 to i64
  %164 = getelementptr inbounds [2 x i32], ptr %3, i64 0, i64 %117
  %165 = load i32, ptr %164, align 4, !tbaa !5
  call void @Xil_Out32(i64 noundef %163, i32 noundef %165)
  %166 = load i32, ptr %57, align 8, !tbaa !21
  %.not173 = icmp eq i32 %166, 0
  br i1 %.not173, label %173, label %167

167:                                              ; preds = %161
  %168 = load i64, ptr %17, align 8, !tbaa !15
  %169 = add i64 %168, 4
  call void @Xil_Out32(i64 noundef %169, i32 noundef %101)
  %170 = load i64, ptr %17, align 8, !tbaa !15
  call void @Xil_Out32(i64 noundef %170, i32 noundef 3)
  %171 = load i64, ptr %17, align 8, !tbaa !15
  %172 = add i64 %171, 4
  call void @Xil_Out32(i64 noundef %172, i32 noundef 0)
  br label %173

173:                                              ; preds = %167, %161
  %.not174 = icmp eq i32 %.6, 0
  br i1 %.not174, label %174, label %.thread214

174:                                              ; preds = %173
  %175 = xor i32 %.1127258, 1
  %176 = add nuw nsw i32 %.0123259, 1
  %exitcond.not = icmp eq i32 %176, 39
  br i1 %exitcond.not, label %.preheader, label %thread-pre-split, !llvm.loop !28

.preheader:                                       ; preds = %174, %220
  %.1263 = phi i32 [ %221, %220 ], [ 0, %174 ]
  %.3129262 = phi i32 [ %.5131238, %220 ], [ %175, %174 ]
  br label %177

177:                                              ; preds = %.preheader, %.thread234
  %.0122261 = phi i32 [ 0, %.preheader ], [ %219, %.thread234 ]
  %.4130260 = phi i32 [ %.3129262, %.preheader ], [ %.5131238, %.thread234 ]
  %.not176 = icmp eq i32 %.1263, %.0122261
  br i1 %.not176, label %.thread234, label %178

178:                                              ; preds = %177
  %179 = zext nneg i32 %.4130260 to i64
  %180 = getelementptr inbounds [2 x i32], ptr @XBram_SelfTest.Addr, i64 0, i64 %179
  %181 = load i32, ptr %180, align 4, !tbaa !5
  %182 = zext i32 %181 to i64
  call void @InjectErrors(ptr noundef nonnull %0, i64 noundef %182, i32 noundef %.1263, i32 noundef %.0122261, i32 noundef %.0266, ptr noundef nonnull %4, ptr noundef nonnull %5)
  %183 = load i32, ptr %57, align 8, !tbaa !21
  %.not177 = icmp eq i32 %183, 0
  br i1 %.not177, label %187, label %184

184:                                              ; preds = %178
  %185 = load i64, ptr %17, align 8, !tbaa !15
  %186 = call i32 @Xil_In32(i64 noundef %185)
  %.not179 = icmp eq i32 %186, 1
  br i1 %.not179, label %187, label %.thread219

187:                                              ; preds = %184, %178
  %188 = load i32, ptr %40, align 8, !tbaa !19
  %.not180 = icmp eq i32 %188, 0
  br i1 %.not180, label %205, label %190

.thread219:                                       ; preds = %184
  %189 = load i32, ptr %40, align 8, !tbaa !19
  %.not180221 = icmp eq i32 %189, 0
  br i1 %.not180221, label %205, label %.thread223

190:                                              ; preds = %187
  %191 = load i64, ptr %17, align 8, !tbaa !15
  %192 = add i64 %191, 704
  %193 = call i32 @Xil_In32(i64 noundef %192)
  %194 = load i32, ptr %180, align 4, !tbaa !5
  %.not182 = icmp eq i32 %193, %194
  br i1 %.not182, label %195, label %.thread223

195:                                              ; preds = %190
  %196 = load i64, ptr %17, align 8, !tbaa !15
  %197 = add i64 %196, 512
  %198 = call i32 @Xil_In32(i64 noundef %197)
  %199 = load i32, ptr %4, align 4, !tbaa !5
  %.not184 = icmp eq i32 %198, %199
  br i1 %.not184, label %200, label %.thread223

200:                                              ; preds = %195
  %201 = load i64, ptr %17, align 8, !tbaa !15
  %202 = add i64 %201, 640
  %203 = call i32 @Xil_In32(i64 noundef %202)
  %204 = load i32, ptr %5, align 4, !tbaa !5
  %.not186 = icmp eq i32 %203, %204
  br i1 %.not186, label %205, label %.thread223

.thread223:                                       ; preds = %.thread219, %190, %195, %200
  br label %205

205:                                              ; preds = %.thread219, %200, %.thread223, %187
  %.not188 = phi i1 [ false, %.thread223 ], [ true, %200 ], [ true, %187 ], [ false, %.thread219 ]
  %206 = load i32, ptr %180, align 4, !tbaa !5
  %207 = zext i32 %206 to i64
  %208 = getelementptr inbounds [2 x i32], ptr %3, i64 0, i64 %179
  %209 = load i32, ptr %208, align 4, !tbaa !5
  call void @Xil_Out32(i64 noundef %207, i32 noundef %209)
  %210 = load i32, ptr %57, align 8, !tbaa !21
  %.not187 = icmp eq i32 %210, 0
  br i1 %.not187, label %217, label %211

211:                                              ; preds = %205
  %212 = load i64, ptr %17, align 8, !tbaa !15
  %213 = add i64 %212, 4
  call void @Xil_Out32(i64 noundef %213, i32 noundef %101)
  %214 = load i64, ptr %17, align 8, !tbaa !15
  call void @Xil_Out32(i64 noundef %214, i32 noundef 3)
  %215 = load i64, ptr %17, align 8, !tbaa !15
  %216 = add i64 %215, 4
  call void @Xil_Out32(i64 noundef %216, i32 noundef 0)
  br label %217

217:                                              ; preds = %205, %211
  %218 = xor i32 %.4130260, 1
  br i1 %.not188, label %.thread234, label %.thread246

.thread234:                                       ; preds = %177, %217
  %.5131238 = phi i32 [ %218, %217 ], [ %.4130260, %177 ]
  %219 = add nuw nsw i32 %.0122261, 1
  %exitcond270.not = icmp eq i32 %219, 39
  br i1 %exitcond270.not, label %220, label %177, !llvm.loop !29

220:                                              ; preds = %.thread234
  %221 = add nuw nsw i32 %.1263, 1
  %exitcond271.not = icmp eq i32 %221, 39
  br i1 %exitcond271.not, label %222, label %.preheader, !llvm.loop !30

222:                                              ; preds = %220
  %223 = load i32, ptr %66, align 4, !tbaa !22
  %224 = icmp sgt i32 %223, 0
  br i1 %224, label %225, label %.thread246

225:                                              ; preds = %222
  %226 = load i64, ptr %17, align 8, !tbaa !15
  %227 = add i64 %226, 12
  call void @Xil_Out32(i64 noundef %227, i32 noundef %.0134)
  %228 = zext nneg i32 %.5131238 to i64
  %229 = getelementptr inbounds [2 x i32], ptr @XBram_SelfTest.Addr, i64 0, i64 %228
  %230 = load i32, ptr %229, align 4, !tbaa !5
  %231 = zext i32 %230 to i64
  call void @InjectErrors(ptr noundef nonnull %0, i64 noundef %231, i32 noundef 0, i32 noundef 0, i32 noundef 4, ptr noundef nonnull %4, ptr noundef nonnull %5)
  %232 = load i64, ptr %17, align 8, !tbaa !15
  %233 = add i64 %232, 12
  %234 = call i32 @Xil_In32(i64 noundef %233)
  %.not190 = icmp ne i32 %234, %.0134
  %spec.select = zext i1 %.not190 to i32
  br label %.thread246

.thread246:                                       ; preds = %217, %225, %222
  %.7133250 = phi i32 [ %.5131238, %222 ], [ %.5131238, %225 ], [ %218, %217 ]
  %.17 = phi i32 [ 0, %222 ], [ %spec.select, %225 ], [ 1, %217 ]
  %235 = load i32, ptr @XBram_SelfTest.Addr, align 4, !tbaa !5
  %236 = zext i32 %235 to i64
  call void @Xil_Out32(i64 noundef %236, i32 noundef %96)
  %237 = load i32, ptr getelementptr inbounds (i8, ptr @XBram_SelfTest.Addr, i64 4), align 4, !tbaa !5
  %238 = zext i32 %237 to i64
  call void @Xil_Out32(i64 noundef %238, i32 noundef %99)
  %239 = load i32, ptr %57, align 8, !tbaa !21
  %.not191 = icmp eq i32 %239, 0
  br i1 %.not191, label %242, label %240

240:                                              ; preds = %.thread246
  %241 = load i64, ptr %17, align 8, !tbaa !15
  call void @Xil_Out32(i64 noundef %241, i32 noundef 3)
  br label %242

242:                                              ; preds = %240, %.thread246
  %243 = load i32, ptr %66, align 4, !tbaa !22
  %244 = icmp sgt i32 %243, 0
  br i1 %244, label %245, label %248

245:                                              ; preds = %242
  %246 = load i64, ptr %17, align 8, !tbaa !15
  %247 = add i64 %246, 12
  call void @Xil_Out32(i64 noundef %247, i32 noundef 0)
  br label %248

248:                                              ; preds = %245, %242
  %.not192 = icmp eq i32 %.17, 0
  br i1 %.not192, label %102, label %.thread214

.thread214:                                       ; preds = %102, %248, %173
  %.1142 = phi i32 [ 1, %173 ], [ 0, %102 ], [ 1, %248 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %5) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #4
  br label %.thread

.thread:                                          ; preds = %77, %69, %83, %86, %59, %20, %16, %11, %.thread214, %15, %10
  %.2143 = phi i32 [ %.1142, %.thread214 ], [ 0, %15 ], [ 0, %10 ], [ 0, %11 ], [ 0, %16 ], [ 0, %20 ], [ 1, %59 ], [ 0, %86 ], [ 0, %83 ], [ 1, %69 ], [ 1, %77 ]
  ret i32 %.2143
}

declare void @Xil_Assert(ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden i32 @Xil_In32(i64 noundef) local_unnamed_addr #2

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @Xil_Out32(i64 noundef, i32 noundef) local_unnamed_addr #2

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

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

; Function Attrs: nounwind uwtable
declare hidden void @InjectErrors(ptr noundef, i64 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass