; LLVM IR from AdaptiveCpp/AdaptiveCpp :: src/runtime (adaptivity_engine)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"struct.std::array.13" = type { [2 x i64] }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"struct.hipsycl::glue::sscp::__acpp_sscp_emit_param_type_annotation_fcall_specialized_config" = type { ptr }
%"class.hipsycl::rt::static_array" = type { %"struct.std::array" }
%"struct.std::array" = type { [3 x i64] }
%"struct.hipsycl::rt::allocation_info" = type { %"class.hipsycl::rt::device_id", i32 }
%"class.hipsycl::rt::device_id" = type { %"struct.hipsycl::rt::backend_descriptor", i32 }
%"struct.hipsycl::rt::backend_descriptor" = type { i32, i32, i32 }
%class.anon = type { ptr, ptr, ptr }
%"class.hipsycl::rt::kernel_adaptivity_engine" = type <{ i64, %"class.std::basic_string_view", ptr, ptr, ptr, ptr, ptr, ptr, i64, i64, i32, [4 x i8] }>
%"class.std::basic_string_view" = type { i64, ptr }

@.str = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [75 x i8], align 1

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

declare noundef nonnull align 8 dereferenceable(217) ptr @_ZN7hipsycl2rt11application12get_settingsEv() #1

; Function Attrs: mustprogress uwtable
define dso_local { i64, i64 } @_ZN7hipsycl2rt24kernel_adaptivity_engine29finalize_binary_configurationERNS0_20kernel_configurationE(ptr noundef nonnull align 8 dereferenceable(92) %0, ptr noundef nonnull align 8 dereferenceable(160) %1) #2 align 2 {
  %3 = alloca %"struct.std::array.13", align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca i64, align 8
  %10 = alloca ptr, align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %13 = alloca i32, align 4
  %14 = alloca %"struct.hipsycl::glue::sscp::__acpp_sscp_emit_param_type_annotation_fcall_specialized_config", align 8
  %15 = alloca %"struct.hipsycl::glue::sscp::__acpp_sscp_emit_param_type_annotation_fcall_specialized_config", align 8
  %16 = alloca %"class.hipsycl::rt::static_array", align 8
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i32, align 4
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca [32 x i64], align 16
  %27 = alloca i8, align 1
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i64, align 8
  %31 = alloca ptr, align 8
  %32 = alloca %"struct.hipsycl::rt::allocation_info", align 4
  %33 = alloca i64, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i8, align 1
  %37 = alloca i32, align 4
  %38 = alloca %"struct.std::array.13", align 8
  %39 = alloca ptr, align 8
  %40 = alloca %class.anon, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  %41 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  store i32 0, ptr %6, align 4, !tbaa !9
  br label %42

42:                                               ; preds = %96, %2
  %43 = load i32, ptr %6, align 4, !tbaa !9
  %44 = sext i32 %43 to i64
  %45 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %46 = load ptr, ptr %45, align 8, !tbaa !11
  %47 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %46)
  %48 = icmp ult i64 %44, %47
  br i1 %48, label %50, label %49

49:                                               ; preds = %42
  store i32 2, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  br label %99

50:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  %51 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %52 = load ptr, ptr %51, align 8, !tbaa !11
  %53 = load i32, ptr %6, align 4, !tbaa !9
  %54 = sext i32 %53 to i64
  %55 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7hipsycl2rt15hcf_kernel_info21get_known_annotationsEm(ptr noundef nonnull align 8 dereferenceable(249) %52, i64 noundef %54)
  store ptr %55, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  %56 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %57 = load ptr, ptr %56, align 8, !tbaa !11
  %58 = load i32, ptr %6, align 4, !tbaa !9
  %59 = sext i32 %58 to i64
  %60 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_sizeEm(ptr noundef nonnull align 8 dereferenceable(249) %57, i64 noundef %59)
  store i64 %60, ptr %9, align 8, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %61 = load ptr, ptr %8, align 8, !tbaa !5
  store ptr %61, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  %62 = load ptr, ptr %10, align 8, !tbaa !5
  %63 = call ptr @_ZNKSt6vectorIN7hipsycl2rt15hcf_kernel_info15annotation_typeESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #8
  %64 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %11, i32 0, i32 0
  store ptr %63, ptr %64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %65 = load ptr, ptr %10, align 8, !tbaa !5
  %66 = call ptr @_ZNKSt6vectorIN7hipsycl2rt15hcf_kernel_info15annotation_typeESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %65) #8
  %67 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %12, i32 0, i32 0
  store ptr %66, ptr %67, align 8
  br label %68

68:                                               ; preds = %93, %50
  %69 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN7hipsycl2rt15hcf_kernel_info15annotation_typeESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  br i1 %69, label %71, label %70

70:                                               ; preds = %68
  store i32 5, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  br label %95

71:                                               ; preds = %68
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  %72 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN7hipsycl2rt15hcf_kernel_info15annotation_typeESt6vectorIS4_SaIS4_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  %73 = load i32, ptr %72, align 4, !tbaa !16
  store i32 %73, ptr %13, align 4, !tbaa !16
  %74 = load i32, ptr %13, align 4, !tbaa !16
  %75 = icmp eq i32 %74, 1
  br i1 %75, label %76, label %92

76:                                               ; preds = %71
  %77 = load i64, ptr %9, align 8, !tbaa !15
  %78 = icmp eq i64 %77, 8
  br i1 %78, label %79, label %92

79:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %80 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 3
  %81 = load ptr, ptr %80, align 8, !tbaa !18
  %82 = call noundef ptr @_ZNK7hipsycl4glue3jit19cxx_argument_mapper15get_mapped_argsEv(ptr noundef nonnull align 8 dereferenceable(56) %81)
  %83 = load i32, ptr %6, align 4, !tbaa !9
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds ptr, ptr %82, i64 %84
  %86 = load ptr, ptr %85, align 8, !tbaa !5
  %87 = load i64, ptr %9, align 8, !tbaa !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %14, ptr align 1 %86, i64 %87, i1 false)
  %88 = load ptr, ptr %5, align 8, !tbaa !5
  %89 = load i32, ptr %6, align 4, !tbaa !9
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %15, ptr align 8 %14, i64 8, i1 false), !tbaa.struct !19
  %90 = getelementptr inbounds %"struct.hipsycl::glue::sscp::__acpp_sscp_emit_param_type_annotation_fcall_specialized_config", ptr %15, i32 0, i32 0
  %91 = load ptr, ptr %90, align 8
  call void @_ZN7hipsycl2rt20kernel_configuration39set_function_call_specialization_configEiNS_4glue4sscp63__acpp_sscp_emit_param_type_annotation_fcall_specialized_configIPKNS3_24fcall_specialized_configEEE(ptr noundef nonnull align 8 dereferenceable(160) %88, i32 noundef %89, ptr %91)
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %92

92:                                               ; preds = %79, %76, %71
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  br label %93

93:                                               ; preds = %92
  %94 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN7hipsycl2rt15hcf_kernel_info15annotation_typeESt6vectorIS4_SaIS4_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  br label %68

95:                                               ; preds = %70
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  br label %96

96:                                               ; preds = %95
  %97 = load i32, ptr %6, align 4, !tbaa !9
  %98 = add nsw i32 %97, 1
  store i32 %98, ptr %6, align 4, !tbaa !9
  br label %42, !llvm.loop !20

99:                                               ; preds = %49
  %100 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 10
  %101 = load i32, ptr %100, align 8, !tbaa !22
  %102 = icmp sgt i32 %101, 0
  br i1 %102, label %103, label %400

103:                                              ; preds = %99
  %104 = load ptr, ptr %5, align 8, !tbaa !5
  %105 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 1
  call void @_ZN7hipsycl2rt20kernel_configuration25append_base_configurationISt17basic_string_viewIcSt11char_traitsIcEEEEvNS0_28kernel_base_config_parameterERKT_(ptr noundef nonnull align 8 dereferenceable(160) %104, i32 noundef 6, ptr noundef nonnull align 8 dereferenceable(16) %105)
  %106 = load ptr, ptr %5, align 8, !tbaa !5
  %107 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 5
  %108 = load ptr, ptr %107, align 8, !tbaa !23
  %109 = call noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %108, i32 noundef 0)
  call void @_ZN7hipsycl2rt20kernel_configuration16set_build_optionImTnNSt9enable_ifIXsr3stdE13is_unsigned_vIT_EEiE4typeELi0EEEvNS0_19kernel_build_optionES4_(ptr noundef nonnull align 8 dereferenceable(160) %106, i32 noundef 0, i64 noundef %109)
  %110 = load ptr, ptr %5, align 8, !tbaa !5
  %111 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 5
  %112 = load ptr, ptr %111, align 8, !tbaa !23
  %113 = call noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %112, i32 noundef 1)
  call void @_ZN7hipsycl2rt20kernel_configuration16set_build_optionImTnNSt9enable_ifIXsr3stdE13is_unsigned_vIT_EEiE4typeELi0EEEvNS0_19kernel_build_optionES4_(ptr noundef nonnull align 8 dereferenceable(160) %110, i32 noundef 1, i64 noundef %113)
  %114 = load ptr, ptr %5, align 8, !tbaa !5
  %115 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 5
  %116 = load ptr, ptr %115, align 8, !tbaa !23
  %117 = call noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %116, i32 noundef 2)
  call void @_ZN7hipsycl2rt20kernel_configuration16set_build_optionImTnNSt9enable_ifIXsr3stdE13is_unsigned_vIT_EEiE4typeELi0EEEvNS0_19kernel_build_optionES4_(ptr noundef nonnull align 8 dereferenceable(160) %114, i32 noundef 2, i64 noundef %117)
  call void @llvm.lifetime.start.p0(i64 24, ptr %16) #8
  %118 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 4
  %119 = load ptr, ptr %118, align 8, !tbaa !24
  %120 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 5
  %121 = load ptr, ptr %120, align 8, !tbaa !23
  call void @_ZN7hipsycl2rtmlERKNS0_12static_arrayILi3EEES4_(ptr dead_on_unwind writable sret(%"class.hipsycl::rt::static_array") align 8 %16, ptr noundef nonnull align 8 dereferenceable(24) %119, ptr noundef nonnull align 8 dereferenceable(24) %121)
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  %122 = call noundef i32 @_ZNSt14numeric_limitsIiE3maxEv() #8
  store i32 %122, ptr %17, align 4, !tbaa !9
  %123 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef 0)
  %124 = load i64, ptr %123, align 8, !tbaa !15
  %125 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef 1)
  %126 = load i64, ptr %125, align 8, !tbaa !15
  %127 = mul i64 %124, %126
  %128 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %16, i32 noundef 2)
  %129 = load i64, ptr %128, align 8, !tbaa !15
  %130 = mul i64 %127, %129
  %131 = load i32, ptr %17, align 4, !tbaa !9
  %132 = sext i32 %131 to i64
  %133 = icmp ult i64 %130, %132
  br i1 %133, label %134, label %136

134:                                              ; preds = %103
  %135 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN7hipsycl2rt20kernel_configuration14set_build_flagENS0_17kernel_build_flagE(ptr noundef nonnull align 8 dereferenceable(160) %135, i32 noundef 0)
  br label %136

136:                                              ; preds = %134, %103
  %137 = load ptr, ptr %5, align 8, !tbaa !5
  %138 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 9
  %139 = load i64, ptr %138, align 8, !tbaa !25
  call void @_ZN7hipsycl2rt20kernel_configuration16set_build_optionImTnNSt9enable_ifIXsr3stdE13is_unsigned_vIT_EEiE4typeELi0EEEvNS0_19kernel_build_optionES4_(ptr noundef nonnull align 8 dereferenceable(160) %137, i32 noundef 3, i64 noundef %139)
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #8
  store i32 0, ptr %18, align 4, !tbaa !9
  br label %140

140:                                              ; preds = %190, %136
  %141 = load i32, ptr %18, align 4, !tbaa !9
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %144 = load ptr, ptr %143, align 8, !tbaa !11
  %145 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %144)
  %146 = icmp ult i64 %142, %145
  br i1 %146, label %148, label %147

147:                                              ; preds = %140
  store i32 7, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #8
  br label %193

148:                                              ; preds = %140
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %149 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %150 = load ptr, ptr %149, align 8, !tbaa !11
  %151 = load i32, ptr %18, align 4, !tbaa !9
  %152 = sext i32 %151 to i64
  %153 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_sizeEm(ptr noundef nonnull align 8 dereferenceable(249) %150, i64 noundef %152)
  store i64 %153, ptr %19, align 8, !tbaa !15
  %154 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %155 = load ptr, ptr %154, align 8, !tbaa !11
  %156 = load i32, ptr %18, align 4, !tbaa !9
  %157 = call noundef zeroext i1 @_ZN7hipsycl2rt12_GLOBAL__N_114has_annotationEPKNS0_15hcf_kernel_infoEiNS2_15annotation_typeE(ptr noundef %155, i32 noundef %156, i32 noundef 0)
  br i1 %157, label %158, label %173

158:                                              ; preds = %148
  %159 = load i64, ptr %19, align 8, !tbaa !15
  %160 = icmp ule i64 %159, 8
  br i1 %160, label %161, label %173

161:                                              ; preds = %158
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  store i64 0, ptr %20, align 8, !tbaa !15
  %162 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 3
  %163 = load ptr, ptr %162, align 8, !tbaa !18
  %164 = call noundef ptr @_ZNK7hipsycl4glue3jit19cxx_argument_mapper15get_mapped_argsEv(ptr noundef nonnull align 8 dereferenceable(56) %163)
  %165 = load i32, ptr %18, align 4, !tbaa !9
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds ptr, ptr %164, i64 %166
  %168 = load ptr, ptr %167, align 8, !tbaa !5
  %169 = load i64, ptr %19, align 8, !tbaa !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %20, ptr align 1 %168, i64 %169, i1 false)
  %170 = load ptr, ptr %5, align 8, !tbaa !5
  %171 = load i32, ptr %18, align 4, !tbaa !9
  %172 = load i64, ptr %20, align 8, !tbaa !15
  call void @_ZN7hipsycl2rt20kernel_configuration31set_specialized_kernel_argumentEim(ptr noundef nonnull align 8 dereferenceable(160) %170, i32 noundef %171, i64 noundef %172)
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %173

173:                                              ; preds = %161, %158, %148
  %174 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %175 = load ptr, ptr %174, align 8, !tbaa !11
  %176 = load i32, ptr %18, align 4, !tbaa !9
  %177 = sext i32 %176 to i64
  %178 = call noundef i32 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_typeEm(ptr noundef nonnull align 8 dereferenceable(249) %175, i64 noundef %177)
  %179 = icmp eq i32 %178, 0
  br i1 %179, label %180, label %189

180:                                              ; preds = %173
  %181 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %182 = load ptr, ptr %181, align 8, !tbaa !11
  %183 = load i32, ptr %18, align 4, !tbaa !9
  %184 = call noundef zeroext i1 @_ZN7hipsycl2rt12_GLOBAL__N_114has_annotationEPKNS0_15hcf_kernel_infoEiNS2_15annotation_typeE(ptr noundef %182, i32 noundef %183, i32 noundef 2)
  br i1 %184, label %185, label %188

185:                                              ; preds = %180
  %186 = load ptr, ptr %5, align 8, !tbaa !5
  %187 = load i32, ptr %18, align 4, !tbaa !9
  call void @_ZN7hipsycl2rt20kernel_configuration21set_kernel_param_flagEiNS0_17kernel_param_flagE(ptr noundef nonnull align 8 dereferenceable(160) %186, i32 noundef %187, i32 noundef 1)
  br label %188

188:                                              ; preds = %185, %180
  br label %189

189:                                              ; preds = %188, %173
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %190

190:                                              ; preds = %189
  %191 = load i32, ptr %18, align 4, !tbaa !9
  %192 = add nsw i32 %191, 1
  store i32 %192, ptr %18, align 4, !tbaa !9
  br label %140, !llvm.loop !26

193:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  store i32 0, ptr %21, align 4, !tbaa !9
  br label %194

194:                                              ; preds = %253, %193
  %195 = load i32, ptr %21, align 4, !tbaa !9
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %198 = load ptr, ptr %197, align 8, !tbaa !11
  %199 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %198)
  %200 = icmp ult i64 %196, %199
  br i1 %200, label %202, label %201

201:                                              ; preds = %194
  store i32 10, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  br label %256

202:                                              ; preds = %194
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %203 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %204 = load ptr, ptr %203, align 8, !tbaa !11
  %205 = load i32, ptr %21, align 4, !tbaa !9
  %206 = sext i32 %205 to i64
  %207 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_sizeEm(ptr noundef nonnull align 8 dereferenceable(249) %204, i64 noundef %206)
  store i64 %207, ptr %22, align 8, !tbaa !15
  %208 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %209 = load ptr, ptr %208, align 8, !tbaa !11
  %210 = load i32, ptr %21, align 4, !tbaa !9
  %211 = sext i32 %210 to i64
  %212 = call noundef i32 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_typeEm(ptr noundef nonnull align 8 dereferenceable(249) %209, i64 noundef %211)
  %213 = icmp eq i32 %212, 0
  br i1 %213, label %214, label %252

214:                                              ; preds = %202
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  store i64 0, ptr %23, align 8, !tbaa !15
  %215 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 3
  %216 = load ptr, ptr %215, align 8, !tbaa !18
  %217 = call noundef ptr @_ZNK7hipsycl4glue3jit19cxx_argument_mapper15get_mapped_argsEv(ptr noundef nonnull align 8 dereferenceable(56) %216)
  %218 = load i32, ptr %21, align 4, !tbaa !9
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds ptr, ptr %217, i64 %219
  %221 = load ptr, ptr %220, align 8, !tbaa !5
  %222 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %223 = load ptr, ptr %222, align 8, !tbaa !11
  %224 = load i32, ptr %21, align 4, !tbaa !9
  %225 = sext i32 %224 to i64
  %226 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_sizeEm(ptr noundef nonnull align 8 dereferenceable(249) %223, i64 noundef %225)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %23, ptr align 1 %221, i64 %226, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #8
  %227 = load i64, ptr %23, align 8, !tbaa !15
  %228 = call noundef i32 @_ZN7hipsycl2rt12_GLOBAL__N_123determine_ptr_alignmentEm(i64 noundef %227)
  store i32 %228, ptr %24, align 4, !tbaa !9
  %229 = load i32, ptr %24, align 4, !tbaa !9
  %230 = icmp sgt i32 %229, 0
  br i1 %230, label %231, label %251

231:                                              ; preds = %214
  %232 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv()
  %233 = call noundef i32 @_ZNK7hipsycl6common13output_stream15get_debug_levelEv(ptr noundef nonnull align 8 dereferenceable(16) %232)
  %234 = icmp sgt i32 3, %233
  br i1 %234, label %235, label %236

235:                                              ; preds = %231
  br label %247

236:                                              ; preds = %231
  %237 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv()
  %238 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7hipsycl6common13output_stream10get_streamEv(ptr noundef nonnull align 8 dereferenceable(16) %237)
  %239 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %238, ptr noundef @.str)
  %240 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %239, ptr noundef @.str.1)
  %241 = load i32, ptr %24, align 4, !tbaa !9
  %242 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %240, i32 noundef %241)
  %243 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %242, ptr noundef @.str.2)
  %244 = load i32, ptr %21, align 4, !tbaa !9
  %245 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %243, i32 noundef %244)
  %246 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %245, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %247

247:                                              ; preds = %236, %235
  %248 = load ptr, ptr %5, align 8, !tbaa !5
  %249 = load i32, ptr %21, align 4, !tbaa !9
  %250 = load i32, ptr %24, align 4, !tbaa !9
  call void @_ZN7hipsycl2rt20kernel_configuration19set_known_alignmentEii(ptr noundef nonnull align 8 dereferenceable(160) %248, i32 noundef %249, i32 noundef %250)
  br label %251

251:                                              ; preds = %247, %214
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %252

252:                                              ; preds = %251, %202
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  br label %253

253:                                              ; preds = %252
  %254 = load i32, ptr %21, align 4, !tbaa !9
  %255 = add nsw i32 %254, 1
  store i32 %255, ptr %21, align 4, !tbaa !9
  br label %194, !llvm.loop !27

256:                                              ; preds = %201
  %257 = call noundef nonnull align 8 dereferenceable(217) ptr @_ZN7hipsycl2rt11application12get_settingsEv()
  %258 = call noundef zeroext i1 @_ZNK7hipsycl2rt8settings3getILNS0_7settingE19EEENS0_13setting_traitIXT_EE4typeEv(ptr noundef nonnull align 8 dereferenceable(217) %257)
  br i1 %258, label %259, label %399

259:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #8
  store i32 32, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 256, ptr %26) #8
  call void @llvm.memset.p0.i64(ptr align 16 %26, i8 0, i64 256, i1 false)
  call void @llvm.lifetime.start.p0(i64 1, ptr %27) #8
  store i8 0, ptr %27, align 1, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #8
  store i32 0, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  store i32 0, ptr %29, align 4, !tbaa !9
  br label %260

260:                                              ; preds = %315, %259
  %261 = load i32, ptr %29, align 4, !tbaa !9
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %264 = load ptr, ptr %263, align 8, !tbaa !11
  %265 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %264)
  %266 = icmp ult i64 %262, %265
  br i1 %266, label %268, label %267

267:                                              ; preds = %260
  store i32 13, ptr %7, align 4
  br label %318

268:                                              ; preds = %260
  %269 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %270 = load ptr, ptr %269, align 8, !tbaa !11
  %271 = load i32, ptr %29, align 4, !tbaa !9
  %272 = sext i32 %271 to i64
  %273 = call noundef i32 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_typeEm(ptr noundef nonnull align 8 dereferenceable(249) %270, i64 noundef %272)
  %274 = icmp eq i32 %273, 0
  br i1 %274, label %275, label %314

275:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %276 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %277 = load ptr, ptr %276, align 8, !tbaa !11
  %278 = load i32, ptr %29, align 4, !tbaa !9
  %279 = sext i32 %278 to i64
  %280 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_sizeEm(ptr noundef nonnull align 8 dereferenceable(249) %277, i64 noundef %279)
  store i64 %280, ptr %30, align 8, !tbaa !15
  %281 = load i64, ptr %30, align 8, !tbaa !15
  %282 = icmp eq i64 %281, 8
  br i1 %282, label %283, label %304

283:                                              ; preds = %275
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %284 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 3
  %285 = load ptr, ptr %284, align 8, !tbaa !18
  %286 = call noundef ptr @_ZNK7hipsycl4glue3jit19cxx_argument_mapper15get_mapped_argsEv(ptr noundef nonnull align 8 dereferenceable(56) %285)
  %287 = load i32, ptr %29, align 4, !tbaa !9
  %288 = sext i32 %287 to i64
  %289 = getelementptr inbounds ptr, ptr %286, i64 %288
  %290 = load ptr, ptr %289, align 8, !tbaa !5
  %291 = load i64, ptr %30, align 8, !tbaa !15
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %31, ptr align 1 %290, i64 %291, i1 false)
  %292 = load ptr, ptr %31, align 8, !tbaa !5
  %293 = icmp ne ptr %292, null
  br i1 %293, label %294, label %303

294:                                              ; preds = %283
  call void @llvm.lifetime.start.p0(i64 20, ptr %32) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  %295 = load ptr, ptr %31, align 8, !tbaa !5
  %296 = call noundef zeroext i1 @_ZN7hipsycl2rt18allocation_tracker16query_allocationEPKvRNS0_15allocation_infoERm(ptr noundef %295, ptr noundef nonnull align 4 dereferenceable(20) %32, ptr noundef nonnull align 8 dereferenceable(8) %33)
  br i1 %296, label %297, label %302

297:                                              ; preds = %294
  %298 = load i64, ptr %33, align 8, !tbaa !15
  %299 = load i32, ptr %28, align 4, !tbaa !9
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds [32 x i64], ptr %26, i64 0, i64 %300
  store i64 %298, ptr %301, align 8, !tbaa !15
  br label %302

302:                                              ; preds = %297, %294
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 20, ptr %32) #8
  br label %303

303:                                              ; preds = %302, %283
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %304

304:                                              ; preds = %303, %275
  %305 = load i32, ptr %28, align 4, !tbaa !9
  %306 = add nsw i32 %305, 1
  store i32 %306, ptr %28, align 4, !tbaa !9
  %307 = load i32, ptr %28, align 4, !tbaa !9
  %308 = icmp sge i32 %307, 32
  br i1 %308, label %309, label %310

309:                                              ; preds = %304
  store i8 1, ptr %27, align 1, !tbaa !28
  store i32 13, ptr %7, align 4
  br label %311

310:                                              ; preds = %304
  store i32 0, ptr %7, align 4
  br label %311

311:                                              ; preds = %310, %309
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  %312 = load i32, ptr %7, align 4
  switch i32 %312, label %318 [
    i32 0, label %313
  ]

313:                                              ; preds = %311
  br label %314

314:                                              ; preds = %313, %268
  br label %315

315:                                              ; preds = %314
  %316 = load i32, ptr %29, align 4, !tbaa !9
  %317 = add nsw i32 %316, 1
  store i32 %317, ptr %29, align 4, !tbaa !9
  br label %260, !llvm.loop !30

318:                                              ; preds = %311, %267
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #8
  br label %319

319:                                              ; preds = %318
  %320 = load i8, ptr %27, align 1, !tbaa !28, !range !31, !noundef !32
  %321 = trunc i8 %320 to i1
  br i1 %321, label %398, label %322

322:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #8
  store i32 0, ptr %34, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #8
  store i32 0, ptr %35, align 4, !tbaa !9
  br label %323

323:                                              ; preds = %394, %322
  %324 = load i32, ptr %35, align 4, !tbaa !9
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %327 = load ptr, ptr %326, align 8, !tbaa !11
  %328 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %327)
  %329 = icmp ult i64 %325, %328
  br i1 %329, label %331, label %330

330:                                              ; preds = %323
  store i32 16, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #8
  br label %397

331:                                              ; preds = %323
  %332 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 2
  %333 = load ptr, ptr %332, align 8, !tbaa !11
  %334 = load i32, ptr %35, align 4, !tbaa !9
  %335 = sext i32 %334 to i64
  %336 = call noundef i32 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_typeEm(ptr noundef nonnull align 8 dereferenceable(249) %333, i64 noundef %335)
  %337 = icmp eq i32 %336, 0
  br i1 %337, label %338, label %393

338:                                              ; preds = %331
  %339 = load i32, ptr %34, align 4, !tbaa !9
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds [32 x i64], ptr %26, i64 0, i64 %340
  %342 = load i64, ptr %341, align 8, !tbaa !15
  %343 = icmp ne i64 %342, 0
  br i1 %343, label %344, label %390

344:                                              ; preds = %338
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #8
  store i8 0, ptr %36, align 1, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %345

345:                                              ; preds = %366, %344
  %346 = load i32, ptr %37, align 4, !tbaa !9
  %347 = icmp slt i32 %346, 32
  br i1 %347, label %349, label %348

348:                                              ; preds = %345
  store i32 19, ptr %7, align 4
  br label %369

349:                                              ; preds = %345
  %350 = load i32, ptr %37, align 4, !tbaa !9
  %351 = load i32, ptr %34, align 4, !tbaa !9
  %352 = icmp ne i32 %350, %351
  br i1 %352, label %353, label %365

353:                                              ; preds = %349
  %354 = load i32, ptr %34, align 4, !tbaa !9
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds [32 x i64], ptr %26, i64 0, i64 %355
  %357 = load i64, ptr %356, align 8, !tbaa !15
  %358 = load i32, ptr %37, align 4, !tbaa !9
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds [32 x i64], ptr %26, i64 0, i64 %359
  %361 = load i64, ptr %360, align 8, !tbaa !15
  %362 = icmp eq i64 %357, %361
  br i1 %362, label %363, label %364

363:                                              ; preds = %353
  store i8 1, ptr %36, align 1, !tbaa !28
  store i32 19, ptr %7, align 4
  br label %369

364:                                              ; preds = %353
  br label %365

365:                                              ; preds = %364, %349
  br label %366

366:                                              ; preds = %365
  %367 = load i32, ptr %37, align 4, !tbaa !9
  %368 = add nsw i32 %367, 1
  store i32 %368, ptr %37, align 4, !tbaa !9
  br label %345, !llvm.loop !33

369:                                              ; preds = %363, %348
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  br label %370

370:                                              ; preds = %369
  %371 = load i8, ptr %36, align 1, !tbaa !28, !range !31, !noundef !32
  %372 = trunc i8 %371 to i1
  br i1 %372, label %389, label %373

373:                                              ; preds = %370
  %374 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv()
  %375 = call noundef i32 @_ZNK7hipsycl6common13output_stream15get_debug_levelEv(ptr noundef nonnull align 8 dereferenceable(16) %374)
  %376 = icmp sgt i32 3, %375
  br i1 %376, label %377, label %378

377:                                              ; preds = %373
  br label %386

378:                                              ; preds = %373
  %379 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv()
  %380 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7hipsycl6common13output_stream10get_streamEv(ptr noundef nonnull align 8 dereferenceable(16) %379)
  %381 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %380, ptr noundef @.str)
  %382 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %381, ptr noundef @.str.3)
  %383 = load i32, ptr %35, align 4, !tbaa !9
  %384 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %382, i32 noundef %383)
  %385 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %384, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %386

386:                                              ; preds = %378, %377
  %387 = load ptr, ptr %5, align 8, !tbaa !5
  %388 = load i32, ptr %35, align 4, !tbaa !9
  call void @_ZN7hipsycl2rt20kernel_configuration21set_kernel_param_flagEiNS0_17kernel_param_flagE(ptr noundef nonnull align 8 dereferenceable(160) %387, i32 noundef %388, i32 noundef 1)
  br label %389

389:                                              ; preds = %386, %370
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #8
  br label %390

390:                                              ; preds = %389, %338
  %391 = load i32, ptr %34, align 4, !tbaa !9
  %392 = add nsw i32 %391, 1
  store i32 %392, ptr %34, align 4, !tbaa !9
  br label %393

393:                                              ; preds = %390, %331
  br label %394

394:                                              ; preds = %393
  %395 = load i32, ptr %35, align 4, !tbaa !9
  %396 = add nsw i32 %395, 1
  store i32 %396, ptr %35, align 4, !tbaa !9
  br label %323, !llvm.loop !34

397:                                              ; preds = %330
  br label %398

398:                                              ; preds = %397, %319
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 256, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #8
  br label %399

399:                                              ; preds = %398, %256
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %16) #8
  br label %400

400:                                              ; preds = %399, %99
  %401 = getelementptr inbounds %"class.hipsycl::rt::kernel_adaptivity_engine", ptr %41, i32 0, i32 10
  %402 = load i32, ptr %401, align 8, !tbaa !22
  %403 = icmp sgt i32 %402, 1
  br i1 %403, label %404, label %419

404:                                              ; preds = %400
  call void @llvm.lifetime.start.p0(i64 16, ptr %38) #8
  %405 = load ptr, ptr %5, align 8, !tbaa !5
  %406 = call { i64, i64 } @_ZNK7hipsycl2rt20kernel_configuration11generate_idEv(ptr noundef nonnull align 8 dereferenceable(160) %405)
  %407 = getelementptr inbounds %"struct.std::array.13", ptr %38, i32 0, i32 0
  %408 = getelementptr inbounds { i64, i64 }, ptr %407, i32 0, i32 0
  %409 = extractvalue { i64, i64 } %406, 0
  store i64 %409, ptr %408, align 8
  %410 = getelementptr inbounds { i64, i64 }, ptr %407, i32 0, i32 1
  %411 = extractvalue { i64, i64 } %406, 1
  store i64 %411, ptr %410, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  %412 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZN7hipsycl6common10filesystem18persistent_storage3getEv()
  %413 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZN7hipsycl6common10filesystem18persistent_storage15get_this_app_dbEv(ptr noundef nonnull align 8 dereferenceable(104) %412)
  store ptr %413, ptr %39, align 8, !tbaa !5
  %414 = load ptr, ptr %39, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %40) #8
  %415 = getelementptr inbounds %class.anon, ptr %40, i32 0, i32 0
  store ptr %38, ptr %415, align 8, !tbaa !5
  %416 = getelementptr inbounds %class.anon, ptr %40, i32 0, i32 1
  store ptr %41, ptr %416, align 8, !tbaa !35
  %417 = getelementptr inbounds %class.anon, ptr %40, i32 0, i32 2
  %418 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %418, ptr %417, align 8, !tbaa !5
  call void @"_ZN7hipsycl6common2db5appdb17read_write_accessIZNS_2rt24kernel_adaptivity_engine29finalize_binary_configurationERNS4_20kernel_configurationEE3$_0EEDaOT_"(ptr noundef nonnull align 8 dereferenceable(160) %414, ptr noundef nonnull align 8 dereferenceable(24) %40)
  call void @llvm.lifetime.end.p0(i64 24, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr %38) #8
  br label %419

419:                                              ; preds = %404, %400
  %420 = load ptr, ptr %5, align 8, !tbaa !5
  %421 = call { i64, i64 } @_ZNK7hipsycl2rt20kernel_configuration11generate_idEv(ptr noundef nonnull align 8 dereferenceable(160) %420)
  %422 = getelementptr inbounds %"struct.std::array.13", ptr %3, i32 0, i32 0
  %423 = getelementptr inbounds { i64, i64 }, ptr %422, i32 0, i32 0
  %424 = extractvalue { i64, i64 } %421, 0
  store i64 %424, ptr %423, align 8
  %425 = getelementptr inbounds { i64, i64 }, ptr %422, i32 0, i32 1
  %426 = extractvalue { i64, i64 } %421, 1
  store i64 %426, ptr %425, align 8
  %427 = getelementptr inbounds %"struct.std::array.13", ptr %3, i32 0, i32 0
  %428 = load { i64, i64 }, ptr %427, align 8
  ret { i64, i64 } %428
}

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

declare noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249)) #1

declare noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7hipsycl2rt15hcf_kernel_info21get_known_annotationsEm(ptr noundef nonnull align 8 dereferenceable(249), i64 noundef) #1

declare noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_sizeEm(ptr noundef nonnull align 8 dereferenceable(249), i64 noundef) #1

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7hipsycl2rtmlERKNS0_12static_arrayILi3EEES4_(ptr dead_on_unwind noalias writable sret(%"class.hipsycl::rt::static_array") align 8, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNSt14numeric_limitsIiE3maxEv() #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) #4 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7hipsycl2rt12_GLOBAL__N_114has_annotationEPKNS0_15hcf_kernel_infoEiNS2_15annotation_typeE(ptr noundef, i32 noundef, i32 noundef) #2

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

declare noundef i32 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_typeEm(ptr noundef nonnull align 8 dereferenceable(249), i64 noundef) #1

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN7hipsycl2rt12_GLOBAL__N_123determine_ptr_alignmentEm(i64 noundef) #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv() #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7hipsycl6common13output_stream15get_debug_levelEv(ptr noundef nonnull align 8 dereferenceable(16)) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #6

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #1

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #6

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK7hipsycl2rt8settings3getILNS0_7settingE19EEENS0_13setting_traitIXT_EE4typeEv(ptr noundef nonnull align 8 dereferenceable(217)) #4 align 2

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

declare noundef zeroext i1 @_ZN7hipsycl2rt18allocation_tracker16query_allocationEPKvRNS0_15allocation_infoERm(ptr noundef, ptr noundef nonnull align 4 dereferenceable(20), ptr noundef nonnull align 8 dereferenceable(8)) #1

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK7hipsycl2rt20kernel_configuration11generate_idEv(ptr noundef nonnull align 8 dereferenceable(160)) #2 align 2

declare noundef nonnull align 8 dereferenceable(104) ptr @_ZN7hipsycl6common10filesystem18persistent_storage3getEv() #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(160) ptr @_ZN7hipsycl6common10filesystem18persistent_storage15get_this_app_dbEv(ptr noundef nonnull align 8 dereferenceable(104)) #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN7hipsycl6common2db5appdb17read_write_accessIZNS_2rt24kernel_adaptivity_engine29finalize_binary_configurationERNS4_20kernel_configurationEE3$_0EEDaOT_"(ptr noundef nonnull align 8 dereferenceable(160), ptr noundef nonnull align 8 dereferenceable(24)) #2 align 2

attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { 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 = { 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 #6 = { 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 #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { 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 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 24}
!12 = !{!"_ZTSN7hipsycl2rt24kernel_adaptivity_engineE", !13, i64 0, !14, i64 8, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !13, i64 72, !13, i64 80, !10, i64 88}
!13 = !{!"long", !7, i64 0}
!14 = !{!"_ZTSSt17basic_string_viewIcSt11char_traitsIcEE", !13, i64 0, !6, i64 8}
!15 = !{!13, !13, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"_ZTSN7hipsycl2rt15hcf_kernel_info15annotation_typeE", !7, i64 0}
!18 = !{!12, !6, i64 32}
!19 = !{i64 0, i64 8, !5}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!12, !10, i64 88}
!23 = !{!12, !6, i64 48}
!24 = !{!12, !6, i64 40}
!25 = !{!12, !13, i64 80}
!26 = distinct !{!26, !21}
!27 = distinct !{!27, !21}
!28 = !{!29, !29, i64 0}
!29 = !{!"bool", !7, i64 0}
!30 = distinct !{!30, !21}
!31 = !{i8 0, i8 2}
!32 = !{}
!33 = distinct !{!33, !21}
!34 = distinct !{!34, !21}
!35 = !{!36, !6, i64 8}
!36 = !{!"_ZTSZN7hipsycl2rt24kernel_adaptivity_engine29finalize_binary_configurationERNS0_20kernel_configurationEE3$_0", !6, i64 0, !6, i64 8, !6, i64 16}


; 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.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.hipsycl::rt::static_array" = type { %"struct.std::array" }
%"struct.std::array" = type { [3 x i64] }
%"struct.hipsycl::rt::allocation_info" = type { %"class.hipsycl::rt::device_id", i32 }
%"class.hipsycl::rt::device_id" = type { %"struct.hipsycl::rt::backend_descriptor", i32 }
%"struct.hipsycl::rt::backend_descriptor" = type { i32, i32, i32 }
%"struct.std::array.13" = type { [2 x i64] }
%class.anon = type { ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [30 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [75 x i8], align 1

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

declare noundef nonnull align 8 dereferenceable(217) ptr @_ZN7hipsycl2rt11application12get_settingsEv() local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local { i64, i64 } @_ZN7hipsycl2rt24kernel_adaptivity_engine29finalize_binary_configurationERNS0_20kernel_configurationE(ptr noundef nonnull align 8 dereferenceable(92) %0, ptr noundef nonnull align 8 dereferenceable(160) %1) local_unnamed_addr #2 align 2 {
  %3 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %4 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %5 = alloca %"class.hipsycl::rt::static_array", align 8
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca [32 x i64], align 16
  %9 = alloca %"struct.hipsycl::rt::allocation_info", align 4
  %10 = alloca i64, align 8
  %11 = alloca %"struct.std::array.13", align 8
  %12 = alloca %class.anon, align 8
  %13 = getelementptr inbounds i8, ptr %0, i64 24
  %14 = load ptr, ptr %13, align 8, !tbaa !5
  %15 = tail call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %14)
  %.not133 = icmp eq i64 %15, 0
  br i1 %.not133, label %._crit_edge115, label %.lr.ph114

.lr.ph114:                                        ; preds = %2
  %16 = getelementptr inbounds i8, ptr %0, i64 32
  br label %20

._crit_edge115:                                   ; preds = %._crit_edge, %2
  %17 = getelementptr inbounds i8, ptr %0, i64 88
  %18 = load i32, ptr %17, align 8, !tbaa !13
  %19 = icmp sgt i32 %18, 0
  br i1 %19, label %48, label %.thread

20:                                               ; preds = %.lr.ph114, %._crit_edge
  %indvars.iv = phi i64 [ 0, %.lr.ph114 ], [ %indvars.iv.next, %._crit_edge ]
  %21 = load ptr, ptr %13, align 8, !tbaa !5
  %22 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7hipsycl2rt15hcf_kernel_info21get_known_annotationsEm(ptr noundef nonnull align 8 dereferenceable(249) %21, i64 noundef %indvars.iv)
  %23 = load ptr, ptr %13, align 8, !tbaa !5
  %24 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_sizeEm(ptr noundef nonnull align 8 dereferenceable(249) %23, i64 noundef %indvars.iv)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #8
  %25 = call ptr @_ZNKSt6vectorIN7hipsycl2rt15hcf_kernel_info15annotation_typeESaIS3_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #8
  store ptr %25, ptr %3, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #8
  %26 = call ptr @_ZNKSt6vectorIN7hipsycl2rt15hcf_kernel_info15annotation_typeESaIS3_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %22) #8
  store ptr %26, ptr %4, align 8
  %27 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN7hipsycl2rt15hcf_kernel_info15annotation_typeESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %4) #8
  br i1 %27, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %20
  %28 = icmp eq i64 %24, 8
  br i1 %28, label %.lr.ph.split.preheader, label %.lr.ph.split.us

.lr.ph.split.preheader:                           ; preds = %.lr.ph
  %29 = trunc nuw nsw i64 %indvars.iv to i32
  br label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph, %.lr.ph.split.us
  %30 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN7hipsycl2rt15hcf_kernel_info15annotation_typeESt6vectorIS4_SaIS4_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %3) #8
  %31 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN7hipsycl2rt15hcf_kernel_info15annotation_typeESt6vectorIS4_SaIS4_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %3) #8
  %32 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN7hipsycl2rt15hcf_kernel_info15annotation_typeESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %4) #8
  br i1 %32, label %.lr.ph.split.us, label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph.split.us, %45, %20
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #8
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %33 = load ptr, ptr %13, align 8, !tbaa !5
  %34 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %33)
  %35 = icmp ugt i64 %34, %indvars.iv.next
  br i1 %35, label %20, label %._crit_edge115, !llvm.loop !14

.lr.ph.split:                                     ; preds = %.lr.ph.split.preheader, %45
  %36 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPKN7hipsycl2rt15hcf_kernel_info15annotation_typeESt6vectorIS4_SaIS4_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %3) #8
  %37 = load i32, ptr %36, align 4, !tbaa !16
  %38 = icmp eq i32 %37, 1
  br i1 %38, label %39, label %45

39:                                               ; preds = %.lr.ph.split
  %40 = load ptr, ptr %16, align 8, !tbaa !18
  %41 = call noundef ptr @_ZNK7hipsycl4glue3jit19cxx_argument_mapper15get_mapped_argsEv(ptr noundef nonnull align 8 dereferenceable(56) %40)
  %42 = getelementptr inbounds ptr, ptr %41, i64 %indvars.iv
  %43 = load ptr, ptr %42, align 8, !tbaa !19
  %44 = load i64, ptr %43, align 1
  %.sroa.055.0..sroa.055.0..sroa.0.0.copyload.cast = inttoptr i64 %44 to ptr
  call void @_ZN7hipsycl2rt20kernel_configuration39set_function_call_specialization_configEiNS_4glue4sscp63__acpp_sscp_emit_param_type_annotation_fcall_specialized_configIPKNS3_24fcall_specialized_configEEE(ptr noundef nonnull align 8 dereferenceable(160) %1, i32 noundef %29, ptr %.sroa.055.0..sroa.055.0..sroa.0.0.copyload.cast)
  br label %45

45:                                               ; preds = %39, %.lr.ph.split
  %46 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPKN7hipsycl2rt15hcf_kernel_info15annotation_typeESt6vectorIS4_SaIS4_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %3) #8
  %47 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPKN7hipsycl2rt15hcf_kernel_info15annotation_typeESt6vectorIS4_SaIS4_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %3, ptr noundef nonnull align 8 dereferenceable(8) %4) #8
  br i1 %47, label %.lr.ph.split, label %._crit_edge

48:                                               ; preds = %._crit_edge115
  %49 = getelementptr inbounds i8, ptr %0, i64 8
  call void @_ZN7hipsycl2rt20kernel_configuration25append_base_configurationISt17basic_string_viewIcSt11char_traitsIcEEEEvNS0_28kernel_base_config_parameterERKT_(ptr noundef nonnull align 8 dereferenceable(160) %1, i32 noundef 6, ptr noundef nonnull align 8 dereferenceable(16) %49)
  %50 = getelementptr inbounds i8, ptr %0, i64 48
  %51 = load ptr, ptr %50, align 8, !tbaa !20
  %52 = call noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %51, i32 noundef 0)
  call void @_ZN7hipsycl2rt20kernel_configuration16set_build_optionImTnNSt9enable_ifIXsr3stdE13is_unsigned_vIT_EEiE4typeELi0EEEvNS0_19kernel_build_optionES4_(ptr noundef nonnull align 8 dereferenceable(160) %1, i32 noundef 0, i64 noundef %52)
  %53 = load ptr, ptr %50, align 8, !tbaa !20
  %54 = call noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %53, i32 noundef 1)
  call void @_ZN7hipsycl2rt20kernel_configuration16set_build_optionImTnNSt9enable_ifIXsr3stdE13is_unsigned_vIT_EEiE4typeELi0EEEvNS0_19kernel_build_optionES4_(ptr noundef nonnull align 8 dereferenceable(160) %1, i32 noundef 1, i64 noundef %54)
  %55 = load ptr, ptr %50, align 8, !tbaa !20
  %56 = call noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %55, i32 noundef 2)
  call void @_ZN7hipsycl2rt20kernel_configuration16set_build_optionImTnNSt9enable_ifIXsr3stdE13is_unsigned_vIT_EEiE4typeELi0EEEvNS0_19kernel_build_optionES4_(ptr noundef nonnull align 8 dereferenceable(160) %1, i32 noundef 2, i64 noundef %56)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #8
  %57 = getelementptr inbounds i8, ptr %0, i64 40
  %58 = load ptr, ptr %57, align 8, !tbaa !21
  %59 = load ptr, ptr %50, align 8, !tbaa !20
  call void @_ZN7hipsycl2rtmlERKNS0_12static_arrayILi3EEES4_(ptr dead_on_unwind nonnull writable sret(%"class.hipsycl::rt::static_array") align 8 %5, ptr noundef nonnull align 8 dereferenceable(24) %58, ptr noundef nonnull align 8 dereferenceable(24) %59)
  %60 = call noundef i32 @_ZNSt14numeric_limitsIiE3maxEv() #8
  %61 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 0)
  %62 = load i64, ptr %61, align 8, !tbaa !22
  %63 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 1)
  %64 = load i64, ptr %63, align 8, !tbaa !22
  %65 = mul i64 %64, %62
  %66 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24) %5, i32 noundef 2)
  %67 = load i64, ptr %66, align 8, !tbaa !22
  %68 = mul i64 %65, %67
  %69 = sext i32 %60 to i64
  %70 = icmp ult i64 %68, %69
  br i1 %70, label %71, label %72

71:                                               ; preds = %48
  call void @_ZN7hipsycl2rt20kernel_configuration14set_build_flagENS0_17kernel_build_flagE(ptr noundef nonnull align 8 dereferenceable(160) %1, i32 noundef 0)
  br label %72

72:                                               ; preds = %71, %48
  %73 = getelementptr inbounds i8, ptr %0, i64 80
  %74 = load i64, ptr %73, align 8, !tbaa !23
  call void @_ZN7hipsycl2rt20kernel_configuration16set_build_optionImTnNSt9enable_ifIXsr3stdE13is_unsigned_vIT_EEiE4typeELi0EEEvNS0_19kernel_build_optionES4_(ptr noundef nonnull align 8 dereferenceable(160) %1, i32 noundef 3, i64 noundef %74)
  %75 = load ptr, ptr %13, align 8, !tbaa !5
  %76 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %75)
  %.not134 = icmp eq i64 %76, 0
  br i1 %.not134, label %.preheader111, label %.lr.ph118

.lr.ph118:                                        ; preds = %72
  %77 = getelementptr inbounds i8, ptr %0, i64 32
  br label %81

.preheader111:                                    ; preds = %101, %72
  %78 = load ptr, ptr %13, align 8, !tbaa !5
  %79 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %78)
  %.not135 = icmp eq i64 %79, 0
  br i1 %.not135, label %._crit_edge123, label %.lr.ph122

.lr.ph122:                                        ; preds = %.preheader111
  %80 = getelementptr inbounds i8, ptr %0, i64 32
  br label %107

81:                                               ; preds = %.lr.ph118, %101
  %indvars.iv141 = phi i64 [ 0, %.lr.ph118 ], [ %indvars.iv.next142, %101 ]
  %82 = load ptr, ptr %13, align 8, !tbaa !5
  %83 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_sizeEm(ptr noundef nonnull align 8 dereferenceable(249) %82, i64 noundef %indvars.iv141)
  %84 = load ptr, ptr %13, align 8, !tbaa !5
  %85 = trunc nuw nsw i64 %indvars.iv141 to i32
  %86 = call noundef zeroext i1 @_ZN7hipsycl2rt12_GLOBAL__N_114has_annotationEPKNS0_15hcf_kernel_infoEiNS2_15annotation_typeE(ptr noundef %84, i32 noundef %85, i32 noundef 0)
  %87 = icmp ult i64 %83, 9
  %or.cond3 = and i1 %87, %86
  br i1 %or.cond3, label %88, label %93

88:                                               ; preds = %81
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6)
  store i64 0, ptr %6, align 8, !tbaa !22
  %89 = load ptr, ptr %77, align 8, !tbaa !18
  %90 = call noundef ptr @_ZNK7hipsycl4glue3jit19cxx_argument_mapper15get_mapped_argsEv(ptr noundef nonnull align 8 dereferenceable(56) %89)
  %91 = getelementptr inbounds ptr, ptr %90, i64 %indvars.iv141
  %92 = load ptr, ptr %91, align 8, !tbaa !19
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %6, ptr align 1 %92, i64 %83, i1 false)
  %.0..0..0..0.42 = load i64, ptr %6, align 8, !tbaa !22
  call void @_ZN7hipsycl2rt20kernel_configuration31set_specialized_kernel_argumentEim(ptr noundef nonnull align 8 dereferenceable(160) %1, i32 noundef %85, i64 noundef %.0..0..0..0.42)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6)
  br label %93

93:                                               ; preds = %88, %81
  %94 = load ptr, ptr %13, align 8, !tbaa !5
  %95 = call noundef i32 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_typeEm(ptr noundef nonnull align 8 dereferenceable(249) %94, i64 noundef %indvars.iv141)
  %96 = icmp eq i32 %95, 0
  br i1 %96, label %97, label %101

97:                                               ; preds = %93
  %98 = load ptr, ptr %13, align 8, !tbaa !5
  %99 = call noundef zeroext i1 @_ZN7hipsycl2rt12_GLOBAL__N_114has_annotationEPKNS0_15hcf_kernel_infoEiNS2_15annotation_typeE(ptr noundef %98, i32 noundef %85, i32 noundef 2)
  br i1 %99, label %100, label %101

100:                                              ; preds = %97
  call void @_ZN7hipsycl2rt20kernel_configuration21set_kernel_param_flagEiNS0_17kernel_param_flagE(ptr noundef nonnull align 8 dereferenceable(160) %1, i32 noundef %85, i32 noundef 1)
  br label %101

101:                                              ; preds = %97, %100, %93
  %indvars.iv.next142 = add nuw nsw i64 %indvars.iv141, 1
  %102 = load ptr, ptr %13, align 8, !tbaa !5
  %103 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %102)
  %104 = icmp ugt i64 %103, %indvars.iv.next142
  br i1 %104, label %81, label %.preheader111, !llvm.loop !24

._crit_edge123:                                   ; preds = %138, %.preheader111
  %105 = call noundef nonnull align 8 dereferenceable(217) ptr @_ZN7hipsycl2rt11application12get_settingsEv()
  %106 = call noundef zeroext i1 @_ZNK7hipsycl2rt8settings3getILNS0_7settingE19EEENS0_13setting_traitIXT_EE4typeEv(ptr noundef nonnull align 8 dereferenceable(217) %105)
  br i1 %106, label %142, label %326

107:                                              ; preds = %.lr.ph122, %138
  %indvars.iv144 = phi i64 [ 0, %.lr.ph122 ], [ %indvars.iv.next145, %138 ]
  %108 = load ptr, ptr %13, align 8, !tbaa !5
  %109 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_sizeEm(ptr noundef nonnull align 8 dereferenceable(249) %108, i64 noundef %indvars.iv144)
  %110 = load ptr, ptr %13, align 8, !tbaa !5
  %111 = call noundef i32 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_typeEm(ptr noundef nonnull align 8 dereferenceable(249) %110, i64 noundef %indvars.iv144)
  %112 = icmp eq i32 %111, 0
  br i1 %112, label %113, label %138

113:                                              ; preds = %107
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7)
  store i64 0, ptr %7, align 8, !tbaa !22
  %114 = load ptr, ptr %80, align 8, !tbaa !18
  %115 = call noundef ptr @_ZNK7hipsycl4glue3jit19cxx_argument_mapper15get_mapped_argsEv(ptr noundef nonnull align 8 dereferenceable(56) %114)
  %116 = getelementptr inbounds ptr, ptr %115, i64 %indvars.iv144
  %117 = load ptr, ptr %116, align 8, !tbaa !19
  %118 = load ptr, ptr %13, align 8, !tbaa !5
  %119 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_sizeEm(ptr noundef nonnull align 8 dereferenceable(249) %118, i64 noundef %indvars.iv144)
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 8 %7, ptr align 1 %117, i64 %119, i1 false)
  %.0..0..0..0.33 = load i64, ptr %7, align 8, !tbaa !22
  %120 = call noundef i32 @_ZN7hipsycl2rt12_GLOBAL__N_123determine_ptr_alignmentEm(i64 noundef %.0..0..0..0.33)
  %121 = icmp sgt i32 %120, 0
  br i1 %121, label %122, label %137

122:                                              ; preds = %113
  %123 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv()
  %124 = call noundef i32 @_ZNK7hipsycl6common13output_stream15get_debug_levelEv(ptr noundef nonnull align 8 dereferenceable(16) %123)
  %125 = icmp slt i32 %124, 3
  br i1 %125, label %._crit_edge156, label %126

._crit_edge156:                                   ; preds = %122
  %.pre157 = trunc nuw nsw i64 %indvars.iv144 to i32
  br label %136

126:                                              ; preds = %122
  %127 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv()
  %128 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7hipsycl6common13output_stream10get_streamEv(ptr noundef nonnull align 8 dereferenceable(16) %127)
  %129 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %128, ptr noundef nonnull @.str)
  %130 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %129, ptr noundef nonnull @.str.1)
  %131 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %130, i32 noundef %120)
  %132 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %131, ptr noundef nonnull @.str.2)
  %133 = trunc nuw nsw i64 %indvars.iv144 to i32
  %134 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %132, i32 noundef %133)
  %135 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %134, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %136

136:                                              ; preds = %._crit_edge156, %126
  %.pre-phi158 = phi i32 [ %.pre157, %._crit_edge156 ], [ %133, %126 ]
  call void @_ZN7hipsycl2rt20kernel_configuration19set_known_alignmentEii(ptr noundef nonnull align 8 dereferenceable(160) %1, i32 noundef %.pre-phi158, i32 noundef %120)
  br label %137

137:                                              ; preds = %136, %113
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7)
  br label %138

138:                                              ; preds = %137, %107
  %indvars.iv.next145 = add nuw nsw i64 %indvars.iv144, 1
  %139 = load ptr, ptr %13, align 8, !tbaa !5
  %140 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %139)
  %141 = icmp ugt i64 %140, %indvars.iv.next145
  br i1 %141, label %107, label %._crit_edge123, !llvm.loop !25

142:                                              ; preds = %._crit_edge123
  call void @llvm.lifetime.start.p0(i64 256, ptr nonnull %8) #8
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(256) %8, i8 0, i64 256, i1 false)
  %143 = load ptr, ptr %13, align 8, !tbaa !5
  %144 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %143)
  %.not136 = icmp eq i64 %144, 0
  br i1 %.not136, label %.critedge109.preheader, label %.lr.ph127

.lr.ph127:                                        ; preds = %142
  %145 = getelementptr inbounds i8, ptr %0, i64 32
  br label %146

146:                                              ; preds = %.lr.ph127, %171
  %indvars.iv147 = phi i64 [ 0, %.lr.ph127 ], [ %indvars.iv.next148, %171 ]
  %.091124 = phi i32 [ 0, %.lr.ph127 ], [ %.192, %171 ]
  %147 = load ptr, ptr %13, align 8, !tbaa !5
  %148 = call noundef i32 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_typeEm(ptr noundef nonnull align 8 dereferenceable(249) %147, i64 noundef %indvars.iv147)
  %149 = icmp eq i32 %148, 0
  br i1 %149, label %150, label %171

150:                                              ; preds = %146
  %151 = load ptr, ptr %13, align 8, !tbaa !5
  %152 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_sizeEm(ptr noundef nonnull align 8 dereferenceable(249) %151, i64 noundef %indvars.iv147)
  %153 = icmp eq i64 %152, 8
  br i1 %153, label %154, label %168

154:                                              ; preds = %150
  %155 = load ptr, ptr %145, align 8, !tbaa !18
  %156 = call noundef ptr @_ZNK7hipsycl4glue3jit19cxx_argument_mapper15get_mapped_argsEv(ptr noundef nonnull align 8 dereferenceable(56) %155)
  %157 = getelementptr inbounds ptr, ptr %156, i64 %indvars.iv147
  %158 = load ptr, ptr %157, align 8, !tbaa !19
  %159 = load i64, ptr %158, align 1
  %.not = icmp eq i64 %159, 0
  br i1 %.not, label %168, label %160

160:                                              ; preds = %154
  %161 = inttoptr i64 %159 to ptr
  call void @llvm.lifetime.start.p0(i64 20, ptr nonnull %9) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  %162 = call noundef zeroext i1 @_ZN7hipsycl2rt18allocation_tracker16query_allocationEPKvRNS0_15allocation_infoERm(ptr noundef nonnull %161, ptr noundef nonnull align 4 dereferenceable(20) %9, ptr noundef nonnull align 8 dereferenceable(8) %10)
  br i1 %162, label %163, label %167

163:                                              ; preds = %160
  %164 = load i64, ptr %10, align 8, !tbaa !22
  %165 = sext i32 %.091124 to i64
  %166 = getelementptr inbounds [32 x i64], ptr %8, i64 0, i64 %165
  store i64 %164, ptr %166, align 8, !tbaa !22
  br label %167

167:                                              ; preds = %163, %160
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 20, ptr nonnull %9) #8
  br label %168

168:                                              ; preds = %154, %167, %150
  %169 = add nsw i32 %.091124, 1
  %170 = icmp slt i32 %.091124, 31
  br i1 %170, label %171, label %.loopexit110

171:                                              ; preds = %146, %168
  %.192 = phi i32 [ %169, %168 ], [ %.091124, %146 ]
  %indvars.iv.next148 = add nuw nsw i64 %indvars.iv147, 1
  %172 = load ptr, ptr %13, align 8, !tbaa !5
  %173 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %172)
  %174 = icmp ugt i64 %173, %indvars.iv.next148
  br i1 %174, label %146, label %.critedge109.preheader, !llvm.loop !26

.critedge109.preheader:                           ; preds = %171, %142
  %175 = load ptr, ptr %13, align 8, !tbaa !5
  %176 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %175)
  %.not137 = icmp eq i64 %176, 0
  br i1 %.not137, label %.loopexit110, label %.lr.ph132.preheader

.lr.ph132.preheader:                              ; preds = %.critedge109.preheader
  %177 = load i64, ptr %8, align 16
  %178 = getelementptr inbounds i8, ptr %8, i64 8
  %179 = load i64, ptr %178, align 8
  %180 = getelementptr inbounds i8, ptr %8, i64 24
  %181 = load i64, ptr %180, align 8
  %182 = getelementptr inbounds i8, ptr %8, i64 16
  %183 = load i64, ptr %182, align 16
  %184 = getelementptr inbounds i8, ptr %8, i64 40
  %185 = load i64, ptr %184, align 8
  %186 = getelementptr inbounds i8, ptr %8, i64 32
  %187 = load i64, ptr %186, align 16
  %188 = getelementptr inbounds i8, ptr %8, i64 56
  %189 = load i64, ptr %188, align 8
  %190 = getelementptr inbounds i8, ptr %8, i64 48
  %191 = load i64, ptr %190, align 16
  %192 = getelementptr inbounds i8, ptr %8, i64 72
  %193 = load i64, ptr %192, align 8
  %194 = getelementptr inbounds i8, ptr %8, i64 64
  %195 = load i64, ptr %194, align 16
  %196 = getelementptr inbounds i8, ptr %8, i64 88
  %197 = load i64, ptr %196, align 8
  %198 = getelementptr inbounds i8, ptr %8, i64 80
  %199 = load i64, ptr %198, align 16
  %200 = getelementptr inbounds i8, ptr %8, i64 104
  %201 = load i64, ptr %200, align 8
  %202 = getelementptr inbounds i8, ptr %8, i64 96
  %203 = load i64, ptr %202, align 16
  %204 = getelementptr inbounds i8, ptr %8, i64 120
  %205 = load i64, ptr %204, align 8
  %206 = getelementptr inbounds i8, ptr %8, i64 112
  %207 = load i64, ptr %206, align 16
  %208 = getelementptr inbounds i8, ptr %8, i64 136
  %209 = load i64, ptr %208, align 8
  %210 = getelementptr inbounds i8, ptr %8, i64 128
  %211 = load i64, ptr %210, align 16
  %212 = getelementptr inbounds i8, ptr %8, i64 152
  %213 = load i64, ptr %212, align 8
  %214 = getelementptr inbounds i8, ptr %8, i64 144
  %215 = load i64, ptr %214, align 16
  %216 = getelementptr inbounds i8, ptr %8, i64 168
  %217 = load i64, ptr %216, align 8
  %218 = getelementptr inbounds i8, ptr %8, i64 160
  %219 = load i64, ptr %218, align 16
  %220 = getelementptr inbounds i8, ptr %8, i64 184
  %221 = load i64, ptr %220, align 8
  %222 = getelementptr inbounds i8, ptr %8, i64 176
  %223 = load i64, ptr %222, align 16
  %224 = getelementptr inbounds i8, ptr %8, i64 200
  %225 = load i64, ptr %224, align 8
  %226 = getelementptr inbounds i8, ptr %8, i64 192
  %227 = load i64, ptr %226, align 16
  %228 = getelementptr inbounds i8, ptr %8, i64 216
  %229 = load i64, ptr %228, align 8
  %230 = getelementptr inbounds i8, ptr %8, i64 208
  %231 = load i64, ptr %230, align 16
  %232 = getelementptr inbounds i8, ptr %8, i64 232
  %233 = load i64, ptr %232, align 8
  %234 = getelementptr inbounds i8, ptr %8, i64 224
  %235 = load i64, ptr %234, align 16
  %236 = getelementptr inbounds i8, ptr %8, i64 240
  %237 = load i64, ptr %236, align 16
  %238 = getelementptr inbounds i8, ptr %8, i64 248
  %239 = load i64, ptr %238, align 8
  br label %.lr.ph132

.lr.ph132:                                        ; preds = %.lr.ph132.preheader, %.critedge109
  %indvars.iv153 = phi i64 [ 0, %.lr.ph132.preheader ], [ %indvars.iv.next154, %.critedge109 ]
  %.088129 = phi i32 [ 0, %.lr.ph132.preheader ], [ %.1, %.critedge109 ]
  %240 = load ptr, ptr %13, align 8, !tbaa !5
  %241 = call noundef i32 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_typeEm(ptr noundef nonnull align 8 dereferenceable(249) %240, i64 noundef %indvars.iv153)
  %242 = icmp eq i32 %241, 0
  br i1 %242, label %243, label %.critedge109

243:                                              ; preds = %.lr.ph132
  %244 = sext i32 %.088129 to i64
  %245 = getelementptr inbounds [32 x i64], ptr %8, i64 0, i64 %244
  %246 = load i64, ptr %245, align 8, !tbaa !22
  %.not106 = icmp eq i64 %246, 0
  br i1 %.not106, label %.loopexit, label %.preheader.preheader

.preheader.preheader:                             ; preds = %243
  %.not107 = icmp eq i32 %.088129, 0
  br i1 %.not107, label %.thread161, label %247

247:                                              ; preds = %.preheader.preheader
  %248 = icmp eq i64 %246, %177
  br i1 %248, label %.loopexit, label %.preheader.1

.preheader.1:                                     ; preds = %247
  %.not107.1 = icmp eq i32 %.088129, 1
  br i1 %.not107.1, label %.preheader.2.thread, label %249

249:                                              ; preds = %.preheader.1
  %250 = icmp eq i64 %246, %179
  br i1 %250, label %.loopexit, label %.preheader.2

.thread161:                                       ; preds = %.preheader.preheader
  %251 = icmp eq i64 %246, %179
  %252 = icmp eq i64 %246, %183
  %or.cond = select i1 %251, i1 true, i1 %252
  br i1 %or.cond, label %.loopexit, label %.preheader.3

.preheader.2:                                     ; preds = %249
  %.not107.2 = icmp eq i32 %.088129, 2
  br i1 %.not107.2, label %.thread166, label %.preheader.2.thread

.preheader.2.thread:                              ; preds = %.preheader.1, %.preheader.2
  %.old = icmp eq i64 %246, %183
  br i1 %.old, label %.loopexit, label %.preheader.3

.preheader.3:                                     ; preds = %.thread161, %.preheader.2.thread
  %.not107.3 = icmp eq i32 %.088129, 3
  br i1 %.not107.3, label %.preheader.4.thread, label %253

253:                                              ; preds = %.preheader.3
  %254 = icmp eq i64 %246, %181
  br i1 %254, label %.loopexit, label %.preheader.4

.thread166:                                       ; preds = %.preheader.2
  %255 = icmp eq i64 %246, %181
  %256 = icmp eq i64 %246, %187
  %or.cond238 = select i1 %255, i1 true, i1 %256
  br i1 %or.cond238, label %.loopexit, label %.preheader.5

.preheader.4:                                     ; preds = %253
  %.not107.4 = icmp eq i32 %.088129, 4
  br i1 %.not107.4, label %.thread171, label %.preheader.4.thread

.preheader.4.thread:                              ; preds = %.preheader.3, %.preheader.4
  %.old237 = icmp eq i64 %246, %187
  br i1 %.old237, label %.loopexit, label %.preheader.5

.preheader.5:                                     ; preds = %.thread166, %.preheader.4.thread
  %.not107.5 = icmp eq i32 %.088129, 5
  br i1 %.not107.5, label %.preheader.6.thread, label %257

257:                                              ; preds = %.preheader.5
  %258 = icmp eq i64 %246, %185
  br i1 %258, label %.loopexit, label %.preheader.6

.thread171:                                       ; preds = %.preheader.4
  %259 = icmp eq i64 %246, %185
  %260 = icmp eq i64 %246, %191
  %or.cond240 = select i1 %259, i1 true, i1 %260
  br i1 %or.cond240, label %.loopexit, label %.preheader.7

.preheader.6:                                     ; preds = %257
  %.not107.6 = icmp eq i32 %.088129, 6
  br i1 %.not107.6, label %.thread176, label %.preheader.6.thread

.preheader.6.thread:                              ; preds = %.preheader.5, %.preheader.6
  %.old239 = icmp eq i64 %246, %191
  br i1 %.old239, label %.loopexit, label %.preheader.7

.preheader.7:                                     ; preds = %.thread171, %.preheader.6.thread
  %.not107.7 = icmp eq i32 %.088129, 7
  br i1 %.not107.7, label %.preheader.8.thread, label %261

261:                                              ; preds = %.preheader.7
  %262 = icmp eq i64 %246, %189
  br i1 %262, label %.loopexit, label %.preheader.8

.thread176:                                       ; preds = %.preheader.6
  %263 = icmp eq i64 %246, %189
  %264 = icmp eq i64 %246, %195
  %or.cond242 = select i1 %263, i1 true, i1 %264
  br i1 %or.cond242, label %.loopexit, label %.preheader.9

.preheader.8:                                     ; preds = %261
  %.not107.8 = icmp eq i32 %.088129, 8
  br i1 %.not107.8, label %.thread181, label %.preheader.8.thread

.preheader.8.thread:                              ; preds = %.preheader.7, %.preheader.8
  %.old241 = icmp eq i64 %246, %195
  br i1 %.old241, label %.loopexit, label %.preheader.9

.preheader.9:                                     ; preds = %.thread176, %.preheader.8.thread
  %.not107.9 = icmp eq i32 %.088129, 9
  br i1 %.not107.9, label %.preheader.10.thread, label %265

265:                                              ; preds = %.preheader.9
  %266 = icmp eq i64 %246, %193
  br i1 %266, label %.loopexit, label %.preheader.10

.thread181:                                       ; preds = %.preheader.8
  %267 = icmp eq i64 %246, %193
  %268 = icmp eq i64 %246, %199
  %or.cond244 = select i1 %267, i1 true, i1 %268
  br i1 %or.cond244, label %.loopexit, label %.preheader.11

.preheader.10:                                    ; preds = %265
  %.not107.10 = icmp eq i32 %.088129, 10
  br i1 %.not107.10, label %.thread186, label %.preheader.10.thread

.preheader.10.thread:                             ; preds = %.preheader.9, %.preheader.10
  %.old243 = icmp eq i64 %246, %199
  br i1 %.old243, label %.loopexit, label %.preheader.11

.preheader.11:                                    ; preds = %.thread181, %.preheader.10.thread
  %.not107.11 = icmp eq i32 %.088129, 11
  br i1 %.not107.11, label %.preheader.12.thread, label %269

269:                                              ; preds = %.preheader.11
  %270 = icmp eq i64 %246, %197
  br i1 %270, label %.loopexit, label %.preheader.12

.thread186:                                       ; preds = %.preheader.10
  %271 = icmp eq i64 %246, %197
  %272 = icmp eq i64 %246, %203
  %or.cond246 = select i1 %271, i1 true, i1 %272
  br i1 %or.cond246, label %.loopexit, label %.preheader.13

.preheader.12:                                    ; preds = %269
  %.not107.12 = icmp eq i32 %.088129, 12
  br i1 %.not107.12, label %.thread191, label %.preheader.12.thread

.preheader.12.thread:                             ; preds = %.preheader.11, %.preheader.12
  %.old245 = icmp eq i64 %246, %203
  br i1 %.old245, label %.loopexit, label %.preheader.13

.preheader.13:                                    ; preds = %.thread186, %.preheader.12.thread
  %.not107.13 = icmp eq i32 %.088129, 13
  br i1 %.not107.13, label %.preheader.14.thread, label %273

273:                                              ; preds = %.preheader.13
  %274 = icmp eq i64 %246, %201
  br i1 %274, label %.loopexit, label %.preheader.14

.thread191:                                       ; preds = %.preheader.12
  %275 = icmp eq i64 %246, %201
  %276 = icmp eq i64 %246, %207
  %or.cond248 = select i1 %275, i1 true, i1 %276
  br i1 %or.cond248, label %.loopexit, label %.preheader.15

.preheader.14:                                    ; preds = %273
  %.not107.14 = icmp eq i32 %.088129, 14
  br i1 %.not107.14, label %.thread196, label %.preheader.14.thread

.preheader.14.thread:                             ; preds = %.preheader.13, %.preheader.14
  %.old247 = icmp eq i64 %246, %207
  br i1 %.old247, label %.loopexit, label %.preheader.15

.preheader.15:                                    ; preds = %.thread191, %.preheader.14.thread
  %.not107.15 = icmp eq i32 %.088129, 15
  br i1 %.not107.15, label %.preheader.16.thread, label %277

277:                                              ; preds = %.preheader.15
  %278 = icmp eq i64 %246, %205
  br i1 %278, label %.loopexit, label %.preheader.16

.thread196:                                       ; preds = %.preheader.14
  %279 = icmp eq i64 %246, %205
  %280 = icmp eq i64 %246, %211
  %or.cond250 = select i1 %279, i1 true, i1 %280
  br i1 %or.cond250, label %.loopexit, label %.preheader.17

.preheader.16:                                    ; preds = %277
  %.not107.16 = icmp eq i32 %.088129, 16
  br i1 %.not107.16, label %.thread201, label %.preheader.16.thread

.preheader.16.thread:                             ; preds = %.preheader.15, %.preheader.16
  %.old249 = icmp eq i64 %246, %211
  br i1 %.old249, label %.loopexit, label %.preheader.17

.preheader.17:                                    ; preds = %.thread196, %.preheader.16.thread
  %.not107.17 = icmp eq i32 %.088129, 17
  br i1 %.not107.17, label %.preheader.18.thread, label %281

281:                                              ; preds = %.preheader.17
  %282 = icmp eq i64 %246, %209
  br i1 %282, label %.loopexit, label %.preheader.18

.thread201:                                       ; preds = %.preheader.16
  %283 = icmp eq i64 %246, %209
  %284 = icmp eq i64 %246, %215
  %or.cond252 = select i1 %283, i1 true, i1 %284
  br i1 %or.cond252, label %.loopexit, label %.preheader.19

.preheader.18:                                    ; preds = %281
  %.not107.18 = icmp eq i32 %.088129, 18
  br i1 %.not107.18, label %.thread206, label %.preheader.18.thread

.preheader.18.thread:                             ; preds = %.preheader.17, %.preheader.18
  %.old251 = icmp eq i64 %246, %215
  br i1 %.old251, label %.loopexit, label %.preheader.19

.preheader.19:                                    ; preds = %.thread201, %.preheader.18.thread
  %.not107.19 = icmp eq i32 %.088129, 19
  br i1 %.not107.19, label %.preheader.20.thread, label %285

285:                                              ; preds = %.preheader.19
  %286 = icmp eq i64 %246, %213
  br i1 %286, label %.loopexit, label %.preheader.20

.thread206:                                       ; preds = %.preheader.18
  %287 = icmp eq i64 %246, %213
  %288 = icmp eq i64 %246, %219
  %or.cond254 = select i1 %287, i1 true, i1 %288
  br i1 %or.cond254, label %.loopexit, label %.preheader.21

.preheader.20:                                    ; preds = %285
  %.not107.20 = icmp eq i32 %.088129, 20
  br i1 %.not107.20, label %.thread211, label %.preheader.20.thread

.preheader.20.thread:                             ; preds = %.preheader.19, %.preheader.20
  %.old253 = icmp eq i64 %246, %219
  br i1 %.old253, label %.loopexit, label %.preheader.21

.preheader.21:                                    ; preds = %.thread206, %.preheader.20.thread
  %.not107.21 = icmp eq i32 %.088129, 21
  br i1 %.not107.21, label %.preheader.22.thread, label %289

289:                                              ; preds = %.preheader.21
  %290 = icmp eq i64 %246, %217
  br i1 %290, label %.loopexit, label %.preheader.22

.thread211:                                       ; preds = %.preheader.20
  %291 = icmp eq i64 %246, %217
  %292 = icmp eq i64 %246, %223
  %or.cond256 = select i1 %291, i1 true, i1 %292
  br i1 %or.cond256, label %.loopexit, label %.preheader.23

.preheader.22:                                    ; preds = %289
  %.not107.22 = icmp eq i32 %.088129, 22
  br i1 %.not107.22, label %.thread216, label %.preheader.22.thread

.preheader.22.thread:                             ; preds = %.preheader.21, %.preheader.22
  %.old255 = icmp eq i64 %246, %223
  br i1 %.old255, label %.loopexit, label %.preheader.23

.preheader.23:                                    ; preds = %.thread211, %.preheader.22.thread
  %.not107.23 = icmp eq i32 %.088129, 23
  br i1 %.not107.23, label %.preheader.24.thread, label %293

293:                                              ; preds = %.preheader.23
  %294 = icmp eq i64 %246, %221
  br i1 %294, label %.loopexit, label %.preheader.24

.thread216:                                       ; preds = %.preheader.22
  %295 = icmp eq i64 %246, %221
  %296 = icmp eq i64 %246, %227
  %or.cond258 = select i1 %295, i1 true, i1 %296
  br i1 %or.cond258, label %.loopexit, label %.preheader.25

.preheader.24:                                    ; preds = %293
  %.not107.24 = icmp eq i32 %.088129, 24
  br i1 %.not107.24, label %.thread221, label %.preheader.24.thread

.preheader.24.thread:                             ; preds = %.preheader.23, %.preheader.24
  %.old257 = icmp eq i64 %246, %227
  br i1 %.old257, label %.loopexit, label %.preheader.25

.preheader.25:                                    ; preds = %.thread216, %.preheader.24.thread
  %.not107.25 = icmp eq i32 %.088129, 25
  br i1 %.not107.25, label %.preheader.26.thread, label %297

297:                                              ; preds = %.preheader.25
  %298 = icmp eq i64 %246, %225
  br i1 %298, label %.loopexit, label %.preheader.26

.thread221:                                       ; preds = %.preheader.24
  %299 = icmp eq i64 %246, %225
  %300 = icmp eq i64 %246, %231
  %or.cond260 = select i1 %299, i1 true, i1 %300
  br i1 %or.cond260, label %.loopexit, label %.preheader.27

.preheader.26:                                    ; preds = %297
  %.not107.26 = icmp eq i32 %.088129, 26
  br i1 %.not107.26, label %.thread226, label %.preheader.26.thread

.preheader.26.thread:                             ; preds = %.preheader.25, %.preheader.26
  %.old259 = icmp eq i64 %246, %231
  br i1 %.old259, label %.loopexit, label %.preheader.27

.preheader.27:                                    ; preds = %.thread221, %.preheader.26.thread
  %.not107.27 = icmp eq i32 %.088129, 27
  br i1 %.not107.27, label %.preheader.28.thread, label %301

301:                                              ; preds = %.preheader.27
  %302 = icmp eq i64 %246, %229
  br i1 %302, label %.loopexit, label %.preheader.28

.thread226:                                       ; preds = %.preheader.26
  %303 = icmp eq i64 %246, %229
  %304 = icmp eq i64 %246, %235
  %or.cond262 = select i1 %303, i1 true, i1 %304
  br i1 %or.cond262, label %.loopexit, label %.preheader.29

.preheader.28:                                    ; preds = %301
  %.not107.28 = icmp eq i32 %.088129, 28
  br i1 %.not107.28, label %.thread231, label %.preheader.28.thread

.preheader.28.thread:                             ; preds = %.preheader.27, %.preheader.28
  %.old261 = icmp eq i64 %246, %235
  br i1 %.old261, label %.loopexit, label %.preheader.29

.preheader.29:                                    ; preds = %.thread226, %.preheader.28.thread
  %.not107.29 = icmp eq i32 %.088129, 29
  br i1 %.not107.29, label %.preheader.30.thread, label %305

305:                                              ; preds = %.preheader.29
  %306 = icmp eq i64 %246, %233
  br i1 %306, label %.loopexit, label %.preheader.30

.thread231:                                       ; preds = %.preheader.28
  %307 = icmp eq i64 %246, %233
  %308 = icmp eq i64 %246, %237
  %or.cond264 = select i1 %307, i1 true, i1 %308
  br i1 %or.cond264, label %.loopexit, label %.preheader.31

.preheader.30:                                    ; preds = %305
  %.not107.30 = icmp eq i32 %.088129, 30
  br i1 %.not107.30, label %.preheader.31.thread, label %.preheader.30.thread

.preheader.30.thread:                             ; preds = %.preheader.29, %.preheader.30
  %.old263 = icmp eq i64 %246, %237
  br i1 %.old263, label %.loopexit, label %.preheader.31

.preheader.31:                                    ; preds = %.thread231, %.preheader.30.thread
  %.not107.31 = icmp ne i32 %.088129, 31
  %309 = icmp eq i64 %246, %239
  %or.cond266 = select i1 %.not107.31, i1 %309, i1 false
  br i1 %or.cond266, label %.loopexit, label %.critedge

.preheader.31.thread:                             ; preds = %.preheader.30
  %.old265 = icmp eq i64 %246, %239
  br i1 %.old265, label %.loopexit, label %.critedge

.critedge:                                        ; preds = %.preheader.31.thread, %.preheader.31
  %310 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv()
  %311 = call noundef i32 @_ZNK7hipsycl6common13output_stream15get_debug_levelEv(ptr noundef nonnull align 8 dereferenceable(16) %310)
  %312 = icmp slt i32 %311, 3
  br i1 %312, label %.critedge._crit_edge, label %313

.critedge._crit_edge:                             ; preds = %.critedge
  %.pre = trunc nuw nsw i64 %indvars.iv153 to i32
  br label %321

313:                                              ; preds = %.critedge
  %314 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZN7hipsycl6common13output_stream3getEv()
  %315 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7hipsycl6common13output_stream10get_streamEv(ptr noundef nonnull align 8 dereferenceable(16) %314)
  %316 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %315, ptr noundef nonnull @.str)
  %317 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %316, ptr noundef nonnull @.str.3)
  %318 = trunc nuw nsw i64 %indvars.iv153 to i32
  %319 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8) %317, i32 noundef %318)
  %320 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %319, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
  br label %321

321:                                              ; preds = %.critedge._crit_edge, %313
  %.pre-phi = phi i32 [ %.pre, %.critedge._crit_edge ], [ %318, %313 ]
  call void @_ZN7hipsycl2rt20kernel_configuration21set_kernel_param_flagEiNS0_17kernel_param_flagE(ptr noundef nonnull align 8 dereferenceable(160) %1, i32 noundef %.pre-phi, i32 noundef 1)
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader.31, %247, %249, %.preheader.2.thread, %253, %.preheader.4.thread, %257, %.preheader.6.thread, %261, %.preheader.8.thread, %265, %.preheader.10.thread, %269, %.preheader.12.thread, %273, %.preheader.14.thread, %277, %.preheader.16.thread, %281, %.preheader.18.thread, %285, %.preheader.20.thread, %289, %.preheader.22.thread, %293, %.preheader.24.thread, %297, %.preheader.26.thread, %301, %.preheader.28.thread, %305, %.preheader.30.thread, %.preheader.31.thread, %.thread161, %.thread166, %.thread171, %.thread176, %.thread181, %.thread186, %.thread191, %.thread196, %.thread201, %.thread206, %.thread211, %.thread216, %.thread221, %.thread226, %.thread231, %321, %243
  %322 = add nsw i32 %.088129, 1
  br label %.critedge109

.critedge109:                                     ; preds = %.lr.ph132, %.loopexit
  %.1 = phi i32 [ %322, %.loopexit ], [ %.088129, %.lr.ph132 ]
  %indvars.iv.next154 = add nuw nsw i64 %indvars.iv153, 1
  %323 = load ptr, ptr %13, align 8, !tbaa !5
  %324 = call noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249) %323)
  %325 = icmp ugt i64 %324, %indvars.iv.next154
  br i1 %325, label %.lr.ph132, label %.loopexit110, !llvm.loop !27

.loopexit110:                                     ; preds = %168, %.critedge109, %.critedge109.preheader
  call void @llvm.lifetime.end.p0(i64 256, ptr nonnull %8) #8
  br label %326

326:                                              ; preds = %._crit_edge123, %.loopexit110
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #8
  %.pr = load i32, ptr %17, align 8, !tbaa !13
  %327 = icmp sgt i32 %.pr, 1
  br i1 %327, label %328, label %.thread

328:                                              ; preds = %326
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %11) #8
  %329 = call { i64, i64 } @_ZNK7hipsycl2rt20kernel_configuration11generate_idEv(ptr noundef nonnull align 8 dereferenceable(160) %1)
  %330 = extractvalue { i64, i64 } %329, 0
  store i64 %330, ptr %11, align 8
  %331 = getelementptr inbounds i8, ptr %11, i64 8
  %332 = extractvalue { i64, i64 } %329, 1
  store i64 %332, ptr %331, align 8
  %333 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZN7hipsycl6common10filesystem18persistent_storage3getEv()
  %334 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZN7hipsycl6common10filesystem18persistent_storage15get_this_app_dbEv(ptr noundef nonnull align 8 dereferenceable(104) %333)
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #8
  store ptr %11, ptr %12, align 8, !tbaa !19
  %335 = getelementptr inbounds i8, ptr %12, i64 8
  store ptr %0, ptr %335, align 8, !tbaa !28
  %336 = getelementptr inbounds i8, ptr %12, i64 16
  store ptr %1, ptr %336, align 8, !tbaa !19
  call void @"_ZN7hipsycl6common2db5appdb17read_write_accessIZNS_2rt24kernel_adaptivity_engine29finalize_binary_configurationERNS4_20kernel_configurationEE3$_0EEDaOT_"(ptr noundef nonnull align 8 dereferenceable(160) %334, ptr noundef nonnull align 8 dereferenceable(24) %12)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %11) #8
  br label %.thread

.thread:                                          ; preds = %._crit_edge115, %328, %326
  %337 = call { i64, i64 } @_ZNK7hipsycl2rt20kernel_configuration11generate_idEv(ptr noundef nonnull align 8 dereferenceable(160) %1)
  ret { i64, i64 } %337
}

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

declare noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info18get_num_parametersEv(ptr noundef nonnull align 8 dereferenceable(249)) local_unnamed_addr #1

declare noundef nonnull align 8 dereferenceable(24) ptr @_ZNK7hipsycl2rt15hcf_kernel_info21get_known_annotationsEm(ptr noundef nonnull align 8 dereferenceable(249), i64 noundef) local_unnamed_addr #1

declare noundef i64 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_sizeEm(ptr noundef nonnull align 8 dereferenceable(249), i64 noundef) local_unnamed_addr #1

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN7hipsycl2rtmlERKNS0_12static_arrayILi3EEES4_(ptr dead_on_unwind noalias writable sret(%"class.hipsycl::rt::static_array") align 8, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNSt14numeric_limitsIiE3maxEv() local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN7hipsycl2rt12static_arrayILi3EEixEi(ptr noundef nonnull align 8 dereferenceable(24), i32 noundef) local_unnamed_addr #4 align 2

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN7hipsycl2rt12_GLOBAL__N_114has_annotationEPKNS0_15hcf_kernel_infoEiNS2_15annotation_typeE(ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

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

declare noundef i32 @_ZNK7hipsycl2rt15hcf_kernel_info17get_argument_typeEm(ptr noundef nonnull align 8 dereferenceable(249), i64 noundef) local_unnamed_addr #1

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef i32 @_ZN7hipsycl2rt12_GLOBAL__N_123determine_ptr_alignmentEm(i64 noundef) local_unnamed_addr #4

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK7hipsycl6common13output_stream15get_debug_levelEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #6

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEi(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #1

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

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #6

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK7hipsycl2rt8settings3getILNS0_7settingE19EEENS0_13setting_traitIXT_EE4typeEv(ptr noundef nonnull align 8 dereferenceable(217)) local_unnamed_addr #4 align 2

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

declare noundef zeroext i1 @_ZN7hipsycl2rt18allocation_tracker16query_allocationEPKvRNS0_15allocation_infoERm(ptr noundef, ptr noundef nonnull align 4 dereferenceable(20), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK7hipsycl2rt20kernel_configuration11generate_idEv(ptr noundef nonnull align 8 dereferenceable(160)) local_unnamed_addr #2 align 2

declare noundef nonnull align 8 dereferenceable(104) ptr @_ZN7hipsycl6common10filesystem18persistent_storage3getEv() local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(160) ptr @_ZN7hipsycl6common10filesystem18persistent_storage15get_this_app_dbEv(ptr noundef nonnull align 8 dereferenceable(104)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZN7hipsycl6common2db5appdb17read_write_accessIZNS_2rt24kernel_adaptivity_engine29finalize_binary_configurationERNS4_20kernel_configurationEE3$_0EEDaOT_"(ptr noundef nonnull align 8 dereferenceable(160), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #2 align 2

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


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