; LLVM IR from thalium/icebox :: third_party/virtualbox/src/VBox/Devices/EFI/Firmware/NetworkPkg/IScsiDxe (IScsiDhcp6ExtractRootPath)

; 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._ISCSI_ROOT_PATH_FIELD = type { ptr, i8 }
%union.EFI_IP_ADDRESS = type { [4 x i32] }
%struct._ISCSI_ATTEMPT_CONFIG_NVDATA = type <{ %struct._LIST_ENTRY, i8, i8, i8, i8, i8, i8, i16, i16, [96 x i8], [96 x i8], %union.EFI_IP_ADDRESS, %union.EFI_IP_ADDRESS, %union.EFI_IP_ADDRESS, %struct._ISCSI_SESSION_CONFIG_NVDATA, i8, %union.anon }>
%struct._LIST_ENTRY = type { ptr, ptr }
%struct._ISCSI_SESSION_CONFIG_NVDATA = type <{ i16, i8, i8, %union.EFI_IP_ADDRESS, %struct.EFI_IPv4_ADDRESS, %union.EFI_IP_ADDRESS, i8, i8, [224 x i8], %union.EFI_IP_ADDRESS, i8, [8 x i8], i16, i8, [6 x i8] }>
%struct.EFI_IPv4_ADDRESS = type { [4 x i8] }
%union.anon = type { %struct._ISCSI_CHAP_AUTH_CONFIG_NVDATA }
%struct._ISCSI_CHAP_AUTH_CONFIG_NVDATA = type { i8, [127 x i8], [17 x i8], [127 x i8], [17 x i8] }

@.str = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i64 @IScsiDhcp6ExtractRootPath(ptr noundef %0, i16 noundef zeroext %1, ptr noundef %2) #0 {
  %4 = alloca i64, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i16, align 2
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca i16, align 2
  %10 = alloca ptr, align 8
  %11 = alloca [5 x %struct._ISCSI_ROOT_PATH_FIELD], align 16
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i8, align 1
  %15 = alloca ptr, align 8
  %16 = alloca %union.EFI_IP_ADDRESS, align 4
  %17 = alloca i8, align 1
  %18 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i16 %1, ptr %6, align 2, !tbaa !9
  store ptr %2, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.start.p0(i64 2, ptr %9) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.start.p0(i64 80, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #3
  %19 = load ptr, ptr %7, align 8, !tbaa !5
  %20 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %19, i32 0, i32 14
  store ptr %20, ptr %15, align 8, !tbaa !5
  %21 = call i64 @AsciiStrLen(ptr noundef @.str)
  %22 = trunc i64 %21 to i16
  store i16 %22, ptr %9, align 2, !tbaa !9
  %23 = load i16, ptr %6, align 2, !tbaa !9
  %24 = zext i16 %23 to i32
  %25 = load i16, ptr %9, align 2, !tbaa !9
  %26 = zext i16 %25 to i32
  %27 = icmp sle i32 %24, %26
  br i1 %27, label %34, label %28

28:                                               ; preds = %3
  %29 = load ptr, ptr %5, align 8, !tbaa !5
  %30 = load i16, ptr %9, align 2, !tbaa !9
  %31 = zext i16 %30 to i64
  %32 = call i64 @CompareMem(ptr noundef %29, ptr noundef @.str, i64 noundef %31)
  %33 = icmp ne i64 %32, 0
  br i1 %33, label %34, label %35

34:                                               ; preds = %28, %3
  store i64 -9223372036854775794, ptr %4, align 8
  store i32 1, ptr %18, align 4
  br label %344

35:                                               ; preds = %28
  %36 = load ptr, ptr %5, align 8, !tbaa !5
  %37 = load i16, ptr %9, align 2, !tbaa !9
  %38 = zext i16 %37 to i32
  %39 = sext i32 %38 to i64
  %40 = getelementptr inbounds i8, ptr %36, i64 %39
  store ptr %40, ptr %5, align 8, !tbaa !5
  %41 = load i16, ptr %6, align 2, !tbaa !9
  %42 = zext i16 %41 to i32
  %43 = load i16, ptr %9, align 2, !tbaa !9
  %44 = zext i16 %43 to i32
  %45 = sub nsw i32 %42, %44
  %46 = trunc i32 %45 to i16
  store i16 %46, ptr %6, align 2, !tbaa !9
  %47 = load i16, ptr %6, align 2, !tbaa !9
  %48 = zext i16 %47 to i32
  %49 = add nsw i32 %48, 1
  %50 = sext i32 %49 to i64
  %51 = call ptr @AllocatePool(i64 noundef %50)
  store ptr %51, ptr %10, align 8, !tbaa !5
  %52 = load ptr, ptr %10, align 8, !tbaa !5
  %53 = icmp eq ptr %52, null
  br i1 %53, label %54, label %55

54:                                               ; preds = %35
  store i64 -9223372036854775799, ptr %4, align 8
  store i32 1, ptr %18, align 4
  br label %344

55:                                               ; preds = %35
  %56 = load ptr, ptr %10, align 8, !tbaa !5
  %57 = load ptr, ptr %5, align 8, !tbaa !5
  %58 = load i16, ptr %6, align 2, !tbaa !9
  %59 = zext i16 %58 to i64
  %60 = call ptr @CopyMem(ptr noundef %56, ptr noundef %57, i64 noundef %59)
  %61 = load ptr, ptr %10, align 8, !tbaa !5
  %62 = load i16, ptr %6, align 2, !tbaa !9
  %63 = zext i16 %62 to i64
  %64 = getelementptr inbounds i8, ptr %61, i64 %63
  store i8 0, ptr %64, align 1, !tbaa !11
  store i8 0, ptr %14, align 1, !tbaa !11
  store i32 0, ptr %13, align 4, !tbaa !12
  %65 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 0
  %66 = call ptr @ZeroMem(ptr noundef %65, i64 noundef 80)
  %67 = load ptr, ptr %10, align 8, !tbaa !5
  %68 = load i8, ptr %14, align 1, !tbaa !11
  %69 = zext i8 %68 to i64
  %70 = getelementptr inbounds i8, ptr %67, i64 %69
  %71 = load i8, ptr %70, align 1, !tbaa !11
  %72 = sext i8 %71 to i32
  %73 = icmp ne i32 %72, 91
  br i1 %73, label %74, label %75

74:                                               ; preds = %55
  store i64 -9223372036854775806, ptr %8, align 8, !tbaa !14
  br label %341

75:                                               ; preds = %55
  %76 = load i8, ptr %14, align 1, !tbaa !11
  %77 = add i8 %76, 1
  store i8 %77, ptr %14, align 1, !tbaa !11
  br label %78

78:                                               ; preds = %75
  %79 = load ptr, ptr %10, align 8, !tbaa !5
  %80 = load i8, ptr %14, align 1, !tbaa !11
  %81 = zext i8 %80 to i64
  %82 = getelementptr inbounds i8, ptr %79, i64 %81
  %83 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 0
  %84 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %83, i32 0, i32 0
  store ptr %82, ptr %84, align 16, !tbaa !16
  br label %85

85:                                               ; preds = %101, %78
  %86 = load ptr, ptr %10, align 8, !tbaa !5
  %87 = load i8, ptr %14, align 1, !tbaa !11
  %88 = zext i8 %87 to i64
  %89 = getelementptr inbounds i8, ptr %86, i64 %88
  %90 = load i8, ptr %89, align 1, !tbaa !11
  %91 = sext i8 %90 to i32
  %92 = icmp ne i32 %91, 93
  br i1 %92, label %93, label %99

93:                                               ; preds = %85
  %94 = load i8, ptr %14, align 1, !tbaa !11
  %95 = zext i8 %94 to i32
  %96 = load i16, ptr %6, align 2, !tbaa !9
  %97 = zext i16 %96 to i32
  %98 = icmp slt i32 %95, %97
  br label %99

99:                                               ; preds = %93, %85
  %100 = phi i1 [ false, %85 ], [ %98, %93 ]
  br i1 %100, label %101, label %104

101:                                              ; preds = %99
  %102 = load i8, ptr %14, align 1, !tbaa !11
  %103 = add i8 %102, 1
  store i8 %103, ptr %14, align 1, !tbaa !11
  br label %85, !llvm.loop !18

104:                                              ; preds = %99
  %105 = load ptr, ptr %10, align 8, !tbaa !5
  %106 = load i8, ptr %14, align 1, !tbaa !11
  %107 = zext i8 %106 to i64
  %108 = getelementptr inbounds i8, ptr %105, i64 %107
  store i8 0, ptr %108, align 1, !tbaa !11
  %109 = load i8, ptr %14, align 1, !tbaa !11
  %110 = zext i8 %109 to i32
  %111 = add nsw i32 %110, 2
  %112 = trunc i32 %111 to i8
  store i8 %112, ptr %14, align 1, !tbaa !11
  %113 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 0
  %114 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %113, i32 0, i32 0
  %115 = load ptr, ptr %114, align 16, !tbaa !16
  %116 = call i64 @AsciiStrLen(ptr noundef %115)
  %117 = trunc i64 %116 to i8
  %118 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 0
  %119 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %118, i32 0, i32 1
  store i8 %117, ptr %119, align 8, !tbaa !20
  store i32 1, ptr %13, align 4, !tbaa !12
  br label %120

120:                                              ; preds = %207, %104
  %121 = load i32, ptr %13, align 4, !tbaa !12
  %122 = icmp ult i32 %121, 5
  br i1 %122, label %123, label %129

123:                                              ; preds = %120
  %124 = load i8, ptr %14, align 1, !tbaa !11
  %125 = zext i8 %124 to i32
  %126 = load i16, ptr %6, align 2, !tbaa !9
  %127 = zext i16 %126 to i32
  %128 = icmp slt i32 %125, %127
  br label %129

129:                                              ; preds = %123, %120
  %130 = phi i1 [ false, %120 ], [ %128, %123 ]
  br i1 %130, label %131, label %210

131:                                              ; preds = %129
  %132 = load ptr, ptr %10, align 8, !tbaa !5
  %133 = load i8, ptr %14, align 1, !tbaa !11
  %134 = zext i8 %133 to i64
  %135 = getelementptr inbounds i8, ptr %132, i64 %134
  %136 = load i8, ptr %135, align 1, !tbaa !11
  %137 = sext i8 %136 to i32
  %138 = icmp ne i32 %137, 58
  br i1 %138, label %139, label %148

139:                                              ; preds = %131
  %140 = load ptr, ptr %10, align 8, !tbaa !5
  %141 = load i8, ptr %14, align 1, !tbaa !11
  %142 = zext i8 %141 to i64
  %143 = getelementptr inbounds i8, ptr %140, i64 %142
  %144 = load i32, ptr %13, align 4, !tbaa !12
  %145 = zext i32 %144 to i64
  %146 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 %145
  %147 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %146, i32 0, i32 0
  store ptr %143, ptr %147, align 16, !tbaa !16
  br label %148

148:                                              ; preds = %139, %131
  br label %149

149:                                              ; preds = %165, %148
  %150 = load ptr, ptr %10, align 8, !tbaa !5
  %151 = load i8, ptr %14, align 1, !tbaa !11
  %152 = zext i8 %151 to i64
  %153 = getelementptr inbounds i8, ptr %150, i64 %152
  %154 = load i8, ptr %153, align 1, !tbaa !11
  %155 = sext i8 %154 to i32
  %156 = icmp ne i32 %155, 58
  br i1 %156, label %157, label %163

157:                                              ; preds = %149
  %158 = load i8, ptr %14, align 1, !tbaa !11
  %159 = zext i8 %158 to i32
  %160 = load i16, ptr %6, align 2, !tbaa !9
  %161 = zext i16 %160 to i32
  %162 = icmp slt i32 %159, %161
  br label %163

163:                                              ; preds = %157, %149
  %164 = phi i1 [ false, %149 ], [ %162, %157 ]
  br i1 %164, label %165, label %168

165:                                              ; preds = %163
  %166 = load i8, ptr %14, align 1, !tbaa !11
  %167 = add i8 %166, 1
  store i8 %167, ptr %14, align 1, !tbaa !11
  br label %149, !llvm.loop !21

168:                                              ; preds = %163
  %169 = load ptr, ptr %10, align 8, !tbaa !5
  %170 = load i8, ptr %14, align 1, !tbaa !11
  %171 = zext i8 %170 to i64
  %172 = getelementptr inbounds i8, ptr %169, i64 %171
  %173 = load i8, ptr %172, align 1, !tbaa !11
  %174 = sext i8 %173 to i32
  %175 = icmp eq i32 %174, 58
  br i1 %175, label %176, label %206

176:                                              ; preds = %168
  %177 = load i32, ptr %13, align 4, !tbaa !12
  %178 = icmp ne i32 %177, 4
  br i1 %178, label %179, label %186

179:                                              ; preds = %176
  %180 = load ptr, ptr %10, align 8, !tbaa !5
  %181 = load i8, ptr %14, align 1, !tbaa !11
  %182 = zext i8 %181 to i64
  %183 = getelementptr inbounds i8, ptr %180, i64 %182
  store i8 0, ptr %183, align 1, !tbaa !11
  %184 = load i8, ptr %14, align 1, !tbaa !11
  %185 = add i8 %184, 1
  store i8 %185, ptr %14, align 1, !tbaa !11
  br label %186

186:                                              ; preds = %179, %176
  %187 = load i32, ptr %13, align 4, !tbaa !12
  %188 = zext i32 %187 to i64
  %189 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 %188
  %190 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %189, i32 0, i32 0
  %191 = load ptr, ptr %190, align 16, !tbaa !16
  %192 = icmp ne ptr %191, null
  br i1 %192, label %193, label %205

193:                                              ; preds = %186
  %194 = load i32, ptr %13, align 4, !tbaa !12
  %195 = zext i32 %194 to i64
  %196 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 %195
  %197 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %196, i32 0, i32 0
  %198 = load ptr, ptr %197, align 16, !tbaa !16
  %199 = call i64 @AsciiStrLen(ptr noundef %198)
  %200 = trunc i64 %199 to i8
  %201 = load i32, ptr %13, align 4, !tbaa !12
  %202 = zext i32 %201 to i64
  %203 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 %202
  %204 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %203, i32 0, i32 1
  store i8 %200, ptr %204, align 8, !tbaa !20
  br label %205

205:                                              ; preds = %193, %186
  br label %206

206:                                              ; preds = %205, %168
  br label %207

207:                                              ; preds = %206
  %208 = load i32, ptr %13, align 4, !tbaa !12
  %209 = add i32 %208, 1
  store i32 %209, ptr %13, align 4, !tbaa !12
  br label %120, !llvm.loop !22

210:                                              ; preds = %129
  %211 = load i32, ptr %13, align 4, !tbaa !12
  %212 = icmp ne i32 %211, 5
  br i1 %212, label %213, label %214

213:                                              ; preds = %210
  store i64 -9223372036854775806, ptr %8, align 8, !tbaa !14
  br label %341

214:                                              ; preds = %210
  %215 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 0
  %216 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %215, i32 0, i32 0
  %217 = load ptr, ptr %216, align 16, !tbaa !16
  %218 = icmp eq ptr %217, null
  br i1 %218, label %230, label %219

219:                                              ; preds = %214
  %220 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 4
  %221 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %220, i32 0, i32 0
  %222 = load ptr, ptr %221, align 16, !tbaa !16
  %223 = icmp eq ptr %222, null
  br i1 %223, label %230, label %224

224:                                              ; preds = %219
  %225 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 1
  %226 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %225, i32 0, i32 1
  %227 = load i8, ptr %226, align 8, !tbaa !20
  %228 = zext i8 %227 to i32
  %229 = icmp sgt i32 %228, 1
  br i1 %229, label %230, label %231

230:                                              ; preds = %224, %219, %214
  store i64 -9223372036854775806, ptr %8, align 8, !tbaa !14
  br label %341

231:                                              ; preds = %224
  %232 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 0
  store ptr %232, ptr %12, align 8, !tbaa !5
  %233 = load ptr, ptr %15, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %233, i32 0, i32 2
  %235 = load i8, ptr %234, align 1, !tbaa !23
  %236 = zext i8 %235 to i32
  %237 = icmp slt i32 %236, 2
  br i1 %237, label %238, label %242

238:                                              ; preds = %231
  %239 = load ptr, ptr %15, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %239, i32 0, i32 2
  %241 = load i8, ptr %240, align 1, !tbaa !23
  store i8 %241, ptr %17, align 1, !tbaa !11
  br label %246

242:                                              ; preds = %231
  %243 = load ptr, ptr %7, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct._ISCSI_ATTEMPT_CONFIG_NVDATA, ptr %243, i32 0, i32 6
  %245 = load i8, ptr %244, align 1, !tbaa !26
  store i8 %245, ptr %17, align 1, !tbaa !11
  br label %246

246:                                              ; preds = %242, %238
  %247 = load ptr, ptr %12, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %247, i32 0, i32 0
  %249 = load ptr, ptr %248, align 8, !tbaa !16
  %250 = load i8, ptr %17, align 1, !tbaa !11
  %251 = call i64 @IScsiAsciiStrToIp(ptr noundef %249, i8 noundef zeroext %250, ptr noundef %16)
  store i64 %251, ptr %8, align 8, !tbaa !14
  %252 = load ptr, ptr %15, align 8, !tbaa !5
  %253 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %252, i32 0, i32 9
  %254 = call ptr @CopyMem(ptr noundef %253, ptr noundef %16, i64 noundef 16)
  %255 = load i64, ptr %8, align 8, !tbaa !14
  %256 = icmp slt i64 %255, 0
  br i1 %256, label %257, label %258

257:                                              ; preds = %246
  br label %341

258:                                              ; preds = %246
  %259 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 1
  store ptr %259, ptr %12, align 8, !tbaa !5
  %260 = load ptr, ptr %12, align 8, !tbaa !5
  %261 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %260, i32 0, i32 0
  %262 = load ptr, ptr %261, align 8, !tbaa !16
  %263 = icmp ne ptr %262, null
  br i1 %263, label %264, label %273

264:                                              ; preds = %258
  %265 = load ptr, ptr %12, align 8, !tbaa !5
  %266 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %265, i32 0, i32 0
  %267 = load ptr, ptr %266, align 8, !tbaa !16
  %268 = load i8, ptr %267, align 1, !tbaa !11
  %269 = sext i8 %268 to i32
  %270 = sub nsw i32 %269, 48
  %271 = icmp ne i32 %270, 6
  br i1 %271, label %272, label %273

272:                                              ; preds = %264
  store i64 -9223372036854775806, ptr %8, align 8, !tbaa !14
  br label %341

273:                                              ; preds = %264, %258
  %274 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 2
  store ptr %274, ptr %12, align 8, !tbaa !5
  %275 = load ptr, ptr %12, align 8, !tbaa !5
  %276 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %275, i32 0, i32 0
  %277 = load ptr, ptr %276, align 8, !tbaa !16
  %278 = icmp ne ptr %277, null
  br i1 %278, label %279, label %287

279:                                              ; preds = %273
  %280 = load ptr, ptr %12, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %280, i32 0, i32 0
  %282 = load ptr, ptr %281, align 8, !tbaa !16
  %283 = call i64 @AsciiStrDecimalToUintn(ptr noundef %282)
  %284 = trunc i64 %283 to i16
  %285 = load ptr, ptr %15, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %285, i32 0, i32 0
  store i16 %284, ptr %286, align 1, !tbaa !29
  br label %290

287:                                              ; preds = %273
  %288 = load ptr, ptr %15, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %288, i32 0, i32 0
  store i16 3260, ptr %289, align 1, !tbaa !29
  br label %290

290:                                              ; preds = %287, %279
  %291 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 3
  store ptr %291, ptr %12, align 8, !tbaa !5
  %292 = load ptr, ptr %12, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %292, i32 0, i32 0
  %294 = load ptr, ptr %293, align 8, !tbaa !16
  %295 = icmp ne ptr %294, null
  br i1 %295, label %296, label %308

296:                                              ; preds = %290
  %297 = load ptr, ptr %12, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %297, i32 0, i32 0
  %299 = load ptr, ptr %298, align 8, !tbaa !16
  %300 = load ptr, ptr %15, align 8, !tbaa !5
  %301 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %300, i32 0, i32 11
  %302 = getelementptr inbounds [8 x i8], ptr %301, i64 0, i64 0
  %303 = call i64 @IScsiAsciiStrToLun(ptr noundef %299, ptr noundef %302)
  store i64 %303, ptr %8, align 8, !tbaa !14
  %304 = load i64, ptr %8, align 8, !tbaa !14
  %305 = icmp slt i64 %304, 0
  br i1 %305, label %306, label %307

306:                                              ; preds = %296
  br label %341

307:                                              ; preds = %296
  br label %313

308:                                              ; preds = %290
  %309 = load ptr, ptr %15, align 8, !tbaa !5
  %310 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %309, i32 0, i32 11
  %311 = getelementptr inbounds [8 x i8], ptr %310, i64 0, i64 0
  %312 = call ptr @ZeroMem(ptr noundef %311, i64 noundef 8)
  br label %313

313:                                              ; preds = %308, %307
  %314 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %11, i64 0, i64 4
  store ptr %314, ptr %12, align 8, !tbaa !5
  %315 = load ptr, ptr %12, align 8, !tbaa !5
  %316 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %315, i32 0, i32 0
  %317 = load ptr, ptr %316, align 8, !tbaa !16
  %318 = call i64 @AsciiStrLen(ptr noundef %317)
  %319 = icmp ugt i64 %318, 223
  br i1 %319, label %320, label %321

320:                                              ; preds = %313
  store i64 -9223372036854775806, ptr %8, align 8, !tbaa !14
  br label %341

321:                                              ; preds = %313
  %322 = load ptr, ptr %12, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %322, i32 0, i32 0
  %324 = load ptr, ptr %323, align 8, !tbaa !16
  %325 = load ptr, ptr %12, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %325, i32 0, i32 0
  %327 = load ptr, ptr %326, align 8, !tbaa !16
  %328 = call i64 @AsciiStrLen(ptr noundef %327)
  %329 = call i64 @IScsiNormalizeName(ptr noundef %324, i64 noundef %328)
  store i64 %329, ptr %8, align 8, !tbaa !14
  %330 = load i64, ptr %8, align 8, !tbaa !14
  %331 = icmp slt i64 %330, 0
  br i1 %331, label %332, label %333

332:                                              ; preds = %321
  br label %341

333:                                              ; preds = %321
  %334 = load ptr, ptr %15, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct._ISCSI_SESSION_CONFIG_NVDATA, ptr %334, i32 0, i32 8
  %336 = getelementptr inbounds [224 x i8], ptr %335, i64 0, i64 0
  %337 = load ptr, ptr %12, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct._ISCSI_ROOT_PATH_FIELD, ptr %337, i32 0, i32 0
  %339 = load ptr, ptr %338, align 8, !tbaa !16
  %340 = call ptr @AsciiStrCpy(ptr noundef %336, ptr noundef %339)
  br label %341

341:                                              ; preds = %333, %332, %320, %306, %272, %257, %230, %213, %74
  %342 = load ptr, ptr %10, align 8, !tbaa !5
  call void @FreePool(ptr noundef %342)
  %343 = load i64, ptr %8, align 8, !tbaa !14
  store i64 %343, ptr %4, align 8
  store i32 1, ptr %18, align 4
  br label %344

344:                                              ; preds = %341, %54, %34
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 80, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 2, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  %345 = load i64, ptr %4, align 8
  ret i64 %345
}

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

declare i64 @AsciiStrLen(ptr noundef) #2

declare i64 @CompareMem(ptr noundef, ptr noundef, i64 noundef) #2

declare ptr @AllocatePool(i64 noundef) #2

declare ptr @CopyMem(ptr noundef, ptr noundef, i64 noundef) #2

declare ptr @ZeroMem(ptr noundef, i64 noundef) #2

declare i64 @IScsiAsciiStrToIp(ptr noundef, i8 noundef zeroext, ptr noundef) #2

declare i64 @AsciiStrDecimalToUintn(ptr noundef) #2

declare i64 @IScsiAsciiStrToLun(ptr noundef, ptr noundef) #2

declare i64 @IScsiNormalizeName(ptr noundef, i64 noundef) #2

declare ptr @AsciiStrCpy(ptr noundef, ptr noundef) #2

declare void @FreePool(ptr noundef) #2

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"short", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"int", !7, i64 0}
!14 = !{!15, !15, i64 0}
!15 = !{!"long long", !7, i64 0}
!16 = !{!17, !6, i64 0}
!17 = !{!"_ISCSI_ROOT_PATH_FIELD", !6, i64 0, !7, i64 8}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!17, !7, i64 8}
!21 = distinct !{!21, !19}
!22 = distinct !{!22, !19}
!23 = !{!24, !7, i64 3}
!24 = !{!"_ISCSI_SESSION_CONFIG_NVDATA", !10, i64 0, !7, i64 2, !7, i64 3, !7, i64 4, !25, i64 20, !7, i64 24, !7, i64 40, !7, i64 41, !7, i64 42, !7, i64 266, !7, i64 282, !7, i64 283, !10, i64 291, !7, i64 293, !7, i64 294}
!25 = !{!"", !7, i64 0}
!26 = !{!27, !7, i64 21}
!27 = !{!"_ISCSI_ATTEMPT_CONFIG_NVDATA", !28, i64 0, !7, i64 16, !7, i64 17, !7, i64 18, !7, i64 19, !7, i64 20, !7, i64 21, !10, i64 22, !10, i64 24, !7, i64 26, !7, i64 122, !7, i64 218, !7, i64 234, !7, i64 250, !24, i64 266, !7, i64 566, !7, i64 567}
!28 = !{!"_LIST_ENTRY", !6, i64 0, !6, i64 8}
!29 = !{!24, !10, i64 0}


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

%struct._ISCSI_ROOT_PATH_FIELD = type { ptr, i8 }
%union.EFI_IP_ADDRESS = type { [4 x i32] }

@.str = external hidden unnamed_addr constant [7 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i64 @IScsiDhcp6ExtractRootPath(ptr noundef %0, i16 noundef zeroext %1, ptr noundef %2) local_unnamed_addr #0 {
  %4 = alloca [5 x %struct._ISCSI_ROOT_PATH_FIELD], align 16
  %5 = alloca %union.EFI_IP_ADDRESS, align 4
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %4) #3
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #3
  %6 = getelementptr inbounds i8, ptr %2, i64 266
  %7 = tail call i64 @AsciiStrLen(ptr noundef nonnull @.str) #3
  %8 = zext i16 %1 to i32
  %9 = trunc i64 %7 to i32
  %10 = and i32 %9, 65535
  %.not = icmp ult i32 %10, %8
  br i1 %.not, label %11, label %133

11:                                               ; preds = %3
  %12 = and i64 %7, 65535
  %13 = tail call i64 @CompareMem(ptr noundef %0, ptr noundef nonnull @.str, i64 noundef %12) #3
  %.not103 = icmp eq i64 %13, 0
  br i1 %.not103, label %14, label %133

14:                                               ; preds = %11
  %15 = trunc i64 %7 to i16
  %16 = sub i16 %1, %15
  %17 = zext i16 %16 to i64
  %18 = add nuw nsw i64 %17, 1
  %19 = tail call ptr @AllocatePool(i64 noundef %18) #3
  %20 = icmp eq ptr %19, null
  br i1 %20, label %133, label %21

21:                                               ; preds = %14
  %22 = getelementptr inbounds i8, ptr %0, i64 %12
  %23 = tail call ptr @CopyMem(ptr noundef nonnull %19, ptr noundef %22, i64 noundef %17) #3
  %24 = getelementptr inbounds i8, ptr %19, i64 %17
  store i8 0, ptr %24, align 1, !tbaa !5
  %25 = call ptr @ZeroMem(ptr noundef nonnull %4, i64 noundef 80) #3
  %26 = load i8, ptr %19, align 1, !tbaa !5
  %.not104 = icmp eq i8 %26, 91
  br i1 %.not104, label %27, label %._crit_edge.thread

27:                                               ; preds = %21
  %28 = getelementptr inbounds i8, ptr %19, i64 1
  store ptr %28, ptr %4, align 16, !tbaa !8
  br label %29

29:                                               ; preds = %29, %27
  %.088 = phi i8 [ 1, %27 ], [ %37, %29 ]
  %30 = zext i8 %.088 to i64
  %31 = getelementptr inbounds i8, ptr %19, i64 %30
  %32 = load i8, ptr %31, align 1, !tbaa !5
  %33 = icmp ne i8 %32, 93
  %34 = zext i8 %.088 to i16
  %35 = icmp ugt i16 %16, %34
  %36 = and i1 %33, %35
  %37 = add i8 %.088, 1
  br i1 %36, label %29, label %38, !llvm.loop !11

38:                                               ; preds = %29
  %39 = getelementptr inbounds i8, ptr %19, i64 %30
  store i8 0, ptr %39, align 1, !tbaa !5
  %40 = add i8 %.088, 2
  %41 = load ptr, ptr %4, align 16, !tbaa !8
  %42 = call i64 @AsciiStrLen(ptr noundef %41) #3
  %43 = trunc i64 %42 to i8
  %44 = getelementptr inbounds i8, ptr %4, i64 8
  store i8 %43, ptr %44, align 8, !tbaa !13
  %45 = zext i8 %40 to i16
  %46 = icmp ugt i16 %16, %45
  br i1 %46, label %.lr.ph, label %._crit_edge.thread

.lr.ph:                                           ; preds = %38, %73
  %indvars.iv = phi i64 [ %indvars.iv.next, %73 ], [ 1, %38 ]
  %.1118 = phi i8 [ %.4, %73 ], [ %40, %38 ]
  %47 = zext i8 %.1118 to i64
  %48 = getelementptr inbounds i8, ptr %19, i64 %47
  %49 = load i8, ptr %48, align 1, !tbaa !5
  %.not110 = icmp eq i8 %49, 58
  br i1 %.not110, label %.preheader, label %50

50:                                               ; preds = %.lr.ph
  %51 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %4, i64 0, i64 %indvars.iv
  store ptr %48, ptr %51, align 16, !tbaa !8
  br label %.preheader

.preheader:                                       ; preds = %50, %.lr.ph
  br label %52

52:                                               ; preds = %.preheader, %52
  %.2 = phi i8 [ %60, %52 ], [ %.1118, %.preheader ]
  %53 = zext i8 %.2 to i64
  %54 = getelementptr inbounds i8, ptr %19, i64 %53
  %55 = load i8, ptr %54, align 1, !tbaa !5
  %56 = icmp ne i8 %55, 58
  %57 = zext i8 %.2 to i16
  %58 = icmp ugt i16 %16, %57
  %59 = and i1 %56, %58
  %60 = add i8 %.2, 1
  br i1 %59, label %52, label %61, !llvm.loop !14

61:                                               ; preds = %52
  %62 = getelementptr inbounds i8, ptr %19, i64 %53
  %63 = icmp eq i8 %55, 58
  br i1 %63, label %64, label %73

64:                                               ; preds = %61
  %.not111 = icmp eq i64 %indvars.iv, 4
  br i1 %.not111, label %66, label %65

65:                                               ; preds = %64
  store i8 0, ptr %62, align 1, !tbaa !5
  br label %66

66:                                               ; preds = %65, %64
  %.3 = phi i8 [ %60, %65 ], [ %.2, %64 ]
  %67 = getelementptr inbounds [5 x %struct._ISCSI_ROOT_PATH_FIELD], ptr %4, i64 0, i64 %indvars.iv
  %68 = load ptr, ptr %67, align 16, !tbaa !8
  %.not112 = icmp eq ptr %68, null
  br i1 %.not112, label %73, label %69

69:                                               ; preds = %66
  %70 = call i64 @AsciiStrLen(ptr noundef nonnull %68) #3
  %71 = trunc i64 %70 to i8
  %72 = getelementptr inbounds i8, ptr %67, i64 8
  store i8 %71, ptr %72, align 8, !tbaa !13
  br label %73

73:                                               ; preds = %61, %69, %66
  %.4 = phi i8 [ %.3, %69 ], [ %.3, %66 ], [ %.2, %61 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %74 = icmp ult i64 %indvars.iv, 4
  %75 = zext i8 %.4 to i16
  %76 = icmp ugt i16 %16, %75
  %77 = and i1 %74, %76
  br i1 %77, label %.lr.ph, label %._crit_edge, !llvm.loop !15

._crit_edge:                                      ; preds = %73
  %78 = icmp eq i64 %indvars.iv.next, 5
  br i1 %78, label %79, label %._crit_edge.thread

79:                                               ; preds = %._crit_edge
  %80 = load ptr, ptr %4, align 16, !tbaa !8
  %81 = icmp eq ptr %80, null
  %82 = getelementptr inbounds i8, ptr %4, i64 64
  %83 = load ptr, ptr %82, align 16
  %84 = icmp eq ptr %83, null
  %or.cond = select i1 %81, i1 true, i1 %84
  %85 = getelementptr inbounds i8, ptr %4, i64 16
  %86 = getelementptr inbounds i8, ptr %4, i64 24
  %87 = load i8, ptr %86, align 8
  %88 = icmp ugt i8 %87, 1
  %or.cond8 = select i1 %or.cond, i1 true, i1 %88
  br i1 %or.cond8, label %._crit_edge.thread, label %89

89:                                               ; preds = %79
  %90 = getelementptr inbounds i8, ptr %2, i64 269
  %91 = load i8, ptr %90, align 1, !tbaa !16
  %92 = icmp ult i8 %91, 2
  br i1 %92, label %96, label %93

93:                                               ; preds = %89
  %94 = getelementptr inbounds i8, ptr %2, i64 21
  %95 = load i8, ptr %94, align 1, !tbaa !20
  br label %96

96:                                               ; preds = %89, %93
  %.0 = phi i8 [ %95, %93 ], [ %91, %89 ]
  %97 = call i64 @IScsiAsciiStrToIp(ptr noundef nonnull %80, i8 noundef zeroext %.0, ptr noundef nonnull %5) #3
  %98 = getelementptr inbounds i8, ptr %2, i64 532
  %99 = call ptr @CopyMem(ptr noundef nonnull %98, ptr noundef nonnull %5, i64 noundef 16) #3
  %100 = icmp slt i64 %97, 0
  br i1 %100, label %._crit_edge.thread, label %101

101:                                              ; preds = %96
  %102 = load ptr, ptr %85, align 16, !tbaa !8
  %.not106 = icmp eq ptr %102, null
  br i1 %.not106, label %105, label %103

103:                                              ; preds = %101
  %104 = load i8, ptr %102, align 1, !tbaa !5
  %.not107 = icmp eq i8 %104, 54
  br i1 %.not107, label %105, label %._crit_edge.thread

105:                                              ; preds = %103, %101
  %106 = getelementptr inbounds i8, ptr %4, i64 32
  %107 = load ptr, ptr %106, align 16, !tbaa !8
  %.not108 = icmp eq ptr %107, null
  br i1 %.not108, label %111, label %108

108:                                              ; preds = %105
  %109 = call i64 @AsciiStrDecimalToUintn(ptr noundef nonnull %107) #3
  %110 = trunc i64 %109 to i16
  br label %111

111:                                              ; preds = %105, %108
  %storemerge = phi i16 [ %110, %108 ], [ 3260, %105 ]
  store i16 %storemerge, ptr %6, align 1, !tbaa !23
  %112 = getelementptr inbounds i8, ptr %4, i64 48
  %113 = load ptr, ptr %112, align 16, !tbaa !8
  %.not109 = icmp eq ptr %113, null
  %114 = getelementptr inbounds i8, ptr %2, i64 549
  br i1 %.not109, label %118, label %115

115:                                              ; preds = %111
  %116 = call i64 @IScsiAsciiStrToLun(ptr noundef nonnull %113, ptr noundef nonnull %114) #3
  %117 = icmp slt i64 %116, 0
  br i1 %117, label %._crit_edge.thread, label %120

118:                                              ; preds = %111
  %119 = call ptr @ZeroMem(ptr noundef nonnull %114, i64 noundef 8) #3
  br label %120

120:                                              ; preds = %115, %118
  %121 = load ptr, ptr %82, align 16, !tbaa !8
  %122 = call i64 @AsciiStrLen(ptr noundef %121) #3
  %123 = icmp ugt i64 %122, 223
  br i1 %123, label %._crit_edge.thread, label %124

124:                                              ; preds = %120
  %125 = load ptr, ptr %82, align 16, !tbaa !8
  %126 = call i64 @AsciiStrLen(ptr noundef %125) #3
  %127 = call i64 @IScsiNormalizeName(ptr noundef %125, i64 noundef %126) #3
  %128 = icmp slt i64 %127, 0
  br i1 %128, label %._crit_edge.thread, label %129

129:                                              ; preds = %124
  %130 = getelementptr inbounds i8, ptr %2, i64 308
  %131 = load ptr, ptr %82, align 16, !tbaa !8
  %132 = call ptr @AsciiStrCpy(ptr noundef nonnull %130, ptr noundef %131) #3
  br label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %38, %120, %103, %79, %._crit_edge, %21, %124, %115, %96, %129
  %.090 = phi i64 [ %97, %96 ], [ %116, %115 ], [ %127, %124 ], [ %127, %129 ], [ -9223372036854775806, %21 ], [ -9223372036854775806, %._crit_edge ], [ -9223372036854775806, %79 ], [ -9223372036854775806, %103 ], [ -9223372036854775806, %120 ], [ -9223372036854775806, %38 ]
  call void @FreePool(ptr noundef nonnull %19) #3
  br label %133

133:                                              ; preds = %14, %3, %11, %._crit_edge.thread
  %.087 = phi i64 [ %.090, %._crit_edge.thread ], [ -9223372036854775794, %11 ], [ -9223372036854775794, %3 ], [ -9223372036854775799, %14 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #3
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %4) #3
  ret i64 %.087
}

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

declare i64 @AsciiStrLen(ptr noundef) local_unnamed_addr #2

declare i64 @CompareMem(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

declare ptr @AllocatePool(i64 noundef) local_unnamed_addr #2

declare ptr @CopyMem(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #2

declare ptr @ZeroMem(ptr noundef, i64 noundef) local_unnamed_addr #2

declare i64 @IScsiAsciiStrToIp(ptr noundef, i8 noundef zeroext, ptr noundef) local_unnamed_addr #2

declare i64 @AsciiStrDecimalToUintn(ptr noundef) local_unnamed_addr #2

declare i64 @IScsiAsciiStrToLun(ptr noundef, ptr noundef) local_unnamed_addr #2

declare i64 @IScsiNormalizeName(ptr noundef, i64 noundef) local_unnamed_addr #2

declare ptr @AsciiStrCpy(ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @FreePool(ptr noundef) 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) #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = !{!9, !10, i64 0}
!9 = !{!"_ISCSI_ROOT_PATH_FIELD", !10, i64 0, !6, i64 8}
!10 = !{!"any pointer", !6, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!9, !6, i64 8}
!14 = distinct !{!14, !12}
!15 = distinct !{!15, !12}
!16 = !{!17, !6, i64 3}
!17 = !{!"_ISCSI_SESSION_CONFIG_NVDATA", !18, i64 0, !6, i64 2, !6, i64 3, !6, i64 4, !19, i64 20, !6, i64 24, !6, i64 40, !6, i64 41, !6, i64 42, !6, i64 266, !6, i64 282, !6, i64 283, !18, i64 291, !6, i64 293, !6, i64 294}
!18 = !{!"short", !6, i64 0}
!19 = !{!"", !6, i64 0}
!20 = !{!21, !6, i64 21}
!21 = !{!"_ISCSI_ATTEMPT_CONFIG_NVDATA", !22, i64 0, !6, i64 16, !6, i64 17, !6, i64 18, !6, i64 19, !6, i64 20, !6, i64 21, !18, i64 22, !18, i64 24, !6, i64 26, !6, i64 122, !6, i64 218, !6, i64 234, !6, i64 250, !17, i64 266, !6, i64 566, !6, i64 567}
!22 = !{!"_LIST_ENTRY", !10, i64 0, !10, i64 8}
!23 = !{!17, !18, i64 0}


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