; LLVM IR from lfarcaro/ARINC653_ARMV7A_Z7000 :: ARINC653_ARMV7A_Z7000.sw/ARINC653_ARMV7A_Z7000_bsp/ps7_cortexa9_0/libsrc/sdps_v3_6 (CardInitialize)

; 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.XSdPs = type { %struct.XSdPs_Config, i32, i32, i32, i32, i8, i8, i8, i8, i32, i8, [4 x i32], i32, [4 x i32], i32, i32, i32, ptr, [8 x i8], [32 x %struct.XSdPs_Adma2Descriptor], i64, [24 x i8] }
%struct.XSdPs_Config = type { i16, i32, i32, i32, i32, i32, i32, i32, i8 }
%struct.XSdPs_Adma2Descriptor = type <{ i16, i16, i64 }>

@Xil_AssertStatus = external global i32, align 4
@.str = external hidden unnamed_addr constant [159 x i8], align 1
@XSdPs_CardInitialize.ExtCsd = external hidden global [512 x i8], align 32
@XSdPs_CardInitialize.SCR = external hidden global [8 x i8], align 32

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i16 @XSdPs_ReadReg16(i32 noundef, i8 noundef zeroext) #2

declare void @usleep(i64 noundef) #1

declare i32 @XSdPs_Change_ClkFreq(ptr noundef, i32 noundef) #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @XSdPs_WriteReg16(i32 noundef, i8 noundef zeroext, i16 noundef zeroext) #2

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @XSdPs_SdCardInitialize(ptr noundef) #3

; Function Attrs: nounwind uwtable
define dso_local i32 @XSdPs_CardInitialize(ptr noundef %0) #3 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca [64 x i8], align 16
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i16, align 2
  %9 = alloca i16, align 2
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 64, ptr %4) #5
  call void @llvm.memset.p0.i64(ptr align 16 %4, i8 0, i64 64, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  %10 = load ptr, ptr %3, align 8, !tbaa !5
  %11 = icmp ne ptr %10, null
  br i1 %11, label %12, label %13

12:                                               ; preds = %1
  store i32 0, ptr @Xil_AssertStatus, align 4, !tbaa !9
  br label %14

13:                                               ; preds = %1
  call void @Xil_Assert(ptr noundef @.str, i32 noundef 581)
  store i32 1, ptr @Xil_AssertStatus, align 4, !tbaa !9
  store i32 0, ptr %2, align 4
  store i32 1, ptr %7, align 4
  br label %608

14:                                               ; preds = %12
  %15 = load ptr, ptr %3, align 8, !tbaa !5
  %16 = getelementptr inbounds %struct.XSdPs, ptr %15, i32 0, i32 1
  %17 = load i32, ptr %16, align 4, !tbaa !11
  %18 = icmp eq i32 %17, 286331153
  br i1 %18, label %19, label %20

19:                                               ; preds = %14
  store i32 0, ptr @Xil_AssertStatus, align 4, !tbaa !9
  br label %21

20:                                               ; preds = %14
  call void @Xil_Assert(ptr noundef @.str, i32 noundef 582)
  store i32 1, ptr @Xil_AssertStatus, align 4, !tbaa !9
  store i32 0, ptr %2, align 4
  store i32 1, ptr %7, align 4
  br label %608

21:                                               ; preds = %19
  %22 = load ptr, ptr %3, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.XSdPs, ptr %22, i32 0, i32 8
  store i8 1, ptr %23, align 1, !tbaa !16
  %24 = load ptr, ptr %3, align 8, !tbaa !5
  %25 = getelementptr inbounds %struct.XSdPs, ptr %24, i32 0, i32 5
  store i8 1, ptr %25, align 4, !tbaa !17
  %26 = load ptr, ptr %3, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.XSdPs, ptr %26, i32 0, i32 10
  store i8 0, ptr %27, align 4, !tbaa !18
  %28 = load ptr, ptr %3, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.XSdPs, ptr %28, i32 0, i32 9
  store i32 400000, ptr %29, align 8, !tbaa !19
  %30 = load ptr, ptr %3, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.XSdPs, ptr %30, i32 0, i32 7
  %32 = load i8, ptr %31, align 2, !tbaa !20
  %33 = zext i8 %32 to i32
  %34 = icmp eq i32 %33, 2
  br i1 %34, label %35, label %44

35:                                               ; preds = %21
  %36 = load ptr, ptr %3, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.XSdPs, ptr %36, i32 0, i32 2
  %38 = load i32, ptr %37, align 8, !tbaa !21
  %39 = and i32 %38, -1073741824
  %40 = icmp eq i32 %39, 1073741824
  br i1 %40, label %41, label %44

41:                                               ; preds = %35
  %42 = load ptr, ptr %3, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.XSdPs, ptr %42, i32 0, i32 5
  store i8 5, ptr %43, align 4, !tbaa !17
  br label %52

44:                                               ; preds = %35, %21
  %45 = load ptr, ptr %3, align 8, !tbaa !5
  %46 = call i32 @XSdPs_IdentifyCard(ptr noundef %45)
  store i32 %46, ptr %5, align 4, !tbaa !9
  %47 = load i32, ptr %5, align 4, !tbaa !9
  %48 = sext i32 %47 to i64
  %49 = icmp eq i64 %48, 1
  br i1 %49, label %50, label %51

50:                                               ; preds = %44
  br label %606

51:                                               ; preds = %44
  br label %52

52:                                               ; preds = %51, %41
  %53 = load ptr, ptr %3, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.XSdPs, ptr %53, i32 0, i32 5
  %55 = load i8, ptr %54, align 4, !tbaa !17
  %56 = zext i8 %55 to i32
  %57 = icmp ne i32 %56, 1
  br i1 %57, label %58, label %71

58:                                               ; preds = %52
  %59 = load ptr, ptr %3, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.XSdPs, ptr %59, i32 0, i32 5
  %61 = load i8, ptr %60, align 4, !tbaa !17
  %62 = zext i8 %61 to i32
  %63 = icmp ne i32 %62, 2
  br i1 %63, label %64, label %71

64:                                               ; preds = %58
  %65 = load ptr, ptr %3, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.XSdPs, ptr %65, i32 0, i32 5
  %67 = load i8, ptr %66, align 4, !tbaa !17
  %68 = zext i8 %67 to i32
  %69 = icmp ne i32 %68, 5
  br i1 %69, label %70, label %71

70:                                               ; preds = %64
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

71:                                               ; preds = %64, %58, %52
  %72 = load ptr, ptr %3, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.XSdPs, ptr %72, i32 0, i32 5
  %74 = load i8, ptr %73, align 4, !tbaa !17
  %75 = zext i8 %74 to i32
  %76 = icmp eq i32 %75, 1
  br i1 %76, label %77, label %107

77:                                               ; preds = %71
  %78 = load ptr, ptr %3, align 8, !tbaa !5
  %79 = call i32 @XSdPs_SdCardInitialize(ptr noundef %78)
  store i32 %79, ptr %5, align 4, !tbaa !9
  %80 = load i32, ptr %5, align 4, !tbaa !9
  %81 = sext i32 %80 to i64
  %82 = icmp ne i64 %81, 0
  br i1 %82, label %83, label %84

83:                                               ; preds = %77
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

84:                                               ; preds = %77
  %85 = load ptr, ptr %3, align 8, !tbaa !5
  %86 = getelementptr inbounds %struct.XSdPs, ptr %85, i32 0, i32 7
  %87 = load i8, ptr %86, align 2, !tbaa !20
  %88 = zext i8 %87 to i32
  %89 = icmp eq i32 %88, 2
  br i1 %89, label %90, label %93

90:                                               ; preds = %84
  %91 = load ptr, ptr %3, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.XSdPs, ptr %91, i32 0, i32 9
  store i32 19000000, ptr %92, align 8, !tbaa !19
  br label %96

93:                                               ; preds = %84
  %94 = load ptr, ptr %3, align 8, !tbaa !5
  %95 = getelementptr inbounds %struct.XSdPs, ptr %94, i32 0, i32 9
  store i32 25000000, ptr %95, align 8, !tbaa !19
  br label %96

96:                                               ; preds = %93, %90
  %97 = load ptr, ptr %3, align 8, !tbaa !5
  %98 = load ptr, ptr %3, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.XSdPs, ptr %98, i32 0, i32 9
  %100 = load i32, ptr %99, align 8, !tbaa !19
  %101 = call i32 @XSdPs_Change_ClkFreq(ptr noundef %97, i32 noundef %100)
  store i32 %101, ptr %5, align 4, !tbaa !9
  %102 = load i32, ptr %5, align 4, !tbaa !9
  %103 = sext i32 %102 to i64
  %104 = icmp ne i64 %103, 0
  br i1 %104, label %105, label %106

105:                                              ; preds = %96
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

106:                                              ; preds = %96
  br label %141

107:                                              ; preds = %71
  %108 = load ptr, ptr %3, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.XSdPs, ptr %108, i32 0, i32 5
  %110 = load i8, ptr %109, align 4, !tbaa !17
  %111 = zext i8 %110 to i32
  %112 = icmp eq i32 %111, 2
  br i1 %112, label %119, label %113

113:                                              ; preds = %107
  %114 = load ptr, ptr %3, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.XSdPs, ptr %114, i32 0, i32 5
  %116 = load i8, ptr %115, align 4, !tbaa !17
  %117 = zext i8 %116 to i32
  %118 = icmp eq i32 %117, 5
  br i1 %118, label %119, label %139

119:                                              ; preds = %113, %107
  %120 = load ptr, ptr %3, align 8, !tbaa !5
  %121 = call i32 @XSdPs_MmcCardInitialize(ptr noundef %120)
  store i32 %121, ptr %5, align 4, !tbaa !9
  %122 = load i32, ptr %5, align 4, !tbaa !9
  %123 = sext i32 %122 to i64
  %124 = icmp ne i64 %123, 0
  br i1 %124, label %125, label %126

125:                                              ; preds = %119
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

126:                                              ; preds = %119
  %127 = load ptr, ptr %3, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.XSdPs, ptr %127, i32 0, i32 9
  store i32 26000000, ptr %128, align 8, !tbaa !19
  %129 = load ptr, ptr %3, align 8, !tbaa !5
  %130 = load ptr, ptr %3, align 8, !tbaa !5
  %131 = getelementptr inbounds %struct.XSdPs, ptr %130, i32 0, i32 9
  %132 = load i32, ptr %131, align 8, !tbaa !19
  %133 = call i32 @XSdPs_Change_ClkFreq(ptr noundef %129, i32 noundef %132)
  store i32 %133, ptr %5, align 4, !tbaa !9
  %134 = load i32, ptr %5, align 4, !tbaa !9
  %135 = sext i32 %134 to i64
  %136 = icmp ne i64 %135, 0
  br i1 %136, label %137, label %138

137:                                              ; preds = %126
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

138:                                              ; preds = %126
  br label %140

139:                                              ; preds = %113
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

140:                                              ; preds = %138
  br label %141

141:                                              ; preds = %140, %106
  %142 = load ptr, ptr %3, align 8, !tbaa !5
  %143 = call i32 @XSdPs_Select_Card(ptr noundef %142)
  store i32 %143, ptr %5, align 4, !tbaa !9
  %144 = load i32, ptr %5, align 4, !tbaa !9
  %145 = sext i32 %144 to i64
  %146 = icmp ne i64 %145, 0
  br i1 %146, label %147, label %148

147:                                              ; preds = %141
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

148:                                              ; preds = %141
  %149 = load ptr, ptr %3, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.XSdPs, ptr %149, i32 0, i32 5
  %151 = load i8, ptr %150, align 4, !tbaa !17
  %152 = zext i8 %151 to i32
  %153 = icmp eq i32 %152, 1
  br i1 %153, label %154, label %327

154:                                              ; preds = %148
  %155 = load ptr, ptr %3, align 8, !tbaa !5
  %156 = call i32 @XSdPs_Pullup(ptr noundef %155)
  store i32 %156, ptr %5, align 4, !tbaa !9
  %157 = load i32, ptr %5, align 4, !tbaa !9
  %158 = sext i32 %157 to i64
  %159 = icmp ne i64 %158, 0
  br i1 %159, label %160, label %161

160:                                              ; preds = %154
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

161:                                              ; preds = %154
  %162 = load ptr, ptr %3, align 8, !tbaa !5
  %163 = call i32 @XSdPs_Get_BusWidth(ptr noundef %162, ptr noundef @XSdPs_CardInitialize.SCR)
  store i32 %163, ptr %5, align 4, !tbaa !9
  %164 = load i32, ptr %5, align 4, !tbaa !9
  %165 = sext i32 %164 to i64
  %166 = icmp ne i64 %165, 0
  br i1 %166, label %167, label %168

167:                                              ; preds = %161
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

168:                                              ; preds = %161
  %169 = load i8, ptr getelementptr inbounds ([8 x i8], ptr @XSdPs_CardInitialize.SCR, i64 0, i64 1), align 1, !tbaa !22
  %170 = zext i8 %169 to i32
  %171 = and i32 %170, 4
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %173, label %181

173:                                              ; preds = %168
  %174 = load ptr, ptr %3, align 8, !tbaa !5
  %175 = call i32 @XSdPs_Change_BusWidth(ptr noundef %174)
  store i32 %175, ptr %5, align 4, !tbaa !9
  %176 = load i32, ptr %5, align 4, !tbaa !9
  %177 = sext i32 %176 to i64
  %178 = icmp ne i64 %177, 0
  br i1 %178, label %179, label %180

179:                                              ; preds = %173
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

180:                                              ; preds = %173
  br label %181

181:                                              ; preds = %180, %168
  %182 = load ptr, ptr %3, align 8, !tbaa !5
  %183 = getelementptr inbounds [64 x i8], ptr %4, i64 0, i64 0
  %184 = call i32 @XSdPs_Get_BusSpeed(ptr noundef %182, ptr noundef %183)
  store i32 %184, ptr %5, align 4, !tbaa !9
  %185 = load i32, ptr %5, align 4, !tbaa !9
  %186 = sext i32 %185 to i64
  %187 = icmp ne i64 %186, 0
  br i1 %187, label %188, label %189

188:                                              ; preds = %181
  br label %606

189:                                              ; preds = %181
  %190 = load i8, ptr getelementptr inbounds ([8 x i8], ptr @XSdPs_CardInitialize.SCR, i64 0, i64 2), align 2, !tbaa !22
  %191 = zext i8 %190 to i32
  %192 = and i32 %191, 128
  %193 = icmp ne i32 %192, 0
  br i1 %193, label %194, label %299

194:                                              ; preds = %189
  %195 = getelementptr inbounds [64 x i8], ptr %4, i64 0, i64 13
  %196 = load i8, ptr %195, align 1, !tbaa !22
  %197 = zext i8 %196 to i32
  %198 = icmp uge i32 %197, 4
  br i1 %198, label %199, label %299

199:                                              ; preds = %194
  %200 = load ptr, ptr %3, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.XSdPs, ptr %200, i32 0, i32 0
  %202 = getelementptr inbounds %struct.XSdPs_Config, ptr %201, i32 0, i32 5
  %203 = load i32, ptr %202, align 4, !tbaa !23
  %204 = icmp eq i32 %203, 8
  br i1 %204, label %205, label %299

205:                                              ; preds = %199
  %206 = load ptr, ptr %3, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.XSdPs, ptr %206, i32 0, i32 10
  %208 = load i8, ptr %207, align 4, !tbaa !18
  %209 = zext i8 %208 to i32
  %210 = icmp eq i32 %209, 0
  br i1 %210, label %211, label %299

211:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 2, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 2, ptr %9) #5
  %212 = load ptr, ptr %3, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.XSdPs, ptr %212, i32 0, i32 0
  %214 = getelementptr inbounds %struct.XSdPs_Config, ptr %213, i32 0, i32 1
  %215 = load i32, ptr %214, align 4, !tbaa !24
  %216 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %215, i8 noundef zeroext 44)
  store i16 %216, ptr %8, align 2, !tbaa !25
  %217 = load i16, ptr %8, align 2, !tbaa !25
  %218 = zext i16 %217 to i32
  %219 = and i32 %218, -6
  %220 = trunc i32 %219 to i16
  store i16 %220, ptr %8, align 2, !tbaa !25
  %221 = load ptr, ptr %3, align 8, !tbaa !5
  %222 = getelementptr inbounds %struct.XSdPs, ptr %221, i32 0, i32 0
  %223 = getelementptr inbounds %struct.XSdPs_Config, ptr %222, i32 0, i32 1
  %224 = load i32, ptr %223, align 4, !tbaa !24
  %225 = load i16, ptr %8, align 2, !tbaa !25
  call void @XSdPs_WriteReg16(i32 noundef %224, i8 noundef zeroext 44, i16 noundef zeroext %225)
  %226 = load ptr, ptr %3, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.XSdPs, ptr %226, i32 0, i32 0
  %228 = getelementptr inbounds %struct.XSdPs_Config, ptr %227, i32 0, i32 1
  %229 = load i32, ptr %228, align 4, !tbaa !24
  %230 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %229, i8 noundef zeroext 62)
  store i16 %230, ptr %8, align 2, !tbaa !25
  %231 = load i16, ptr %8, align 2, !tbaa !25
  %232 = zext i16 %231 to i32
  %233 = or i32 %232, 8
  %234 = trunc i32 %233 to i16
  store i16 %234, ptr %8, align 2, !tbaa !25
  %235 = load ptr, ptr %3, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.XSdPs, ptr %235, i32 0, i32 0
  %237 = getelementptr inbounds %struct.XSdPs_Config, ptr %236, i32 0, i32 1
  %238 = load i32, ptr %237, align 4, !tbaa !24
  %239 = load i16, ptr %8, align 2, !tbaa !25
  call void @XSdPs_WriteReg16(i32 noundef %238, i8 noundef zeroext 62, i16 noundef zeroext %239)
  call void @usleep(i64 noundef 5000)
  %240 = load ptr, ptr %3, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.XSdPs, ptr %240, i32 0, i32 0
  %242 = getelementptr inbounds %struct.XSdPs_Config, ptr %241, i32 0, i32 1
  %243 = load i32, ptr %242, align 4, !tbaa !24
  %244 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %243, i8 noundef zeroext 62)
  store i16 %244, ptr %8, align 2, !tbaa !25
  %245 = load i16, ptr %8, align 2, !tbaa !25
  %246 = zext i16 %245 to i32
  %247 = and i32 %246, 8
  %248 = icmp eq i32 %247, 0
  br i1 %248, label %249, label %250

249:                                              ; preds = %211
  store i32 1, ptr %5, align 4, !tbaa !9
  store i32 2, ptr %7, align 4
  br label %296

250:                                              ; preds = %211
  %251 = load ptr, ptr %3, align 8, !tbaa !5
  %252 = getelementptr inbounds %struct.XSdPs, ptr %251, i32 0, i32 0
  %253 = getelementptr inbounds %struct.XSdPs_Config, ptr %252, i32 0, i32 1
  %254 = load i32, ptr %253, align 4, !tbaa !24
  %255 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %254, i8 noundef zeroext 44)
  store i16 %255, ptr %9, align 2, !tbaa !25
  %256 = load ptr, ptr %3, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.XSdPs, ptr %256, i32 0, i32 0
  %258 = getelementptr inbounds %struct.XSdPs_Config, ptr %257, i32 0, i32 1
  %259 = load i32, ptr %258, align 4, !tbaa !24
  %260 = load i16, ptr %9, align 2, !tbaa !25
  %261 = zext i16 %260 to i32
  %262 = or i32 %261, 1
  %263 = trunc i32 %262 to i16
  call void @XSdPs_WriteReg16(i32 noundef %259, i8 noundef zeroext 44, i16 noundef zeroext %263)
  %264 = load ptr, ptr %3, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.XSdPs, ptr %264, i32 0, i32 0
  %266 = getelementptr inbounds %struct.XSdPs_Config, ptr %265, i32 0, i32 1
  %267 = load i32, ptr %266, align 4, !tbaa !24
  %268 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %267, i8 noundef zeroext 44)
  store i16 %268, ptr %9, align 2, !tbaa !25
  br label %269

269:                                              ; preds = %274, %250
  %270 = load i16, ptr %9, align 2, !tbaa !25
  %271 = zext i16 %270 to i32
  %272 = and i32 %271, 2
  %273 = icmp eq i32 %272, 0
  br i1 %273, label %274, label %280

274:                                              ; preds = %269
  %275 = load ptr, ptr %3, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct.XSdPs, ptr %275, i32 0, i32 0
  %277 = getelementptr inbounds %struct.XSdPs_Config, ptr %276, i32 0, i32 1
  %278 = load i32, ptr %277, align 4, !tbaa !24
  %279 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %278, i8 noundef zeroext 44)
  store i16 %279, ptr %9, align 2, !tbaa !25
  br label %269, !llvm.loop !26

280:                                              ; preds = %269
  %281 = load ptr, ptr %3, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.XSdPs, ptr %281, i32 0, i32 0
  %283 = getelementptr inbounds %struct.XSdPs_Config, ptr %282, i32 0, i32 1
  %284 = load i32, ptr %283, align 4, !tbaa !24
  %285 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %284, i8 noundef zeroext 44)
  store i16 %285, ptr %9, align 2, !tbaa !25
  %286 = load ptr, ptr %3, align 8, !tbaa !5
  %287 = getelementptr inbounds %struct.XSdPs, ptr %286, i32 0, i32 0
  %288 = getelementptr inbounds %struct.XSdPs_Config, ptr %287, i32 0, i32 1
  %289 = load i32, ptr %288, align 4, !tbaa !24
  %290 = load i16, ptr %9, align 2, !tbaa !25
  %291 = zext i16 %290 to i32
  %292 = or i32 %291, 4
  %293 = trunc i32 %292 to i16
  call void @XSdPs_WriteReg16(i32 noundef %289, i8 noundef zeroext 44, i16 noundef zeroext %293)
  call void @usleep(i64 noundef 1000)
  %294 = load ptr, ptr %3, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.XSdPs, ptr %294, i32 0, i32 10
  store i8 1, ptr %295, align 4, !tbaa !18
  store i32 0, ptr %7, align 4
  br label %296

296:                                              ; preds = %280, %249
  call void @llvm.lifetime.end.p0(i64 2, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %8) #5
  %297 = load i32, ptr %7, align 4
  switch i32 %297, label %608 [
    i32 0, label %298
    i32 2, label %606
  ]

298:                                              ; preds = %296
  br label %299

299:                                              ; preds = %298, %205, %199, %194, %189
  %300 = load i8, ptr @XSdPs_CardInitialize.SCR, align 32, !tbaa !22
  %301 = zext i8 %300 to i32
  %302 = icmp ne i32 %301, 0
  br i1 %302, label %303, label %326

303:                                              ; preds = %299
  %304 = getelementptr inbounds [64 x i8], ptr %4, i64 0, i64 13
  %305 = load i8, ptr %304, align 1, !tbaa !22
  %306 = zext i8 %305 to i32
  %307 = and i32 %306, 2
  %308 = icmp ne i32 %307, 0
  br i1 %308, label %309, label %325

309:                                              ; preds = %303
  %310 = load ptr, ptr %3, align 8, !tbaa !5
  %311 = getelementptr inbounds %struct.XSdPs, ptr %310, i32 0, i32 8
  %312 = load i8, ptr %311, align 1, !tbaa !16
  %313 = zext i8 %312 to i32
  %314 = icmp uge i32 %313, 2
  br i1 %314, label %315, label %325

315:                                              ; preds = %309
  %316 = load ptr, ptr %3, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.XSdPs, ptr %316, i32 0, i32 16
  store i32 5, ptr %317, align 4, !tbaa !28
  %318 = load ptr, ptr %3, align 8, !tbaa !5
  %319 = call i32 @XSdPs_Change_BusSpeed(ptr noundef %318)
  store i32 %319, ptr %5, align 4, !tbaa !9
  %320 = load i32, ptr %5, align 4, !tbaa !9
  %321 = sext i32 %320 to i64
  %322 = icmp ne i64 %321, 0
  br i1 %322, label %323, label %324

323:                                              ; preds = %315
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

324:                                              ; preds = %315
  br label %325

325:                                              ; preds = %324, %309, %303
  br label %326

326:                                              ; preds = %325, %299
  br label %586

327:                                              ; preds = %148
  %328 = load ptr, ptr %3, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.XSdPs, ptr %328, i32 0, i32 5
  %330 = load i8, ptr %329, align 4, !tbaa !17
  %331 = zext i8 %330 to i32
  %332 = icmp eq i32 %331, 2
  br i1 %332, label %333, label %418

333:                                              ; preds = %327
  %334 = load ptr, ptr %3, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.XSdPs, ptr %334, i32 0, i32 6
  %336 = load i8, ptr %335, align 1, !tbaa !29
  %337 = zext i8 %336 to i32
  %338 = icmp ugt i32 %337, 3
  br i1 %338, label %339, label %418

339:                                              ; preds = %333
  %340 = load ptr, ptr %3, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.XSdPs, ptr %340, i32 0, i32 7
  %342 = load i8, ptr %341, align 2, !tbaa !20
  %343 = zext i8 %342 to i32
  %344 = icmp eq i32 %343, 1
  br i1 %344, label %345, label %418

345:                                              ; preds = %339
  %346 = load ptr, ptr %3, align 8, !tbaa !5
  %347 = call i32 @XSdPs_Change_BusWidth(ptr noundef %346)
  store i32 %347, ptr %5, align 4, !tbaa !9
  %348 = load i32, ptr %5, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = icmp ne i64 %349, 0
  br i1 %350, label %351, label %352

351:                                              ; preds = %345
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

352:                                              ; preds = %345
  %353 = load ptr, ptr %3, align 8, !tbaa !5
  %354 = call i32 @XSdPs_Get_Mmc_ExtCsd(ptr noundef %353, ptr noundef @XSdPs_CardInitialize.ExtCsd)
  store i32 %354, ptr %5, align 4, !tbaa !9
  %355 = load i32, ptr %5, align 4, !tbaa !9
  %356 = sext i32 %355 to i64
  %357 = icmp ne i64 %356, 0
  br i1 %357, label %358, label %359

358:                                              ; preds = %352
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

359:                                              ; preds = %352
  %360 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 215), align 1, !tbaa !22
  %361 = zext i8 %360 to i32
  %362 = shl i32 %361, 24
  %363 = load ptr, ptr %3, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.XSdPs, ptr %363, i32 0, i32 14
  store i32 %362, ptr %364, align 4, !tbaa !30
  %365 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 214), align 2, !tbaa !22
  %366 = zext i8 %365 to i32
  %367 = shl i32 %366, 16
  %368 = load ptr, ptr %3, align 8, !tbaa !5
  %369 = getelementptr inbounds %struct.XSdPs, ptr %368, i32 0, i32 14
  %370 = load i32, ptr %369, align 4, !tbaa !30
  %371 = or i32 %370, %367
  store i32 %371, ptr %369, align 4, !tbaa !30
  %372 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 213), align 1, !tbaa !22
  %373 = zext i8 %372 to i32
  %374 = shl i32 %373, 8
  %375 = load ptr, ptr %3, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.XSdPs, ptr %375, i32 0, i32 14
  %377 = load i32, ptr %376, align 4, !tbaa !30
  %378 = or i32 %377, %374
  store i32 %378, ptr %376, align 4, !tbaa !30
  %379 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 212), align 4, !tbaa !22
  %380 = zext i8 %379 to i32
  %381 = load ptr, ptr %3, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.XSdPs, ptr %381, i32 0, i32 14
  %383 = load i32, ptr %382, align 4, !tbaa !30
  %384 = or i32 %383, %380
  store i32 %384, ptr %382, align 4, !tbaa !30
  %385 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 196), align 4, !tbaa !22
  %386 = zext i8 %385 to i32
  %387 = and i32 %386, 2
  %388 = icmp ne i32 %387, 0
  br i1 %388, label %389, label %417

389:                                              ; preds = %359
  %390 = load ptr, ptr %3, align 8, !tbaa !5
  %391 = getelementptr inbounds %struct.XSdPs, ptr %390, i32 0, i32 8
  %392 = load i8, ptr %391, align 1, !tbaa !16
  %393 = zext i8 %392 to i32
  %394 = icmp uge i32 %393, 2
  br i1 %394, label %395, label %417

395:                                              ; preds = %389
  %396 = load ptr, ptr %3, align 8, !tbaa !5
  %397 = getelementptr inbounds %struct.XSdPs, ptr %396, i32 0, i32 16
  store i32 5, ptr %397, align 4, !tbaa !28
  %398 = load ptr, ptr %3, align 8, !tbaa !5
  %399 = call i32 @XSdPs_Change_BusSpeed(ptr noundef %398)
  store i32 %399, ptr %5, align 4, !tbaa !9
  %400 = load i32, ptr %5, align 4, !tbaa !9
  %401 = sext i32 %400 to i64
  %402 = icmp ne i64 %401, 0
  br i1 %402, label %403, label %404

403:                                              ; preds = %395
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

404:                                              ; preds = %395
  %405 = load ptr, ptr %3, align 8, !tbaa !5
  %406 = call i32 @XSdPs_Get_Mmc_ExtCsd(ptr noundef %405, ptr noundef @XSdPs_CardInitialize.ExtCsd)
  store i32 %406, ptr %5, align 4, !tbaa !9
  %407 = load i32, ptr %5, align 4, !tbaa !9
  %408 = sext i32 %407 to i64
  %409 = icmp ne i64 %408, 0
  br i1 %409, label %410, label %411

410:                                              ; preds = %404
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

411:                                              ; preds = %404
  %412 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 185), align 1, !tbaa !22
  %413 = zext i8 %412 to i32
  %414 = icmp ne i32 %413, 1
  br i1 %414, label %415, label %416

415:                                              ; preds = %411
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

416:                                              ; preds = %411
  br label %417

417:                                              ; preds = %416, %389, %359
  br label %585

418:                                              ; preds = %339, %333, %327
  %419 = load ptr, ptr %3, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.XSdPs, ptr %419, i32 0, i32 5
  %421 = load i8, ptr %420, align 4, !tbaa !17
  %422 = zext i8 %421 to i32
  %423 = icmp eq i32 %422, 5
  br i1 %423, label %424, label %584

424:                                              ; preds = %418
  %425 = load ptr, ptr %3, align 8, !tbaa !5
  %426 = call i32 @XSdPs_Change_BusWidth(ptr noundef %425)
  store i32 %426, ptr %5, align 4, !tbaa !9
  %427 = load i32, ptr %5, align 4, !tbaa !9
  %428 = sext i32 %427 to i64
  %429 = icmp ne i64 %428, 0
  br i1 %429, label %430, label %431

430:                                              ; preds = %424
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

431:                                              ; preds = %424
  %432 = load ptr, ptr %3, align 8, !tbaa !5
  %433 = call i32 @XSdPs_Get_Mmc_ExtCsd(ptr noundef %432, ptr noundef @XSdPs_CardInitialize.ExtCsd)
  store i32 %433, ptr %5, align 4, !tbaa !9
  %434 = load i32, ptr %5, align 4, !tbaa !9
  %435 = sext i32 %434 to i64
  %436 = icmp ne i64 %435, 0
  br i1 %436, label %437, label %438

437:                                              ; preds = %431
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

438:                                              ; preds = %431
  %439 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 215), align 1, !tbaa !22
  %440 = zext i8 %439 to i32
  %441 = shl i32 %440, 24
  %442 = load ptr, ptr %3, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.XSdPs, ptr %442, i32 0, i32 14
  store i32 %441, ptr %443, align 4, !tbaa !30
  %444 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 214), align 2, !tbaa !22
  %445 = zext i8 %444 to i32
  %446 = shl i32 %445, 16
  %447 = load ptr, ptr %3, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.XSdPs, ptr %447, i32 0, i32 14
  %449 = load i32, ptr %448, align 4, !tbaa !30
  %450 = or i32 %449, %446
  store i32 %450, ptr %448, align 4, !tbaa !30
  %451 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 213), align 1, !tbaa !22
  %452 = zext i8 %451 to i32
  %453 = shl i32 %452, 8
  %454 = load ptr, ptr %3, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.XSdPs, ptr %454, i32 0, i32 14
  %456 = load i32, ptr %455, align 4, !tbaa !30
  %457 = or i32 %456, %453
  store i32 %457, ptr %455, align 4, !tbaa !30
  %458 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 212), align 4, !tbaa !22
  %459 = zext i8 %458 to i32
  %460 = load ptr, ptr %3, align 8, !tbaa !5
  %461 = getelementptr inbounds %struct.XSdPs, ptr %460, i32 0, i32 14
  %462 = load i32, ptr %461, align 4, !tbaa !30
  %463 = or i32 %462, %459
  store i32 %463, ptr %461, align 4, !tbaa !30
  %464 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 196), align 4, !tbaa !22
  %465 = zext i8 %464 to i32
  %466 = and i32 %465, 48
  %467 = icmp ne i32 %466, 0
  br i1 %467, label %468, label %477

468:                                              ; preds = %438
  %469 = load ptr, ptr %3, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.XSdPs, ptr %469, i32 0, i32 8
  %471 = load i8, ptr %470, align 1, !tbaa !16
  %472 = zext i8 %471 to i32
  %473 = icmp uge i32 %472, 2
  br i1 %473, label %474, label %477

474:                                              ; preds = %468
  %475 = load ptr, ptr %3, align 8, !tbaa !5
  %476 = getelementptr inbounds %struct.XSdPs, ptr %475, i32 0, i32 16
  store i32 7, ptr %476, align 4, !tbaa !28
  br label %510

477:                                              ; preds = %468, %438
  %478 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 196), align 4, !tbaa !22
  %479 = zext i8 %478 to i32
  %480 = and i32 %479, 12
  %481 = icmp ne i32 %480, 0
  br i1 %481, label %482, label %491

482:                                              ; preds = %477
  %483 = load ptr, ptr %3, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.XSdPs, ptr %483, i32 0, i32 8
  %485 = load i8, ptr %484, align 1, !tbaa !16
  %486 = zext i8 %485 to i32
  %487 = icmp uge i32 %486, 2
  br i1 %487, label %488, label %491

488:                                              ; preds = %482
  %489 = load ptr, ptr %3, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.XSdPs, ptr %489, i32 0, i32 16
  store i32 4, ptr %490, align 4, !tbaa !28
  br label %509

491:                                              ; preds = %482, %477
  %492 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 196), align 4, !tbaa !22
  %493 = zext i8 %492 to i32
  %494 = and i32 %493, 2
  %495 = icmp ne i32 %494, 0
  br i1 %495, label %496, label %505

496:                                              ; preds = %491
  %497 = load ptr, ptr %3, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.XSdPs, ptr %497, i32 0, i32 8
  %499 = load i8, ptr %498, align 1, !tbaa !16
  %500 = zext i8 %499 to i32
  %501 = icmp uge i32 %500, 2
  br i1 %501, label %502, label %505

502:                                              ; preds = %496
  %503 = load ptr, ptr %3, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.XSdPs, ptr %503, i32 0, i32 16
  store i32 5, ptr %504, align 4, !tbaa !28
  br label %508

505:                                              ; preds = %496, %491
  %506 = load ptr, ptr %3, align 8, !tbaa !5
  %507 = getelementptr inbounds %struct.XSdPs, ptr %506, i32 0, i32 16
  store i32 6, ptr %507, align 4, !tbaa !28
  br label %508

508:                                              ; preds = %505, %502
  br label %509

509:                                              ; preds = %508, %488
  br label %510

510:                                              ; preds = %509, %474
  %511 = load ptr, ptr %3, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.XSdPs, ptr %511, i32 0, i32 16
  %513 = load i32, ptr %512, align 4, !tbaa !28
  %514 = icmp ne i32 %513, 6
  br i1 %514, label %515, label %570

515:                                              ; preds = %510
  %516 = load ptr, ptr %3, align 8, !tbaa !5
  %517 = call i32 @XSdPs_Change_BusSpeed(ptr noundef %516)
  store i32 %517, ptr %5, align 4, !tbaa !9
  %518 = load i32, ptr %5, align 4, !tbaa !9
  %519 = sext i32 %518 to i64
  %520 = icmp ne i64 %519, 0
  br i1 %520, label %521, label %522

521:                                              ; preds = %515
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

522:                                              ; preds = %515
  %523 = load ptr, ptr %3, align 8, !tbaa !5
  %524 = call i32 @XSdPs_Get_Mmc_ExtCsd(ptr noundef %523, ptr noundef @XSdPs_CardInitialize.ExtCsd)
  store i32 %524, ptr %5, align 4, !tbaa !9
  %525 = load i32, ptr %5, align 4, !tbaa !9
  %526 = sext i32 %525 to i64
  %527 = icmp ne i64 %526, 0
  br i1 %527, label %528, label %529

528:                                              ; preds = %522
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

529:                                              ; preds = %522
  %530 = load ptr, ptr %3, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.XSdPs, ptr %530, i32 0, i32 16
  %532 = load i32, ptr %531, align 4, !tbaa !28
  %533 = icmp eq i32 %532, 7
  br i1 %533, label %534, label %540

534:                                              ; preds = %529
  %535 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 185), align 1, !tbaa !22
  %536 = zext i8 %535 to i32
  %537 = icmp ne i32 %536, 2
  br i1 %537, label %538, label %539

538:                                              ; preds = %534
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

539:                                              ; preds = %534
  br label %540

540:                                              ; preds = %539, %529
  %541 = load ptr, ptr %3, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.XSdPs, ptr %541, i32 0, i32 16
  %543 = load i32, ptr %542, align 4, !tbaa !28
  %544 = icmp eq i32 %543, 5
  br i1 %544, label %550, label %545

545:                                              ; preds = %540
  %546 = load ptr, ptr %3, align 8, !tbaa !5
  %547 = getelementptr inbounds %struct.XSdPs, ptr %546, i32 0, i32 16
  %548 = load i32, ptr %547, align 4, !tbaa !28
  %549 = icmp eq i32 %548, 4
  br i1 %549, label %550, label %569

550:                                              ; preds = %545, %540
  %551 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 185), align 1, !tbaa !22
  %552 = zext i8 %551 to i32
  %553 = icmp ne i32 %552, 1
  br i1 %553, label %554, label %555

554:                                              ; preds = %550
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

555:                                              ; preds = %550
  %556 = load ptr, ptr %3, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.XSdPs, ptr %556, i32 0, i32 16
  %558 = load i32, ptr %557, align 4, !tbaa !28
  %559 = icmp eq i32 %558, 4
  br i1 %559, label %560, label %568

560:                                              ; preds = %555
  %561 = load ptr, ptr %3, align 8, !tbaa !5
  %562 = call i32 @XSdPs_Change_BusWidth(ptr noundef %561)
  store i32 %562, ptr %5, align 4, !tbaa !9
  %563 = load i32, ptr %5, align 4, !tbaa !9
  %564 = sext i32 %563 to i64
  %565 = icmp ne i64 %564, 0
  br i1 %565, label %566, label %567

566:                                              ; preds = %560
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

567:                                              ; preds = %560
  br label %568

568:                                              ; preds = %567, %555
  br label %569

569:                                              ; preds = %568, %545
  br label %570

570:                                              ; preds = %569, %510
  %571 = load i8, ptr getelementptr inbounds ([512 x i8], ptr @XSdPs_CardInitialize.ExtCsd, i64 0, i64 162), align 2, !tbaa !22
  %572 = zext i8 %571 to i32
  %573 = icmp eq i32 %572, 0
  br i1 %573, label %574, label %583

574:                                              ; preds = %570
  store i32 60948736, ptr %6, align 4, !tbaa !9
  %575 = load ptr, ptr %3, align 8, !tbaa !5
  %576 = load i32, ptr %6, align 4, !tbaa !9
  %577 = call i32 @XSdPs_Set_Mmc_ExtCsd(ptr noundef %575, i32 noundef %576)
  store i32 %577, ptr %5, align 4, !tbaa !9
  %578 = load i32, ptr %5, align 4, !tbaa !9
  %579 = sext i32 %578 to i64
  %580 = icmp ne i64 %579, 0
  br i1 %580, label %581, label %582

581:                                              ; preds = %574
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

582:                                              ; preds = %574
  br label %583

583:                                              ; preds = %582, %570
  br label %584

584:                                              ; preds = %583, %418
  br label %585

585:                                              ; preds = %584, %417
  br label %586

586:                                              ; preds = %585, %326
  %587 = load ptr, ptr %3, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.XSdPs, ptr %587, i32 0, i32 16
  %589 = load i32, ptr %588, align 4, !tbaa !28
  %590 = icmp ne i32 %589, 4
  br i1 %590, label %597, label %591

591:                                              ; preds = %586
  %592 = load ptr, ptr %3, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.XSdPs, ptr %592, i32 0, i32 5
  %594 = load i8, ptr %593, align 4, !tbaa !17
  %595 = zext i8 %594 to i32
  %596 = icmp eq i32 %595, 1
  br i1 %596, label %597, label %605

597:                                              ; preds = %591, %586
  %598 = load ptr, ptr %3, align 8, !tbaa !5
  %599 = call i32 @XSdPs_SetBlkSize(ptr noundef %598, i16 noundef zeroext 512)
  store i32 %599, ptr %5, align 4, !tbaa !9
  %600 = load i32, ptr %5, align 4, !tbaa !9
  %601 = sext i32 %600 to i64
  %602 = icmp ne i64 %601, 0
  br i1 %602, label %603, label %604

603:                                              ; preds = %597
  store i32 1, ptr %5, align 4, !tbaa !9
  br label %606

604:                                              ; preds = %597
  br label %605

605:                                              ; preds = %604, %591
  br label %606

606:                                              ; preds = %605, %603, %581, %566, %554, %538, %528, %521, %437, %430, %415, %410, %403, %358, %351, %323, %296, %188, %179, %167, %160, %147, %139, %137, %125, %105, %83, %70, %50
  %607 = load i32, ptr %5, align 4, !tbaa !9
  store i32 %607, ptr %2, align 4
  store i32 1, ptr %7, align 4
  br label %608

608:                                              ; preds = %606, %296, %20, %13
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %4) #5
  %609 = load i32, ptr %2, align 4
  ret i32 %609
}

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

; Function Attrs: nounwind uwtable
declare hidden i32 @XSdPs_IdentifyCard(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local i32 @XSdPs_MmcCardInitialize(ptr noundef) #3

; Function Attrs: nounwind uwtable
declare dso_local i32 @XSdPs_Select_Card(ptr noundef) #3

declare i32 @XSdPs_Pullup(ptr noundef) #1

declare i32 @XSdPs_Get_BusWidth(ptr noundef, ptr noundef) #1

declare i32 @XSdPs_Change_BusWidth(ptr noundef) #1

declare i32 @XSdPs_Get_BusSpeed(ptr noundef, ptr noundef) #1

declare i32 @XSdPs_Change_BusSpeed(ptr noundef) #1

declare i32 @XSdPs_Get_Mmc_ExtCsd(ptr noundef, ptr noundef) #1

declare i32 @XSdPs_Set_Mmc_ExtCsd(ptr noundef, i32 noundef) #1

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { 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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 36}
!12 = !{!"", !13, i64 0, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !7, i64 52, !7, i64 53, !7, i64 54, !7, i64 55, !10, i64 56, !7, i64 60, !7, i64 64, !10, i64 80, !7, i64 84, !10, i64 100, !10, i64 104, !10, i64 108, !6, i64 112, !7, i64 128, !15, i64 512}
!13 = !{!"", !14, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !7, i64 32}
!14 = !{!"short", !7, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!12, !7, i64 55}
!17 = !{!12, !7, i64 52}
!18 = !{!12, !7, i64 60}
!19 = !{!12, !10, i64 56}
!20 = !{!12, !7, i64 54}
!21 = !{!12, !10, i64 40}
!22 = !{!7, !7, i64 0}
!23 = !{!12, !10, i64 20}
!24 = !{!12, !10, i64 4}
!25 = !{!14, !14, i64 0}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!12, !10, i64 108}
!29 = !{!12, !7, i64 53}
!30 = !{!12, !10, i64 100}


; 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 [159 x i8], align 1
@XSdPs_CardInitialize.ExtCsd = external hidden global [512 x i8], align 32
@XSdPs_CardInitialize.SCR = external hidden global [8 x i8], align 32

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

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

; Function Attrs: inlinehint nounwind uwtable
declare hidden zeroext i16 @XSdPs_ReadReg16(i32 noundef, i8 noundef zeroext) local_unnamed_addr #2

declare void @usleep(i64 noundef) local_unnamed_addr #1

declare i32 @XSdPs_Change_ClkFreq(ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @XSdPs_WriteReg16(i32 noundef, i8 noundef zeroext, i16 noundef zeroext) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @XSdPs_SdCardInitialize(ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
define dso_local i32 @XSdPs_CardInitialize(ptr noundef %0) local_unnamed_addr #3 {
  %2 = alloca [64 x i8], align 16
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %2) #5
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(64) %2, i8 0, i64 64, i1 false)
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %7, label %3

3:                                                ; preds = %1
  store i32 0, ptr @Xil_AssertStatus, align 4, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %0, i64 36
  %5 = load i32, ptr %4, align 4, !tbaa !9
  %6 = icmp eq i32 %5, 286331153
  br i1 %6, label %8, label %16

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

8:                                                ; preds = %3
  %9 = getelementptr inbounds i8, ptr %0, i64 55
  store i8 1, ptr %9, align 1, !tbaa !15
  %10 = getelementptr inbounds i8, ptr %0, i64 52
  store i8 1, ptr %10, align 4, !tbaa !16
  %11 = getelementptr inbounds i8, ptr %0, i64 60
  store i8 0, ptr %11, align 4, !tbaa !17
  %12 = getelementptr inbounds i8, ptr %0, i64 56
  store i32 400000, ptr %12, align 8, !tbaa !18
  %13 = getelementptr inbounds i8, ptr %0, i64 54
  %14 = load i8, ptr %13, align 2, !tbaa !19
  %15 = icmp eq i8 %14, 2
  br i1 %15, label %17, label %22

16:                                               ; preds = %3
  tail call void @Xil_Assert(ptr noundef nonnull @.str, i32 noundef 582) #5
  store i32 1, ptr @Xil_AssertStatus, align 4, !tbaa !5
  br label %211

17:                                               ; preds = %8
  %18 = getelementptr inbounds i8, ptr %0, i64 40
  %19 = load i32, ptr %18, align 8, !tbaa !20
  %20 = and i32 %19, -1073741824
  %21 = icmp eq i32 %20, 1073741824
  br i1 %21, label %.thread173, label %22

.thread173:                                       ; preds = %17
  store i8 5, ptr %10, align 4, !tbaa !16
  br label %32

22:                                               ; preds = %17, %8
  %23 = tail call i32 @XSdPs_IdentifyCard(ptr noundef nonnull %0)
  %24 = icmp eq i32 %23, 1
  br i1 %24, label %211, label %25

25:                                               ; preds = %22
  %.pr = load i8, ptr %10, align 4, !tbaa !16
  switch i8 %.pr, label %211 [
    i8 1, label %26
    i8 2, label %32
    i8 5, label %32
  ]

26:                                               ; preds = %25
  %27 = tail call i32 @XSdPs_SdCardInitialize(ptr noundef nonnull %0)
  %.not140 = icmp eq i32 %27, 0
  br i1 %.not140, label %28, label %211

28:                                               ; preds = %26
  %29 = load i8, ptr %13, align 2, !tbaa !19
  %30 = icmp eq i8 %29, 2
  %. = select i1 %30, i32 19000000, i32 25000000
  store i32 %., ptr %12, align 8, !tbaa !18
  %31 = tail call i32 @XSdPs_Change_ClkFreq(ptr noundef nonnull %0, i32 noundef %.) #5
  %.not141 = icmp eq i32 %31, 0
  br i1 %.not141, label %36, label %211

32:                                               ; preds = %25, %25, %.thread173
  %33 = tail call i32 @XSdPs_MmcCardInitialize(ptr noundef nonnull %0)
  %.not138 = icmp eq i32 %33, 0
  br i1 %.not138, label %34, label %211

34:                                               ; preds = %32
  store i32 26000000, ptr %12, align 8, !tbaa !18
  %35 = tail call i32 @XSdPs_Change_ClkFreq(ptr noundef nonnull %0, i32 noundef 26000000) #5
  %.not139 = icmp eq i32 %35, 0
  br i1 %.not139, label %36, label %211

36:                                               ; preds = %34, %28
  %37 = tail call i32 @XSdPs_Select_Card(ptr noundef nonnull %0)
  %.not142 = icmp eq i32 %37, 0
  br i1 %.not142, label %38, label %211

38:                                               ; preds = %36
  %39 = load i8, ptr %10, align 4, !tbaa !16
  switch i8 %39, label %.thread178 [
    i8 1, label %40
    i8 2, label %106
    i8 5, label %144
  ]

40:                                               ; preds = %38
  %41 = tail call i32 @XSdPs_Pullup(ptr noundef nonnull %0) #5
  %.not160 = icmp eq i32 %41, 0
  br i1 %.not160, label %42, label %211

42:                                               ; preds = %40
  %43 = tail call i32 @XSdPs_Get_BusWidth(ptr noundef nonnull %0, ptr noundef nonnull @XSdPs_CardInitialize.SCR) #5
  %.not161 = icmp eq i32 %43, 0
  br i1 %.not161, label %44, label %211

44:                                               ; preds = %42
  %45 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.SCR, i64 1), align 1, !tbaa !21
  %46 = and i8 %45, 4
  %.not162 = icmp eq i8 %46, 0
  br i1 %.not162, label %49, label %47

47:                                               ; preds = %44
  %48 = tail call i32 @XSdPs_Change_BusWidth(ptr noundef nonnull %0) #5
  %.not163 = icmp eq i32 %48, 0
  br i1 %.not163, label %49, label %211

49:                                               ; preds = %47, %44
  %50 = call i32 @XSdPs_Get_BusSpeed(ptr noundef nonnull %0, ptr noundef nonnull %2) #5
  %.not164 = icmp eq i32 %50, 0
  br i1 %.not164, label %51, label %211

51:                                               ; preds = %49
  %52 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.SCR, i64 2), align 2, !tbaa !21
  %53 = icmp slt i8 %52, 0
  %54 = getelementptr inbounds i8, ptr %2, i64 13
  %55 = load i8, ptr %54, align 1
  %56 = icmp ugt i8 %55, 3
  %or.cond = select i1 %53, i1 %56, i1 false
  br i1 %or.cond, label %57, label %95

57:                                               ; preds = %51
  %58 = getelementptr inbounds i8, ptr %0, i64 20
  %59 = load i32, ptr %58, align 4, !tbaa !22
  %60 = icmp eq i32 %59, 8
  br i1 %60, label %61, label %95

61:                                               ; preds = %57
  %62 = load i8, ptr %11, align 4, !tbaa !17
  %63 = icmp eq i8 %62, 0
  br i1 %63, label %64, label %95

64:                                               ; preds = %61
  %65 = getelementptr inbounds i8, ptr %0, i64 4
  %66 = load i32, ptr %65, align 4, !tbaa !23
  %67 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %66, i8 noundef zeroext 44)
  %68 = and i16 %67, -6
  %69 = load i32, ptr %65, align 4, !tbaa !23
  call void @XSdPs_WriteReg16(i32 noundef %69, i8 noundef zeroext 44, i16 noundef zeroext %68)
  %70 = load i32, ptr %65, align 4, !tbaa !23
  %71 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %70, i8 noundef zeroext 62)
  %72 = or i16 %71, 8
  %73 = load i32, ptr %65, align 4, !tbaa !23
  call void @XSdPs_WriteReg16(i32 noundef %73, i8 noundef zeroext 62, i16 noundef zeroext %72)
  call void @usleep(i64 noundef 5000) #5
  %74 = load i32, ptr %65, align 4, !tbaa !23
  %75 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %74, i8 noundef zeroext 62)
  %76 = and i16 %75, 8
  %77 = icmp eq i16 %76, 0
  br i1 %77, label %211, label %78

78:                                               ; preds = %64
  %79 = load i32, ptr %65, align 4, !tbaa !23
  %80 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %79, i8 noundef zeroext 44)
  %81 = load i32, ptr %65, align 4, !tbaa !23
  %82 = or i16 %80, 1
  call void @XSdPs_WriteReg16(i32 noundef %81, i8 noundef zeroext 44, i16 noundef zeroext %82)
  %83 = load i32, ptr %65, align 4, !tbaa !23
  %84 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %83, i8 noundef zeroext 44)
  %85 = and i16 %84, 2
  %86 = icmp eq i16 %85, 0
  br i1 %86, label %.lr.ph, label %.thread174

.lr.ph:                                           ; preds = %78, %.lr.ph
  %87 = load i32, ptr %65, align 4, !tbaa !23
  %88 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %87, i8 noundef zeroext 44)
  %89 = and i16 %88, 2
  %90 = icmp eq i16 %89, 0
  br i1 %90, label %.lr.ph, label %.thread174, !llvm.loop !24

.thread174:                                       ; preds = %.lr.ph, %78
  %91 = load i32, ptr %65, align 4, !tbaa !23
  %92 = call zeroext i16 @XSdPs_ReadReg16(i32 noundef %91, i8 noundef zeroext 44)
  %93 = load i32, ptr %65, align 4, !tbaa !23
  %94 = or i16 %92, 4
  call void @XSdPs_WriteReg16(i32 noundef %93, i8 noundef zeroext 44, i16 noundef zeroext %94)
  call void @usleep(i64 noundef 1000) #5
  store i8 1, ptr %11, align 4, !tbaa !17
  br label %95

95:                                               ; preds = %.thread174, %61, %57, %51
  %96 = load i8, ptr @XSdPs_CardInitialize.SCR, align 32, !tbaa !21
  %.not165 = icmp eq i8 %96, 0
  br i1 %.not165, label %.thread178, label %97

97:                                               ; preds = %95
  %98 = load i8, ptr %54, align 1, !tbaa !21
  %99 = and i8 %98, 2
  %.not166 = icmp eq i8 %99, 0
  br i1 %.not166, label %.thread178, label %100

100:                                              ; preds = %97
  %101 = load i8, ptr %9, align 1, !tbaa !15
  %102 = icmp ugt i8 %101, 1
  br i1 %102, label %103, label %.thread178

103:                                              ; preds = %100
  %104 = getelementptr inbounds i8, ptr %0, i64 108
  store i32 5, ptr %104, align 4, !tbaa !26
  %105 = call i32 @XSdPs_Change_BusSpeed(ptr noundef nonnull %0) #5
  %.not167 = icmp eq i32 %105, 0
  br i1 %.not167, label %.thread178, label %211

106:                                              ; preds = %38
  %107 = getelementptr inbounds i8, ptr %0, i64 53
  %108 = load i8, ptr %107, align 1, !tbaa !27
  %109 = icmp ugt i8 %108, 3
  br i1 %109, label %110, label %.thread178

110:                                              ; preds = %106
  %111 = load i8, ptr %13, align 2, !tbaa !19
  %112 = icmp eq i8 %111, 1
  br i1 %112, label %113, label %.thread178

113:                                              ; preds = %110
  %114 = tail call i32 @XSdPs_Change_BusWidth(ptr noundef nonnull %0) #5
  %.not154 = icmp eq i32 %114, 0
  br i1 %.not154, label %115, label %211

115:                                              ; preds = %113
  %116 = tail call i32 @XSdPs_Get_Mmc_ExtCsd(ptr noundef nonnull %0, ptr noundef nonnull @XSdPs_CardInitialize.ExtCsd) #5
  %.not155 = icmp eq i32 %116, 0
  br i1 %.not155, label %117, label %211

117:                                              ; preds = %115
  %118 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.ExtCsd, i64 215), align 1, !tbaa !21
  %119 = zext i8 %118 to i32
  %120 = shl nuw i32 %119, 24
  %121 = getelementptr inbounds i8, ptr %0, i64 100
  store i32 %120, ptr %121, align 4, !tbaa !28
  %122 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.ExtCsd, i64 214), align 2, !tbaa !21
  %123 = zext i8 %122 to i32
  %124 = shl nuw nsw i32 %123, 16
  %125 = or disjoint i32 %124, %120
  store i32 %125, ptr %121, align 4, !tbaa !28
  %126 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.ExtCsd, i64 213), align 1, !tbaa !21
  %127 = zext i8 %126 to i32
  %128 = shl nuw nsw i32 %127, 8
  %129 = or disjoint i32 %128, %125
  store i32 %129, ptr %121, align 4, !tbaa !28
  %130 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.ExtCsd, i64 212), align 4, !tbaa !21
  %131 = zext i8 %130 to i32
  %132 = or disjoint i32 %129, %131
  store i32 %132, ptr %121, align 4, !tbaa !28
  %133 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.ExtCsd, i64 196), align 4, !tbaa !21
  %134 = and i8 %133, 2
  %.not156 = icmp eq i8 %134, 0
  br i1 %.not156, label %.thread178, label %135

135:                                              ; preds = %117
  %136 = load i8, ptr %9, align 1, !tbaa !15
  %137 = icmp ugt i8 %136, 1
  br i1 %137, label %138, label %.thread178

138:                                              ; preds = %135
  %139 = getelementptr inbounds i8, ptr %0, i64 108
  store i32 5, ptr %139, align 4, !tbaa !26
  %140 = tail call i32 @XSdPs_Change_BusSpeed(ptr noundef nonnull %0) #5
  %.not157 = icmp eq i32 %140, 0
  br i1 %.not157, label %141, label %211

141:                                              ; preds = %138
  %142 = tail call i32 @XSdPs_Get_Mmc_ExtCsd(ptr noundef nonnull %0, ptr noundef nonnull @XSdPs_CardInitialize.ExtCsd) #5
  %.not158 = icmp eq i32 %142, 0
  %143 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.ExtCsd, i64 185), align 1
  %.not159 = icmp eq i8 %143, 1
  %or.cond171 = select i1 %.not158, i1 %.not159, i1 false
  br i1 %or.cond171, label %.thread178, label %211

144:                                              ; preds = %38
  %145 = tail call i32 @XSdPs_Change_BusWidth(ptr noundef nonnull %0) #5
  %.not143 = icmp eq i32 %145, 0
  br i1 %.not143, label %146, label %211

146:                                              ; preds = %144
  %147 = tail call i32 @XSdPs_Get_Mmc_ExtCsd(ptr noundef nonnull %0, ptr noundef nonnull @XSdPs_CardInitialize.ExtCsd) #5
  %.not144 = icmp eq i32 %147, 0
  br i1 %.not144, label %148, label %211

148:                                              ; preds = %146
  %149 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.ExtCsd, i64 215), align 1, !tbaa !21
  %150 = zext i8 %149 to i32
  %151 = shl nuw i32 %150, 24
  %152 = getelementptr inbounds i8, ptr %0, i64 100
  store i32 %151, ptr %152, align 4, !tbaa !28
  %153 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.ExtCsd, i64 214), align 2, !tbaa !21
  %154 = zext i8 %153 to i32
  %155 = shl nuw nsw i32 %154, 16
  %156 = or disjoint i32 %155, %151
  store i32 %156, ptr %152, align 4, !tbaa !28
  %157 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.ExtCsd, i64 213), align 1, !tbaa !21
  %158 = zext i8 %157 to i32
  %159 = shl nuw nsw i32 %158, 8
  %160 = or disjoint i32 %159, %156
  store i32 %160, ptr %152, align 4, !tbaa !28
  %161 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.ExtCsd, i64 212), align 4, !tbaa !21
  %162 = zext i8 %161 to i32
  %163 = or disjoint i32 %160, %162
  store i32 %163, ptr %152, align 4, !tbaa !28
  %164 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.ExtCsd, i64 196), align 4, !tbaa !21
  %165 = and i8 %164, 48
  %.not145 = icmp eq i8 %165, 0
  br i1 %.not145, label %169, label %166

166:                                              ; preds = %148
  %167 = load i8, ptr %9, align 1, !tbaa !15
  %168 = icmp ugt i8 %167, 1
  br i1 %168, label %181, label %169

169:                                              ; preds = %166, %148
  %170 = and i8 %164, 12
  %.not146 = icmp eq i8 %170, 0
  br i1 %.not146, label %174, label %171

171:                                              ; preds = %169
  %172 = load i8, ptr %9, align 1, !tbaa !15
  %173 = icmp ugt i8 %172, 1
  br i1 %173, label %181, label %174

174:                                              ; preds = %171, %169
  %175 = and i8 %164, 2
  %.not147 = icmp eq i8 %175, 0
  br i1 %.not147, label %179, label %176

176:                                              ; preds = %174
  %177 = load i8, ptr %9, align 1, !tbaa !15
  %178 = icmp ugt i8 %177, 1
  br i1 %178, label %181, label %179

179:                                              ; preds = %174, %176
  %180 = getelementptr inbounds i8, ptr %0, i64 108
  store i32 6, ptr %180, align 4, !tbaa !26
  br label %199

181:                                              ; preds = %176, %171, %166
  %.sink = phi i32 [ 7, %166 ], [ 4, %171 ], [ 5, %176 ]
  %182 = getelementptr inbounds i8, ptr %0, i64 108
  store i32 %.sink, ptr %182, align 4, !tbaa !26
  %183 = getelementptr inbounds i8, ptr %0, i64 108
  %184 = tail call i32 @XSdPs_Change_BusSpeed(ptr noundef nonnull %0) #5
  %.not149 = icmp eq i32 %184, 0
  br i1 %.not149, label %185, label %211

185:                                              ; preds = %181
  %186 = tail call i32 @XSdPs_Get_Mmc_ExtCsd(ptr noundef nonnull %0, ptr noundef nonnull @XSdPs_CardInitialize.ExtCsd) #5
  %.not150 = icmp eq i32 %186, 0
  br i1 %.not150, label %187, label %211

187:                                              ; preds = %185
  %188 = load i32, ptr %183, align 4, !tbaa !26
  %189 = icmp eq i32 %188, 7
  %190 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.ExtCsd, i64 185), align 1
  %191 = icmp ne i8 %190, 2
  %or.cond6 = select i1 %189, i1 %191, i1 false
  br i1 %or.cond6, label %211, label %192

192:                                              ; preds = %187
  %193 = and i32 %188, -2
  %switch172 = icmp eq i32 %193, 4
  br i1 %switch172, label %194, label %199

194:                                              ; preds = %192
  %.not151 = icmp eq i8 %190, 1
  br i1 %.not151, label %195, label %211

195:                                              ; preds = %194
  %196 = icmp eq i32 %188, 4
  br i1 %196, label %197, label %199

197:                                              ; preds = %195
  %198 = tail call i32 @XSdPs_Change_BusWidth(ptr noundef nonnull %0) #5
  %.not152 = icmp eq i32 %198, 0
  br i1 %.not152, label %199, label %211

199:                                              ; preds = %179, %192, %197, %195
  %200 = load i8, ptr getelementptr inbounds (i8, ptr @XSdPs_CardInitialize.ExtCsd, i64 162), align 2, !tbaa !21
  %201 = icmp eq i8 %200, 0
  br i1 %201, label %202, label %.thread178

202:                                              ; preds = %199
  %203 = tail call i32 @XSdPs_Set_Mmc_ExtCsd(ptr noundef nonnull %0, i32 noundef 60948736) #5
  %.not153 = icmp eq i32 %203, 0
  br i1 %.not153, label %.thread178, label %211

.thread178:                                       ; preds = %38, %106, %110, %141, %135, %117, %199, %202, %95, %103, %100, %97
  %204 = getelementptr inbounds i8, ptr %0, i64 108
  %205 = load i32, ptr %204, align 4, !tbaa !26
  %.not168 = icmp eq i32 %205, 4
  br i1 %.not168, label %206, label %209

206:                                              ; preds = %.thread178
  %207 = load i8, ptr %10, align 4, !tbaa !16
  %208 = icmp eq i8 %207, 1
  br i1 %208, label %209, label %211

209:                                              ; preds = %206, %.thread178
  %210 = call i32 @XSdPs_SetBlkSize(ptr noundef nonnull %0, i16 noundef zeroext 512) #5
  %.not169 = icmp ne i32 %210, 0
  %spec.store.select = zext i1 %.not169 to i32
  br label %211

211:                                              ; preds = %25, %64, %22, %49, %206, %209, %26, %28, %32, %34, %36, %40, %42, %47, %103, %113, %115, %138, %141, %144, %146, %181, %185, %187, %194, %197, %202, %16, %7
  %.0127 = phi i32 [ 0, %16 ], [ 0, %7 ], [ %50, %49 ], [ %spec.store.select, %209 ], [ 0, %206 ], [ 1, %22 ], [ 1, %25 ], [ 1, %26 ], [ 1, %28 ], [ 1, %32 ], [ 1, %34 ], [ 1, %36 ], [ 1, %40 ], [ 1, %42 ], [ 1, %47 ], [ 1, %103 ], [ 1, %113 ], [ 1, %115 ], [ 1, %138 ], [ 1, %141 ], [ 1, %144 ], [ 1, %146 ], [ 1, %181 ], [ 1, %185 ], [ 1, %187 ], [ 1, %194 ], [ 1, %197 ], [ 1, %202 ], [ 1, %64 ]
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %2) #5
  ret i32 %.0127
}

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

; Function Attrs: nounwind uwtable
declare hidden i32 @XSdPs_IdentifyCard(ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare dso_local i32 @XSdPs_MmcCardInitialize(ptr noundef) local_unnamed_addr #3

; Function Attrs: nounwind uwtable
declare dso_local i32 @XSdPs_Select_Card(ptr noundef) local_unnamed_addr #3

declare i32 @XSdPs_Pullup(ptr noundef) local_unnamed_addr #1

declare i32 @XSdPs_Get_BusWidth(ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @XSdPs_Change_BusWidth(ptr noundef) local_unnamed_addr #1

declare i32 @XSdPs_Get_BusSpeed(ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @XSdPs_Change_BusSpeed(ptr noundef) local_unnamed_addr #1

declare i32 @XSdPs_Get_Mmc_ExtCsd(ptr noundef, ptr noundef) local_unnamed_addr #1

declare i32 @XSdPs_Set_Mmc_ExtCsd(ptr noundef, i32 noundef) local_unnamed_addr #1

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { 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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !6, i64 36}
!10 = !{!"", !11, i64 0, !6, i64 36, !6, i64 40, !6, i64 44, !6, i64 48, !7, i64 52, !7, i64 53, !7, i64 54, !7, i64 55, !6, i64 56, !7, i64 60, !7, i64 64, !6, i64 80, !7, i64 84, !6, i64 100, !6, i64 104, !6, i64 108, !13, i64 112, !7, i64 128, !14, i64 512}
!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, !7, i64 32}
!12 = !{!"short", !7, i64 0}
!13 = !{!"any pointer", !7, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!10, !7, i64 55}
!16 = !{!10, !7, i64 52}
!17 = !{!10, !7, i64 60}
!18 = !{!10, !6, i64 56}
!19 = !{!10, !7, i64 54}
!20 = !{!10, !6, i64 40}
!21 = !{!7, !7, i64 0}
!22 = !{!10, !6, i64 20}
!23 = !{!10, !6, i64 4}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!10, !6, i64 108}
!27 = !{!10, !7, i64 53}
!28 = !{!10, !6, i64 100}


; Effective O3 passes: ADCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass