; LLVM IR from trabucayre/openFPGALoader :: src (gowin)

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

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.68" }
%"struct.std::_Head_base.68" = type { ptr }
%"class.std::allocator.0" = type { i8 }
%class.Gowin = type { %class.Device.base, %class.SPIInterface, %"class.std::unique_ptr", %"class.std::unique_ptr", %"class.std::unique_ptr", i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32 }
%class.Device.base = type <{ ptr, ptr, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, i8, i8, i8 }>
%class.SPIInterface = type { ptr, i8, i32, i8, i8, i8, %"class.std::__cxx11::basic_string" }
%class.Device = type <{ ptr, ptr, %"class.std::__cxx11::basic_string", %"class.std::__cxx11::basic_string", i32, i8, i8, i8, i8 }>

@_ZTV5Gowin = external dso_local unnamed_addr constant { [20 x ptr], [9 x ptr] }, align 8
@.str.569 = external hidden unnamed_addr constant [3 x i8], align 1
@_ZTISt9exception = external constant ptr
@_ZTISt13runtime_error = external constant ptr
@.str.570 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.571 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.572 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.573 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.574 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.575 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.576 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.577 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.578 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.579 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.580 = external hidden unnamed_addr constant [24 x i8], align 1

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5GowinC2EP4JtagNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS7_S7_N6Device11prog_type_tEbbaS9_(ptr noundef nonnull align 8 dereferenceable(192) %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef %4, i32 noundef %5, i1 noundef zeroext %6, i1 noundef zeroext %7, i8 noundef signext %8, ptr noundef nonnull align 8 dereferenceable(32) %9) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i8, align 1
  %18 = alloca i8, align 1
  %19 = alloca i8, align 1
  %20 = alloca ptr, align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca %"class.std::unique_ptr", align 8
  %25 = alloca ptr, align 8
  %26 = alloca %"class.std::unique_ptr", align 8
  %27 = alloca ptr, align 8
  %28 = alloca %"class.std::__cxx11::basic_string", align 8
  %29 = alloca %"class.std::allocator.0", align 1
  %30 = alloca %"class.std::__cxx11::basic_string", align 8
  %31 = alloca %"class.std::allocator.0", align 1
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::allocator.0", align 1
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::__cxx11::basic_string", align 8
  %36 = alloca %"class.std::allocator.0", align 1
  %37 = alloca i32, align 4
  %38 = alloca %"class.std::__cxx11::basic_string", align 8
  %39 = alloca %"class.std::allocator.0", align 1
  %40 = alloca [256 x i8], align 16
  %41 = alloca %"class.std::unique_ptr", align 8
  %42 = alloca %"class.std::__cxx11::basic_string", align 8
  %43 = alloca %"class.std::allocator.0", align 1
  %44 = alloca %"class.std::__cxx11::basic_string", align 8
  %45 = alloca %"class.std::allocator.0", align 1
  %46 = alloca %"class.std::unique_ptr", align 8
  %47 = alloca %"class.std::__cxx11::basic_string", align 8
  %48 = alloca %"class.std::allocator.0", align 1
  %49 = alloca %"class.std::__cxx11::basic_string", align 8
  %50 = alloca %"class.std::allocator.0", align 1
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store ptr %2, ptr %13, align 8, !tbaa !5
  store ptr %3, ptr %14, align 8, !tbaa !5
  store ptr %4, ptr %15, align 8, !tbaa !5
  store i32 %5, ptr %16, align 4, !tbaa !9
  %51 = zext i1 %6 to i8
  store i8 %51, ptr %17, align 1, !tbaa !11
  %52 = zext i1 %7 to i8
  store i8 %52, ptr %18, align 1, !tbaa !11
  store i8 %8, ptr %19, align 1, !tbaa !13
  store ptr %9, ptr %20, align 8, !tbaa !5
  %53 = load ptr, ptr %11, align 8
  %54 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull align 8 dereferenceable(32) %2)
  %55 = load ptr, ptr %14, align 8, !tbaa !5
  %56 = load i8, ptr %18, align 1, !tbaa !11, !range !14, !noundef !15
  %57 = trunc i8 %56 to i1
  %58 = load i8, ptr %19, align 1, !tbaa !13
  invoke void @_ZN6DeviceC2EP4JtagNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS7_ba(ptr noundef nonnull align 8 dereferenceable(87) %53, ptr noundef %54, ptr noundef %21, ptr noundef nonnull align 8 dereferenceable(32) %55, i1 noundef zeroext %57, i8 noundef signext %58)
          to label %59 unwind label %100

59:                                               ; preds = %10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #11
  %60 = getelementptr inbounds i8, ptr %53, i64 88
  %61 = load i8, ptr %19, align 1, !tbaa !13
  %62 = load i8, ptr %18, align 1, !tbaa !11, !range !14, !noundef !15
  %63 = trunc i8 %62 to i1
  invoke void @_ZN12SPIInterfaceC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEajbbb(ptr noundef nonnull align 8 dereferenceable(56) %60, ptr noundef nonnull align 8 dereferenceable(32) %2, i8 noundef signext %61, i32 noundef 0, i1 noundef zeroext %63, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %64 unwind label %104

64:                                               ; preds = %59
  store ptr getelementptr inbounds inrange(-16, 144) ({ [20 x ptr], [9 x ptr] }, ptr @_ZTV5Gowin, i32 0, i32 0, i32 2), ptr %53, align 8, !tbaa !16
  %65 = getelementptr inbounds i8, ptr %53, i64 88
  store ptr getelementptr inbounds inrange(-16, 56) ({ [20 x ptr], [9 x ptr] }, ptr @_ZTV5Gowin, i32 0, i32 1, i32 2), ptr %65, align 8, !tbaa !16
  %66 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 2
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %66) #11
  %67 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 3
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %67) #11
  %68 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 4
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %68) #11
  %69 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 5
  store i32 0, ptr %69, align 8, !tbaa !18
  %70 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 6
  store i8 0, ptr %70, align 4, !tbaa !34
  %71 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 7
  store i8 0, ptr %71, align 1, !tbaa !35
  %72 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 8
  store i8 0, ptr %72, align 2, !tbaa !36
  %73 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 9
  store i8 0, ptr %73, align 1, !tbaa !37
  %74 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 10
  store i8 0, ptr %74, align 8, !tbaa !38
  %75 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 12
  %76 = load i8, ptr %17, align 1, !tbaa !11, !range !14, !noundef !15
  %77 = trunc i8 %76 to i1
  %78 = zext i1 %77 to i8
  store i8 %78, ptr %75, align 2, !tbaa !39
  %79 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 13
  store i8 2, ptr %79, align 1, !tbaa !40
  %80 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 14
  store i8 8, ptr %80, align 4, !tbaa !41
  %81 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 15
  store i8 32, ptr %81, align 1, !tbaa !42
  %82 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 16
  store i8 -128, ptr %82, align 2, !tbaa !43
  %83 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 17
  store i8 64, ptr %83, align 1, !tbaa !44
  %84 = invoke noundef zeroext i1 @_ZN5Gowin12detectFamilyEv(ptr noundef nonnull align 8 dereferenceable(192) %53)
          to label %85 unwind label %108

85:                                               ; preds = %64
  %86 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 1
  %87 = load ptr, ptr %86, align 8, !tbaa !45
  %88 = invoke noundef i32 @_ZN4Jtag12getWriteEdgeEv(ptr noundef nonnull align 8 dereferenceable(193) %87)
          to label %89 unwind label %108

89:                                               ; preds = %85
  %90 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 19
  store i32 %88, ptr %90, align 4, !tbaa !46
  %91 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 1
  %92 = load ptr, ptr %91, align 8, !tbaa !45
  %93 = invoke noundef i32 @_ZN4Jtag11getReadEdgeEv(ptr noundef nonnull align 8 dereferenceable(193) %92)
          to label %94 unwind label %108

94:                                               ; preds = %89
  %95 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 18
  store i32 %93, ptr %95, align 8, !tbaa !47
  %96 = load i32, ptr %16, align 4, !tbaa !9
  %97 = icmp eq i32 %96, 1
  br i1 %97, label %98, label %112

98:                                               ; preds = %94
  %99 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 4
  store i32 1, ptr %99, align 8, !tbaa !48
  br label %114

100:                                              ; preds = %10
  %101 = landingpad { ptr, i32 }
          cleanup
  %102 = extractvalue { ptr, i32 } %101, 0
  store ptr %102, ptr %22, align 8
  %103 = extractvalue { ptr, i32 } %101, 1
  store i32 %103, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #11
  br label %528

104:                                              ; preds = %59
  %105 = landingpad { ptr, i32 }
          cleanup
  %106 = extractvalue { ptr, i32 } %105, 0
  store ptr %106, ptr %22, align 8
  %107 = extractvalue { ptr, i32 } %105, 1
  store i32 %107, ptr %23, align 4
  br label %527

108:                                              ; preds = %521, %518, %516, %514, %512, %510, %503, %499, %455, %440, %431, %421, %375, %360, %352, %284, %277, %238, %225, %177, %120, %89, %85, %64
  %109 = landingpad { ptr, i32 }
          cleanup
  %110 = extractvalue { ptr, i32 } %109, 0
  store ptr %110, ptr %22, align 8
  %111 = extractvalue { ptr, i32 } %109, 1
  store i32 %111, ptr %23, align 4
  br label %525

112:                                              ; preds = %94
  %113 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 4
  store i32 2, ptr %113, align 8, !tbaa !48
  br label %114

114:                                              ; preds = %112, %98
  %115 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 3
  %116 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %115) #11
  br i1 %116, label %343, label %117

117:                                              ; preds = %114
  %118 = load i32, ptr %16, align 4, !tbaa !9
  %119 = icmp ne i32 %118, 2
  br i1 %119, label %120, label %343

120:                                              ; preds = %117
  %121 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 3
  %122 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %121, ptr noundef @.str.569)
          to label %123 unwind label %108

123:                                              ; preds = %120
  br i1 %122, label %124, label %171

124:                                              ; preds = %123
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #11
  %125 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 208) #12
          to label %126 unwind label %137

126:                                              ; preds = %124
  %127 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 2
  %128 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 4
  %129 = load i32, ptr %128, align 8, !tbaa !48
  %130 = icmp eq i32 %129, 2
  %131 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 6
  %132 = load i8, ptr %131, align 1, !tbaa !49, !range !14, !noundef !15
  %133 = trunc i8 %132 to i1
  invoke void @_ZN8FsParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(208) %125, ptr noundef nonnull align 8 dereferenceable(32) %127, i1 noundef zeroext %130, i1 noundef zeroext %133)
          to label %134 unwind label %141

134:                                              ; preds = %126
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %24, ptr noundef %125) #11
  %135 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 2
  %136 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %135, ptr noundef nonnull align 8 dereferenceable(8) %24) #11
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %24) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  br label %170

137:                                              ; preds = %124
  %138 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %139 = extractvalue { ptr, i32 } %138, 0
  store ptr %139, ptr %22, align 8
  %140 = extractvalue { ptr, i32 } %138, 1
  store i32 %140, ptr %23, align 4
  br label %145

141:                                              ; preds = %126
  %142 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %143 = extractvalue { ptr, i32 } %142, 0
  store ptr %143, ptr %22, align 8
  %144 = extractvalue { ptr, i32 } %142, 1
  store i32 %144, ptr %23, align 4
  call void @_ZdlPvm(ptr noundef %125, i64 noundef 208) #13
  br label %145

145:                                              ; preds = %141, %137
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #11
  br label %146

146:                                              ; preds = %145
  %147 = load i32, ptr %23, align 4
  %148 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTISt9exception) #11
  %149 = icmp eq i32 %147, %148
  br i1 %149, label %150, label %525

150:                                              ; preds = %146
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #11
  %151 = load ptr, ptr %22, align 8
  %152 = call ptr @__cxa_begin_catch(ptr %151) #11
  store ptr %152, ptr %25, align 8
  %153 = call ptr @__cxa_allocate_exception(i64 16) #11
  %154 = load ptr, ptr %25, align 8, !tbaa !5
  %155 = load ptr, ptr %154, align 8, !tbaa !16
  %156 = getelementptr inbounds ptr, ptr %155, i64 2
  %157 = load ptr, ptr %156, align 8
  %158 = call noundef ptr %157(ptr noundef nonnull align 8 dereferenceable(8) %154) #11
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %153, ptr noundef %158)
          to label %159 unwind label %160

159:                                              ; preds = %150
  invoke void @__cxa_throw(ptr %153, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #14
          to label %536 unwind label %164

160:                                              ; preds = %150
  %161 = landingpad { ptr, i32 }
          cleanup
  %162 = extractvalue { ptr, i32 } %161, 0
  store ptr %162, ptr %22, align 8
  %163 = extractvalue { ptr, i32 } %161, 1
  store i32 %163, ptr %23, align 4
  call void @__cxa_free_exception(ptr %153) #11
  br label %168

164:                                              ; preds = %159
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %22, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %23, align 4
  br label %168

168:                                              ; preds = %164, %160
  invoke void @__cxa_end_catch()
          to label %169 unwind label %533

169:                                              ; preds = %168
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #11
  br label %525

170:                                              ; preds = %134
  br label %223

171:                                              ; preds = %123
  %172 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 12
  %173 = load i8, ptr %172, align 2, !tbaa !39, !range !14, !noundef !15
  %174 = trunc i8 %173 to i1
  br i1 %174, label %182, label %175

175:                                              ; preds = %171
  %176 = call ptr @__cxa_allocate_exception(i64 16) #11
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %176, ptr noundef @.str.570)
          to label %177 unwind label %178

177:                                              ; preds = %175
  invoke void @__cxa_throw(ptr %176, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #14
          to label %536 unwind label %108

178:                                              ; preds = %175
  %179 = landingpad { ptr, i32 }
          cleanup
  %180 = extractvalue { ptr, i32 } %179, 0
  store ptr %180, ptr %22, align 8
  %181 = extractvalue { ptr, i32 } %179, 1
  store i32 %181, ptr %23, align 4
  call void @__cxa_free_exception(ptr %176) #11
  br label %525

182:                                              ; preds = %171
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #11
  %183 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 168) #12
          to label %184 unwind label %189

184:                                              ; preds = %182
  %185 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 2
  invoke void @_ZN9RawParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(161) %183, ptr noundef nonnull align 8 dereferenceable(32) %185, i1 noundef zeroext false)
          to label %186 unwind label %193

186:                                              ; preds = %184
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef %183) #11
  %187 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 2
  %188 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %187, ptr noundef nonnull align 8 dereferenceable(8) %26) #11
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  br label %222

189:                                              ; preds = %182
  %190 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %191 = extractvalue { ptr, i32 } %190, 0
  store ptr %191, ptr %22, align 8
  %192 = extractvalue { ptr, i32 } %190, 1
  store i32 %192, ptr %23, align 4
  br label %197

193:                                              ; preds = %184
  %194 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  %195 = extractvalue { ptr, i32 } %194, 0
  store ptr %195, ptr %22, align 8
  %196 = extractvalue { ptr, i32 } %194, 1
  store i32 %196, ptr %23, align 4
  call void @_ZdlPvm(ptr noundef %183, i64 noundef 168) #13
  br label %197

197:                                              ; preds = %193, %189
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #11
  br label %198

198:                                              ; preds = %197
  %199 = load i32, ptr %23, align 4
  %200 = call i32 @llvm.eh.typeid.for.p0(ptr @_ZTISt9exception) #11
  %201 = icmp eq i32 %199, %200
  br i1 %201, label %202, label %525

202:                                              ; preds = %198
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #11
  %203 = load ptr, ptr %22, align 8
  %204 = call ptr @__cxa_begin_catch(ptr %203) #11
  store ptr %204, ptr %27, align 8
  %205 = call ptr @__cxa_allocate_exception(i64 16) #11
  %206 = load ptr, ptr %27, align 8, !tbaa !5
  %207 = load ptr, ptr %206, align 8, !tbaa !16
  %208 = getelementptr inbounds ptr, ptr %207, i64 2
  %209 = load ptr, ptr %208, align 8
  %210 = call noundef ptr %209(ptr noundef nonnull align 8 dereferenceable(8) %206) #11
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %205, ptr noundef %210)
          to label %211 unwind label %212

211:                                              ; preds = %202
  invoke void @__cxa_throw(ptr %205, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #14
          to label %536 unwind label %216

212:                                              ; preds = %202
  %213 = landingpad { ptr, i32 }
          cleanup
  %214 = extractvalue { ptr, i32 } %213, 0
  store ptr %214, ptr %22, align 8
  %215 = extractvalue { ptr, i32 } %213, 1
  store i32 %215, ptr %23, align 4
  call void @__cxa_free_exception(ptr %205) #11
  br label %220

216:                                              ; preds = %211
  %217 = landingpad { ptr, i32 }
          cleanup
  %218 = extractvalue { ptr, i32 } %217, 0
  store ptr %218, ptr %22, align 8
  %219 = extractvalue { ptr, i32 } %217, 1
  store i32 %219, ptr %23, align 4
  br label %220

220:                                              ; preds = %216, %212
  invoke void @__cxa_end_catch()
          to label %221 unwind label %533

221:                                              ; preds = %220
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #11
  br label %525

222:                                              ; preds = %186
  br label %223

223:                                              ; preds = %222, %170
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %28, ptr noundef @.str.571, ptr noundef nonnull align 1 dereferenceable(1) %29)
          to label %224 unwind label %239

224:                                              ; preds = %223
  invoke void @_Z9printInfoRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %28, i1 noundef zeroext false)
          to label %225 unwind label %243

225:                                              ; preds = %224
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #11
  %226 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 2
  %227 = call noundef ptr @_ZNKSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %226) #11
  %228 = load ptr, ptr %227, align 8, !tbaa !16
  %229 = getelementptr inbounds ptr, ptr %228, i64 2
  %230 = load ptr, ptr %229, align 8
  %231 = invoke noundef i32 %230(ptr noundef nonnull align 8 dereferenceable(160) %227)
          to label %232 unwind label %108

232:                                              ; preds = %225
  %233 = icmp eq i32 %231, 1
  br i1 %233, label %234, label %261

234:                                              ; preds = %232
  call void @llvm.lifetime.start.p0(i64 32, ptr %30) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %31) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %30, ptr noundef @.str.572, ptr noundef nonnull align 1 dereferenceable(1) %31)
          to label %235 unwind label %248

235:                                              ; preds = %234
  invoke void @_Z10printErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %30, i1 noundef zeroext true)
          to label %236 unwind label %252

236:                                              ; preds = %235
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #11
  %237 = call ptr @__cxa_allocate_exception(i64 16) #11
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %237, ptr noundef @.str.573)
          to label %238 unwind label %257

238:                                              ; preds = %236
  invoke void @__cxa_throw(ptr %237, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #14
          to label %536 unwind label %108

239:                                              ; preds = %223
  %240 = landingpad { ptr, i32 }
          cleanup
  %241 = extractvalue { ptr, i32 } %240, 0
  store ptr %241, ptr %22, align 8
  %242 = extractvalue { ptr, i32 } %240, 1
  store i32 %242, ptr %23, align 4
  br label %247

243:                                              ; preds = %224
  %244 = landingpad { ptr, i32 }
          cleanup
  %245 = extractvalue { ptr, i32 } %244, 0
  store ptr %245, ptr %22, align 8
  %246 = extractvalue { ptr, i32 } %244, 1
  store i32 %246, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %28) #11
  br label %247

247:                                              ; preds = %243, %239
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %29) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #11
  br label %525

248:                                              ; preds = %234
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %22, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %23, align 4
  br label %256

252:                                              ; preds = %235
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %22, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %30) #11
  br label %256

256:                                              ; preds = %252, %248
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %31) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %31) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %30) #11
  br label %525

257:                                              ; preds = %236
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %22, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %23, align 4
  call void @__cxa_free_exception(ptr %237) #11
  br label %525

261:                                              ; preds = %232
  call void @llvm.lifetime.start.p0(i64 32, ptr %32) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef @.str.574, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %262 unwind label %264

262:                                              ; preds = %261
  invoke void @_Z12printSuccessRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %32, i1 noundef zeroext true)
          to label %263 unwind label %268

263:                                              ; preds = %262
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #11
  br label %273

264:                                              ; preds = %261
  %265 = landingpad { ptr, i32 }
          cleanup
  %266 = extractvalue { ptr, i32 } %265, 0
  store ptr %266, ptr %22, align 8
  %267 = extractvalue { ptr, i32 } %265, 1
  store i32 %267, ptr %23, align 4
  br label %272

268:                                              ; preds = %262
  %269 = landingpad { ptr, i32 }
          cleanup
  %270 = extractvalue { ptr, i32 } %269, 0
  store ptr %270, ptr %22, align 8
  %271 = extractvalue { ptr, i32 } %269, 1
  store i32 %271, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #11
  br label %272

272:                                              ; preds = %268, %264
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %32) #11
  br label %525

273:                                              ; preds = %263
  %274 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 6
  %275 = load i8, ptr %274, align 1, !tbaa !49, !range !14, !noundef !15
  %276 = trunc i8 %275 to i1
  br i1 %276, label %277, label %284

277:                                              ; preds = %273
  %278 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 2
  %279 = call noundef ptr @_ZNKSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %278) #11
  %280 = load ptr, ptr %279, align 8, !tbaa !16
  %281 = getelementptr inbounds ptr, ptr %280, i64 3
  %282 = load ptr, ptr %281, align 8
  invoke void %282(ptr noundef nonnull align 8 dereferenceable(160) %279)
          to label %283 unwind label %108

283:                                              ; preds = %277
  br label %284

284:                                              ; preds = %283, %273
  %285 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 3
  %286 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %285, ptr noundef @.str.569)
          to label %287 unwind label %108

287:                                              ; preds = %284
  br i1 %286, label %288, label %342

288:                                              ; preds = %287
  call void @llvm.lifetime.start.p0(i64 32, ptr %34) #11
  %289 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 2
  %290 = call noundef ptr @_ZNKSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %289) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %35, ptr noundef @.str.575, ptr noundef nonnull align 1 dereferenceable(1) %36)
          to label %291 unwind label %312

291:                                              ; preds = %288
  invoke void @_ZN21ConfigBitstreamParser12getHeaderValENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8 %34, ptr noundef nonnull align 8 dereferenceable(160) %290, ptr noundef %35)
          to label %292 unwind label %316

292:                                              ; preds = %291
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #11
  call void @llvm.lifetime.start.p0(i64 32, ptr %38) #11
  %293 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %34) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef %293, ptr noundef nonnull align 1 dereferenceable(1) %39)
          to label %294 unwind label %321

294:                                              ; preds = %292
  %295 = invoke noundef i64 @_ZNSt7__cxx115stoulERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPmi(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef null, i32 noundef 16)
          to label %296 unwind label %325

296:                                              ; preds = %294
  %297 = trunc i64 %295 to i32
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #11
  store i32 %297, ptr %37, align 4, !tbaa !50
  %298 = load i32, ptr %37, align 4, !tbaa !50
  %299 = and i32 %298, 268435455
  %300 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 5
  %301 = load i32, ptr %300, align 8, !tbaa !18
  %302 = icmp ne i32 %299, %301
  br i1 %302, label %303, label %339

303:                                              ; preds = %296
  call void @llvm.lifetime.start.p0(i64 256, ptr %40) #11
  %304 = getelementptr inbounds [256 x i8], ptr %40, i64 0, i64 0
  %305 = load i32, ptr %37, align 4, !tbaa !50
  %306 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 5
  %307 = load i32, ptr %306, align 8, !tbaa !18
  %308 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef %304, i64 noundef 256, ptr noundef @.str.576, i32 noundef %305, i32 noundef %307) #11
  %309 = call ptr @__cxa_allocate_exception(i64 16) #11
  %310 = getelementptr inbounds [256 x i8], ptr %40, i64 0, i64 0
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %309, ptr noundef %310)
          to label %311 unwind label %330

311:                                              ; preds = %303
  invoke void @__cxa_throw(ptr %309, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #14
          to label %536 unwind label %334

312:                                              ; preds = %288
  %313 = landingpad { ptr, i32 }
          cleanup
  %314 = extractvalue { ptr, i32 } %313, 0
  store ptr %314, ptr %22, align 8
  %315 = extractvalue { ptr, i32 } %313, 1
  store i32 %315, ptr %23, align 4
  br label %320

316:                                              ; preds = %291
  %317 = landingpad { ptr, i32 }
          cleanup
  %318 = extractvalue { ptr, i32 } %317, 0
  store ptr %318, ptr %22, align 8
  %319 = extractvalue { ptr, i32 } %317, 1
  store i32 %319, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %35) #11
  br label %320

320:                                              ; preds = %316, %312
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %36) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #11
  br label %341

321:                                              ; preds = %292
  %322 = landingpad { ptr, i32 }
          cleanup
  %323 = extractvalue { ptr, i32 } %322, 0
  store ptr %323, ptr %22, align 8
  %324 = extractvalue { ptr, i32 } %322, 1
  store i32 %324, ptr %23, align 4
  br label %329

325:                                              ; preds = %294
  %326 = landingpad { ptr, i32 }
          cleanup
  %327 = extractvalue { ptr, i32 } %326, 0
  store ptr %327, ptr %22, align 8
  %328 = extractvalue { ptr, i32 } %326, 1
  store i32 %328, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #11
  br label %329

329:                                              ; preds = %325, %321
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %39) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %38) #11
  br label %340

330:                                              ; preds = %303
  %331 = landingpad { ptr, i32 }
          cleanup
  %332 = extractvalue { ptr, i32 } %331, 0
  store ptr %332, ptr %22, align 8
  %333 = extractvalue { ptr, i32 } %331, 1
  store i32 %333, ptr %23, align 4
  call void @__cxa_free_exception(ptr %309) #11
  br label %338

334:                                              ; preds = %311
  %335 = landingpad { ptr, i32 }
          cleanup
  %336 = extractvalue { ptr, i32 } %335, 0
  store ptr %336, ptr %22, align 8
  %337 = extractvalue { ptr, i32 } %335, 1
  store i32 %337, ptr %23, align 4
  br label %338

338:                                              ; preds = %334, %330
  call void @llvm.lifetime.end.p0(i64 256, ptr %40) #11
  br label %340

339:                                              ; preds = %296
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #11
  br label %342

340:                                              ; preds = %338, %329
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #11
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #11
  br label %341

341:                                              ; preds = %340, %320
  call void @llvm.lifetime.end.p0(i64 32, ptr %34) #11
  br label %525

342:                                              ; preds = %339, %287
  br label %343

343:                                              ; preds = %342, %117, %114
  %344 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %4) #11
  %345 = icmp ugt i64 %344, 0
  br i1 %345, label %346, label %411

346:                                              ; preds = %343
  %347 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 5
  %348 = load i32, ptr %347, align 8, !tbaa !18
  %349 = icmp ne i32 %348, 16816155
  br i1 %349, label %350, label %357

350:                                              ; preds = %346
  %351 = call ptr @__cxa_allocate_exception(i64 16) #11
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %351, ptr noundef @.str.577)
          to label %352 unwind label %353

352:                                              ; preds = %350
  invoke void @__cxa_throw(ptr %351, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #14
          to label %536 unwind label %108

353:                                              ; preds = %350
  %354 = landingpad { ptr, i32 }
          cleanup
  %355 = extractvalue { ptr, i32 } %354, 0
  store ptr %355, ptr %22, align 8
  %356 = extractvalue { ptr, i32 } %354, 1
  store i32 %356, ptr %23, align 4
  call void @__cxa_free_exception(ptr %351) #11
  br label %525

357:                                              ; preds = %346
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #11
  %358 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 168) #12
          to label %359 unwind label %376

359:                                              ; preds = %357
  invoke void @_ZN9RawParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(161) %358, ptr noundef nonnull align 8 dereferenceable(32) %4, i1 noundef zeroext false)
          to label %360 unwind label %380

360:                                              ; preds = %359
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef %358) #11
  %361 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 3
  %362 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %361, ptr noundef nonnull align 8 dereferenceable(8) %41) #11
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  %363 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 3
  %364 = call noundef ptr @_ZNKSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %363) #11
  %365 = load ptr, ptr %364, align 8, !tbaa !16
  %366 = getelementptr inbounds ptr, ptr %365, i64 2
  %367 = load ptr, ptr %366, align 8
  %368 = invoke noundef i32 %367(ptr noundef nonnull align 8 dereferenceable(160) %364)
          to label %369 unwind label %108

369:                                              ; preds = %360
  %370 = icmp eq i32 %368, 1
  br i1 %370, label %371, label %398

371:                                              ; preds = %369
  call void @llvm.lifetime.start.p0(i64 32, ptr %42) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %43) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef @.str.572, ptr noundef nonnull align 1 dereferenceable(1) %43)
          to label %372 unwind label %385

372:                                              ; preds = %371
  invoke void @_Z10printErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %42, i1 noundef zeroext true)
          to label %373 unwind label %389

373:                                              ; preds = %372
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #11
  %374 = call ptr @__cxa_allocate_exception(i64 16) #11
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %374, ptr noundef @.str.573)
          to label %375 unwind label %394

375:                                              ; preds = %373
  invoke void @__cxa_throw(ptr %374, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #14
          to label %536 unwind label %108

376:                                              ; preds = %357
  %377 = landingpad { ptr, i32 }
          cleanup
  %378 = extractvalue { ptr, i32 } %377, 0
  store ptr %378, ptr %22, align 8
  %379 = extractvalue { ptr, i32 } %377, 1
  store i32 %379, ptr %23, align 4
  br label %384

380:                                              ; preds = %359
  %381 = landingpad { ptr, i32 }
          cleanup
  %382 = extractvalue { ptr, i32 } %381, 0
  store ptr %382, ptr %22, align 8
  %383 = extractvalue { ptr, i32 } %381, 1
  store i32 %383, ptr %23, align 4
  call void @_ZdlPvm(ptr noundef %358, i64 noundef 168) #13
  br label %384

384:                                              ; preds = %380, %376
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #11
  br label %525

385:                                              ; preds = %371
  %386 = landingpad { ptr, i32 }
          cleanup
  %387 = extractvalue { ptr, i32 } %386, 0
  store ptr %387, ptr %22, align 8
  %388 = extractvalue { ptr, i32 } %386, 1
  store i32 %388, ptr %23, align 4
  br label %393

389:                                              ; preds = %372
  %390 = landingpad { ptr, i32 }
          cleanup
  %391 = extractvalue { ptr, i32 } %390, 0
  store ptr %391, ptr %22, align 8
  %392 = extractvalue { ptr, i32 } %390, 1
  store i32 %392, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #11
  br label %393

393:                                              ; preds = %389, %385
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %43) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %43) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %42) #11
  br label %525

394:                                              ; preds = %373
  %395 = landingpad { ptr, i32 }
          cleanup
  %396 = extractvalue { ptr, i32 } %395, 0
  store ptr %396, ptr %22, align 8
  %397 = extractvalue { ptr, i32 } %395, 1
  store i32 %397, ptr %23, align 4
  call void @__cxa_free_exception(ptr %374) #11
  br label %525

398:                                              ; preds = %369
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %44, ptr noundef @.str.574, ptr noundef nonnull align 1 dereferenceable(1) %45)
          to label %399 unwind label %401

399:                                              ; preds = %398
  invoke void @_Z12printSuccessRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %44, i1 noundef zeroext true)
          to label %400 unwind label %405

400:                                              ; preds = %399
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #11
  br label %410

401:                                              ; preds = %398
  %402 = landingpad { ptr, i32 }
          cleanup
  %403 = extractvalue { ptr, i32 } %402, 0
  store ptr %403, ptr %22, align 8
  %404 = extractvalue { ptr, i32 } %402, 1
  store i32 %404, ptr %23, align 4
  br label %409

405:                                              ; preds = %399
  %406 = landingpad { ptr, i32 }
          cleanup
  %407 = extractvalue { ptr, i32 } %406, 0
  store ptr %407, ptr %22, align 8
  %408 = extractvalue { ptr, i32 } %406, 1
  store i32 %408, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %44) #11
  br label %409

409:                                              ; preds = %405, %401
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %45) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #11
  br label %525

410:                                              ; preds = %400
  br label %411

411:                                              ; preds = %410, %343
  %412 = load ptr, ptr %20, align 8, !tbaa !5
  %413 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %412) #11
  %414 = icmp ugt i64 %413, 0
  br i1 %414, label %415, label %491

415:                                              ; preds = %411
  %416 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 8
  %417 = load i8, ptr %416, align 2, !tbaa !36, !range !14, !noundef !15
  %418 = trunc i8 %417 to i1
  br i1 %418, label %426, label %419

419:                                              ; preds = %415
  %420 = call ptr @__cxa_allocate_exception(i64 16) #11
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %420, ptr noundef @.str.578)
          to label %421 unwind label %422

421:                                              ; preds = %419
  invoke void @__cxa_throw(ptr %420, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #14
          to label %536 unwind label %108

422:                                              ; preds = %419
  %423 = landingpad { ptr, i32 }
          cleanup
  %424 = extractvalue { ptr, i32 } %423, 0
  store ptr %424, ptr %22, align 8
  %425 = extractvalue { ptr, i32 } %423, 1
  store i32 %425, ptr %23, align 4
  call void @__cxa_free_exception(ptr %420) #11
  br label %525

426:                                              ; preds = %415
  %427 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %4) #11
  %428 = icmp ugt i64 %427, 0
  br i1 %428, label %429, label %436

429:                                              ; preds = %426
  %430 = call ptr @__cxa_allocate_exception(i64 16) #11
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %430, ptr noundef @.str.579)
          to label %431 unwind label %432

431:                                              ; preds = %429
  invoke void @__cxa_throw(ptr %430, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #14
          to label %536 unwind label %108

432:                                              ; preds = %429
  %433 = landingpad { ptr, i32 }
          cleanup
  %434 = extractvalue { ptr, i32 } %433, 0
  store ptr %434, ptr %22, align 8
  %435 = extractvalue { ptr, i32 } %433, 1
  store i32 %435, ptr %23, align 4
  call void @__cxa_free_exception(ptr %430) #11
  br label %525

436:                                              ; preds = %426
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #11
  %437 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef 168) #12
          to label %438 unwind label %456

438:                                              ; preds = %436
  %439 = load ptr, ptr %20, align 8, !tbaa !5
  invoke void @_ZN9RawParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(161) %437, ptr noundef nonnull align 8 dereferenceable(32) %439, i1 noundef zeroext false)
          to label %440 unwind label %460

440:                                              ; preds = %438
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef %437) #11
  %441 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 4
  %442 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %441, ptr noundef nonnull align 8 dereferenceable(8) %46) #11
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %46) #11
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #11
  %443 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 4
  %444 = call noundef ptr @_ZNKSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %443) #11
  %445 = load ptr, ptr %444, align 8, !tbaa !16
  %446 = getelementptr inbounds ptr, ptr %445, i64 2
  %447 = load ptr, ptr %446, align 8
  %448 = invoke noundef i32 %447(ptr noundef nonnull align 8 dereferenceable(160) %444)
          to label %449 unwind label %108

449:                                              ; preds = %440
  %450 = icmp eq i32 %448, 1
  br i1 %450, label %451, label %478

451:                                              ; preds = %449
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %48) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef @.str.572, ptr noundef nonnull align 1 dereferenceable(1) %48)
          to label %452 unwind label %465

452:                                              ; preds = %451
  invoke void @_Z10printErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %47, i1 noundef zeroext true)
          to label %453 unwind label %469

453:                                              ; preds = %452
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #11
  %454 = call ptr @__cxa_allocate_exception(i64 16) #11
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %454, ptr noundef @.str.573)
          to label %455 unwind label %474

455:                                              ; preds = %453
  invoke void @__cxa_throw(ptr %454, ptr @_ZTISt13runtime_error, ptr @_ZNSt13runtime_errorD1Ev) #14
          to label %536 unwind label %108

456:                                              ; preds = %436
  %457 = landingpad { ptr, i32 }
          cleanup
  %458 = extractvalue { ptr, i32 } %457, 0
  store ptr %458, ptr %22, align 8
  %459 = extractvalue { ptr, i32 } %457, 1
  store i32 %459, ptr %23, align 4
  br label %464

460:                                              ; preds = %438
  %461 = landingpad { ptr, i32 }
          cleanup
  %462 = extractvalue { ptr, i32 } %461, 0
  store ptr %462, ptr %22, align 8
  %463 = extractvalue { ptr, i32 } %461, 1
  store i32 %463, ptr %23, align 4
  call void @_ZdlPvm(ptr noundef %437, i64 noundef 168) #13
  br label %464

464:                                              ; preds = %460, %456
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #11
  br label %525

465:                                              ; preds = %451
  %466 = landingpad { ptr, i32 }
          cleanup
  %467 = extractvalue { ptr, i32 } %466, 0
  store ptr %467, ptr %22, align 8
  %468 = extractvalue { ptr, i32 } %466, 1
  store i32 %468, ptr %23, align 4
  br label %473

469:                                              ; preds = %452
  %470 = landingpad { ptr, i32 }
          cleanup
  %471 = extractvalue { ptr, i32 } %470, 0
  store ptr %471, ptr %22, align 8
  %472 = extractvalue { ptr, i32 } %470, 1
  store i32 %472, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #11
  br label %473

473:                                              ; preds = %469, %465
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %48) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %48) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #11
  br label %525

474:                                              ; preds = %453
  %475 = landingpad { ptr, i32 }
          cleanup
  %476 = extractvalue { ptr, i32 } %475, 0
  store ptr %476, ptr %22, align 8
  %477 = extractvalue { ptr, i32 } %475, 1
  store i32 %477, ptr %23, align 4
  call void @__cxa_free_exception(ptr %454) #11
  br label %525

478:                                              ; preds = %449
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #11
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #11
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #11
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef @.str.574, ptr noundef nonnull align 1 dereferenceable(1) %50)
          to label %479 unwind label %481

479:                                              ; preds = %478
  invoke void @_Z12printSuccessRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %49, i1 noundef zeroext true)
          to label %480 unwind label %485

480:                                              ; preds = %479
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #11
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #11
  br label %490

481:                                              ; preds = %478
  %482 = landingpad { ptr, i32 }
          cleanup
  %483 = extractvalue { ptr, i32 } %482, 0
  store ptr %483, ptr %22, align 8
  %484 = extractvalue { ptr, i32 } %482, 1
  store i32 %484, ptr %23, align 4
  br label %489

485:                                              ; preds = %479
  %486 = landingpad { ptr, i32 }
          cleanup
  %487 = extractvalue { ptr, i32 } %486, 0
  store ptr %487, ptr %22, align 8
  %488 = extractvalue { ptr, i32 } %486, 1
  store i32 %488, ptr %23, align 4
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #11
  br label %489

489:                                              ; preds = %485, %481
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %50) #11
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #11
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #11
  br label %525

490:                                              ; preds = %480
  br label %491

491:                                              ; preds = %490, %411
  %492 = getelementptr inbounds %class.Gowin, ptr %53, i32 0, i32 10
  %493 = load i8, ptr %492, align 8, !tbaa !38, !range !14, !noundef !15
  %494 = trunc i8 %493 to i1
  br i1 %494, label %495, label %524

495:                                              ; preds = %491
  %496 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 4
  %497 = load i32, ptr %496, align 8, !tbaa !48
  %498 = icmp eq i32 %497, 1
  br i1 %498, label %499, label %524

499:                                              ; preds = %495
  %500 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 1
  %501 = load ptr, ptr %500, align 8, !tbaa !45
  %502 = invoke noundef i32 @_ZN4Jtag10setClkFreqEj(ptr noundef nonnull align 8 dereferenceable(193) %501, i32 noundef 2500000)
          to label %503 unwind label %108

503:                                              ; preds = %499
  %504 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 1
  %505 = load ptr, ptr %504, align 8, !tbaa !45
  invoke void @_ZN4Jtag9set_stateENS_10tapState_tEh(ptr noundef nonnull align 8 dereferenceable(193) %505, i32 noundef 0, i8 noundef zeroext 1)
          to label %506 unwind label %108

506:                                              ; preds = %503
  %507 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 6
  %508 = load i8, ptr %507, align 1, !tbaa !49, !range !14, !noundef !15
  %509 = trunc i8 %508 to i1
  br i1 %509, label %510, label %514

510:                                              ; preds = %506
  %511 = invoke noundef i32 @_ZN5Gowin13readStatusRegEv(ptr noundef nonnull align 8 dereferenceable(192) %53)
          to label %512 unwind label %108

512:                                              ; preds = %510
  invoke void @_ZN5Gowin14displayReadRegEPKcj(ptr noundef nonnull align 8 dereferenceable(192) %53, ptr noundef @.str.580, i32 noundef %511)
          to label %513 unwind label %108

513:                                              ; preds = %512
  br label %514

514:                                              ; preds = %513, %506
  %515 = invoke noundef zeroext i1 @_ZN5Gowin10disableCfgEv(ptr noundef nonnull align 8 dereferenceable(192) %53)
          to label %516 unwind label %108

516:                                              ; preds = %514
  %517 = invoke noundef zeroext i1 @_ZN5Gowin12send_commandEh(ptr noundef nonnull align 8 dereferenceable(192) %53, i8 noundef zeroext 0)
          to label %518 unwind label %108

518:                                              ; preds = %516
  %519 = getelementptr inbounds %class.Device, ptr %53, i32 0, i32 1
  %520 = load ptr, ptr %519, align 8, !tbaa !45
  invoke void @_ZN4Jtag9set_stateENS_10tapState_tEh(ptr noundef nonnull align 8 dereferenceable(193) %520, i32 noundef 0, i8 noundef zeroext 1)
          to label %521 unwind label %108

521:                                              ; preds = %518
  %522 = invoke noundef zeroext i1 @_ZN5Gowin16gw5a_disable_spiEv(ptr noundef nonnull align 8 dereferenceable(192) %53)
          to label %523 unwind label %108

523:                                              ; preds = %521
  br label %524

524:                                              ; preds = %523, %495, %491
  ret void

525:                                              ; preds = %489, %474, %473, %464, %432, %422, %409, %394, %393, %384, %353, %341, %272, %257, %256, %247, %221, %198, %178, %169, %146, %108
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %68) #11
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %67) #11
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %66) #11
  %526 = getelementptr inbounds i8, ptr %53, i64 88
  call void @_ZN12SPIInterfaceD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %526) #11
  br label %527

527:                                              ; preds = %525, %104
  call void @_ZN6DeviceD2Ev(ptr noundef nonnull align 8 dereferenceable(87) %53) #11
  br label %528

528:                                              ; preds = %527, %100
  %529 = load ptr, ptr %22, align 8
  %530 = load i32, ptr %23, align 4
  %531 = insertvalue { ptr, i32 } poison, ptr %529, 0
  %532 = insertvalue { ptr, i32 } %531, i32 %530, 1
  resume { ptr, i32 } %532

533:                                              ; preds = %220, %168
  %534 = landingpad { ptr, i32 }
          catch ptr null
  %535 = extractvalue { ptr, i32 } %534, 0
  call void @__clang_call_terminate(ptr %535) #15
  unreachable

536:                                              ; preds = %455, %431, %421, %375, %352, %311, %238, %211, %177, %159
  unreachable
}

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

declare void @_ZN6DeviceC2EP4JtagNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS7_ba(ptr noundef nonnull align 8 dereferenceable(87), ptr noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, i8 noundef signext) unnamed_addr #3

declare void @_ZN12SPIInterfaceC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEajbbb(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, i32 noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext) unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN5Gowin12detectFamilyEv(ptr noundef nonnull align 8 dereferenceable(192)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN4Jtag12getWriteEdgeEv(ptr noundef nonnull align 8 dereferenceable(193)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN4Jtag11getReadEdgeEv(ptr noundef nonnull align 8 dereferenceable(193)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) #4

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #5

declare void @_ZN8FsParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(208), ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, i1 noundef zeroext) unnamed_addr #3

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEPS0_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #1 align 2

; Function Attrs: nounwind memory(none)
declare i32 @llvm.eh.typeid.for.p0(ptr) #7

declare ptr @__cxa_begin_catch(ptr)

declare ptr @__cxa_allocate_exception(i64)

declare void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #3

declare void @__cxa_free_exception(ptr)

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #8

declare void @__cxa_throw(ptr, ptr, ptr)

declare void @__cxa_end_catch()

; Function Attrs: noinline noreturn nounwind uwtable
declare hidden void @__clang_call_terminate(ptr noundef) #9

declare void @_ZN9RawParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext) unnamed_addr #3

declare void @_Z9printInfoRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8)) #1 align 2

declare void @_Z10printErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext) #3

declare void @_Z12printSuccessRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext) #3

declare void @_ZN21ConfigBitstreamParser12getHeaderValENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(160), ptr noundef) #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i64 @_ZNSt7__cxx115stoulERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPmi(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i32 noundef) #10

; Function Attrs: mustprogress nounwind uwtable
declare noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

; Function Attrs: nounwind
declare i32 @snprintf(ptr noundef, i64 noundef, ptr noundef, ...) #8

; Function Attrs: mustprogress nounwind uwtable
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32)) #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN4Jtag10setClkFreqEj(ptr noundef nonnull align 8 dereferenceable(193), i32 noundef) #2 align 2

declare void @_ZN4Jtag9set_stateENS_10tapState_tEh(ptr noundef nonnull align 8 dereferenceable(193), i32 noundef, i8 noundef zeroext) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5Gowin14displayReadRegEPKcj(ptr noundef nonnull align 8 dereferenceable(192), ptr noundef, i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN5Gowin13readStatusRegEv(ptr noundef nonnull align 8 dereferenceable(192)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN5Gowin10disableCfgEv(ptr noundef nonnull align 8 dereferenceable(192)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN5Gowin12send_commandEh(ptr noundef nonnull align 8 dereferenceable(192), i8 noundef zeroext) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN5Gowin16gw5a_disable_spiEv(ptr noundef nonnull align 8 dereferenceable(192)) #2 align 2

; Function Attrs: nounwind
declare void @_ZN6DeviceD2Ev(ptr noundef nonnull align 8 dereferenceable(87)) unnamed_addr #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12SPIInterfaceD2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { "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 = { 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 #5 = { nobuiltin allocsize(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 #6 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind memory(none) }
attributes #8 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { noinline noreturn nounwind uwtable "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 #10 = { inlinehint 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 #11 = { nounwind }
attributes #12 = { builtin allocsize(0) }
attributes #13 = { builtin nounwind }
attributes #14 = { noreturn }
attributes #15 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"_ZTSN6Device11prog_type_tE", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = !{i8 0, i8 2}
!15 = !{}
!16 = !{!17, !17, i64 0}
!17 = !{!"vtable pointer", !8, i64 0}
!18 = !{!19, !26, i64 168}
!19 = !{!"_ZTS5Gowin", !20, i64 0, !25, i64 88, !27, i64 144, !27, i64 152, !27, i64 160, !26, i64 168, !12, i64 172, !12, i64 173, !12, i64 174, !12, i64 175, !12, i64 176, !12, i64 177, !12, i64 178, !7, i64 179, !7, i64 180, !7, i64 181, !7, i64 182, !7, i64 183, !33, i64 184, !33, i64 188}
!20 = !{!"_ZTS6Device", !6, i64 8, !21, i64 16, !21, i64 48, !24, i64 80, !12, i64 84, !12, i64 85, !12, i64 86}
!21 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !22, i64 0, !23, i64 8, !7, i64 16}
!22 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!23 = !{!"long", !7, i64 0}
!24 = !{!"_ZTSN6Device9prog_modeE", !7, i64 0}
!25 = !{!"_ZTS12SPIInterface", !7, i64 8, !26, i64 12, !12, i64 16, !12, i64 17, !12, i64 18, !21, i64 24}
!26 = !{!"int", !7, i64 0}
!27 = !{!"_ZTSSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EE", !28, i64 0}
!28 = !{!"_ZTSSt15__uniq_ptr_dataI21ConfigBitstreamParserSt14default_deleteIS0_ELb1ELb1EE", !29, i64 0}
!29 = !{!"_ZTSSt15__uniq_ptr_implI21ConfigBitstreamParserSt14default_deleteIS0_EE", !30, i64 0}
!30 = !{!"_ZTSSt5tupleIJP21ConfigBitstreamParserSt14default_deleteIS0_EEE", !31, i64 0}
!31 = !{!"_ZTSSt11_Tuple_implILm0EJP21ConfigBitstreamParserSt14default_deleteIS0_EEE", !32, i64 0}
!32 = !{!"_ZTSSt10_Head_baseILm0EP21ConfigBitstreamParserLb0EE", !6, i64 0}
!33 = !{!"_ZTSN13JtagInterface10tck_edge_tE", !7, i64 0}
!34 = !{!19, !12, i64 172}
!35 = !{!19, !12, i64 173}
!36 = !{!19, !12, i64 174}
!37 = !{!19, !12, i64 175}
!38 = !{!19, !12, i64 176}
!39 = !{!19, !12, i64 178}
!40 = !{!19, !7, i64 179}
!41 = !{!19, !7, i64 180}
!42 = !{!19, !7, i64 181}
!43 = !{!19, !7, i64 182}
!44 = !{!19, !7, i64 183}
!45 = !{!20, !6, i64 8}
!46 = !{!19, !33, i64 188}
!47 = !{!19, !33, i64 184}
!48 = !{!20, !24, i64 80}
!49 = !{!20, !12, i64 85}
!50 = !{!26, !26, 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"

%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.68" }
%"struct.std::_Head_base.68" = type { ptr }
%"class.std::allocator.0" = type { i8 }

@_ZTV5Gowin = external dso_local unnamed_addr constant { [20 x ptr], [9 x ptr] }, align 8
@.str.569 = external hidden unnamed_addr constant [3 x i8], align 1
@_ZTISt9exception = external constant ptr
@_ZTISt13runtime_error = external constant ptr
@.str.570 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.571 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.572 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.573 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.574 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.575 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.576 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.577 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.578 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.579 = external hidden unnamed_addr constant [74 x i8], align 1
@.str.580 = external hidden unnamed_addr constant [24 x i8], align 1

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 align 2

declare i32 @__gxx_personality_v0(...)

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

; Function Attrs: mustprogress nounwind uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN5GowinC2EP4JtagNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS7_S7_N6Device11prog_type_tEbbaS9_(ptr noundef nonnull align 8 dereferenceable(192) %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef nonnull align 8 dereferenceable(32) %3, ptr noundef %4, i32 noundef %5, i1 noundef zeroext %6, i1 noundef zeroext %7, i8 noundef signext %8, ptr noundef nonnull align 8 dereferenceable(32) %9) unnamed_addr #2 align 2 personality ptr @__gxx_personality_v0 {
  %11 = alloca %"class.std::__cxx11::basic_string", align 8
  %12 = alloca %"class.std::unique_ptr", align 8
  %13 = alloca %"class.std::unique_ptr", align 8
  %14 = alloca %"class.std::__cxx11::basic_string", align 8
  %15 = alloca %"class.std::allocator.0", align 1
  %16 = alloca %"class.std::__cxx11::basic_string", align 8
  %17 = alloca %"class.std::allocator.0", align 1
  %18 = alloca %"class.std::__cxx11::basic_string", align 8
  %19 = alloca %"class.std::allocator.0", align 1
  %20 = alloca %"class.std::__cxx11::basic_string", align 8
  %21 = alloca %"class.std::__cxx11::basic_string", align 8
  %22 = alloca %"class.std::allocator.0", align 1
  %23 = alloca %"class.std::__cxx11::basic_string", align 8
  %24 = alloca %"class.std::allocator.0", align 1
  %25 = alloca [256 x i8], align 16
  %26 = alloca %"class.std::unique_ptr", align 8
  %27 = alloca %"class.std::__cxx11::basic_string", align 8
  %28 = alloca %"class.std::allocator.0", align 1
  %29 = alloca %"class.std::__cxx11::basic_string", align 8
  %30 = alloca %"class.std::allocator.0", align 1
  %31 = alloca %"class.std::unique_ptr", align 8
  %32 = alloca %"class.std::__cxx11::basic_string", align 8
  %33 = alloca %"class.std::allocator.0", align 1
  %34 = alloca %"class.std::__cxx11::basic_string", align 8
  %35 = alloca %"class.std::allocator.0", align 1
  %36 = zext i1 %6 to i8
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %2)
  invoke void @_ZN6DeviceC2EP4JtagNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS7_ba(ptr noundef nonnull align 8 dereferenceable(87) %0, ptr noundef %1, ptr noundef nonnull %11, ptr noundef nonnull align 8 dereferenceable(32) %3, i1 noundef zeroext %7, i8 noundef signext %8)
          to label %37 unwind label %65

37:                                               ; preds = %10
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #13
  %38 = getelementptr inbounds i8, ptr %0, i64 88
  invoke void @_ZN12SPIInterfaceC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEajbbb(ptr noundef nonnull align 8 dereferenceable(56) %38, ptr noundef nonnull align 8 dereferenceable(32) %2, i8 noundef signext %8, i32 noundef 0, i1 noundef zeroext %7, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %39 unwind label %69

39:                                               ; preds = %37
  store ptr getelementptr inbounds inrange(-16, 144) (i8, ptr @_ZTV5Gowin, i64 16), ptr %0, align 8, !tbaa !5
  store ptr getelementptr inbounds inrange(-16, 56) (i8, ptr @_ZTV5Gowin, i64 176), ptr %38, align 8, !tbaa !5
  %40 = getelementptr inbounds i8, ptr %0, i64 144
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #13
  %41 = getelementptr inbounds i8, ptr %0, i64 152
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #13
  %42 = getelementptr inbounds i8, ptr %0, i64 160
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8) %42) #13
  %43 = getelementptr inbounds i8, ptr %0, i64 168
  %44 = getelementptr inbounds i8, ptr %0, i64 174
  %45 = getelementptr inbounds i8, ptr %0, i64 176
  %46 = getelementptr inbounds i8, ptr %0, i64 178
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(9) %43, i8 0, i64 9, i1 false)
  store i8 %36, ptr %46, align 2, !tbaa !8
  %47 = getelementptr inbounds i8, ptr %0, i64 179
  store <4 x i8> <i8 2, i8 8, i8 32, i8 -128>, ptr %47, align 1, !tbaa !27
  %48 = getelementptr inbounds i8, ptr %0, i64 183
  store i8 64, ptr %48, align 1, !tbaa !28
  %49 = invoke noundef zeroext i1 @_ZN5Gowin12detectFamilyEv(ptr noundef nonnull align 8 dereferenceable(192) %0)
          to label %50 unwind label %73

50:                                               ; preds = %39
  %51 = getelementptr inbounds i8, ptr %0, i64 8
  %52 = load ptr, ptr %51, align 8, !tbaa !29
  %53 = invoke noundef i32 @_ZN4Jtag12getWriteEdgeEv(ptr noundef nonnull align 8 dereferenceable(193) %52)
          to label %54 unwind label %73

54:                                               ; preds = %50
  %55 = getelementptr inbounds i8, ptr %0, i64 188
  store i32 %53, ptr %55, align 4, !tbaa !30
  %56 = load ptr, ptr %51, align 8, !tbaa !29
  %57 = invoke noundef i32 @_ZN4Jtag11getReadEdgeEv(ptr noundef nonnull align 8 dereferenceable(193) %56)
          to label %58 unwind label %73

58:                                               ; preds = %54
  %59 = getelementptr inbounds i8, ptr %0, i64 184
  store i32 %57, ptr %59, align 8, !tbaa !31
  %60 = icmp eq i32 %5, 1
  %spec.select = select i1 %60, i32 1, i32 2
  %61 = getelementptr inbounds i8, ptr %0, i64 80
  store i32 %spec.select, ptr %61, align 8
  %62 = getelementptr inbounds i8, ptr %0, i64 48
  %63 = call noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32) %62) #13
  %64 = icmp eq i32 %5, 2
  %or.cond.not = or i1 %64, %63
  br i1 %or.cond.not, label %226, label %77

65:                                               ; preds = %10
  %66 = landingpad { ptr, i32 }
          cleanup
  %67 = extractvalue { ptr, i32 } %66, 0
  %68 = extractvalue { ptr, i32 } %66, 1
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #13
  br label %360

69:                                               ; preds = %37
  %70 = landingpad { ptr, i32 }
          cleanup
  %71 = extractvalue { ptr, i32 } %70, 0
  %72 = extractvalue { ptr, i32 } %70, 1
  br label %359

73:                                               ; preds = %.invoke, %355, %353, %351, %349, %348, %346, %340, %337, %296, %239, %186, %149, %54, %50, %39
  %74 = landingpad { ptr, i32 }
          cleanup
  %75 = extractvalue { ptr, i32 } %74, 0
  %76 = extractvalue { ptr, i32 } %74, 1
  br label %358

77:                                               ; preds = %58
  %78 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull @.str.569)
  br i1 %78, label %79, label %111

79:                                               ; preds = %77
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #13
  %80 = invoke noalias noundef nonnull dereferenceable(208) ptr @_Znwm(i64 noundef 208) #14
          to label %81 unwind label %90

81:                                               ; preds = %79
  %82 = getelementptr inbounds i8, ptr %0, i64 16
  %83 = load i32, ptr %61, align 8, !tbaa !32
  %84 = icmp eq i32 %83, 2
  %85 = getelementptr inbounds i8, ptr %0, i64 85
  %86 = load i8, ptr %85, align 1, !tbaa !33, !range !34, !noundef !35
  %87 = trunc nuw i8 %86 to i1
  invoke void @_ZN8FsParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(208) %80, ptr noundef nonnull align 8 dereferenceable(32) %82, i1 noundef zeroext %84, i1 noundef zeroext %87)
          to label %88 unwind label %92

88:                                               ; preds = %81
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %12, ptr noundef nonnull %80) #13
  %89 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %12) #13
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #13
  br label %147

90:                                               ; preds = %79
  %91 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  br label %94

92:                                               ; preds = %81
  %93 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  call void @_ZdlPvm(ptr noundef nonnull %80, i64 noundef 208) #15
  br label %94

94:                                               ; preds = %92, %90
  %.pn47 = phi { ptr, i32 } [ %93, %92 ], [ %91, %90 ]
  %.0 = extractvalue { ptr, i32 } %.pn47, 0
  %.022 = extractvalue { ptr, i32 } %.pn47, 1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #13
  %95 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTISt9exception) #13
  %96 = icmp eq i32 %.022, %95
  br i1 %96, label %97, label %358

97:                                               ; preds = %94
  %98 = call ptr @__cxa_begin_catch(ptr %.0) #13
  %99 = call ptr @__cxa_allocate_exception(i64 16) #13
  %100 = load ptr, ptr %98, align 8, !tbaa !5
  %101 = getelementptr inbounds i8, ptr %100, i64 16
  %102 = load ptr, ptr %101, align 8
  %103 = call noundef ptr %102(ptr noundef nonnull align 8 dereferenceable(8) %98) #13
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %99, ptr noundef %103)
          to label %104 unwind label %105

104:                                              ; preds = %97
  invoke void @__cxa_throw(ptr nonnull %99, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #16
          to label %366 unwind label %107

105:                                              ; preds = %97
  %106 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %99) #13
  br label %109

107:                                              ; preds = %104
  %108 = landingpad { ptr, i32 }
          cleanup
  br label %109

109:                                              ; preds = %107, %105
  %.pn49 = phi { ptr, i32 } [ %108, %107 ], [ %106, %105 ]
  invoke void @__cxa_end_catch()
          to label %110 unwind label %363

110:                                              ; preds = %109
  %.1 = extractvalue { ptr, i32 } %.pn49, 0
  %.123 = extractvalue { ptr, i32 } %.pn49, 1
  br label %358

111:                                              ; preds = %77
  %112 = load i8, ptr %46, align 2, !tbaa !8, !range !34, !noundef !35
  %113 = trunc nuw i8 %112 to i1
  br i1 %113, label %120, label %114

114:                                              ; preds = %111
  %115 = call ptr @__cxa_allocate_exception(i64 16) #13
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %115, ptr noundef nonnull @.str.570)
          to label %.invoke unwind label %116

116:                                              ; preds = %114
  %117 = landingpad { ptr, i32 }
          cleanup
  %118 = extractvalue { ptr, i32 } %117, 0
  %119 = extractvalue { ptr, i32 } %117, 1
  call void @__cxa_free_exception(ptr %115) #13
  br label %358

120:                                              ; preds = %111
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #13
  %121 = invoke noalias noundef nonnull dereferenceable(168) ptr @_Znwm(i64 noundef 168) #14
          to label %122 unwind label %126

122:                                              ; preds = %120
  %123 = getelementptr inbounds i8, ptr %0, i64 16
  invoke void @_ZN9RawParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(161) %121, ptr noundef nonnull align 8 dereferenceable(32) %123, i1 noundef zeroext false)
          to label %124 unwind label %128

124:                                              ; preds = %122
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull %121) #13
  %125 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %40, ptr noundef nonnull align 8 dereferenceable(8) %13) #13
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #13
  br label %147

126:                                              ; preds = %120
  %127 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  br label %130

128:                                              ; preds = %122
  %129 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTISt9exception
  call void @_ZdlPvm(ptr noundef nonnull %121, i64 noundef 168) #15
  br label %130

130:                                              ; preds = %128, %126
  %.pn = phi { ptr, i32 } [ %129, %128 ], [ %127, %126 ]
  %.2 = extractvalue { ptr, i32 } %.pn, 0
  %.224 = extractvalue { ptr, i32 } %.pn, 1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #13
  %131 = call i32 @llvm.eh.typeid.for.p0(ptr nonnull @_ZTISt9exception) #13
  %132 = icmp eq i32 %.224, %131
  br i1 %132, label %133, label %358

133:                                              ; preds = %130
  %134 = call ptr @__cxa_begin_catch(ptr %.2) #13
  %135 = call ptr @__cxa_allocate_exception(i64 16) #13
  %136 = load ptr, ptr %134, align 8, !tbaa !5
  %137 = getelementptr inbounds i8, ptr %136, i64 16
  %138 = load ptr, ptr %137, align 8
  %139 = call noundef ptr %138(ptr noundef nonnull align 8 dereferenceable(8) %134) #13
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %135, ptr noundef %139)
          to label %140 unwind label %141

140:                                              ; preds = %133
  invoke void @__cxa_throw(ptr nonnull %135, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #16
          to label %366 unwind label %143

141:                                              ; preds = %133
  %142 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %135) #13
  br label %145

143:                                              ; preds = %140
  %144 = landingpad { ptr, i32 }
          cleanup
  br label %145

145:                                              ; preds = %143, %141
  %.pn45 = phi { ptr, i32 } [ %144, %143 ], [ %142, %141 ]
  invoke void @__cxa_end_catch()
          to label %146 unwind label %363

146:                                              ; preds = %145
  %.3 = extractvalue { ptr, i32 } %.pn45, 0
  %.325 = extractvalue { ptr, i32 } %.pn45, 1
  br label %358

147:                                              ; preds = %124, %88
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %14) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %15) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %14, ptr noundef nonnull @.str.571, ptr noundef nonnull align 1 dereferenceable(1) %15)
          to label %148 unwind label %161

148:                                              ; preds = %147
  invoke void @_Z9printInfoRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %14, i1 noundef zeroext false)
          to label %149 unwind label %163

149:                                              ; preds = %148
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #13
  %150 = call noundef ptr @_ZNKSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #13
  %151 = load ptr, ptr %150, align 8, !tbaa !5
  %152 = getelementptr inbounds i8, ptr %151, i64 16
  %153 = load ptr, ptr %152, align 8
  %154 = invoke noundef i32 %153(ptr noundef nonnull align 8 dereferenceable(160) %150)
          to label %155 unwind label %73

155:                                              ; preds = %149
  %156 = icmp eq i32 %154, 1
  br i1 %156, label %157, label %175

157:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %16) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %17) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %16, ptr noundef nonnull @.str.572, ptr noundef nonnull align 1 dereferenceable(1) %17)
          to label %158 unwind label %166

158:                                              ; preds = %157
  invoke void @_Z10printErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %16, i1 noundef zeroext true)
          to label %159 unwind label %168

159:                                              ; preds = %158
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #13
  %160 = call ptr @__cxa_allocate_exception(i64 16) #13
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %160, ptr noundef nonnull @.str.573)
          to label %.invoke unwind label %171

161:                                              ; preds = %147
  %162 = landingpad { ptr, i32 }
          cleanup
  br label %165

163:                                              ; preds = %148
  %164 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %14) #13
  br label %165

165:                                              ; preds = %163, %161
  %.pn51 = phi { ptr, i32 } [ %164, %163 ], [ %162, %161 ]
  %.4 = extractvalue { ptr, i32 } %.pn51, 0
  %.426 = extractvalue { ptr, i32 } %.pn51, 1
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %15) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %15) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %14) #13
  br label %358

166:                                              ; preds = %157
  %167 = landingpad { ptr, i32 }
          cleanup
  br label %170

168:                                              ; preds = %158
  %169 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %16) #13
  br label %170

170:                                              ; preds = %168, %166
  %.pn79 = phi { ptr, i32 } [ %169, %168 ], [ %167, %166 ]
  %.5 = extractvalue { ptr, i32 } %.pn79, 0
  %.527 = extractvalue { ptr, i32 } %.pn79, 1
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %17) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %17) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %16) #13
  br label %358

171:                                              ; preds = %159
  %172 = landingpad { ptr, i32 }
          cleanup
  %173 = extractvalue { ptr, i32 } %172, 0
  %174 = extractvalue { ptr, i32 } %172, 1
  call void @__cxa_free_exception(ptr %160) #13
  br label %358

175:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %19) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull @.str.574, ptr noundef nonnull align 1 dereferenceable(1) %19)
          to label %176 unwind label %181

176:                                              ; preds = %175
  invoke void @_Z12printSuccessRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %18, i1 noundef zeroext true)
          to label %177 unwind label %183

177:                                              ; preds = %176
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #13
  %178 = getelementptr inbounds i8, ptr %0, i64 85
  %179 = load i8, ptr %178, align 1, !tbaa !33, !range !34, !noundef !35
  %180 = trunc nuw i8 %179 to i1
  br i1 %180, label %186, label %191

181:                                              ; preds = %175
  %182 = landingpad { ptr, i32 }
          cleanup
  br label %185

183:                                              ; preds = %176
  %184 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #13
  br label %185

185:                                              ; preds = %183, %181
  %.pn53 = phi { ptr, i32 } [ %184, %183 ], [ %182, %181 ]
  %.6 = extractvalue { ptr, i32 } %.pn53, 0
  %.628 = extractvalue { ptr, i32 } %.pn53, 1
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %19) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #13
  br label %358

186:                                              ; preds = %177
  %187 = call noundef ptr @_ZNKSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #13
  %188 = load ptr, ptr %187, align 8, !tbaa !5
  %189 = getelementptr inbounds i8, ptr %188, i64 24
  %190 = load ptr, ptr %189, align 8
  invoke void %190(ptr noundef nonnull align 8 dereferenceable(160) %187)
          to label %191 unwind label %73

191:                                              ; preds = %186, %177
  %192 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull @.str.569)
  br i1 %192, label %193, label %226

193:                                              ; preds = %191
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %20) #13
  %194 = call noundef ptr @_ZNKSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %40) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %22) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %21, ptr noundef nonnull @.str.575, ptr noundef nonnull align 1 dereferenceable(1) %22)
          to label %195 unwind label %208

195:                                              ; preds = %193
  invoke void @_ZN21ConfigBitstreamParser12getHeaderValENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind nonnull writable sret(%"class.std::__cxx11::basic_string") align 8 %20, ptr noundef nonnull align 8 dereferenceable(160) %194, ptr noundef nonnull %21)
          to label %196 unwind label %210

196:                                              ; preds = %195
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #13
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %23) #13
  %197 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %20) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %24) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef %197, ptr noundef nonnull align 1 dereferenceable(1) %24)
          to label %198 unwind label %213

198:                                              ; preds = %196
  %199 = invoke noundef i64 @_ZNSt7__cxx115stoulERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPmi(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef null, i32 noundef 16)
          to label %200 unwind label %215

200:                                              ; preds = %198
  %201 = trunc i64 %199 to i32
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #13
  %202 = and i32 %201, 268435455
  %203 = load i32, ptr %43, align 8, !tbaa !36
  %.not = icmp eq i32 %202, %203
  br i1 %.not, label %223, label %204

204:                                              ; preds = %200
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %25) #13
  %205 = call i32 (ptr, i64, ptr, ...) @snprintf(ptr noundef nonnull dereferenceable(1) %25, i64 noundef 256, ptr noundef nonnull @.str.576, i32 noundef %201, i32 noundef %203) #13
  %206 = call ptr @__cxa_allocate_exception(i64 16) #13
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %206, ptr noundef nonnull %25)
          to label %207 unwind label %218

207:                                              ; preds = %204
  invoke void @__cxa_throw(ptr nonnull %206, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #16
          to label %366 unwind label %220

208:                                              ; preds = %193
  %209 = landingpad { ptr, i32 }
          cleanup
  br label %212

210:                                              ; preds = %195
  %211 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %21) #13
  br label %212

212:                                              ; preds = %210, %208
  %.pn55 = phi { ptr, i32 } [ %211, %210 ], [ %209, %208 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %22) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #13
  br label %225

213:                                              ; preds = %196
  %214 = landingpad { ptr, i32 }
          cleanup
  br label %217

215:                                              ; preds = %198
  %216 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #13
  br label %217

217:                                              ; preds = %215, %213
  %.pn57 = phi { ptr, i32 } [ %216, %215 ], [ %214, %213 ]
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %24) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %24) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %23) #13
  br label %224

218:                                              ; preds = %204
  %219 = landingpad { ptr, i32 }
          cleanup
  call void @__cxa_free_exception(ptr %206) #13
  br label %222

220:                                              ; preds = %207
  %221 = landingpad { ptr, i32 }
          cleanup
  br label %222

222:                                              ; preds = %220, %218
  %.pn75 = phi { ptr, i32 } [ %221, %220 ], [ %219, %218 ]
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %25) #13
  br label %224

223:                                              ; preds = %200
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #13
  br label %226

224:                                              ; preds = %222, %217
  %.pn75.pn = phi { ptr, i32 } [ %.pn75, %222 ], [ %.pn57, %217 ]
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #13
  br label %225

225:                                              ; preds = %224, %212
  %.pn75.pn.pn = phi { ptr, i32 } [ %.pn75.pn, %224 ], [ %.pn55, %212 ]
  %.11 = extractvalue { ptr, i32 } %.pn75.pn.pn, 0
  %.1133 = extractvalue { ptr, i32 } %.pn75.pn.pn, 1
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %20) #13
  br label %358

226:                                              ; preds = %191, %223, %58
  %227 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %4) #13
  %.not59 = icmp eq i64 %227, 0
  br i1 %.not59, label %274, label %228

228:                                              ; preds = %226
  %229 = load i32, ptr %43, align 8, !tbaa !36
  %.not60 = icmp eq i32 %229, 16816155
  br i1 %.not60, label %236, label %230

230:                                              ; preds = %228
  %231 = call ptr @__cxa_allocate_exception(i64 16) #13
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %231, ptr noundef nonnull @.str.577)
          to label %.invoke unwind label %232

232:                                              ; preds = %230
  %233 = landingpad { ptr, i32 }
          cleanup
  %234 = extractvalue { ptr, i32 } %233, 0
  %235 = extractvalue { ptr, i32 } %233, 1
  call void @__cxa_free_exception(ptr %231) #13
  br label %358

236:                                              ; preds = %228
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %26) #13
  %237 = invoke noalias noundef nonnull dereferenceable(168) ptr @_Znwm(i64 noundef 168) #14
          to label %238 unwind label %252

238:                                              ; preds = %236
  invoke void @_ZN9RawParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(161) %237, ptr noundef nonnull align 8 dereferenceable(32) %4, i1 noundef zeroext false)
          to label %239 unwind label %254

239:                                              ; preds = %238
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %26, ptr noundef nonnull %237) #13
  %240 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %26) #13
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #13
  %241 = call noundef ptr @_ZNKSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #13
  %242 = load ptr, ptr %241, align 8, !tbaa !5
  %243 = getelementptr inbounds i8, ptr %242, i64 16
  %244 = load ptr, ptr %243, align 8
  %245 = invoke noundef i32 %244(ptr noundef nonnull align 8 dereferenceable(160) %241)
          to label %246 unwind label %73

246:                                              ; preds = %239
  %247 = icmp eq i32 %245, 1
  br i1 %247, label %248, label %266

248:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %27) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %28) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %27, ptr noundef nonnull @.str.572, ptr noundef nonnull align 1 dereferenceable(1) %28)
          to label %249 unwind label %257

249:                                              ; preds = %248
  invoke void @_Z10printErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %27, i1 noundef zeroext true)
          to label %250 unwind label %259

250:                                              ; preds = %249
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #13
  %251 = call ptr @__cxa_allocate_exception(i64 16) #13
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %251, ptr noundef nonnull @.str.573)
          to label %.invoke unwind label %262

252:                                              ; preds = %236
  %253 = landingpad { ptr, i32 }
          cleanup
  br label %256

254:                                              ; preds = %238
  %255 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %237, i64 noundef 168) #15
  br label %256

256:                                              ; preds = %254, %252
  %.pn61 = phi { ptr, i32 } [ %255, %254 ], [ %253, %252 ]
  %.12 = extractvalue { ptr, i32 } %.pn61, 0
  %.1234 = extractvalue { ptr, i32 } %.pn61, 1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #13
  br label %358

257:                                              ; preds = %248
  %258 = landingpad { ptr, i32 }
          cleanup
  br label %261

259:                                              ; preds = %249
  %260 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %27) #13
  br label %261

261:                                              ; preds = %259, %257
  %.pn73 = phi { ptr, i32 } [ %260, %259 ], [ %258, %257 ]
  %.13 = extractvalue { ptr, i32 } %.pn73, 0
  %.1335 = extractvalue { ptr, i32 } %.pn73, 1
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %28) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %28) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %27) #13
  br label %358

262:                                              ; preds = %250
  %263 = landingpad { ptr, i32 }
          cleanup
  %264 = extractvalue { ptr, i32 } %263, 0
  %265 = extractvalue { ptr, i32 } %263, 1
  call void @__cxa_free_exception(ptr %251) #13
  br label %358

266:                                              ; preds = %246
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %29) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %30) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %29, ptr noundef nonnull @.str.574, ptr noundef nonnull align 1 dereferenceable(1) %30)
          to label %267 unwind label %269

267:                                              ; preds = %266
  invoke void @_Z12printSuccessRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %29, i1 noundef zeroext true)
          to label %268 unwind label %271

268:                                              ; preds = %267
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #13
  br label %274

269:                                              ; preds = %266
  %270 = landingpad { ptr, i32 }
          cleanup
  br label %273

271:                                              ; preds = %267
  %272 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %29) #13
  br label %273

273:                                              ; preds = %271, %269
  %.pn63 = phi { ptr, i32 } [ %272, %271 ], [ %270, %269 ]
  %.14 = extractvalue { ptr, i32 } %.pn63, 0
  %.1436 = extractvalue { ptr, i32 } %.pn63, 1
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %30) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %30) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %29) #13
  br label %358

274:                                              ; preds = %268, %226
  %275 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %9) #13
  %.not65 = icmp eq i64 %275, 0
  br i1 %.not65, label %332, label %276

276:                                              ; preds = %274
  %277 = load i8, ptr %44, align 2, !tbaa !37, !range !34, !noundef !35
  %278 = trunc nuw i8 %277 to i1
  br i1 %278, label %285, label %279

279:                                              ; preds = %276
  %280 = call ptr @__cxa_allocate_exception(i64 16) #13
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %280, ptr noundef nonnull @.str.578)
          to label %.invoke unwind label %281

281:                                              ; preds = %279
  %282 = landingpad { ptr, i32 }
          cleanup
  %283 = extractvalue { ptr, i32 } %282, 0
  %284 = extractvalue { ptr, i32 } %282, 1
  call void @__cxa_free_exception(ptr %280) #13
  br label %358

285:                                              ; preds = %276
  %286 = call noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32) %4) #13
  %.not66 = icmp eq i64 %286, 0
  br i1 %.not66, label %293, label %287

287:                                              ; preds = %285
  %288 = call ptr @__cxa_allocate_exception(i64 16) #13
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %288, ptr noundef nonnull @.str.579)
          to label %.invoke unwind label %289

289:                                              ; preds = %287
  %290 = landingpad { ptr, i32 }
          cleanup
  %291 = extractvalue { ptr, i32 } %290, 0
  %292 = extractvalue { ptr, i32 } %290, 1
  call void @__cxa_free_exception(ptr %288) #13
  br label %358

293:                                              ; preds = %285
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #13
  %294 = invoke noalias noundef nonnull dereferenceable(168) ptr @_Znwm(i64 noundef 168) #14
          to label %295 unwind label %310

295:                                              ; preds = %293
  invoke void @_ZN9RawParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(161) %294, ptr noundef nonnull align 8 dereferenceable(32) %9, i1 noundef zeroext false)
          to label %296 unwind label %312

296:                                              ; preds = %295
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEPS0_(ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull %294) #13
  %297 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8) %42, ptr noundef nonnull align 8 dereferenceable(8) %31) #13
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %31) #13
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #13
  %298 = call noundef ptr @_ZNKSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8) %42) #13
  %299 = load ptr, ptr %298, align 8, !tbaa !5
  %300 = getelementptr inbounds i8, ptr %299, i64 16
  %301 = load ptr, ptr %300, align 8
  %302 = invoke noundef i32 %301(ptr noundef nonnull align 8 dereferenceable(160) %298)
          to label %303 unwind label %73

303:                                              ; preds = %296
  %304 = icmp eq i32 %302, 1
  br i1 %304, label %305, label %324

305:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %33) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %32, ptr noundef nonnull @.str.572, ptr noundef nonnull align 1 dereferenceable(1) %33)
          to label %306 unwind label %315

306:                                              ; preds = %305
  invoke void @_Z10printErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %32, i1 noundef zeroext true)
          to label %307 unwind label %317

307:                                              ; preds = %306
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #13
  %308 = call ptr @__cxa_allocate_exception(i64 16) #13
  invoke void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16) %308, ptr noundef nonnull @.str.573)
          to label %.invoke unwind label %320

.invoke:                                          ; preds = %307, %287, %279, %250, %230, %159, %114
  %309 = phi ptr [ %115, %114 ], [ %160, %159 ], [ %231, %230 ], [ %251, %250 ], [ %280, %279 ], [ %288, %287 ], [ %308, %307 ]
  invoke void @__cxa_throw(ptr nonnull %309, ptr nonnull @_ZTISt13runtime_error, ptr nonnull @_ZNSt13runtime_errorD1Ev) #16
          to label %.cont unwind label %73

.cont:                                            ; preds = %.invoke
  unreachable

310:                                              ; preds = %293
  %311 = landingpad { ptr, i32 }
          cleanup
  br label %314

312:                                              ; preds = %295
  %313 = landingpad { ptr, i32 }
          cleanup
  call void @_ZdlPvm(ptr noundef nonnull %294, i64 noundef 168) #15
  br label %314

314:                                              ; preds = %312, %310
  %.pn67 = phi { ptr, i32 } [ %313, %312 ], [ %311, %310 ]
  %.15 = extractvalue { ptr, i32 } %.pn67, 0
  %.1537 = extractvalue { ptr, i32 } %.pn67, 1
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #13
  br label %358

315:                                              ; preds = %305
  %316 = landingpad { ptr, i32 }
          cleanup
  br label %319

317:                                              ; preds = %306
  %318 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %32) #13
  br label %319

319:                                              ; preds = %317, %315
  %.pn71 = phi { ptr, i32 } [ %318, %317 ], [ %316, %315 ]
  %.16 = extractvalue { ptr, i32 } %.pn71, 0
  %.1638 = extractvalue { ptr, i32 } %.pn71, 1
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %33) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %33) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #13
  br label %358

320:                                              ; preds = %307
  %321 = landingpad { ptr, i32 }
          cleanup
  %322 = extractvalue { ptr, i32 } %321, 0
  %323 = extractvalue { ptr, i32 } %321, 1
  call void @__cxa_free_exception(ptr %308) #13
  br label %358

324:                                              ; preds = %303
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %35) #13
  call void @_ZNSaIcEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #13
  invoke void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2IS3_EEPKcRKS3_(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull @.str.574, ptr noundef nonnull align 1 dereferenceable(1) %35)
          to label %325 unwind label %327

325:                                              ; preds = %324
  invoke void @_Z12printSuccessRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32) %34, i1 noundef zeroext true)
          to label %326 unwind label %329

326:                                              ; preds = %325
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #13
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %35) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #13
  br label %332

327:                                              ; preds = %324
  %328 = landingpad { ptr, i32 }
          cleanup
  br label %331

329:                                              ; preds = %325
  %330 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #13
  br label %331

331:                                              ; preds = %329, %327
  %.pn69 = phi { ptr, i32 } [ %330, %329 ], [ %328, %327 ]
  %.17 = extractvalue { ptr, i32 } %.pn69, 0
  %.1739 = extractvalue { ptr, i32 } %.pn69, 1
  call void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %35) #13
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %35) #13
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #13
  br label %358

332:                                              ; preds = %326, %274
  %333 = load i8, ptr %45, align 8, !tbaa !38, !range !34, !noundef !35
  %334 = trunc nuw i8 %333 to i1
  %335 = load i32, ptr %61, align 8
  %336 = icmp eq i32 %335, 1
  %or.cond = select i1 %334, i1 %336, i1 false
  br i1 %or.cond, label %337, label %357

337:                                              ; preds = %332
  %338 = load ptr, ptr %51, align 8, !tbaa !29
  %339 = invoke noundef i32 @_ZN4Jtag10setClkFreqEj(ptr noundef nonnull align 8 dereferenceable(193) %338, i32 noundef 2500000)
          to label %340 unwind label %73

340:                                              ; preds = %337
  %341 = load ptr, ptr %51, align 8, !tbaa !29
  invoke void @_ZN4Jtag9set_stateENS_10tapState_tEh(ptr noundef nonnull align 8 dereferenceable(193) %341, i32 noundef 0, i8 noundef zeroext 1)
          to label %342 unwind label %73

342:                                              ; preds = %340
  %343 = getelementptr inbounds i8, ptr %0, i64 85
  %344 = load i8, ptr %343, align 1, !tbaa !33, !range !34, !noundef !35
  %345 = trunc nuw i8 %344 to i1
  br i1 %345, label %346, label %349

346:                                              ; preds = %342
  %347 = invoke noundef i32 @_ZN5Gowin13readStatusRegEv(ptr noundef nonnull align 8 dereferenceable(192) %0)
          to label %348 unwind label %73

348:                                              ; preds = %346
  invoke void @_ZN5Gowin14displayReadRegEPKcj(ptr noundef nonnull align 8 dereferenceable(192) %0, ptr noundef nonnull @.str.580, i32 noundef %347)
          to label %349 unwind label %73

349:                                              ; preds = %348, %342
  %350 = invoke noundef zeroext i1 @_ZN5Gowin10disableCfgEv(ptr noundef nonnull align 8 dereferenceable(192) %0)
          to label %351 unwind label %73

351:                                              ; preds = %349
  %352 = invoke noundef zeroext i1 @_ZN5Gowin12send_commandEh(ptr noundef nonnull align 8 dereferenceable(192) %0, i8 noundef zeroext 0)
          to label %353 unwind label %73

353:                                              ; preds = %351
  %354 = load ptr, ptr %51, align 8, !tbaa !29
  invoke void @_ZN4Jtag9set_stateENS_10tapState_tEh(ptr noundef nonnull align 8 dereferenceable(193) %354, i32 noundef 0, i8 noundef zeroext 1)
          to label %355 unwind label %73

355:                                              ; preds = %353
  %356 = invoke noundef zeroext i1 @_ZN5Gowin16gw5a_disable_spiEv(ptr noundef nonnull align 8 dereferenceable(192) %0)
          to label %357 unwind label %73

357:                                              ; preds = %355, %332
  ret void

358:                                              ; preds = %331, %320, %319, %314, %289, %281, %273, %262, %261, %256, %232, %225, %185, %171, %170, %165, %146, %130, %116, %110, %94, %73
  %.1840 = phi i32 [ %76, %73 ], [ %174, %171 ], [ %.527, %170 ], [ %.1133, %225 ], [ %235, %232 ], [ %265, %262 ], [ %.1335, %261 ], [ %292, %289 ], [ %323, %320 ], [ %.1638, %319 ], [ %.1739, %331 ], [ %.1537, %314 ], [ %284, %281 ], [ %.1436, %273 ], [ %.1234, %256 ], [ %.628, %185 ], [ %.426, %165 ], [ %.123, %110 ], [ %.022, %94 ], [ %.325, %146 ], [ %.224, %130 ], [ %119, %116 ]
  %.18 = phi ptr [ %75, %73 ], [ %173, %171 ], [ %.5, %170 ], [ %.11, %225 ], [ %234, %232 ], [ %264, %262 ], [ %.13, %261 ], [ %291, %289 ], [ %322, %320 ], [ %.16, %319 ], [ %.17, %331 ], [ %.15, %314 ], [ %283, %281 ], [ %.14, %273 ], [ %.12, %256 ], [ %.6, %185 ], [ %.4, %165 ], [ %.1, %110 ], [ %.0, %94 ], [ %.3, %146 ], [ %.2, %130 ], [ %118, %116 ]
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %42) #13
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %41) #13
  call void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %40) #13
  call void @_ZN12SPIInterfaceD2Ev(ptr noundef nonnull align 8 dereferenceable(56) %38) #13
  br label %359

359:                                              ; preds = %358, %69
  %.1941 = phi i32 [ %.1840, %358 ], [ %72, %69 ]
  %.19 = phi ptr [ %.18, %358 ], [ %71, %69 ]
  call void @_ZN6DeviceD2Ev(ptr noundef nonnull align 8 dereferenceable(87) %0) #13
  br label %360

360:                                              ; preds = %359, %65
  %.2042 = phi i32 [ %.1941, %359 ], [ %68, %65 ]
  %.20 = phi ptr [ %.19, %359 ], [ %67, %65 ]
  %361 = insertvalue { ptr, i32 } poison, ptr %.20, 0
  %362 = insertvalue { ptr, i32 } %361, i32 %.2042, 1
  resume { ptr, i32 } %362

363:                                              ; preds = %145, %109
  %364 = landingpad { ptr, i32 }
          catch ptr null
  %365 = extractvalue { ptr, i32 } %364, 0
  call void @__clang_call_terminate(ptr %365) #17
  unreachable

366:                                              ; preds = %207, %140, %104
  unreachable
}

; Function Attrs: mustprogress uwtable
declare void @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #2 align 2

declare void @_ZN6DeviceC2EP4JtagNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS7_ba(ptr noundef nonnull align 8 dereferenceable(87), ptr noundef, ptr noundef, ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, i8 noundef signext) unnamed_addr #3

declare void @_ZN12SPIInterfaceC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEajbbb(ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(32), i8 noundef signext, i32 noundef, i1 noundef zeroext, i1 noundef zeroext, i1 noundef zeroext) unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEv(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN5Gowin12detectFamilyEv(ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN4Jtag12getWriteEdgeEv(ptr noundef nonnull align 8 dereferenceable(193)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN4Jtag11getReadEdgeEv(ptr noundef nonnull align 8 dereferenceable(193)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare noundef zeroext i1 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5emptyEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) local_unnamed_addr #4

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #5

declare void @_ZN8FsParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEbb(ptr noundef nonnull align 8 dereferenceable(208), ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, i1 noundef zeroext) unnamed_addr #3

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEC2IS2_vEEPS0_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEaSEOS3_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #1 align 2

; Function Attrs: nofree nosync nounwind memory(none)
declare i32 @llvm.eh.typeid.for.p0(ptr) #7

declare ptr @__cxa_begin_catch(ptr) local_unnamed_addr

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

declare void @_ZNSt13runtime_errorC1EPKc(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef) unnamed_addr #3

declare void @__cxa_free_exception(ptr) local_unnamed_addr

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD1Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #8

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

declare void @__cxa_end_catch() local_unnamed_addr

; Function Attrs: noinline noreturn nounwind uwtable
declare hidden void @__clang_call_terminate(ptr noundef) local_unnamed_addr #9

declare void @_ZN9RawParserC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(161), ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext) unnamed_addr #3

declare void @_Z9printInfoRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1 align 2

declare void @_Z10printErrorRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext) local_unnamed_addr #3

declare void @_Z12printSuccessRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb(ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext) local_unnamed_addr #3

declare void @_ZN21ConfigBitstreamParser12getHeaderValENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE(ptr dead_on_unwind writable sret(%"class.std::__cxx11::basic_string") align 8, ptr noundef nonnull align 8 dereferenceable(160), ptr noundef) local_unnamed_addr #3

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i64 @_ZNSt7__cxx115stoulERKNS_12basic_stringIcSt11char_traitsIcESaIcEEEPmi(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef, i32 noundef) local_unnamed_addr #10

; Function Attrs: mustprogress nounwind uwtable
declare noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

; Function Attrs: nofree nounwind
declare noundef i32 @snprintf(ptr noalias nocapture noundef writeonly, i64 noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #11

; Function Attrs: mustprogress nounwind uwtable
declare noundef i64 @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN4Jtag10setClkFreqEj(ptr noundef nonnull align 8 dereferenceable(193), i32 noundef) local_unnamed_addr #2 align 2

declare void @_ZN4Jtag9set_stateENS_10tapState_tEh(ptr noundef nonnull align 8 dereferenceable(193), i32 noundef, i8 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN5Gowin14displayReadRegEPKcj(ptr noundef nonnull align 8 dereferenceable(192), ptr noundef, i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZN5Gowin13readStatusRegEv(ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN5Gowin10disableCfgEv(ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN5Gowin12send_commandEh(ptr noundef nonnull align 8 dereferenceable(192), i8 noundef zeroext) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN5Gowin16gw5a_disable_spiEv(ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #2 align 2

; Function Attrs: nounwind
declare void @_ZN6DeviceD2Ev(ptr noundef nonnull align 8 dereferenceable(87)) unnamed_addr #8

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN12SPIInterfaceD2Ev(ptr noundef nonnull align 8 dereferenceable(56)) unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt15__new_allocatorIcED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #1 align 2

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #3 = { "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 = { 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 #5 = { nobuiltin allocsize(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 #6 = { nobuiltin nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nofree nosync nounwind memory(none) }
attributes #8 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { noinline noreturn nounwind uwtable "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 #10 = { inlinehint 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 #11 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #12 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #13 = { nounwind }
attributes #14 = { builtin allocsize(0) }
attributes #15 = { builtin nounwind }
attributes #16 = { noreturn }
attributes #17 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !17, i64 178}
!9 = !{!"_ZTS5Gowin", !10, i64 0, !18, i64 88, !20, i64 144, !20, i64 152, !20, i64 160, !19, i64 168, !17, i64 172, !17, i64 173, !17, i64 174, !17, i64 175, !17, i64 176, !17, i64 177, !17, i64 178, !12, i64 179, !12, i64 180, !12, i64 181, !12, i64 182, !12, i64 183, !26, i64 184, !26, i64 188}
!10 = !{!"_ZTS6Device", !11, i64 8, !13, i64 16, !13, i64 48, !16, i64 80, !17, i64 84, !17, i64 85, !17, i64 86}
!11 = !{!"any pointer", !12, i64 0}
!12 = !{!"omnipotent char", !7, i64 0}
!13 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !14, i64 0, !15, i64 8, !12, i64 16}
!14 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !11, i64 0}
!15 = !{!"long", !12, i64 0}
!16 = !{!"_ZTSN6Device9prog_modeE", !12, i64 0}
!17 = !{!"bool", !12, i64 0}
!18 = !{!"_ZTS12SPIInterface", !12, i64 8, !19, i64 12, !17, i64 16, !17, i64 17, !17, i64 18, !13, i64 24}
!19 = !{!"int", !12, i64 0}
!20 = !{!"_ZTSSt10unique_ptrI21ConfigBitstreamParserSt14default_deleteIS0_EE", !21, i64 0}
!21 = !{!"_ZTSSt15__uniq_ptr_dataI21ConfigBitstreamParserSt14default_deleteIS0_ELb1ELb1EE", !22, i64 0}
!22 = !{!"_ZTSSt15__uniq_ptr_implI21ConfigBitstreamParserSt14default_deleteIS0_EE", !23, i64 0}
!23 = !{!"_ZTSSt5tupleIJP21ConfigBitstreamParserSt14default_deleteIS0_EEE", !24, i64 0}
!24 = !{!"_ZTSSt11_Tuple_implILm0EJP21ConfigBitstreamParserSt14default_deleteIS0_EEE", !25, i64 0}
!25 = !{!"_ZTSSt10_Head_baseILm0EP21ConfigBitstreamParserLb0EE", !11, i64 0}
!26 = !{!"_ZTSN13JtagInterface10tck_edge_tE", !12, i64 0}
!27 = !{!12, !12, i64 0}
!28 = !{!9, !12, i64 183}
!29 = !{!10, !11, i64 8}
!30 = !{!9, !26, i64 188}
!31 = !{!9, !26, i64 184}
!32 = !{!10, !16, i64 80}
!33 = !{!10, !17, i64 85}
!34 = !{i8 0, i8 2}
!35 = !{}
!36 = !{!9, !19, i64 168}
!37 = !{!9, !17, i64 174}
!38 = !{!9, !17, i64 176}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,MemCpyOptPass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass