; LLVM IR from IOsonata/IOsonata :: src/bluetooth (bt_attrsp)

; 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.CurParseInf_t = type { i8, i8, i8 }
%struct.__Bt_Dev_Data = type { [30 x i8], [6 x i8], i16, i32, ptr, [10 x %struct.BtGattDBSrvc_t] }
%struct.BtGattDBSrvc_t = type { %struct.__Bt_Uuid16, i8, %struct.__Bt_Gattc_Hdl_Range, [6 x %struct.BtGattDBChar_t] }
%struct.__Bt_Uuid16 = type <{ i8, i16 }>
%struct.__Bt_Gattc_Hdl_Range = type { i16, i16 }
%struct.BtGattDBChar_t = type { %struct.BtGattcChar_t, i16, i16, i16, i16 }
%struct.BtGattcChar_t = type { %struct.__Bt_Uuid16, %struct.BtGattCharProps_t, i8, i16, i16 }
%struct.BtGattCharProps_t = type { i8 }
%struct.__Bt_Uuid = type <{ i8, %union.anon.1 }>
%union.anon.1 = type { i32 }
%struct.__Bt_Attribute_Req_Rsp = type <{ i8, %union.anon }>
%union.anon = type { %struct.__Bt_Att_Read_By_Type_Req }
%struct.__Bt_Att_Read_By_Type_Req = type { i16, i16, %union.__Bt_Uuid_Val }
%union.__Bt_Uuid_Val = type { i32, [12 x i8] }
%struct.__Bt_Att_Exchange_Mtu_Req_Rsp = type { i16 }
%struct.__Bt_Att_Read_By_Type_Rsp = type { i8, [1 x i8] }
%struct.__Bt_Att_Read_By_Group_Type_Rsp = type { i8, [1 x i8] }
%struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid16 = type { i16, i16, i16 }
%struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid128 = type { i16, i16, [16 x i8] }

@g_CurIdx = external dso_local global %struct.CurParseInf_t, align 1
@g_BtDevSdc = external global %struct.__Bt_Dev_Data, align 8
@g_UuidType = external global %struct.__Bt_Uuid, align 1
@__const.BtAttProcessRsp.Uuid = external hidden unnamed_addr constant <{ i8, { i16, [2 x i8] } }>, align 1

; Function Attrs: mustprogress uwtable
declare dso_local i32 @BtAttProcessError(i16 noundef zeroext, ptr noundef, i32 noundef) #0

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

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

declare zeroext i1 @BtAttReadByTypeRequest(ptr noundef, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext, ptr noundef) #2

; Function Attrs: mustprogress uwtable
define dso_local void @BtAttProcessRsp(i16 noundef zeroext %0, ptr noundef %1, i32 noundef %2) #0 {
  %4 = alloca i16, align 2
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i16, align 2
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i16, align 2
  %13 = alloca i8, align 1
  %14 = alloca i16, align 2
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca i16, align 2
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i8, align 1
  %22 = alloca ptr, align 8
  %23 = alloca i8, align 1
  %24 = alloca i8, align 1
  %25 = alloca i8, align 1
  %26 = alloca i16, align 2
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i8, align 1
  %34 = alloca i16, align 2
  %35 = alloca i8, align 1
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca i32, align 4
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca %struct.__Bt_Uuid, align 1
  store i16 %0, ptr %4, align 2, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  store i32 %2, ptr %6, align 4, !tbaa !11
  %44 = load ptr, ptr %5, align 8, !tbaa !9
  %45 = getelementptr inbounds %struct.__Bt_Attribute_Req_Rsp, ptr %44, i32 0, i32 0
  %46 = load i8, ptr %45, align 1, !tbaa !13
  %47 = zext i8 %46 to i32
  switch i32 %47, label %682 [
    i32 1, label %48
    i32 3, label %53
    i32 5, label %65
    i32 7, label %84
    i32 9, label %85
    i32 11, label %453
    i32 13, label %512
    i32 15, label %513
    i32 17, label %514
    i32 19, label %679
    i32 25, label %680
    i32 33, label %681
  ]

48:                                               ; preds = %3
  %49 = load i16, ptr %4, align 2, !tbaa !5
  %50 = load ptr, ptr %5, align 8, !tbaa !9
  %51 = load i32, ptr %6, align 4, !tbaa !11
  %52 = call i32 @BtAttProcessError(i16 noundef zeroext %49, ptr noundef %50, i32 noundef %51)
  br label %682

53:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 2, ptr %7) #5
  %54 = call zeroext i16 @BtAttGetMtu()
  %55 = zext i16 %54 to i32
  %56 = load ptr, ptr %5, align 8, !tbaa !9
  %57 = getelementptr inbounds %struct.__Bt_Attribute_Req_Rsp, ptr %56, i32 0, i32 1
  %58 = getelementptr inbounds %struct.__Bt_Att_Exchange_Mtu_Req_Rsp, ptr %57, i32 0, i32 0
  %59 = load i16, ptr %58, align 1, !tbaa !15
  %60 = zext i16 %59 to i32
  %61 = call noundef i32 @_ZL3minii(i32 noundef %55, i32 noundef %60)
  %62 = trunc i32 %61 to i16
  store i16 %62, ptr %7, align 2, !tbaa !5
  %63 = load i16, ptr %7, align 2, !tbaa !5
  %64 = call zeroext i16 @BtAttSetMtu(i16 noundef zeroext %63)
  call void @llvm.lifetime.end.p0(i64 2, ptr %7) #5
  br label %682

65:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  %66 = load ptr, ptr %5, align 8, !tbaa !9
  %67 = getelementptr inbounds %struct.__Bt_Attribute_Req_Rsp, ptr %66, i32 0, i32 1
  store ptr %67, ptr %8, align 8, !tbaa !9
  %68 = load i32, ptr %6, align 4, !tbaa !11
  %69 = icmp sle i32 %68, 3
  br i1 %69, label %70, label %71

70:                                               ; preds = %65
  br label %83

71:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  store i32 0, ptr %9, align 4, !tbaa !11
  br label %72

72:                                               ; preds = %79, %71
  %73 = load i32, ptr %9, align 4, !tbaa !11
  %74 = load i32, ptr %6, align 4, !tbaa !11
  %75 = sub nsw i32 %74, 2
  %76 = icmp slt i32 %73, %75
  br i1 %76, label %78, label %77

77:                                               ; preds = %72
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  br label %82

78:                                               ; preds = %72
  br label %79

79:                                               ; preds = %78
  %80 = load i32, ptr %9, align 4, !tbaa !11
  %81 = add nsw i32 %80, 1
  store i32 %81, ptr %9, align 4, !tbaa !11
  br label %72, !llvm.loop !16

82:                                               ; preds = %77
  br label %83

83:                                               ; preds = %82, %70
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  br label %682

84:                                               ; preds = %3
  br label %682

85:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  %86 = load ptr, ptr %5, align 8, !tbaa !9
  %87 = getelementptr inbounds %struct.__Bt_Attribute_Req_Rsp, ptr %86, i32 0, i32 1
  store ptr %87, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  store i32 0, ptr %11, align 4, !tbaa !11
  br label %88

88:                                               ; preds = %97, %85
  %89 = load i32, ptr %11, align 4, !tbaa !11
  %90 = load ptr, ptr %10, align 8, !tbaa !9
  %91 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %90, i32 0, i32 0
  %92 = load i8, ptr %91, align 1, !tbaa !18
  %93 = zext i8 %92 to i32
  %94 = icmp slt i32 %89, %93
  br i1 %94, label %96, label %95

95:                                               ; preds = %88
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  br label %100

96:                                               ; preds = %88
  br label %97

97:                                               ; preds = %96
  %98 = load i32, ptr %11, align 4, !tbaa !11
  %99 = add nsw i32 %98, 1
  store i32 %99, ptr %11, align 4, !tbaa !11
  br label %88, !llvm.loop !20

100:                                              ; preds = %95
  call void @llvm.lifetime.start.p0(i64 2, ptr %12) #5
  %101 = load ptr, ptr %10, align 8, !tbaa !9
  %102 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %101, i32 0, i32 1
  %103 = getelementptr inbounds [1 x i8], ptr %102, i64 0, i64 0
  %104 = load i8, ptr %103, align 1, !tbaa !15
  %105 = zext i8 %104 to i32
  %106 = load ptr, ptr %10, align 8, !tbaa !9
  %107 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %106, i32 0, i32 1
  %108 = getelementptr inbounds [1 x i8], ptr %107, i64 0, i64 1
  %109 = load i8, ptr %108, align 1, !tbaa !15
  %110 = zext i8 %109 to i32
  %111 = shl i32 %110, 8
  %112 = or i32 %105, %111
  %113 = trunc i32 %112 to i16
  store i16 %113, ptr %12, align 2, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %13) #5
  %114 = load ptr, ptr %10, align 8, !tbaa !9
  %115 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %114, i32 0, i32 1
  %116 = getelementptr inbounds [1 x i8], ptr %115, i64 0, i64 2
  %117 = load i8, ptr %116, align 1, !tbaa !15
  store i8 %117, ptr %13, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 2, ptr %14) #5
  %118 = load ptr, ptr %10, align 8, !tbaa !9
  %119 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %118, i32 0, i32 1
  %120 = getelementptr inbounds [1 x i8], ptr %119, i64 0, i64 3
  %121 = load i8, ptr %120, align 1, !tbaa !15
  %122 = zext i8 %121 to i32
  %123 = load ptr, ptr %10, align 8, !tbaa !9
  %124 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %123, i32 0, i32 1
  %125 = getelementptr inbounds [1 x i8], ptr %124, i64 0, i64 4
  %126 = load i8, ptr %125, align 1, !tbaa !15
  %127 = zext i8 %126 to i32
  %128 = shl i32 %127, 8
  %129 = or i32 %122, %128
  %130 = trunc i32 %129 to i16
  store i16 %130, ptr %14, align 2, !tbaa !5
  %131 = load i16, ptr getelementptr inbounds (%struct.__Bt_Uuid, ptr @g_UuidType, i32 0, i32 1), align 1, !tbaa !15
  %132 = zext i16 %131 to i32
  switch i32 %132, label %451 [
    i32 10243, label %133
    i32 10498, label %314
    i32 10497, label %424
  ]

133:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %134 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %135 = zext i8 %134 to i64
  %136 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 5), i64 0, i64 %135
  %137 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %136, i32 0, i32 3
  %138 = load i8, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 2), align 1, !tbaa !23
  %139 = zext i8 %138 to i64
  %140 = getelementptr inbounds [6 x %struct.BtGattDBChar_t], ptr %137, i64 0, i64 %139
  store ptr %140, ptr %15, align 8, !tbaa !9
  %141 = load ptr, ptr %15, align 8, !tbaa !9
  %142 = getelementptr inbounds %struct.BtGattDBChar_t, ptr %141, i32 0, i32 0
  %143 = getelementptr inbounds %struct.BtGattcChar_t, ptr %142, i32 0, i32 1
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %143, ptr align 1 %13, i64 1, i1 false)
  %144 = load i16, ptr %14, align 2, !tbaa !5
  %145 = load ptr, ptr %15, align 8, !tbaa !9
  %146 = getelementptr inbounds %struct.BtGattDBChar_t, ptr %145, i32 0, i32 0
  %147 = getelementptr inbounds %struct.BtGattcChar_t, ptr %146, i32 0, i32 4
  store i16 %144, ptr %147, align 2, !tbaa !24
  %148 = load ptr, ptr %10, align 8, !tbaa !9
  %149 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %148, i32 0, i32 0
  %150 = load i8, ptr %149, align 1, !tbaa !18
  %151 = zext i8 %150 to i32
  %152 = icmp sle i32 %151, 7
  br i1 %152, label %153, label %183

153:                                              ; preds = %133
  %154 = load ptr, ptr %10, align 8, !tbaa !9
  %155 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %154, i32 0, i32 1
  %156 = getelementptr inbounds [1 x i8], ptr %155, i64 0, i64 5
  %157 = load i8, ptr %156, align 1, !tbaa !15
  %158 = zext i8 %157 to i32
  %159 = load ptr, ptr %10, align 8, !tbaa !9
  %160 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %159, i32 0, i32 1
  %161 = getelementptr inbounds [1 x i8], ptr %160, i64 0, i64 6
  %162 = load i8, ptr %161, align 1, !tbaa !15
  %163 = zext i8 %162 to i32
  %164 = shl i32 %163, 8
  %165 = or i32 %158, %164
  %166 = trunc i32 %165 to i16
  %167 = load ptr, ptr %15, align 8, !tbaa !9
  %168 = getelementptr inbounds %struct.BtGattDBChar_t, ptr %167, i32 0, i32 0
  %169 = getelementptr inbounds %struct.BtGattcChar_t, ptr %168, i32 0, i32 0
  %170 = getelementptr inbounds %struct.__Bt_Uuid16, ptr %169, i32 0, i32 1
  store i16 %166, ptr %170, align 1, !tbaa !30
  %171 = load ptr, ptr %15, align 8, !tbaa !9
  %172 = getelementptr inbounds %struct.BtGattDBChar_t, ptr %171, i32 0, i32 0
  %173 = getelementptr inbounds %struct.BtGattcChar_t, ptr %172, i32 0, i32 0
  %174 = load i8, ptr %173, align 2
  %175 = and i8 %174, -64
  %176 = or i8 %175, 0
  store i8 %176, ptr %173, align 2
  %177 = load ptr, ptr %15, align 8, !tbaa !9
  %178 = getelementptr inbounds %struct.BtGattDBChar_t, ptr %177, i32 0, i32 0
  %179 = getelementptr inbounds %struct.BtGattcChar_t, ptr %178, i32 0, i32 0
  %180 = load i8, ptr %179, align 2
  %181 = and i8 %180, 63
  %182 = or i8 %181, 0
  store i8 %182, ptr %179, align 2
  br label %273

183:                                              ; preds = %133
  %184 = load ptr, ptr %10, align 8, !tbaa !9
  %185 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %184, i32 0, i32 0
  %186 = load i8, ptr %185, align 1, !tbaa !18
  %187 = zext i8 %186 to i32
  %188 = icmp sgt i32 %187, 7
  br i1 %188, label %189, label %222

189:                                              ; preds = %183
  %190 = load ptr, ptr %10, align 8, !tbaa !9
  %191 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %190, i32 0, i32 0
  %192 = load i8, ptr %191, align 1, !tbaa !18
  %193 = zext i8 %192 to i32
  %194 = icmp sle i32 %193, 9
  br i1 %194, label %195, label %222

195:                                              ; preds = %189
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  %196 = load ptr, ptr %10, align 8, !tbaa !9
  %197 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %196, i32 0, i32 1
  %198 = getelementptr inbounds [1 x i8], ptr %197, i64 0, i64 5
  %199 = load i8, ptr %198, align 1, !tbaa !15
  %200 = zext i8 %199 to i32
  %201 = load ptr, ptr %10, align 8, !tbaa !9
  %202 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %201, i32 0, i32 1
  %203 = getelementptr inbounds [1 x i8], ptr %202, i64 0, i64 6
  %204 = load i8, ptr %203, align 1, !tbaa !15
  %205 = zext i8 %204 to i32
  %206 = shl i32 %205, 8
  %207 = or i32 %200, %206
  %208 = load ptr, ptr %10, align 8, !tbaa !9
  %209 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %208, i32 0, i32 1
  %210 = getelementptr inbounds [1 x i8], ptr %209, i64 0, i64 7
  %211 = load i8, ptr %210, align 1, !tbaa !15
  %212 = zext i8 %211 to i32
  %213 = shl i32 %212, 16
  %214 = or i32 %207, %213
  %215 = load ptr, ptr %10, align 8, !tbaa !9
  %216 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %215, i32 0, i32 1
  %217 = getelementptr inbounds [1 x i8], ptr %216, i64 0, i64 8
  %218 = load i8, ptr %217, align 1, !tbaa !15
  %219 = zext i8 %218 to i32
  %220 = shl i32 %219, 24
  %221 = or i32 %214, %220
  store i32 %221, ptr %16, align 4, !tbaa !11
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  br label %272

222:                                              ; preds = %189, %183
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  %223 = load ptr, ptr %10, align 8, !tbaa !9
  %224 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %223, i32 0, i32 1
  %225 = getelementptr inbounds [1 x i8], ptr %224, i64 0, i64 5
  store ptr %225, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 2, ptr %18) #5
  %226 = load ptr, ptr %17, align 8, !tbaa !9
  %227 = getelementptr inbounds i8, ptr %226, i64 12
  %228 = load i8, ptr %227, align 1, !tbaa !15
  %229 = zext i8 %228 to i32
  %230 = load ptr, ptr %17, align 8, !tbaa !9
  %231 = getelementptr inbounds i8, ptr %230, i64 13
  %232 = load i8, ptr %231, align 1, !tbaa !15
  %233 = zext i8 %232 to i32
  %234 = shl i32 %233, 8
  %235 = or i32 %229, %234
  %236 = trunc i32 %235 to i16
  store i16 %236, ptr %18, align 2, !tbaa !5
  %237 = load ptr, ptr %17, align 8, !tbaa !9
  %238 = getelementptr inbounds i8, ptr %237, i64 12
  store i8 0, ptr %238, align 1, !tbaa !15
  %239 = load ptr, ptr %17, align 8, !tbaa !9
  %240 = getelementptr inbounds i8, ptr %239, i64 13
  store i8 0, ptr %240, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  %241 = load ptr, ptr %17, align 8, !tbaa !9
  %242 = call i32 @BtUuidFindBase(ptr noundef %241)
  store i32 %242, ptr %19, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  store i32 0, ptr %20, align 4, !tbaa !11
  br label %243

243:                                              ; preds = %248, %222
  %244 = load i32, ptr %20, align 4, !tbaa !11
  %245 = icmp slt i32 %244, 16
  br i1 %245, label %247, label %246

246:                                              ; preds = %243
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  br label %251

247:                                              ; preds = %243
  br label %248

248:                                              ; preds = %247
  %249 = load i32, ptr %20, align 4, !tbaa !11
  %250 = add nsw i32 %249, 1
  store i32 %250, ptr %20, align 4, !tbaa !11
  br label %243, !llvm.loop !31

251:                                              ; preds = %246
  %252 = load i32, ptr %19, align 4, !tbaa !11
  %253 = trunc i32 %252 to i8
  %254 = load ptr, ptr %15, align 8, !tbaa !9
  %255 = getelementptr inbounds %struct.BtGattDBChar_t, ptr %254, i32 0, i32 0
  %256 = getelementptr inbounds %struct.BtGattcChar_t, ptr %255, i32 0, i32 0
  %257 = load i8, ptr %256, align 2
  %258 = and i8 %253, 63
  %259 = and i8 %257, -64
  %260 = or i8 %259, %258
  store i8 %260, ptr %256, align 2
  %261 = load i16, ptr %18, align 2, !tbaa !5
  %262 = load ptr, ptr %15, align 8, !tbaa !9
  %263 = getelementptr inbounds %struct.BtGattDBChar_t, ptr %262, i32 0, i32 0
  %264 = getelementptr inbounds %struct.BtGattcChar_t, ptr %263, i32 0, i32 0
  %265 = getelementptr inbounds %struct.__Bt_Uuid16, ptr %264, i32 0, i32 1
  store i16 %261, ptr %265, align 1, !tbaa !30
  %266 = load ptr, ptr %15, align 8, !tbaa !9
  %267 = getelementptr inbounds %struct.BtGattDBChar_t, ptr %266, i32 0, i32 0
  %268 = getelementptr inbounds %struct.BtGattcChar_t, ptr %267, i32 0, i32 0
  %269 = load i8, ptr %268, align 2
  %270 = and i8 %269, 63
  %271 = or i8 %270, -128
  store i8 %271, ptr %268, align 2
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  br label %272

272:                                              ; preds = %251, %195
  br label %273

273:                                              ; preds = %272, %153
  %274 = load i8, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 2), align 1, !tbaa !23
  %275 = add i8 %274, 1
  store i8 %275, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 2), align 1, !tbaa !23
  %276 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %277 = zext i8 %276 to i64
  %278 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 5), i64 0, i64 %277
  %279 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %278, i32 0, i32 1
  %280 = load i8, ptr %279, align 1, !tbaa !32
  %281 = add i8 %280, 1
  store i8 %281, ptr %279, align 1, !tbaa !32
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #5
  %282 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %283 = zext i8 %282 to i64
  %284 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 5), i64 0, i64 %283
  %285 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %284, i32 0, i32 2
  %286 = getelementptr inbounds %struct.__Bt_Gattc_Hdl_Range, ptr %285, i32 0, i32 1
  %287 = load i16, ptr %286, align 2, !tbaa !35
  %288 = trunc i16 %287 to i8
  store i8 %288, ptr %21, align 1, !tbaa !15
  %289 = load i16, ptr %12, align 2, !tbaa !5
  %290 = zext i16 %289 to i32
  %291 = add nsw i32 %290, 1
  %292 = load i8, ptr %21, align 1, !tbaa !15
  %293 = zext i8 %292 to i32
  %294 = icmp sle i32 %291, %293
  br i1 %294, label %295, label %313

295:                                              ; preds = %273
  %296 = load i16, ptr %12, align 2, !tbaa !5
  %297 = zext i16 %296 to i32
  %298 = add nsw i32 %297, 1
  %299 = trunc i32 %298 to i8
  store i8 %299, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 1), align 1, !tbaa !36
  %300 = load i8, ptr @g_UuidType, align 1
  %301 = and i8 %300, -64
  %302 = or i8 %301, 0
  store i8 %302, ptr @g_UuidType, align 1
  %303 = load i8, ptr @g_UuidType, align 1
  %304 = and i8 %303, 63
  %305 = or i8 %304, 0
  store i8 %305, ptr @g_UuidType, align 1
  %306 = load ptr, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 4), align 8, !tbaa !37
  %307 = load i16, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 2), align 4, !tbaa !39
  %308 = load i8, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 1), align 1, !tbaa !36
  %309 = zext i8 %308 to i16
  %310 = load i8, ptr %21, align 1, !tbaa !15
  %311 = zext i8 %310 to i16
  %312 = call zeroext i1 @BtAttReadByTypeRequest(ptr noundef %306, i16 noundef zeroext %307, i16 noundef zeroext %309, i16 noundef zeroext %311, ptr noundef @g_UuidType)
  br label %313

313:                                              ; preds = %295, %273
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  br label %452

314:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %315 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %316 = zext i8 %315 to i64
  %317 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 5), i64 0, i64 %316
  %318 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %317, i32 0, i32 3
  %319 = load i8, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 2), align 1, !tbaa !23
  %320 = zext i8 %319 to i64
  %321 = getelementptr inbounds [6 x %struct.BtGattDBChar_t], ptr %318, i64 0, i64 %320
  store ptr %321, ptr %22, align 8, !tbaa !9
  %322 = load ptr, ptr %22, align 8, !tbaa !9
  %323 = getelementptr inbounds %struct.BtGattDBChar_t, ptr %322, i32 0, i32 0
  %324 = getelementptr inbounds %struct.BtGattcChar_t, ptr %323, i32 0, i32 1
  %325 = load i8, ptr %324, align 1
  %326 = lshr i8 %325, 4
  %327 = and i8 %326, 1
  %328 = icmp ne i8 %327, 0
  br i1 %328, label %337, label %329

329:                                              ; preds = %314
  %330 = load ptr, ptr %22, align 8, !tbaa !9
  %331 = getelementptr inbounds %struct.BtGattDBChar_t, ptr %330, i32 0, i32 0
  %332 = getelementptr inbounds %struct.BtGattcChar_t, ptr %331, i32 0, i32 1
  %333 = load i8, ptr %332, align 1
  %334 = lshr i8 %333, 5
  %335 = and i8 %334, 1
  %336 = icmp ne i8 %335, 0
  br i1 %336, label %337, label %341

337:                                              ; preds = %329, %314
  %338 = load i16, ptr %12, align 2, !tbaa !5
  %339 = load ptr, ptr %22, align 8, !tbaa !9
  %340 = getelementptr inbounds %struct.BtGattDBChar_t, ptr %339, i32 0, i32 1
  store i16 %338, ptr %340, align 2, !tbaa !40
  br label %341

341:                                              ; preds = %337, %329
  call void @llvm.lifetime.start.p0(i64 1, ptr %23) #5
  store i8 0, ptr %23, align 1, !tbaa !41
  %342 = load i8, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 2), align 1, !tbaa !23
  %343 = add i8 %342, 1
  store i8 %343, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 2), align 1, !tbaa !23
  %344 = load i8, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 2), align 1, !tbaa !23
  %345 = zext i8 %344 to i32
  %346 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %347 = zext i8 %346 to i64
  %348 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 5), i64 0, i64 %347
  %349 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %348, i32 0, i32 1
  %350 = load i8, ptr %349, align 1, !tbaa !32
  %351 = zext i8 %350 to i32
  %352 = icmp slt i32 %345, %351
  br i1 %352, label %353, label %388

353:                                              ; preds = %341
  %354 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %355 = zext i8 %354 to i64
  %356 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 5), i64 0, i64 %355
  %357 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %356, i32 0, i32 3
  %358 = load i8, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 2), align 1, !tbaa !23
  %359 = zext i8 %358 to i64
  %360 = getelementptr inbounds [6 x %struct.BtGattDBChar_t], ptr %357, i64 0, i64 %359
  store ptr %360, ptr %22, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #5
  %361 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %362 = zext i8 %361 to i64
  %363 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 5), i64 0, i64 %362
  %364 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %363, i32 0, i32 2
  %365 = getelementptr inbounds %struct.__Bt_Gattc_Hdl_Range, ptr %364, i32 0, i32 1
  %366 = load i16, ptr %365, align 2, !tbaa !35
  %367 = trunc i16 %366 to i8
  store i8 %367, ptr %24, align 1, !tbaa !15
  %368 = load i16, ptr %12, align 2, !tbaa !5
  %369 = zext i16 %368 to i32
  %370 = add nsw i32 %369, 1
  %371 = load i8, ptr %24, align 1, !tbaa !15
  %372 = zext i8 %371 to i32
  %373 = icmp sle i32 %370, %372
  br i1 %373, label %374, label %386

374:                                              ; preds = %353
  %375 = load i16, ptr %12, align 2, !tbaa !5
  %376 = zext i16 %375 to i32
  %377 = add nsw i32 %376, 1
  %378 = trunc i32 %377 to i8
  store i8 %378, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 1), align 1, !tbaa !36
  %379 = load ptr, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 4), align 8, !tbaa !37
  %380 = load i16, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 2), align 4, !tbaa !39
  %381 = load i8, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 1), align 1, !tbaa !36
  %382 = zext i8 %381 to i16
  %383 = load i8, ptr %24, align 1, !tbaa !15
  %384 = zext i8 %383 to i16
  %385 = call zeroext i1 @BtAttReadByTypeRequest(ptr noundef %379, i16 noundef zeroext %380, i16 noundef zeroext %382, i16 noundef zeroext %384, ptr noundef @g_UuidType)
  br label %387

386:                                              ; preds = %353
  store i8 1, ptr %23, align 1, !tbaa !41
  br label %387

387:                                              ; preds = %386, %374
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #5
  br label %389

388:                                              ; preds = %341
  store i8 1, ptr %23, align 1, !tbaa !41
  br label %389

389:                                              ; preds = %388, %387
  %390 = load i8, ptr %23, align 1, !tbaa !41, !range !43, !noundef !44
  %391 = trunc i8 %390 to i1
  br i1 %391, label %392, label %423

392:                                              ; preds = %389
  %393 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %394 = add i8 %393, 1
  store i8 %394, ptr @g_CurIdx, align 1, !tbaa !21
  %395 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %396 = zext i8 %395 to i32
  %397 = load i32, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 3), align 8, !tbaa !45
  %398 = icmp slt i32 %396, %397
  br i1 %398, label %399, label %421

399:                                              ; preds = %392
  %400 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %401 = zext i8 %400 to i64
  %402 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 5), i64 0, i64 %401
  %403 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %402, i32 0, i32 2
  %404 = getelementptr inbounds %struct.__Bt_Gattc_Hdl_Range, ptr %403, i32 0, i32 0
  %405 = load i16, ptr %404, align 4, !tbaa !46
  %406 = trunc i16 %405 to i8
  store i8 %406, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 1), align 1, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #5
  %407 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %408 = zext i8 %407 to i64
  %409 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 5), i64 0, i64 %408
  %410 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %409, i32 0, i32 2
  %411 = getelementptr inbounds %struct.__Bt_Gattc_Hdl_Range, ptr %410, i32 0, i32 1
  %412 = load i16, ptr %411, align 2, !tbaa !35
  %413 = trunc i16 %412 to i8
  store i8 %413, ptr %25, align 1, !tbaa !15
  %414 = load ptr, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 4), align 8, !tbaa !37
  %415 = load i16, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 2), align 4, !tbaa !39
  %416 = load i8, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 1), align 1, !tbaa !36
  %417 = zext i8 %416 to i16
  %418 = load i8, ptr %25, align 1, !tbaa !15
  %419 = zext i8 %418 to i16
  %420 = call zeroext i1 @BtAttReadByTypeRequest(ptr noundef %414, i16 noundef zeroext %415, i16 noundef zeroext %417, i16 noundef zeroext %419, ptr noundef @g_UuidType)
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #5
  br label %422

421:                                              ; preds = %392
  br label %422

422:                                              ; preds = %421, %399
  br label %423

423:                                              ; preds = %422, %389
  call void @llvm.lifetime.end.p0(i64 1, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  br label %452

424:                                              ; preds = %100
  call void @llvm.lifetime.start.p0(i64 2, ptr %26) #5
  %425 = load ptr, ptr %10, align 8, !tbaa !9
  %426 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %425, i32 0, i32 1
  %427 = getelementptr inbounds [1 x i8], ptr %426, i64 0, i64 0
  %428 = load i8, ptr %427, align 1, !tbaa !15
  %429 = zext i8 %428 to i32
  %430 = load ptr, ptr %10, align 8, !tbaa !9
  %431 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %430, i32 0, i32 1
  %432 = getelementptr inbounds [1 x i8], ptr %431, i64 0, i64 1
  %433 = load i8, ptr %432, align 1, !tbaa !15
  %434 = zext i8 %433 to i32
  %435 = shl i32 %434, 8
  %436 = or i32 %429, %435
  %437 = trunc i32 %436 to i16
  store i16 %437, ptr %26, align 2, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #5
  store i32 2, ptr %27, align 4, !tbaa !11
  br label %438

438:                                              ; preds = %447, %424
  %439 = load i32, ptr %27, align 4, !tbaa !11
  %440 = load ptr, ptr %10, align 8, !tbaa !9
  %441 = getelementptr inbounds %struct.__Bt_Att_Read_By_Type_Rsp, ptr %440, i32 0, i32 0
  %442 = load i8, ptr %441, align 1, !tbaa !18
  %443 = zext i8 %442 to i32
  %444 = icmp slt i32 %439, %443
  br i1 %444, label %446, label %445

445:                                              ; preds = %438
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #5
  br label %450

446:                                              ; preds = %438
  br label %447

447:                                              ; preds = %446
  %448 = load i32, ptr %27, align 4, !tbaa !11
  %449 = add nsw i32 %448, 1
  store i32 %449, ptr %27, align 4, !tbaa !11
  br label %438, !llvm.loop !47

450:                                              ; preds = %445
  call void @llvm.lifetime.end.p0(i64 2, ptr %26) #5
  br label %452

451:                                              ; preds = %100
  br label %452

452:                                              ; preds = %451, %450, %423, %313
  call void @llvm.lifetime.end.p0(i64 2, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  br label %682

453:                                              ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %454 = load ptr, ptr %5, align 8, !tbaa !9
  %455 = getelementptr inbounds %struct.__Bt_Attribute_Req_Rsp, ptr %454, i32 0, i32 1
  store ptr %455, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #5
  store i32 0, ptr %29, align 4, !tbaa !11
  br label %456

456:                                              ; preds = %462, %453
  %457 = load i32, ptr %29, align 4, !tbaa !11
  %458 = load i32, ptr %6, align 4, !tbaa !11
  %459 = icmp slt i32 %457, %458
  br i1 %459, label %461, label %460

460:                                              ; preds = %456
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #5
  br label %465

461:                                              ; preds = %456
  br label %462

462:                                              ; preds = %461
  %463 = load i32, ptr %29, align 4, !tbaa !11
  %464 = add nsw i32 %463, 1
  store i32 %464, ptr %29, align 4, !tbaa !11
  br label %456, !llvm.loop !48

465:                                              ; preds = %460
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  %466 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %467 = zext i8 %466 to i64
  %468 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 5), i64 0, i64 %467
  store ptr %468, ptr %30, align 8, !tbaa !9
  %469 = load i8, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 1), align 1, !tbaa !36
  %470 = add i8 %469, 1
  store i8 %470, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 1), align 1, !tbaa !36
  %471 = load i8, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 1), align 1, !tbaa !36
  %472 = zext i8 %471 to i32
  %473 = load ptr, ptr %30, align 8, !tbaa !9
  %474 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %473, i32 0, i32 2
  %475 = getelementptr inbounds %struct.__Bt_Gattc_Hdl_Range, ptr %474, i32 0, i32 1
  %476 = load i16, ptr %475, align 2, !tbaa !35
  %477 = zext i16 %476 to i32
  %478 = icmp sgt i32 %472, %477
  br i1 %478, label %479, label %505

479:                                              ; preds = %465
  %480 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %481 = zext i8 %480 to i32
  %482 = load i32, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 3), align 8, !tbaa !45
  %483 = sub nsw i32 %482, 1
  %484 = icmp slt i32 %481, %483
  br i1 %484, label %485, label %503

485:                                              ; preds = %479
  %486 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %487 = add i8 %486, 1
  store i8 %487, ptr @g_CurIdx, align 1, !tbaa !21
  %488 = load i8, ptr @g_CurIdx, align 1, !tbaa !21
  %489 = zext i8 %488 to i64
  %490 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 5), i64 0, i64 %489
  store ptr %490, ptr %30, align 8, !tbaa !9
  %491 = load ptr, ptr %30, align 8, !tbaa !9
  %492 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %491, i32 0, i32 2
  %493 = getelementptr inbounds %struct.__Bt_Gattc_Hdl_Range, ptr %492, i32 0, i32 0
  %494 = load i16, ptr %493, align 2, !tbaa !46
  %495 = zext i16 %494 to i32
  %496 = add nsw i32 %495, 1
  %497 = trunc i32 %496 to i8
  store i8 %497, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 1), align 1, !tbaa !36
  %498 = load ptr, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 4), align 8, !tbaa !37
  %499 = load i16, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 2), align 4, !tbaa !39
  %500 = load i8, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 1), align 1, !tbaa !36
  %501 = zext i8 %500 to i16
  %502 = call zeroext i1 @BtAttReadRequest(ptr noundef %498, i16 noundef zeroext %499, i16 noundef zeroext %501)
  br label %504

503:                                              ; preds = %479
  br label %504

504:                                              ; preds = %503, %485
  br label %511

505:                                              ; preds = %465
  %506 = load ptr, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 4), align 8, !tbaa !37
  %507 = load i16, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 2), align 4, !tbaa !39
  %508 = load i8, ptr getelementptr inbounds (%struct.CurParseInf_t, ptr @g_CurIdx, i32 0, i32 1), align 1, !tbaa !36
  %509 = zext i8 %508 to i16
  %510 = call zeroext i1 @BtAttReadRequest(ptr noundef %506, i16 noundef zeroext %507, i16 noundef zeroext %509)
  br label %511

511:                                              ; preds = %505, %504
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %682

512:                                              ; preds = %3
  br label %682

513:                                              ; preds = %3
  br label %682

514:                                              ; preds = %3
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %515 = load ptr, ptr %5, align 8, !tbaa !9
  %516 = getelementptr inbounds %struct.__Bt_Attribute_Req_Rsp, ptr %515, i32 0, i32 1
  store ptr %516, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #5
  store i32 0, ptr %32, align 4, !tbaa !11
  br label %517

517:                                              ; preds = %526, %514
  %518 = load i32, ptr %32, align 4, !tbaa !11
  %519 = load ptr, ptr %31, align 8, !tbaa !9
  %520 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp, ptr %519, i32 0, i32 0
  %521 = load i8, ptr %520, align 1, !tbaa !49
  %522 = zext i8 %521 to i32
  %523 = icmp slt i32 %518, %522
  br i1 %523, label %525, label %524

524:                                              ; preds = %517
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  br label %529

525:                                              ; preds = %517
  br label %526

526:                                              ; preds = %525
  %527 = load i32, ptr %32, align 4, !tbaa !11
  %528 = add nsw i32 %527, 1
  store i32 %528, ptr %32, align 4, !tbaa !11
  br label %517, !llvm.loop !51

529:                                              ; preds = %524
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #5
  store i8 0, ptr %33, align 1, !tbaa !41
  call void @llvm.lifetime.start.p0(i64 2, ptr %34) #5
  %530 = load i32, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 3), align 8, !tbaa !45
  %531 = add nsw i32 %530, 1
  store i32 %531, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 3), align 8, !tbaa !45
  call void @llvm.lifetime.start.p0(i64 1, ptr %35) #5
  %532 = load i32, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 3), align 8, !tbaa !45
  %533 = sub nsw i32 %532, 1
  %534 = trunc i32 %533 to i8
  store i8 %534, ptr %35, align 1, !tbaa !15
  %535 = load ptr, ptr %31, align 8, !tbaa !9
  %536 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp, ptr %535, i32 0, i32 0
  %537 = load i8, ptr %536, align 1, !tbaa !49
  %538 = zext i8 %537 to i32
  %539 = icmp sle i32 %538, 6
  br i1 %539, label %540, label %598

540:                                              ; preds = %529
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %541 = load ptr, ptr %31, align 8, !tbaa !9
  %542 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp, ptr %541, i32 0, i32 1
  %543 = getelementptr inbounds [1 x i8], ptr %542, i64 0, i64 0
  store ptr %543, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  %544 = load i8, ptr %35, align 1, !tbaa !15
  %545 = zext i8 %544 to i64
  %546 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 5), i64 0, i64 %545
  store ptr %546, ptr %37, align 8, !tbaa !9
  %547 = load ptr, ptr %36, align 8, !tbaa !9
  %548 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid16, ptr %547, i32 0, i32 0
  %549 = load i16, ptr %548, align 1, !tbaa !52
  %550 = load ptr, ptr %37, align 8, !tbaa !9
  %551 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %550, i32 0, i32 2
  %552 = getelementptr inbounds %struct.__Bt_Gattc_Hdl_Range, ptr %551, i32 0, i32 0
  store i16 %549, ptr %552, align 2, !tbaa !46
  %553 = load ptr, ptr %36, align 8, !tbaa !9
  %554 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid16, ptr %553, i32 0, i32 1
  %555 = load i16, ptr %554, align 1, !tbaa !54
  %556 = load ptr, ptr %37, align 8, !tbaa !9
  %557 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %556, i32 0, i32 2
  %558 = getelementptr inbounds %struct.__Bt_Gattc_Hdl_Range, ptr %557, i32 0, i32 1
  store i16 %555, ptr %558, align 2, !tbaa !35
  %559 = load ptr, ptr %36, align 8, !tbaa !9
  %560 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid16, ptr %559, i32 0, i32 2
  %561 = load i16, ptr %560, align 1, !tbaa !55
  %562 = load ptr, ptr %37, align 8, !tbaa !9
  %563 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %562, i32 0, i32 0
  %564 = getelementptr inbounds %struct.__Bt_Uuid16, ptr %563, i32 0, i32 1
  store i16 %561, ptr %564, align 1, !tbaa !56
  %565 = load ptr, ptr %37, align 8, !tbaa !9
  %566 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %565, i32 0, i32 0
  %567 = load i8, ptr %566, align 2
  %568 = and i8 %567, -64
  %569 = or i8 %568, 0
  store i8 %569, ptr %566, align 2
  %570 = load ptr, ptr %37, align 8, !tbaa !9
  %571 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %570, i32 0, i32 0
  %572 = load i8, ptr %571, align 2
  %573 = and i8 %572, 63
  %574 = or i8 %573, 0
  store i8 %574, ptr %571, align 2
  %575 = load ptr, ptr %36, align 8, !tbaa !9
  %576 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid16, ptr %575, i32 0, i32 1
  %577 = load i16, ptr %576, align 1, !tbaa !54
  %578 = zext i16 %577 to i32
  %579 = icmp ne i32 %578, 65535
  %580 = zext i1 %579 to i64
  %581 = select i1 %579, i1 true, i1 false
  %582 = zext i1 %581 to i8
  store i8 %582, ptr %33, align 1, !tbaa !41
  %583 = load ptr, ptr %36, align 8, !tbaa !9
  %584 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid16, ptr %583, i32 0, i32 1
  %585 = load i16, ptr %584, align 1, !tbaa !54
  %586 = zext i16 %585 to i32
  %587 = icmp ne i32 %586, 65535
  br i1 %587, label %588, label %594

588:                                              ; preds = %540
  %589 = load ptr, ptr %36, align 8, !tbaa !9
  %590 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid16, ptr %589, i32 0, i32 1
  %591 = load i16, ptr %590, align 1, !tbaa !54
  %592 = zext i16 %591 to i32
  %593 = add nsw i32 %592, 1
  br label %595

594:                                              ; preds = %540
  br label %595

595:                                              ; preds = %594, %588
  %596 = phi i32 [ %593, %588 ], [ 65535, %594 ]
  %597 = trunc i32 %596 to i16
  store i16 %597, ptr %34, align 2, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  br label %670

598:                                              ; preds = %529
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  %599 = load ptr, ptr %31, align 8, !tbaa !9
  %600 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp, ptr %599, i32 0, i32 1
  %601 = getelementptr inbounds [1 x i8], ptr %600, i64 0, i64 0
  store ptr %601, ptr %38, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  store i32 0, ptr %39, align 4, !tbaa !11
  br label %602

602:                                              ; preds = %607, %598
  %603 = load i32, ptr %39, align 4, !tbaa !11
  %604 = icmp slt i32 %603, 16
  br i1 %604, label %606, label %605

605:                                              ; preds = %602
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  br label %610

606:                                              ; preds = %602
  br label %607

607:                                              ; preds = %606
  %608 = load i32, ptr %39, align 4, !tbaa !11
  %609 = add nsw i32 %608, 1
  store i32 %609, ptr %39, align 4, !tbaa !11
  br label %602, !llvm.loop !57

610:                                              ; preds = %605
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  %611 = load i8, ptr %35, align 1, !tbaa !15
  %612 = zext i8 %611 to i64
  %613 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 5), i64 0, i64 %612
  store ptr %613, ptr %40, align 8, !tbaa !9
  %614 = load ptr, ptr %38, align 8, !tbaa !9
  %615 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid128, ptr %614, i32 0, i32 0
  %616 = load i16, ptr %615, align 1, !tbaa !58
  %617 = load ptr, ptr %40, align 8, !tbaa !9
  %618 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %617, i32 0, i32 2
  %619 = getelementptr inbounds %struct.__Bt_Gattc_Hdl_Range, ptr %618, i32 0, i32 0
  store i16 %616, ptr %619, align 2, !tbaa !46
  %620 = load ptr, ptr %38, align 8, !tbaa !9
  %621 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid128, ptr %620, i32 0, i32 1
  %622 = load i16, ptr %621, align 1, !tbaa !60
  %623 = load ptr, ptr %40, align 8, !tbaa !9
  %624 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %623, i32 0, i32 2
  %625 = getelementptr inbounds %struct.__Bt_Gattc_Hdl_Range, ptr %624, i32 0, i32 1
  store i16 %622, ptr %625, align 2, !tbaa !35
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  %626 = load ptr, ptr %40, align 8, !tbaa !9
  %627 = getelementptr inbounds %struct.BtGattDBSrvc_t, ptr %626, i32 0, i32 0
  %628 = load ptr, ptr %38, align 8, !tbaa !9
  %629 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid128, ptr %628, i32 0, i32 2
  %630 = getelementptr inbounds [16 x i8], ptr %629, i64 0, i64 0
  %631 = call i32 @BtUuid128To16(ptr noundef %627, ptr noundef %630)
  store i32 %631, ptr %41, align 4, !tbaa !11
  %632 = load ptr, ptr %38, align 8, !tbaa !9
  %633 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid128, ptr %632, i32 0, i32 2
  %634 = getelementptr inbounds [16 x i8], ptr %633, i64 0, i64 12
  store i8 0, ptr %634, align 1, !tbaa !15
  %635 = load ptr, ptr %38, align 8, !tbaa !9
  %636 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid128, ptr %635, i32 0, i32 2
  %637 = getelementptr inbounds [16 x i8], ptr %636, i64 0, i64 13
  store i8 0, ptr %637, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  store i32 0, ptr %42, align 4, !tbaa !11
  br label %638

638:                                              ; preds = %643, %610
  %639 = load i32, ptr %42, align 4, !tbaa !11
  %640 = icmp slt i32 %639, 16
  br i1 %640, label %642, label %641

641:                                              ; preds = %638
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  br label %646

642:                                              ; preds = %638
  br label %643

643:                                              ; preds = %642
  %644 = load i32, ptr %42, align 4, !tbaa !11
  %645 = add nsw i32 %644, 1
  store i32 %645, ptr %42, align 4, !tbaa !11
  br label %638, !llvm.loop !61

646:                                              ; preds = %641
  %647 = load ptr, ptr %38, align 8, !tbaa !9
  %648 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid128, ptr %647, i32 0, i32 1
  %649 = load i16, ptr %648, align 1, !tbaa !60
  %650 = zext i16 %649 to i32
  %651 = icmp ne i32 %650, 65535
  %652 = zext i1 %651 to i64
  %653 = select i1 %651, i1 true, i1 false
  %654 = zext i1 %653 to i8
  store i8 %654, ptr %33, align 1, !tbaa !41
  %655 = load ptr, ptr %38, align 8, !tbaa !9
  %656 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid128, ptr %655, i32 0, i32 1
  %657 = load i16, ptr %656, align 1, !tbaa !60
  %658 = zext i16 %657 to i32
  %659 = icmp ne i32 %658, 65535
  br i1 %659, label %660, label %666

660:                                              ; preds = %646
  %661 = load ptr, ptr %38, align 8, !tbaa !9
  %662 = getelementptr inbounds %struct.__Bt_Att_Read_By_Group_Type_Rsp_Uuid128, ptr %661, i32 0, i32 1
  %663 = load i16, ptr %662, align 1, !tbaa !60
  %664 = zext i16 %663 to i32
  %665 = add nsw i32 %664, 1
  br label %667

666:                                              ; preds = %646
  br label %667

667:                                              ; preds = %666, %660
  %668 = phi i32 [ %665, %660 ], [ 65535, %666 ]
  %669 = trunc i32 %668 to i16
  store i16 %669, ptr %34, align 2, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  br label %670

670:                                              ; preds = %667, %595
  %671 = load i8, ptr %33, align 1, !tbaa !41, !range !43, !noundef !44
  %672 = trunc i8 %671 to i1
  br i1 %672, label %673, label %678

673:                                              ; preds = %670
  call void @llvm.lifetime.start.p0(i64 5, ptr %43) #5
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %43, ptr align 1 @__const.BtAttProcessRsp.Uuid, i64 5, i1 false)
  %674 = load ptr, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 4), align 8, !tbaa !37
  %675 = load i16, ptr getelementptr inbounds (%struct.__Bt_Dev_Data, ptr @g_BtDevSdc, i32 0, i32 2), align 4, !tbaa !39
  %676 = load i16, ptr %34, align 2, !tbaa !5
  %677 = call zeroext i1 @BtAttReadByGroupTypeRequest(ptr noundef %674, i16 noundef zeroext %675, i16 noundef zeroext %676, i16 noundef zeroext -1, ptr noundef %43)
  call void @llvm.lifetime.end.p0(i64 5, ptr %43) #5
  br label %678

678:                                              ; preds = %673, %670
  call void @llvm.lifetime.end.p0(i64 1, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 2, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  br label %682

679:                                              ; preds = %3
  br label %682

680:                                              ; preds = %3
  br label %682

681:                                              ; preds = %3
  br label %682

682:                                              ; preds = %681, %680, %679, %678, %513, %512, %511, %452, %84, %83, %53, %48, %3
  ret void
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL3minii(i32 noundef, i32 noundef) #3

declare zeroext i16 @BtAttGetMtu() #2

declare zeroext i16 @BtAttSetMtu(i16 noundef zeroext) #2

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

declare i32 @BtUuidFindBase(ptr noundef) #2

declare zeroext i1 @BtAttReadRequest(ptr noundef, i16 noundef zeroext, i16 noundef zeroext) #2

declare i32 @BtUuid128To16(ptr noundef, ptr noundef) #2

declare zeroext i1 @BtAttReadByGroupTypeRequest(ptr noundef, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext, ptr noundef) #2

attributes #0 = { mustprogress 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 = { inlinehint mustprogress 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: readwrite) }
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 = !{!"short", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !7, i64 0}
!14 = !{!"_ZTS22__Bt_Attribute_Req_Rsp", !7, i64 0, !7, i64 1}
!15 = !{!7, !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!19, !7, i64 0}
!19 = !{!"_ZTS25__Bt_Att_Read_By_Type_Rsp", !7, i64 0, !7, i64 1}
!20 = distinct !{!20, !17}
!21 = !{!22, !7, i64 0}
!22 = !{!"_ZTS13CurParseInf_t", !7, i64 0, !7, i64 1, !7, i64 2}
!23 = !{!22, !7, i64 2}
!24 = !{!25, !6, i64 8}
!25 = !{!"_ZTS14BtGattDBChar_t", !26, i64 0, !6, i64 10, !6, i64 12, !6, i64 14, !6, i64 16}
!26 = !{!"_ZTS13BtGattcChar_t", !27, i64 0, !29, i64 3, !7, i64 4, !6, i64 6, !6, i64 8}
!27 = !{!"_ZTS11__Bt_Uuid16", !7, i64 0, !28, i64 0, !6, i64 1}
!28 = !{!"_ZTS14__Bt_Uuid_Type", !7, i64 0}
!29 = !{!"_ZTS17BtGattCharProps_t", !7, i64 0, !7, i64 0, !7, i64 0, !7, i64 0, !7, i64 0, !7, i64 0, !7, i64 0}
!30 = !{!25, !6, i64 1}
!31 = distinct !{!31, !17}
!32 = !{!33, !7, i64 3}
!33 = !{!"_ZTS14BtGattDBSrvc_t", !27, i64 0, !7, i64 3, !34, i64 4, !7, i64 8}
!34 = !{!"_ZTS20__Bt_Gattc_Hdl_Range", !6, i64 0, !6, i64 2}
!35 = !{!33, !6, i64 6}
!36 = !{!22, !7, i64 1}
!37 = !{!38, !10, i64 48}
!38 = !{!"_ZTS13__Bt_Dev_Data", !7, i64 0, !7, i64 30, !6, i64 36, !12, i64 40, !10, i64 48, !7, i64 56}
!39 = !{!38, !6, i64 36}
!40 = !{!25, !6, i64 10}
!41 = !{!42, !42, i64 0}
!42 = !{!"bool", !7, i64 0}
!43 = !{i8 0, i8 2}
!44 = !{}
!45 = !{!38, !12, i64 40}
!46 = !{!33, !6, i64 4}
!47 = distinct !{!47, !17}
!48 = distinct !{!48, !17}
!49 = !{!50, !7, i64 0}
!50 = !{!"_ZTS31__Bt_Att_Read_By_Group_Type_Rsp", !7, i64 0, !7, i64 1}
!51 = distinct !{!51, !17}
!52 = !{!53, !6, i64 0}
!53 = !{!"_ZTS38__Bt_Att_Read_By_Group_Type_Rsp_Uuid16", !6, i64 0, !6, i64 2, !6, i64 4}
!54 = !{!53, !6, i64 2}
!55 = !{!53, !6, i64 4}
!56 = !{!33, !6, i64 1}
!57 = distinct !{!57, !17}
!58 = !{!59, !6, i64 0}
!59 = !{!"_ZTS39__Bt_Att_Read_By_Group_Type_Rsp_Uuid128", !6, i64 0, !6, i64 2, !7, i64 4}
!60 = !{!59, !6, i64 2}
!61 = distinct !{!61, !17}


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

%struct.CurParseInf_t = type { i8, i8, i8 }
%struct.__Bt_Dev_Data = type { [30 x i8], [6 x i8], i16, i32, ptr, [10 x %struct.BtGattDBSrvc_t] }
%struct.BtGattDBSrvc_t = type { %struct.__Bt_Uuid16, i8, %struct.__Bt_Gattc_Hdl_Range, [6 x %struct.BtGattDBChar_t] }
%struct.__Bt_Uuid16 = type <{ i8, i16 }>
%struct.__Bt_Gattc_Hdl_Range = type { i16, i16 }
%struct.BtGattDBChar_t = type { %struct.BtGattcChar_t, i16, i16, i16, i16 }
%struct.BtGattcChar_t = type { %struct.__Bt_Uuid16, %struct.BtGattCharProps_t, i8, i16, i16 }
%struct.BtGattCharProps_t = type { i8 }
%struct.__Bt_Uuid = type <{ i8, %union.anon.1 }>
%union.anon.1 = type { i32 }

@g_CurIdx = external dso_local local_unnamed_addr global %struct.CurParseInf_t, align 1
@g_BtDevSdc = external global %struct.__Bt_Dev_Data, align 8
@g_UuidType = external global %struct.__Bt_Uuid, align 1
@__const.BtAttProcessRsp.Uuid = external hidden unnamed_addr constant <{ i8, { i16, [2 x i8] } }>, align 1

; Function Attrs: mustprogress uwtable
declare dso_local i32 @BtAttProcessError(i16 noundef zeroext, ptr noundef, i32 noundef) local_unnamed_addr #0

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

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

declare zeroext i1 @BtAttReadByTypeRequest(ptr noundef, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
define dso_local void @BtAttProcessRsp(i16 noundef zeroext %0, ptr noundef %1, i32 noundef %2) local_unnamed_addr #0 {
  %4 = alloca %struct.__Bt_Uuid, align 1
  %5 = load i8, ptr %1, align 1, !tbaa !5
  %6 = zext i8 %5 to i32
  %7 = add nsw i32 %6, -1
  %8 = tail call i32 @llvm.fshl.i32(i32 %7, i32 %7, i32 31)
  switch i32 %8, label %.loopexit [
    i32 0, label %17
    i32 1, label %19
    i32 5, label %.preheader137.preheader
    i32 8, label %145
    i32 4, label %28
  ]

.preheader137.preheader:                          ; preds = %3
  %9 = load i8, ptr @g_CurIdx, align 1, !tbaa !9
  %10 = zext i8 %9 to i64
  %11 = load i8, ptr getelementptr inbounds (i8, ptr @g_CurIdx, i64 1), align 1, !tbaa !11
  %12 = add i8 %11, 1
  store i8 %12, ptr getelementptr inbounds (i8, ptr @g_CurIdx, i64 1), align 1, !tbaa !11
  %13 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 56), i64 0, i64 %10, i32 2, i32 1
  %14 = load i16, ptr %13, align 2, !tbaa !12
  %15 = zext i8 %12 to i16
  %16 = icmp ult i16 %14, %15
  br i1 %16, label %125, label %141

17:                                               ; preds = %3
  %18 = tail call i32 @BtAttProcessError(i16 noundef zeroext %0, ptr noundef nonnull %1, i32 noundef %2)
  br label %.loopexit

19:                                               ; preds = %3
  %20 = tail call zeroext i16 @BtAttGetMtu()
  %21 = zext i16 %20 to i32
  %22 = getelementptr inbounds i8, ptr %1, i64 1
  %23 = load i16, ptr %22, align 1, !tbaa !18
  %24 = zext i16 %23 to i32
  %25 = tail call noundef i32 @_ZL3minii(i32 noundef %21, i32 noundef %24)
  %26 = trunc i32 %25 to i16
  %27 = tail call zeroext i16 @BtAttSetMtu(i16 noundef zeroext %26)
  br label %.loopexit

28:                                               ; preds = %3
  %29 = getelementptr inbounds i8, ptr %1, i64 2
  %30 = load i8, ptr %29, align 1, !tbaa !18
  %31 = zext i8 %30 to i16
  %32 = getelementptr inbounds i8, ptr %1, i64 3
  %33 = load i8, ptr %32, align 1, !tbaa !18
  %34 = zext i8 %33 to i16
  %35 = shl nuw i16 %34, 8
  %36 = or disjoint i16 %35, %31
  %37 = load i16, ptr getelementptr inbounds (i8, ptr @g_UuidType, i64 1), align 1, !tbaa !18
  switch i16 %37, label %.loopexit [
    i16 10243, label %38
    i16 10498, label %83
  ]

38:                                               ; preds = %28
  %39 = getelementptr inbounds i8, ptr %1, i64 1
  %40 = getelementptr inbounds i8, ptr %1, i64 5
  %41 = load i16, ptr %40, align 1
  %42 = getelementptr inbounds i8, ptr %1, i64 4
  %43 = load i8, ptr %42, align 1, !tbaa !18
  %44 = load i8, ptr @g_CurIdx, align 1, !tbaa !9
  %45 = zext i8 %44 to i64
  %46 = load i8, ptr getelementptr inbounds (i8, ptr @g_CurIdx, i64 2), align 1, !tbaa !19
  %47 = zext i8 %46 to i64
  %48 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 56), i64 0, i64 %45, i32 3, i64 %47
  %49 = getelementptr inbounds i8, ptr %48, i64 3
  store i8 %43, ptr %49, align 1
  %50 = getelementptr inbounds i8, ptr %48, i64 8
  store i16 %41, ptr %50, align 2, !tbaa !20
  %51 = load i8, ptr %39, align 1, !tbaa !24
  %52 = icmp ult i8 %51, 8
  br i1 %52, label %53, label %57

53:                                               ; preds = %38
  %54 = getelementptr inbounds i8, ptr %1, i64 7
  %55 = load i16, ptr %54, align 1
  %56 = getelementptr inbounds i8, ptr %48, i64 1
  store i16 %55, ptr %56, align 1, !tbaa !26
  store i8 0, ptr %48, align 2
  br label %69

57:                                               ; preds = %38
  %58 = icmp ult i8 %51, 10
  br i1 %58, label %69, label %59

59:                                               ; preds = %57
  %60 = getelementptr inbounds i8, ptr %1, i64 7
  %61 = getelementptr inbounds i8, ptr %1, i64 19
  %62 = load i16, ptr %61, align 1
  %63 = getelementptr inbounds i8, ptr %1, i64 20
  store i8 0, ptr %61, align 1, !tbaa !18
  store i8 0, ptr %63, align 1, !tbaa !18
  %64 = tail call i32 @BtUuidFindBase(ptr noundef nonnull %60)
  %65 = trunc i32 %64 to i8
  %66 = and i8 %65, 63
  %67 = getelementptr inbounds i8, ptr %48, i64 1
  store i16 %62, ptr %67, align 1, !tbaa !26
  %68 = or disjoint i8 %66, -128
  store i8 %68, ptr %48, align 2
  %.pre = load i8, ptr getelementptr inbounds (i8, ptr @g_CurIdx, i64 2), align 1, !tbaa !19
  %.pre139 = load i8, ptr @g_CurIdx, align 1, !tbaa !9
  %.pre140 = zext i8 %.pre139 to i64
  br label %69

69:                                               ; preds = %57, %59, %53
  %.pre-phi = phi i64 [ %45, %57 ], [ %.pre140, %59 ], [ %45, %53 ]
  %70 = phi i8 [ %46, %57 ], [ %.pre, %59 ], [ %46, %53 ]
  %71 = add i8 %70, 1
  store i8 %71, ptr getelementptr inbounds (i8, ptr @g_CurIdx, i64 2), align 1, !tbaa !19
  %72 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 56), i64 0, i64 %.pre-phi, i32 1
  %73 = load i8, ptr %72, align 1, !tbaa !27
  %74 = add i8 %73, 1
  store i8 %74, ptr %72, align 1, !tbaa !27
  %75 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 56), i64 0, i64 %.pre-phi, i32 2, i32 1
  %76 = load i16, ptr %75, align 2, !tbaa !12
  %.mask127 = and i16 %76, 255
  %.not128.not = icmp ult i16 %36, %.mask127
  br i1 %.not128.not, label %77, label %.loopexit

77:                                               ; preds = %69
  %78 = add i8 %30, 1
  store i8 %78, ptr getelementptr inbounds (i8, ptr @g_CurIdx, i64 1), align 1, !tbaa !11
  store i8 0, ptr @g_UuidType, align 1
  %79 = load ptr, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 48), align 8, !tbaa !28
  %80 = load i16, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 36), align 4, !tbaa !32
  %81 = zext i8 %78 to i16
  %82 = tail call zeroext i1 @BtAttReadByTypeRequest(ptr noundef %79, i16 noundef zeroext %80, i16 noundef zeroext %81, i16 noundef zeroext %.mask127, ptr noundef nonnull @g_UuidType)
  br label %.loopexit

83:                                               ; preds = %28
  %84 = load i8, ptr @g_CurIdx, align 1, !tbaa !9
  %85 = zext i8 %84 to i64
  %86 = load i8, ptr getelementptr inbounds (i8, ptr @g_CurIdx, i64 2), align 1, !tbaa !19
  %87 = zext i8 %86 to i64
  %88 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 56), i64 0, i64 %85, i32 3, i64 %87
  %89 = getelementptr inbounds i8, ptr %88, i64 3
  %90 = load i8, ptr %89, align 1
  %91 = and i8 %90, 48
  %or.cond = icmp eq i8 %91, 0
  br i1 %or.cond, label %94, label %92

92:                                               ; preds = %83
  %93 = getelementptr inbounds i8, ptr %88, i64 10
  store i16 %36, ptr %93, align 2, !tbaa !33
  br label %94

94:                                               ; preds = %83, %92
  %95 = add i8 %86, 1
  store i8 %95, ptr getelementptr inbounds (i8, ptr @g_CurIdx, i64 2), align 1, !tbaa !19
  %96 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 56), i64 0, i64 %85
  %97 = getelementptr inbounds i8, ptr %96, i64 3
  %98 = load i8, ptr %97, align 1, !tbaa !27
  %99 = icmp ult i8 %95, %98
  br i1 %99, label %100, label %.critedge

100:                                              ; preds = %94
  %101 = getelementptr inbounds i8, ptr %96, i64 6
  %102 = load i16, ptr %101, align 2, !tbaa !12
  %.mask = and i16 %102, 255
  %.not126.not.not = icmp ult i16 %36, %.mask
  br i1 %.not126.not.not, label %103, label %.critedge

103:                                              ; preds = %100
  %104 = add i8 %30, 1
  store i8 %104, ptr getelementptr inbounds (i8, ptr @g_CurIdx, i64 1), align 1, !tbaa !11
  %105 = load ptr, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 48), align 8, !tbaa !28
  %106 = load i16, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 36), align 4, !tbaa !32
  %107 = zext i8 %104 to i16
  %108 = tail call zeroext i1 @BtAttReadByTypeRequest(ptr noundef %105, i16 noundef zeroext %106, i16 noundef zeroext %107, i16 noundef zeroext %.mask, ptr noundef nonnull @g_UuidType)
  br label %.loopexit

.critedge:                                        ; preds = %100, %94
  %109 = add i8 %84, 1
  store i8 %109, ptr @g_CurIdx, align 1, !tbaa !9
  %110 = zext i8 %109 to i32
  %111 = load i32, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 40), align 8, !tbaa !34
  %112 = icmp sgt i32 %111, %110
  br i1 %112, label %113, label %.loopexit

113:                                              ; preds = %.critedge
  %114 = zext i8 %109 to i64
  %115 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 56), i64 0, i64 %114, i32 2
  %116 = load i16, ptr %115, align 4, !tbaa !35
  %117 = trunc i16 %116 to i8
  store i8 %117, ptr getelementptr inbounds (i8, ptr @g_CurIdx, i64 1), align 1, !tbaa !11
  %118 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 56), i64 0, i64 %114, i32 2, i32 1
  %119 = load i16, ptr %118, align 2, !tbaa !12
  %120 = load ptr, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 48), align 8, !tbaa !28
  %121 = load i16, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 36), align 4, !tbaa !32
  %122 = and i16 %116, 255
  %123 = and i16 %119, 255
  %124 = tail call zeroext i1 @BtAttReadByTypeRequest(ptr noundef %120, i16 noundef zeroext %121, i16 noundef zeroext %122, i16 noundef zeroext %123, ptr noundef nonnull @g_UuidType)
  br label %.loopexit

125:                                              ; preds = %.preheader137.preheader
  %126 = zext i8 %9 to i32
  %127 = load i32, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 40), align 8, !tbaa !34
  %128 = add nsw i32 %127, -1
  %129 = icmp sgt i32 %128, %126
  br i1 %129, label %130, label %.loopexit

130:                                              ; preds = %125
  %131 = add i8 %9, 1
  store i8 %131, ptr @g_CurIdx, align 1, !tbaa !9
  %132 = zext i8 %131 to i64
  %133 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 56), i64 0, i64 %132, i32 2
  %134 = load i16, ptr %133, align 4, !tbaa !35
  %135 = trunc i16 %134 to i8
  %136 = add i8 %135, 1
  store i8 %136, ptr getelementptr inbounds (i8, ptr @g_CurIdx, i64 1), align 1, !tbaa !11
  %137 = load ptr, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 48), align 8, !tbaa !28
  %138 = load i16, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 36), align 4, !tbaa !32
  %139 = zext i8 %136 to i16
  %140 = tail call zeroext i1 @BtAttReadRequest(ptr noundef %137, i16 noundef zeroext %138, i16 noundef zeroext %139)
  br label %.loopexit

141:                                              ; preds = %.preheader137.preheader
  %142 = load ptr, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 48), align 8, !tbaa !28
  %143 = load i16, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 36), align 4, !tbaa !32
  %144 = tail call zeroext i1 @BtAttReadRequest(ptr noundef %142, i16 noundef zeroext %143, i16 noundef zeroext %15)
  br label %.loopexit

145:                                              ; preds = %3
  %146 = getelementptr inbounds i8, ptr %1, i64 1
  %.pr = load i8, ptr %146, align 1, !tbaa !36
  %147 = load i32, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 40), align 8, !tbaa !34
  %148 = add nsw i32 %147, 1
  store i32 %148, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 40), align 8, !tbaa !34
  %149 = icmp ult i8 %.pr, 7
  %150 = getelementptr inbounds i8, ptr %1, i64 2
  %151 = and i32 %147, 255
  %152 = zext nneg i32 %151 to i64
  %153 = getelementptr inbounds [10 x %struct.BtGattDBSrvc_t], ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 56), i64 0, i64 %152
  %154 = load i16, ptr %150, align 1, !tbaa !38
  %155 = getelementptr inbounds i8, ptr %153, i64 4
  store i16 %154, ptr %155, align 4, !tbaa !35
  %156 = getelementptr inbounds i8, ptr %1, i64 4
  %157 = load i16, ptr %156, align 1, !tbaa !38
  %158 = getelementptr inbounds i8, ptr %153, i64 6
  store i16 %157, ptr %158, align 2, !tbaa !12
  %159 = getelementptr inbounds i8, ptr %1, i64 6
  br i1 %149, label %160, label %164

160:                                              ; preds = %145
  %161 = load i16, ptr %159, align 1, !tbaa !39
  %162 = getelementptr inbounds i8, ptr %153, i64 1
  store i16 %161, ptr %162, align 1, !tbaa !41
  store i8 0, ptr %153, align 4
  %163 = load i16, ptr %156, align 1, !tbaa !42
  %.not134 = icmp eq i16 %163, -1
  br i1 %.not134, label %.loopexit, label %169

164:                                              ; preds = %145
  %165 = tail call i32 @BtUuid128To16(ptr noundef nonnull %153, ptr noundef nonnull %159)
  %166 = getelementptr inbounds i8, ptr %1, i64 18
  store i8 0, ptr %166, align 1, !tbaa !18
  %167 = getelementptr inbounds i8, ptr %1, i64 19
  store i8 0, ptr %167, align 1, !tbaa !18
  %168 = load i16, ptr %156, align 1, !tbaa !43
  %.not = icmp eq i16 %168, -1
  br i1 %.not, label %.loopexit, label %169

169:                                              ; preds = %160, %164
  %.0115133.in = phi i16 [ %163, %160 ], [ %168, %164 ]
  %.0115133 = add nuw i16 %.0115133.in, 1
  call void @llvm.lifetime.start.p0(i64 5, ptr nonnull %4) #6
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(5) %4, ptr noundef nonnull align 1 dereferenceable(5) @__const.BtAttProcessRsp.Uuid, i64 5, i1 false)
  %170 = load ptr, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 48), align 8, !tbaa !28
  %171 = load i16, ptr getelementptr inbounds (i8, ptr @g_BtDevSdc, i64 36), align 4, !tbaa !32
  %172 = call zeroext i1 @BtAttReadByGroupTypeRequest(ptr noundef %170, i16 noundef zeroext %171, i16 noundef zeroext %.0115133, i16 noundef zeroext -1, ptr noundef nonnull %4)
  call void @llvm.lifetime.end.p0(i64 5, ptr nonnull %4) #6
  br label %.loopexit

.loopexit:                                        ; preds = %160, %103, %164, %169, %141, %125, %130, %28, %77, %69, %113, %.critedge, %19, %17, %3
  ret void
}

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden noundef i32 @_ZL3minii(i32 noundef, i32 noundef) local_unnamed_addr #3

declare zeroext i16 @BtAttGetMtu() local_unnamed_addr #2

declare zeroext i16 @BtAttSetMtu(i16 noundef zeroext) local_unnamed_addr #2

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

declare i32 @BtUuidFindBase(ptr noundef) local_unnamed_addr #2

declare zeroext i1 @BtAttReadRequest(ptr noundef, i16 noundef zeroext, i16 noundef zeroext) local_unnamed_addr #2

declare i32 @BtUuid128To16(ptr noundef, ptr noundef) local_unnamed_addr #2

declare zeroext i1 @BtAttReadByGroupTypeRequest(ptr noundef, i16 noundef zeroext, i16 noundef zeroext, i16 noundef zeroext, ptr noundef) local_unnamed_addr #2

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.fshl.i32(i32, i32, i32) #5

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTS22__Bt_Attribute_Req_Rsp", !7, i64 0, !7, i64 1}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !7, i64 0}
!10 = !{!"_ZTS13CurParseInf_t", !7, i64 0, !7, i64 1, !7, i64 2}
!11 = !{!10, !7, i64 1}
!12 = !{!13, !16, i64 6}
!13 = !{!"_ZTS14BtGattDBSrvc_t", !14, i64 0, !7, i64 3, !17, i64 4, !7, i64 8}
!14 = !{!"_ZTS11__Bt_Uuid16", !7, i64 0, !15, i64 0, !16, i64 1}
!15 = !{!"_ZTS14__Bt_Uuid_Type", !7, i64 0}
!16 = !{!"short", !7, i64 0}
!17 = !{!"_ZTS20__Bt_Gattc_Hdl_Range", !16, i64 0, !16, i64 2}
!18 = !{!7, !7, i64 0}
!19 = !{!10, !7, i64 2}
!20 = !{!21, !16, i64 8}
!21 = !{!"_ZTS14BtGattDBChar_t", !22, i64 0, !16, i64 10, !16, i64 12, !16, i64 14, !16, i64 16}
!22 = !{!"_ZTS13BtGattcChar_t", !14, i64 0, !23, i64 3, !7, i64 4, !16, i64 6, !16, i64 8}
!23 = !{!"_ZTS17BtGattCharProps_t", !7, i64 0, !7, i64 0, !7, i64 0, !7, i64 0, !7, i64 0, !7, i64 0, !7, i64 0}
!24 = !{!25, !7, i64 0}
!25 = !{!"_ZTS25__Bt_Att_Read_By_Type_Rsp", !7, i64 0, !7, i64 1}
!26 = !{!21, !16, i64 1}
!27 = !{!13, !7, i64 3}
!28 = !{!29, !31, i64 48}
!29 = !{!"_ZTS13__Bt_Dev_Data", !7, i64 0, !7, i64 30, !16, i64 36, !30, i64 40, !31, i64 48, !7, i64 56}
!30 = !{!"int", !7, i64 0}
!31 = !{!"any pointer", !7, i64 0}
!32 = !{!29, !16, i64 36}
!33 = !{!21, !16, i64 10}
!34 = !{!29, !30, i64 40}
!35 = !{!13, !16, i64 4}
!36 = !{!37, !7, i64 0}
!37 = !{!"_ZTS31__Bt_Att_Read_By_Group_Type_Rsp", !7, i64 0, !7, i64 1}
!38 = !{!16, !16, i64 0}
!39 = !{!40, !16, i64 4}
!40 = !{!"_ZTS38__Bt_Att_Read_By_Group_Type_Rsp_Uuid16", !16, i64 0, !16, i64 2, !16, i64 4}
!41 = !{!13, !16, i64 1}
!42 = !{!40, !16, i64 2}
!43 = !{!44, !16, i64 2}
!44 = !{!"_ZTS39__Bt_Att_Read_By_Group_Type_Rsp_Uuid128", !16, i64 0, !16, i64 2, !7, i64 4}


; Effective O3 passes: ADCEPass,AggressiveInstCombinePass,BDCEPass,CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,SROAPass,SimplifyCFGPass,TailCallElimPass