; LLVM IR from huawei-noah/bolt :: compute/tensor/src (unpooling)

; 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.TensorDesc = type { i32, i32, i32, [20 x i32] }
%struct.PoolingParamSpec = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8 }
%class.Tensor = type { %"class.std::shared_ptr", %"class.std::shared_ptr.0" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::shared_ptr.0" = type { %"class.std::__shared_ptr.1" }
%"class.std::__shared_ptr.1" = type { ptr, %"class.std::__shared_count" }
%struct.ArchInfo = type { i32, ptr }

@.str = external hidden unnamed_addr constant [20 x i8], align 1
@stdout = external global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [18 x i8], align 1

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

; Function Attrs: nounwind
declare i64 @syscall(i64 noundef, ...) #1

declare i32 @printf(ptr noundef, ...) #2

declare i32 @fflush(ptr noundef) #2

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Tensor8get_descEv(ptr dead_on_unwind noalias writable sret(%struct.TensorDesc) align 4, ptr noundef nonnull align 8 dereferenceable(32)) #5 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z11tensor4dGet10TensorDescP8DataTypeP10DataFormatPjS4_S4_S4_(ptr noundef byval(%struct.TensorDesc) align 8, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z9unpoolingSt6vectorI6TensorSaIS0_EE16PoolingParamSpecS0_S0_P8ArchInfo(ptr noundef %0, ptr noundef byval(%struct.PoolingParamSpec) align 8 %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #5 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca %struct.TensorDesc, align 4
  %11 = alloca ptr, align 8
  %12 = alloca %class.Tensor, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i32, align 4
  %15 = alloca %struct.TensorDesc, align 4
  %16 = alloca ptr, align 8
  %17 = alloca %class.Tensor, align 8
  %18 = alloca %struct.TensorDesc, align 4
  %19 = alloca ptr, align 8
  %20 = alloca %class.Tensor, align 8
  %21 = alloca ptr, align 8
  %22 = alloca %class.Tensor, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca %struct.TensorDesc, align 4
  %27 = alloca %struct.TensorDesc, align 8
  %28 = alloca %struct.TensorDesc, align 8
  %29 = alloca %struct.TensorDesc, align 8
  %30 = alloca %struct.TensorDesc, align 4
  %31 = alloca %struct.TensorDesc, align 8
  %32 = alloca %struct.TensorDesc, align 8
  %33 = alloca %struct.TensorDesc, align 8
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca %struct.TensorDesc, align 8
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca %struct.TensorDesc, align 8
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca %struct.TensorDesc, align 8
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  store ptr %4, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 92, ptr %10) #9
  %72 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorI6TensorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 0) #9
  call void @_ZN6Tensor8get_descEv(ptr dead_on_unwind writable sret(%struct.TensorDesc) align 4 %10, ptr noundef nonnull align 8 dereferenceable(32) %72)
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #9
  %73 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorI6TensorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 0) #9
  call void @_ZN6TensorC2ERKS_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(32) %73) #9
  %74 = load ptr, ptr %9, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.ArchInfo, ptr %74, i32 0, i32 0
  %76 = load i32, ptr %75, align 8, !tbaa !9
  %77 = invoke noundef ptr @_Z19get_ptr_from_tensor6Tensor4Arch(ptr noundef %12, i32 noundef %76)
          to label %78 unwind label %115

78:                                               ; preds = %5
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #9
  store ptr %77, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 92, ptr %15) #9
  %79 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorI6TensorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 1) #9
  call void @_ZN6Tensor8get_descEv(ptr dead_on_unwind writable sret(%struct.TensorDesc) align 4 %15, ptr noundef nonnull align 8 dereferenceable(32) %79)
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  %80 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorI6TensorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 1) #9
  call void @_ZN6TensorC2ERKS_(ptr noundef nonnull align 8 dereferenceable(32) %17, ptr noundef nonnull align 8 dereferenceable(32) %80) #9
  %81 = load ptr, ptr %9, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.ArchInfo, ptr %81, i32 0, i32 0
  %83 = load i32, ptr %82, align 8, !tbaa !9
  %84 = invoke noundef ptr @_Z19get_ptr_from_tensor6Tensor4Arch(ptr noundef %17, i32 noundef %83)
          to label %85 unwind label %119

85:                                               ; preds = %78
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  store ptr %84, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 92, ptr %18) #9
  call void @_ZN6Tensor8get_descEv(ptr dead_on_unwind writable sret(%struct.TensorDesc) align 4 %18, ptr noundef nonnull align 8 dereferenceable(32) %3)
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  call void @_ZN6TensorC2ERKS_(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 8 dereferenceable(32) %3) #9
  %86 = load ptr, ptr %9, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.ArchInfo, ptr %86, i32 0, i32 0
  %88 = load i32, ptr %87, align 8, !tbaa !9
  %89 = invoke noundef ptr @_Z19get_ptr_from_tensor6Tensor4Arch(ptr noundef %20, i32 noundef %88)
          to label %90 unwind label %123

90:                                               ; preds = %85
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #9
  store ptr %89, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  call void @_ZN6TensorC2ERKS_(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 8 dereferenceable(32) %2) #9
  %91 = load ptr, ptr %9, align 8, !tbaa !5
  %92 = getelementptr inbounds %struct.ArchInfo, ptr %91, i32 0, i32 0
  %93 = load i32, ptr %92, align 8, !tbaa !9
  %94 = invoke noundef ptr @_Z19get_ptr_from_tensor6Tensor4Arch(ptr noundef %22, i32 noundef %93)
          to label %95 unwind label %127

95:                                               ; preds = %90
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #9
  store ptr %94, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %96 = load ptr, ptr %11, align 8, !tbaa !5
  store ptr %96, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #9
  %97 = load ptr, ptr %16, align 8, !tbaa !5
  store ptr %97, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #9
  %98 = getelementptr inbounds %struct.TensorDesc, ptr %18, i32 0, i32 1
  %99 = load i32, ptr %98, align 4, !tbaa !12
  store i32 %99, ptr %25, align 4, !tbaa !17
  %100 = getelementptr inbounds %struct.TensorDesc, ptr %15, i32 0, i32 1
  %101 = load i32, ptr %100, align 4, !tbaa !12
  %102 = load i32, ptr %25, align 4, !tbaa !17
  %103 = icmp ne i32 %101, %102
  br i1 %103, label %104, label %131

104:                                              ; preds = %95
  call void @llvm.lifetime.start.p0(i64 92, ptr %26) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %26, ptr align 4 %15, i64 92, i1 false), !tbaa.struct !18
  %105 = load i32, ptr %25, align 4, !tbaa !17
  %106 = getelementptr inbounds %struct.TensorDesc, ptr %26, i32 0, i32 1
  store i32 %105, ptr %106, align 4, !tbaa !12
  %107 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %107, ptr %24, align 8, !tbaa !5
  %108 = load ptr, ptr %21, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %27, ptr align 4 %15, i64 92, i1 false), !tbaa.struct !18
  %109 = call noundef i32 @_Z14tensorNumBytes10TensorDesc(ptr noundef byval(%struct.TensorDesc) align 8 %27)
  %110 = zext i32 %109 to i64
  %111 = getelementptr inbounds i8, ptr %108, i64 %110
  store ptr %111, ptr %21, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %28, ptr align 4 %15, i64 92, i1 false), !tbaa.struct !18
  %112 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %29, ptr align 4 %26, i64 92, i1 false), !tbaa.struct !18
  %113 = load ptr, ptr %24, align 8, !tbaa !5
  %114 = call noundef i32 @_Z15transformFormat10TensorDescPKvS_Pv(ptr noundef byval(%struct.TensorDesc) align 8 %28, ptr noundef %112, ptr noundef byval(%struct.TensorDesc) align 8 %29, ptr noundef %113)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %15, ptr align 4 %26, i64 92, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 92, ptr %26) #9
  br label %131

115:                                              ; preds = %5
  %116 = landingpad { ptr, i32 }
          cleanup
  %117 = extractvalue { ptr, i32 } %116, 0
  store ptr %117, ptr %13, align 8
  %118 = extractvalue { ptr, i32 } %116, 1
  store i32 %118, ptr %14, align 4
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #9
  br label %290

119:                                              ; preds = %78
  %120 = landingpad { ptr, i32 }
          cleanup
  %121 = extractvalue { ptr, i32 } %120, 0
  store ptr %121, ptr %13, align 8
  %122 = extractvalue { ptr, i32 } %120, 1
  store i32 %122, ptr %14, align 4
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %17) #9
  br label %289

123:                                              ; preds = %85
  %124 = landingpad { ptr, i32 }
          cleanup
  %125 = extractvalue { ptr, i32 } %124, 0
  store ptr %125, ptr %13, align 8
  %126 = extractvalue { ptr, i32 } %124, 1
  store i32 %126, ptr %14, align 4
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #9
  br label %288

127:                                              ; preds = %90
  %128 = landingpad { ptr, i32 }
          cleanup
  %129 = extractvalue { ptr, i32 } %128, 0
  store ptr %129, ptr %13, align 8
  %130 = extractvalue { ptr, i32 } %128, 1
  store i32 %130, ptr %14, align 4
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  br label %288

131:                                              ; preds = %104, %95
  %132 = getelementptr inbounds %struct.TensorDesc, ptr %10, i32 0, i32 1
  %133 = load i32, ptr %132, align 4, !tbaa !12
  %134 = load i32, ptr %25, align 4, !tbaa !17
  %135 = icmp ne i32 %133, %134
  br i1 %135, label %136, label %147

136:                                              ; preds = %131
  call void @llvm.lifetime.start.p0(i64 92, ptr %30) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %30, ptr align 4 %10, i64 92, i1 false), !tbaa.struct !18
  %137 = load i32, ptr %25, align 4, !tbaa !17
  %138 = getelementptr inbounds %struct.TensorDesc, ptr %30, i32 0, i32 1
  store i32 %137, ptr %138, align 4, !tbaa !12
  %139 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %139, ptr %23, align 8, !tbaa !5
  %140 = load ptr, ptr %21, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %31, ptr align 4 %10, i64 92, i1 false), !tbaa.struct !18
  %141 = call noundef i32 @_Z14tensorNumBytes10TensorDesc(ptr noundef byval(%struct.TensorDesc) align 8 %31)
  %142 = zext i32 %141 to i64
  %143 = getelementptr inbounds i8, ptr %140, i64 %142
  store ptr %143, ptr %21, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %32, ptr align 4 %10, i64 92, i1 false), !tbaa.struct !18
  %144 = load ptr, ptr %11, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %33, ptr align 4 %30, i64 92, i1 false), !tbaa.struct !18
  %145 = load ptr, ptr %23, align 8, !tbaa !5
  %146 = call noundef i32 @_Z15transformFormat10TensorDescPKvS_Pv(ptr noundef byval(%struct.TensorDesc) align 8 %32, ptr noundef %144, ptr noundef byval(%struct.TensorDesc) align 8 %33, ptr noundef %145)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %10, ptr align 4 %30, i64 92, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 92, ptr %30) #9
  br label %147

147:                                              ; preds = %136, %131
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %47, ptr align 4 %10, i64 92, i1 false), !tbaa.struct !18
  %148 = call noundef i32 @_Z11tensor4dGet10TensorDescP8DataTypeP10DataFormatPjS4_S4_S4_(ptr noundef byval(%struct.TensorDesc) align 8 %47, ptr noundef %34, ptr noundef %36, ptr noundef %38, ptr noundef %39, ptr noundef %40, ptr noundef %41)
  store i32 %148, ptr %46, align 4, !tbaa !22
  %149 = load i32, ptr %46, align 4, !tbaa !22
  %150 = icmp ne i32 %149, 0
  br i1 %150, label %151, label %163

151:                                              ; preds = %147
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #9
  %152 = call i64 (i64, ...) @syscall(i64 noundef 186) #9
  %153 = trunc i64 %152 to i32
  store i32 %153, ptr %48, align 4, !tbaa !20
  %154 = load i32, ptr %48, align 4, !tbaa !20
  %155 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %154)
  %156 = load ptr, ptr @stdout, align 8, !tbaa !5
  %157 = call i32 @fflush(ptr noundef %156)
  %158 = load i32, ptr %46, align 4, !tbaa !22
  %159 = call ptr @ee2str(i32 noundef %158)
  %160 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef %159)
  %161 = load ptr, ptr @stdout, align 8, !tbaa !5
  %162 = call i32 @fflush(ptr noundef %161)
  call void @exit(i32 noundef 1) #10
  unreachable

163:                                              ; preds = %147
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #9
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %50, ptr align 4 %18, i64 92, i1 false), !tbaa.struct !18
  %164 = call noundef i32 @_Z11tensor4dGet10TensorDescP8DataTypeP10DataFormatPjS4_S4_S4_(ptr noundef byval(%struct.TensorDesc) align 8 %50, ptr noundef %35, ptr noundef %37, ptr noundef %42, ptr noundef %43, ptr noundef %44, ptr noundef %45)
  store i32 %164, ptr %49, align 4, !tbaa !22
  %165 = load i32, ptr %49, align 4, !tbaa !22
  %166 = icmp ne i32 %165, 0
  br i1 %166, label %167, label %179

167:                                              ; preds = %163
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #9
  %168 = call i64 (i64, ...) @syscall(i64 noundef 186) #9
  %169 = trunc i64 %168 to i32
  store i32 %169, ptr %51, align 4, !tbaa !20
  %170 = load i32, ptr %51, align 4, !tbaa !20
  %171 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %170)
  %172 = load ptr, ptr @stdout, align 8, !tbaa !5
  %173 = call i32 @fflush(ptr noundef %172)
  %174 = load i32, ptr %49, align 4, !tbaa !22
  %175 = call ptr @ee2str(i32 noundef %174)
  %176 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef %175)
  %177 = load ptr, ptr @stdout, align 8, !tbaa !5
  %178 = call i32 @fflush(ptr noundef %177)
  call void @exit(i32 noundef 1) #10
  unreachable

179:                                              ; preds = %163
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #9
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #9
  %180 = getelementptr inbounds %struct.PoolingParamSpec, ptr %1, i32 0, i32 4
  %181 = load i32, ptr %180, align 8, !tbaa !24
  store i32 %181, ptr %52, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #9
  %182 = getelementptr inbounds %struct.PoolingParamSpec, ptr %1, i32 0, i32 5
  %183 = load i32, ptr %182, align 4, !tbaa !29
  store i32 %183, ptr %53, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #9
  %184 = getelementptr inbounds %struct.PoolingParamSpec, ptr %1, i32 0, i32 8
  %185 = load i32, ptr %184, align 8, !tbaa !30
  store i32 %185, ptr %54, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #9
  %186 = getelementptr inbounds %struct.PoolingParamSpec, ptr %1, i32 0, i32 10
  %187 = load i32, ptr %186, align 8, !tbaa !31
  store i32 %187, ptr %55, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #9
  %188 = getelementptr inbounds %struct.PoolingParamSpec, ptr %1, i32 0, i32 1
  %189 = load i32, ptr %188, align 4, !tbaa !32
  store i32 %189, ptr %56, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #9
  %190 = getelementptr inbounds %struct.PoolingParamSpec, ptr %1, i32 0, i32 2
  %191 = load i32, ptr %190, align 8, !tbaa !33
  store i32 %191, ptr %57, align 4, !tbaa !20
  %192 = load ptr, ptr %19, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %58, ptr align 4 %18, i64 92, i1 false), !tbaa.struct !18
  %193 = call noundef i32 @_Z14tensorNumBytes10TensorDesc(ptr noundef byval(%struct.TensorDesc) align 8 %58)
  %194 = zext i32 %193 to i64
  call void @_Z10UNI_MEMSETPvim(ptr noundef %192, i32 noundef 0, i64 noundef %194)
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #9
  store i32 0, ptr %59, align 4, !tbaa !22
  %195 = load i32, ptr %25, align 4, !tbaa !17
  %196 = icmp eq i32 %195, 2
  br i1 %196, label %197, label %285

197:                                              ; preds = %179
  %198 = load i32, ptr %39, align 4, !tbaa !20
  %199 = udiv i32 %198, 8
  store i32 %199, ptr %39, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #9
  %200 = load i32, ptr %44, align 4, !tbaa !20
  %201 = load i32, ptr %45, align 4, !tbaa !20
  %202 = mul i32 %200, %201
  store i32 %202, ptr %60, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #9
  %203 = load i32, ptr %43, align 4, !tbaa !20
  %204 = load i32, ptr %60, align 4, !tbaa !20
  %205 = mul i32 %203, %204
  store i32 %205, ptr %61, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #9
  %206 = load i32, ptr %38, align 4, !tbaa !20
  %207 = load i32, ptr %39, align 4, !tbaa !20
  %208 = mul i32 %206, %207
  %209 = load i32, ptr %40, align 4, !tbaa !20
  %210 = mul i32 %208, %209
  %211 = load i32, ptr %41, align 4, !tbaa !20
  %212 = mul i32 %210, %211
  store i32 %212, ptr %62, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #9
  store i32 0, ptr %63, align 4, !tbaa !20
  br label %213

213:                                              ; preds = %281, %197
  %214 = load i32, ptr %63, align 4, !tbaa !20
  %215 = load i32, ptr %62, align 4, !tbaa !20
  %216 = icmp ult i32 %214, %215
  br i1 %216, label %218, label %217

217:                                              ; preds = %213
  store i32 2, ptr %64, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #9
  br label %284

218:                                              ; preds = %213
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #9
  store i32 0, ptr %65, align 4, !tbaa !20
  br label %219

219:                                              ; preds = %277, %218
  %220 = load i32, ptr %65, align 4, !tbaa !20
  %221 = icmp ult i32 %220, 8
  br i1 %221, label %223, label %222

222:                                              ; preds = %219
  store i32 5, ptr %64, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #9
  br label %280

223:                                              ; preds = %219
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #9
  %224 = load i32, ptr %63, align 4, !tbaa !20
  %225 = mul i32 %224, 8
  %226 = load i32, ptr %65, align 4, !tbaa !20
  %227 = add i32 %225, %226
  store i32 %227, ptr %66, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #9
  %228 = load ptr, ptr %24, align 8, !tbaa !5
  %229 = load i32, ptr %66, align 4, !tbaa !20
  %230 = zext i32 %229 to i64
  %231 = getelementptr inbounds i32, ptr %228, i64 %230
  %232 = load i32, ptr %231, align 4, !tbaa !20
  store i32 %232, ptr %67, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #9
  %233 = load i32, ptr %67, align 4, !tbaa !20
  %234 = load i32, ptr %61, align 4, !tbaa !20
  %235 = urem i32 %233, %234
  %236 = load i32, ptr %60, align 4, !tbaa !20
  %237 = udiv i32 %235, %236
  store i32 %237, ptr %68, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #9
  %238 = load i32, ptr %67, align 4, !tbaa !20
  %239 = load i32, ptr %60, align 4, !tbaa !20
  %240 = urem i32 %238, %239
  %241 = load i32, ptr %45, align 4, !tbaa !20
  %242 = udiv i32 %240, %241
  store i32 %242, ptr %69, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #9
  %243 = load i32, ptr %67, align 4, !tbaa !20
  %244 = load i32, ptr %45, align 4, !tbaa !20
  %245 = urem i32 %243, %244
  store i32 %245, ptr %70, align 4, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #9
  %246 = load i32, ptr %67, align 4, !tbaa !20
  %247 = load i32, ptr %61, align 4, !tbaa !20
  %248 = udiv i32 %246, %247
  %249 = load i32, ptr %61, align 4, !tbaa !20
  %250 = mul i32 %248, %249
  %251 = load i32, ptr %68, align 4, !tbaa !20
  %252 = udiv i32 %251, 8
  %253 = load i32, ptr %60, align 4, !tbaa !20
  %254 = mul i32 %252, %253
  %255 = mul i32 %254, 8
  %256 = add i32 %250, %255
  %257 = load i32, ptr %69, align 4, !tbaa !20
  %258 = load i32, ptr %45, align 4, !tbaa !20
  %259 = mul i32 %257, %258
  %260 = mul i32 %259, 8
  %261 = add i32 %256, %260
  %262 = load i32, ptr %70, align 4, !tbaa !20
  %263 = mul i32 %262, 8
  %264 = add i32 %261, %263
  %265 = load i32, ptr %68, align 4, !tbaa !20
  %266 = urem i32 %265, 8
  %267 = add i32 %264, %266
  store i32 %267, ptr %71, align 4, !tbaa !20
  %268 = load ptr, ptr %23, align 8, !tbaa !5
  %269 = load i32, ptr %66, align 4, !tbaa !20
  %270 = zext i32 %269 to i64
  %271 = getelementptr inbounds float, ptr %268, i64 %270
  %272 = load float, ptr %271, align 4, !tbaa !34
  %273 = load ptr, ptr %19, align 8, !tbaa !5
  %274 = load i32, ptr %71, align 4, !tbaa !20
  %275 = zext i32 %274 to i64
  %276 = getelementptr inbounds float, ptr %273, i64 %275
  store float %272, ptr %276, align 4, !tbaa !34
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #9
  br label %277

277:                                              ; preds = %223
  %278 = load i32, ptr %65, align 4, !tbaa !20
  %279 = add i32 %278, 1
  store i32 %279, ptr %65, align 4, !tbaa !20
  br label %219, !llvm.loop !36

280:                                              ; preds = %222
  br label %281

281:                                              ; preds = %280
  %282 = load i32, ptr %63, align 4, !tbaa !20
  %283 = add i32 %282, 1
  store i32 %283, ptr %63, align 4, !tbaa !20
  br label %213, !llvm.loop !38

284:                                              ; preds = %217
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #9
  br label %286

285:                                              ; preds = %179
  store i32 51, ptr %59, align 4, !tbaa !22
  br label %286

286:                                              ; preds = %285, %284
  %287 = load i32, ptr %59, align 4, !tbaa !22
  store i32 1, ptr %64, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 92, ptr %18) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 92, ptr %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 92, ptr %10) #9
  ret i32 %287

288:                                              ; preds = %127, %123
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 92, ptr %18) #9
  br label %289

289:                                              ; preds = %288, %119
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.end.p0(i64 92, ptr %15) #9
  br label %290

290:                                              ; preds = %289, %115
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #9
  call void @llvm.lifetime.end.p0(i64 92, ptr %10) #9
  br label %291

291:                                              ; preds = %290
  %292 = load ptr, ptr %13, align 8
  %293 = load i32, ptr %14, align 4
  %294 = insertvalue { ptr, i32 } poison, ptr %292, 0
  %295 = insertvalue { ptr, i32 } %294, i32 %293, 1
  resume { ptr, i32 } %295
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorI6TensorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #7 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_Z19get_ptr_from_tensor6Tensor4Arch(ptr noundef, i32 noundef) #8

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6TensorC2ERKS_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_Z14tensorNumBytes10TensorDesc(ptr noundef byval(%struct.TensorDesc) align 8) #8

declare noundef i32 @_Z15transformFormat10TensorDescPKvS_Pv(ptr noundef byval(%struct.TensorDesc) align 8, ptr noundef, ptr noundef byval(%struct.TensorDesc) align 8, ptr noundef) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z10UNI_MEMSETPvim(ptr noundef, i32 noundef, i64 noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { 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 #8 = { 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 #9 = { nounwind }
attributes #10 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_ZTS8ArchInfo", !11, i64 0, !6, i64 8}
!11 = !{!"_ZTS4Arch", !7, i64 0}
!12 = !{!13, !15, i64 4}
!13 = !{!"_ZTS10TensorDesc", !14, i64 0, !15, i64 4, !16, i64 8, !7, i64 12}
!14 = !{!"_ZTS8DataType", !7, i64 0}
!15 = !{!"_ZTS10DataFormat", !7, i64 0}
!16 = !{!"int", !7, i64 0}
!17 = !{!15, !15, i64 0}
!18 = !{i64 0, i64 4, !19, i64 4, i64 4, !17, i64 8, i64 4, !20, i64 12, i64 80, !21}
!19 = !{!14, !14, i64 0}
!20 = !{!16, !16, i64 0}
!21 = !{!7, !7, i64 0}
!22 = !{!23, !23, i64 0}
!23 = !{!"_ZTS2EE", !7, i64 0}
!24 = !{!25, !16, i64 16}
!25 = !{!"_ZTS16PoolingParamSpec", !16, i64 0, !16, i64 4, !16, i64 8, !16, i64 12, !16, i64 16, !16, i64 20, !16, i64 24, !16, i64 28, !16, i64 32, !16, i64 36, !16, i64 40, !16, i64 44, !26, i64 48, !27, i64 52, !28, i64 56}
!26 = !{!"_ZTS9RoundMode", !7, i64 0}
!27 = !{!"_ZTS11PoolingMode", !7, i64 0}
!28 = !{!"bool", !7, i64 0}
!29 = !{!25, !16, i64 20}
!30 = !{!25, !16, i64 32}
!31 = !{!25, !16, i64 40}
!32 = !{!25, !16, i64 4}
!33 = !{!25, !16, i64 8}
!34 = !{!35, !35, i64 0}
!35 = !{!"float", !7, i64 0}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.mustprogress"}
!38 = distinct !{!38, !37}


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

%struct.TensorDesc = type { i32, i32, i32, [20 x i32] }
%struct.PoolingParamSpec = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8 }
%class.Tensor = type { %"class.std::shared_ptr", %"class.std::shared_ptr.0" }
%"class.std::shared_ptr" = type { %"class.std::__shared_ptr" }
%"class.std::__shared_ptr" = type { ptr, %"class.std::__shared_count" }
%"class.std::__shared_count" = type { ptr }
%"class.std::shared_ptr.0" = type { %"class.std::__shared_ptr.1" }
%"class.std::__shared_ptr.1" = type { ptr, %"class.std::__shared_count" }

@.str = external hidden unnamed_addr constant [20 x i8], align 1
@stdout = external local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [18 x i8], align 1

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

; Function Attrs: nounwind
declare i64 @syscall(i64 noundef, ...) local_unnamed_addr #1

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #2

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

; Function Attrs: noreturn nounwind
declare void @exit(i32 noundef) local_unnamed_addr #4

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN6Tensor8get_descEv(ptr dead_on_unwind noalias writable sret(%struct.TensorDesc) align 4, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5 align 2

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z11tensor4dGet10TensorDescP8DataTypeP10DataFormatPjS4_S4_S4_(ptr noundef byval(%struct.TensorDesc) align 8, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local noundef range(i32 0, 52) i32 @_Z9unpoolingSt6vectorI6TensorSaIS0_EE16PoolingParamSpecS0_S0_P8ArchInfo(ptr noundef nonnull %0, ptr nocapture noundef readnone byval(%struct.PoolingParamSpec) align 8 %1, ptr noundef %2, ptr noundef %3, ptr nocapture noundef readonly %4) local_unnamed_addr #5 personality ptr @__gxx_personality_v0 {
  %6 = alloca %struct.TensorDesc, align 8
  %7 = alloca %class.Tensor, align 8
  %8 = alloca %struct.TensorDesc, align 8
  %9 = alloca %class.Tensor, align 8
  %10 = alloca %struct.TensorDesc, align 8
  %11 = alloca %class.Tensor, align 8
  %12 = alloca %class.Tensor, align 8
  %.sroa.648 = alloca { i32, [20 x i32] }, align 8
  %13 = alloca %struct.TensorDesc, align 8
  %.sroa.6 = alloca { i32, [20 x i32] }, align 8
  %14 = alloca %struct.TensorDesc, align 8
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 92, ptr nonnull %6) #10
  %27 = tail call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorI6TensorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 0) #10
  call void @_ZN6Tensor8get_descEv(ptr dead_on_unwind nonnull writable sret(%struct.TensorDesc) align 4 %6, ptr noundef nonnull align 8 dereferenceable(32) %27)
  %28 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorI6TensorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 0) #10
  call void @_ZN6TensorC2ERKS_(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(32) %28) #10
  %29 = load i32, ptr %4, align 8, !tbaa !5
  %30 = invoke noundef ptr @_Z19get_ptr_from_tensor6Tensor4Arch(ptr noundef nonnull %7, i32 noundef %29)
          to label %31 unwind label %52

31:                                               ; preds = %5
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #10
  call void @llvm.lifetime.start.p0(i64 92, ptr nonnull %8) #10
  %32 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorI6TensorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 1) #10
  call void @_ZN6Tensor8get_descEv(ptr dead_on_unwind nonnull writable sret(%struct.TensorDesc) align 4 %8, ptr noundef nonnull align 8 dereferenceable(32) %32)
  %33 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt6vectorI6TensorSaIS0_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %0, i64 noundef 1) #10
  call void @_ZN6TensorC2ERKS_(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(32) %33) #10
  %34 = load i32, ptr %4, align 8, !tbaa !5
  %35 = invoke noundef ptr @_Z19get_ptr_from_tensor6Tensor4Arch(ptr noundef nonnull %9, i32 noundef %34)
          to label %36 unwind label %54

36:                                               ; preds = %31
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  call void @llvm.lifetime.start.p0(i64 92, ptr nonnull %10) #10
  call void @_ZN6Tensor8get_descEv(ptr dead_on_unwind nonnull writable sret(%struct.TensorDesc) align 4 %10, ptr noundef nonnull align 8 dereferenceable(32) %3)
  call void @_ZN6TensorC2ERKS_(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(32) %3) #10
  %37 = load i32, ptr %4, align 8, !tbaa !5
  %38 = invoke noundef ptr @_Z19get_ptr_from_tensor6Tensor4Arch(ptr noundef nonnull %11, i32 noundef %37)
          to label %39 unwind label %56

39:                                               ; preds = %36
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #10
  call void @_ZN6TensorC2ERKS_(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(32) %2) #10
  %40 = load i32, ptr %4, align 8, !tbaa !5
  %41 = invoke noundef ptr @_Z19get_ptr_from_tensor6Tensor4Arch(ptr noundef nonnull %12, i32 noundef %40)
          to label %42 unwind label %58

42:                                               ; preds = %39
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #10
  %43 = getelementptr inbounds i8, ptr %10, i64 4
  %44 = load i32, ptr %43, align 4, !tbaa !11
  %45 = getelementptr inbounds i8, ptr %8, i64 4
  %46 = load i32, ptr %45, align 4, !tbaa !11
  %.not = icmp eq i32 %46, %44
  br i1 %.not, label %60, label %47

47:                                               ; preds = %42
  call void @llvm.lifetime.start.p0(i64 84, ptr nonnull %.sroa.648)
  %.sroa.040.0.copyload = load i32, ptr %8, align 8, !tbaa !16
  %.sroa.648.0..sroa_idx = getelementptr inbounds i8, ptr %8, i64 8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(84) %.sroa.648, ptr noundef nonnull align 8 dereferenceable(84) %.sroa.648.0..sroa_idx, i64 84, i1 false), !tbaa.struct !17
  %48 = call noundef i32 @_Z14tensorNumBytes10TensorDesc(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %8)
  %49 = zext i32 %48 to i64
  %50 = getelementptr inbounds i8, ptr %41, i64 %49
  store i32 %.sroa.040.0.copyload, ptr %13, align 8, !tbaa !16
  %.sroa.543.0..sroa_idx44 = getelementptr inbounds i8, ptr %13, i64 4
  store i32 %44, ptr %.sroa.543.0..sroa_idx44, align 4, !tbaa !20
  %.sroa.648.0..sroa_idx49 = getelementptr inbounds i8, ptr %13, i64 8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(84) %.sroa.648.0..sroa_idx49, ptr noundef nonnull align 8 dereferenceable(84) %.sroa.648, i64 84, i1 false), !tbaa.struct !17
  %51 = call noundef i32 @_Z15transformFormat10TensorDescPKvS_Pv(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %8, ptr noundef %35, ptr noundef nonnull byval(%struct.TensorDesc) align 8 %13, ptr noundef %41)
  store i32 %.sroa.040.0.copyload, ptr %8, align 8, !tbaa !16
  store i32 %44, ptr %45, align 4, !tbaa !20
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(84) %.sroa.648.0..sroa_idx, ptr noundef nonnull align 8 dereferenceable(84) %.sroa.648, i64 84, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 84, ptr nonnull %.sroa.648)
  br label %60

52:                                               ; preds = %5
  %53 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #10
  br label %263

54:                                               ; preds = %31
  %55 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  br label %262

56:                                               ; preds = %36
  %57 = landingpad { ptr, i32 }
          cleanup
  br label %261

58:                                               ; preds = %39
  %59 = landingpad { ptr, i32 }
          cleanup
  br label %261

60:                                               ; preds = %47, %42
  %.080 = phi ptr [ %41, %47 ], [ %35, %42 ]
  %.078 = phi ptr [ %50, %47 ], [ %41, %42 ]
  %61 = getelementptr inbounds i8, ptr %6, i64 4
  %62 = load i32, ptr %61, align 4, !tbaa !11
  %.not91 = icmp eq i32 %62, %44
  br i1 %.not91, label %66, label %63

63:                                               ; preds = %60
  call void @llvm.lifetime.start.p0(i64 84, ptr nonnull %.sroa.6)
  %.sroa.0.0.copyload = load i32, ptr %6, align 8, !tbaa !16
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %6, i64 8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(84) %.sroa.6, ptr noundef nonnull align 8 dereferenceable(84) %.sroa.6.0..sroa_idx, i64 84, i1 false), !tbaa.struct !17
  %64 = call noundef i32 @_Z14tensorNumBytes10TensorDesc(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %6)
  store i32 %.sroa.0.0.copyload, ptr %14, align 8, !tbaa !16
  %.sroa.5.0..sroa_idx34 = getelementptr inbounds i8, ptr %14, i64 4
  store i32 %44, ptr %.sroa.5.0..sroa_idx34, align 4, !tbaa !20
  %.sroa.6.0..sroa_idx38 = getelementptr inbounds i8, ptr %14, i64 8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(84) %.sroa.6.0..sroa_idx38, ptr noundef nonnull align 8 dereferenceable(84) %.sroa.6, i64 84, i1 false), !tbaa.struct !17
  %65 = call noundef i32 @_Z15transformFormat10TensorDescPKvS_Pv(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %6, ptr noundef %30, ptr noundef nonnull byval(%struct.TensorDesc) align 8 %14, ptr noundef %.078)
  store i32 %.sroa.0.0.copyload, ptr %6, align 8, !tbaa !16
  store i32 %44, ptr %61, align 4, !tbaa !20
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(84) %.sroa.6.0..sroa_idx, ptr noundef nonnull align 8 dereferenceable(84) %.sroa.6, i64 84, i1 false), !tbaa.struct !17
  call void @llvm.lifetime.end.p0(i64 84, ptr nonnull %.sroa.6)
  br label %66

66:                                               ; preds = %63, %60
  %.079 = phi ptr [ %.078, %63 ], [ %30, %60 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %20) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %22) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %23) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %24) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %25) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %26) #10
  %67 = call noundef i32 @_Z11tensor4dGet10TensorDescP8DataTypeP10DataFormatPjS4_S4_S4_(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %6, ptr noundef nonnull %15, ptr noundef nonnull %17, ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %21, ptr noundef nonnull %22)
  %.not92 = icmp eq i32 %67, 0
  br i1 %.not92, label %78, label %68

68:                                               ; preds = %66
  %69 = call i64 (i64, ...) @syscall(i64 noundef 186) #10
  %70 = trunc i64 %69 to i32
  %71 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %70)
  %72 = load ptr, ptr @stdout, align 8, !tbaa !21
  %73 = call i32 @fflush(ptr noundef %72)
  %74 = call ptr @ee2str(i32 noundef %67)
  %75 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef %74)
  %76 = load ptr, ptr @stdout, align 8, !tbaa !21
  %77 = call i32 @fflush(ptr noundef %76)
  call void @exit(i32 noundef 1) #11
  unreachable

78:                                               ; preds = %66
  %79 = call noundef i32 @_Z11tensor4dGet10TensorDescP8DataTypeP10DataFormatPjS4_S4_S4_(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %10, ptr noundef nonnull %16, ptr noundef nonnull %18, ptr noundef nonnull %23, ptr noundef nonnull %24, ptr noundef nonnull %25, ptr noundef nonnull %26)
  %.not93 = icmp eq i32 %79, 0
  br i1 %.not93, label %90, label %80

80:                                               ; preds = %78
  %81 = call i64 (i64, ...) @syscall(i64 noundef 186) #10
  %82 = trunc i64 %81 to i32
  %83 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %82)
  %84 = load ptr, ptr @stdout, align 8, !tbaa !21
  %85 = call i32 @fflush(ptr noundef %84)
  %86 = call ptr @ee2str(i32 noundef %79)
  %87 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef %86)
  %88 = load ptr, ptr @stdout, align 8, !tbaa !21
  %89 = call i32 @fflush(ptr noundef %88)
  call void @exit(i32 noundef 1) #11
  unreachable

90:                                               ; preds = %78
  %91 = call noundef i32 @_Z14tensorNumBytes10TensorDesc(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %10)
  %92 = zext i32 %91 to i64
  call void @_Z10UNI_MEMSETPvim(ptr noundef %38, i32 noundef 0, i64 noundef %92)
  %93 = icmp eq i32 %44, 2
  br i1 %93, label %94, label %.loopexit

94:                                               ; preds = %90
  %95 = load i32, ptr %20, align 4, !tbaa !18
  %96 = lshr i32 %95, 3
  %97 = load i32, ptr %25, align 4, !tbaa !18
  %98 = load i32, ptr %26, align 4, !tbaa !18
  %99 = mul i32 %98, %97
  %.fr95 = freeze i32 %99
  %100 = load i32, ptr %24, align 4, !tbaa !18
  %101 = mul i32 %.fr95, %100
  %102 = load i32, ptr %19, align 4, !tbaa !18
  %103 = mul i32 %102, %96
  %104 = load i32, ptr %21, align 4, !tbaa !18
  %105 = mul i32 %103, %104
  %106 = load i32, ptr %22, align 4, !tbaa !18
  %107 = mul i32 %105, %106
  %.not99 = icmp eq i32 %107, 0
  br i1 %.not99, label %.loopexit, label %.preheader.preheader

.preheader.preheader:                             ; preds = %94
  %wide.trip.count = zext i32 %107 to i64
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %.preheader
  %indvars.iv = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next, %.preheader ]
  %108 = shl i64 %indvars.iv, 3
  %109 = and i64 %108, 4294967288
  %110 = getelementptr inbounds i32, ptr %.080, i64 %109
  %111 = load i32, ptr %110, align 4, !tbaa !18
  %.fr = freeze i32 %111
  %112 = urem i32 %.fr, %101
  %113 = udiv i32 %112, %.fr95
  %114 = urem i32 %.fr, %.fr95
  %115 = urem i32 %.fr, %98
  %116 = lshr i32 %113, 3
  %117 = mul i32 %116, %.fr95
  %118 = urem i32 %114, %98
  %119 = sub nuw i32 %114, %118
  %120 = and i32 %113, 7
  %reass.add = add i32 %117, %115
  %reass.add96 = add i32 %reass.add, %119
  %reass.mul = shl i32 %reass.add96, 3
  %121 = sub nuw i32 %.fr, %112
  %122 = add i32 %121, %120
  %123 = add i32 %122, %reass.mul
  %124 = getelementptr inbounds float, ptr %.079, i64 %109
  %125 = load float, ptr %124, align 4, !tbaa !22
  %126 = zext i32 %123 to i64
  %127 = getelementptr inbounds float, ptr %38, i64 %126
  store float %125, ptr %127, align 4, !tbaa !22
  %128 = or disjoint i64 %109, 1
  %129 = getelementptr inbounds i32, ptr %.080, i64 %128
  %130 = load i32, ptr %129, align 4, !tbaa !18
  %.fr.1 = freeze i32 %130
  %131 = urem i32 %.fr.1, %101
  %132 = udiv i32 %131, %.fr95
  %133 = urem i32 %.fr.1, %.fr95
  %134 = urem i32 %.fr.1, %98
  %135 = lshr i32 %132, 3
  %136 = mul i32 %135, %.fr95
  %137 = urem i32 %133, %98
  %138 = sub nuw i32 %133, %137
  %139 = and i32 %132, 7
  %reass.add.1 = add i32 %136, %134
  %reass.add96.1 = add i32 %reass.add.1, %138
  %reass.mul.1 = shl i32 %reass.add96.1, 3
  %140 = sub nuw i32 %.fr.1, %131
  %141 = add i32 %140, %139
  %142 = add i32 %141, %reass.mul.1
  %143 = getelementptr inbounds float, ptr %.079, i64 %128
  %144 = load float, ptr %143, align 4, !tbaa !22
  %145 = zext i32 %142 to i64
  %146 = getelementptr inbounds float, ptr %38, i64 %145
  store float %144, ptr %146, align 4, !tbaa !22
  %147 = or disjoint i64 %109, 2
  %148 = getelementptr inbounds i32, ptr %.080, i64 %147
  %149 = load i32, ptr %148, align 4, !tbaa !18
  %.fr.2 = freeze i32 %149
  %150 = urem i32 %.fr.2, %101
  %151 = udiv i32 %150, %.fr95
  %152 = urem i32 %.fr.2, %.fr95
  %153 = urem i32 %.fr.2, %98
  %154 = lshr i32 %151, 3
  %155 = mul i32 %154, %.fr95
  %156 = urem i32 %152, %98
  %157 = sub nuw i32 %152, %156
  %158 = and i32 %151, 7
  %reass.add.2 = add i32 %155, %153
  %reass.add96.2 = add i32 %reass.add.2, %157
  %reass.mul.2 = shl i32 %reass.add96.2, 3
  %159 = sub nuw i32 %.fr.2, %150
  %160 = add i32 %159, %158
  %161 = add i32 %160, %reass.mul.2
  %162 = getelementptr inbounds float, ptr %.079, i64 %147
  %163 = load float, ptr %162, align 4, !tbaa !22
  %164 = zext i32 %161 to i64
  %165 = getelementptr inbounds float, ptr %38, i64 %164
  store float %163, ptr %165, align 4, !tbaa !22
  %166 = or disjoint i64 %109, 3
  %167 = getelementptr inbounds i32, ptr %.080, i64 %166
  %168 = load i32, ptr %167, align 4, !tbaa !18
  %.fr.3 = freeze i32 %168
  %169 = urem i32 %.fr.3, %101
  %170 = udiv i32 %169, %.fr95
  %171 = urem i32 %.fr.3, %.fr95
  %172 = urem i32 %.fr.3, %98
  %173 = lshr i32 %170, 3
  %174 = mul i32 %173, %.fr95
  %175 = urem i32 %171, %98
  %176 = sub nuw i32 %171, %175
  %177 = and i32 %170, 7
  %reass.add.3 = add i32 %174, %172
  %reass.add96.3 = add i32 %reass.add.3, %176
  %reass.mul.3 = shl i32 %reass.add96.3, 3
  %178 = sub nuw i32 %.fr.3, %169
  %179 = add i32 %178, %177
  %180 = add i32 %179, %reass.mul.3
  %181 = getelementptr inbounds float, ptr %.079, i64 %166
  %182 = load float, ptr %181, align 4, !tbaa !22
  %183 = zext i32 %180 to i64
  %184 = getelementptr inbounds float, ptr %38, i64 %183
  store float %182, ptr %184, align 4, !tbaa !22
  %185 = or disjoint i64 %109, 4
  %186 = getelementptr inbounds i32, ptr %.080, i64 %185
  %187 = load i32, ptr %186, align 4, !tbaa !18
  %.fr.4 = freeze i32 %187
  %188 = urem i32 %.fr.4, %101
  %189 = udiv i32 %188, %.fr95
  %190 = urem i32 %.fr.4, %.fr95
  %191 = urem i32 %.fr.4, %98
  %192 = lshr i32 %189, 3
  %193 = mul i32 %192, %.fr95
  %194 = urem i32 %190, %98
  %195 = sub nuw i32 %190, %194
  %196 = and i32 %189, 7
  %reass.add.4 = add i32 %193, %191
  %reass.add96.4 = add i32 %reass.add.4, %195
  %reass.mul.4 = shl i32 %reass.add96.4, 3
  %197 = sub nuw i32 %.fr.4, %188
  %198 = add i32 %197, %196
  %199 = add i32 %198, %reass.mul.4
  %200 = getelementptr inbounds float, ptr %.079, i64 %185
  %201 = load float, ptr %200, align 4, !tbaa !22
  %202 = zext i32 %199 to i64
  %203 = getelementptr inbounds float, ptr %38, i64 %202
  store float %201, ptr %203, align 4, !tbaa !22
  %204 = or disjoint i64 %109, 5
  %205 = getelementptr inbounds i32, ptr %.080, i64 %204
  %206 = load i32, ptr %205, align 4, !tbaa !18
  %.fr.5 = freeze i32 %206
  %207 = urem i32 %.fr.5, %101
  %208 = udiv i32 %207, %.fr95
  %209 = urem i32 %.fr.5, %.fr95
  %210 = urem i32 %.fr.5, %98
  %211 = lshr i32 %208, 3
  %212 = mul i32 %211, %.fr95
  %213 = urem i32 %209, %98
  %214 = sub nuw i32 %209, %213
  %215 = and i32 %208, 7
  %reass.add.5 = add i32 %212, %210
  %reass.add96.5 = add i32 %reass.add.5, %214
  %reass.mul.5 = shl i32 %reass.add96.5, 3
  %216 = sub nuw i32 %.fr.5, %207
  %217 = add i32 %216, %215
  %218 = add i32 %217, %reass.mul.5
  %219 = getelementptr inbounds float, ptr %.079, i64 %204
  %220 = load float, ptr %219, align 4, !tbaa !22
  %221 = zext i32 %218 to i64
  %222 = getelementptr inbounds float, ptr %38, i64 %221
  store float %220, ptr %222, align 4, !tbaa !22
  %223 = or disjoint i64 %109, 6
  %224 = getelementptr inbounds i32, ptr %.080, i64 %223
  %225 = load i32, ptr %224, align 4, !tbaa !18
  %.fr.6 = freeze i32 %225
  %226 = urem i32 %.fr.6, %101
  %227 = udiv i32 %226, %.fr95
  %228 = urem i32 %.fr.6, %.fr95
  %229 = urem i32 %.fr.6, %98
  %230 = lshr i32 %227, 3
  %231 = mul i32 %230, %.fr95
  %232 = urem i32 %228, %98
  %233 = sub nuw i32 %228, %232
  %234 = and i32 %227, 7
  %reass.add.6 = add i32 %231, %229
  %reass.add96.6 = add i32 %reass.add.6, %233
  %reass.mul.6 = shl i32 %reass.add96.6, 3
  %235 = sub nuw i32 %.fr.6, %226
  %236 = add i32 %235, %234
  %237 = add i32 %236, %reass.mul.6
  %238 = getelementptr inbounds float, ptr %.079, i64 %223
  %239 = load float, ptr %238, align 4, !tbaa !22
  %240 = zext i32 %237 to i64
  %241 = getelementptr inbounds float, ptr %38, i64 %240
  store float %239, ptr %241, align 4, !tbaa !22
  %242 = or disjoint i64 %109, 7
  %243 = getelementptr inbounds i32, ptr %.080, i64 %242
  %244 = load i32, ptr %243, align 4, !tbaa !18
  %.fr.7 = freeze i32 %244
  %245 = urem i32 %.fr.7, %101
  %246 = udiv i32 %245, %.fr95
  %247 = urem i32 %.fr.7, %.fr95
  %248 = urem i32 %.fr.7, %98
  %249 = lshr i32 %246, 3
  %250 = mul i32 %249, %.fr95
  %251 = urem i32 %247, %98
  %252 = sub nuw i32 %247, %251
  %253 = and i32 %246, 7
  %reass.add.7 = add i32 %250, %248
  %reass.add96.7 = add i32 %reass.add.7, %252
  %reass.mul.7 = shl i32 %reass.add96.7, 3
  %254 = sub nuw i32 %.fr.7, %245
  %255 = add i32 %254, %253
  %256 = add i32 %255, %reass.mul.7
  %257 = getelementptr inbounds float, ptr %.079, i64 %242
  %258 = load float, ptr %257, align 4, !tbaa !22
  %259 = zext i32 %256 to i64
  %260 = getelementptr inbounds float, ptr %38, i64 %259
  store float %258, ptr %260, align 4, !tbaa !22
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.loopexit, label %.preheader, !llvm.loop !24

.loopexit:                                        ; preds = %.preheader, %94, %90
  %.081 = phi i32 [ 51, %90 ], [ 0, %94 ], [ 0, %.preheader ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %26) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %25) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %24) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %23) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %22) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %20) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #10
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %6) #10
  ret i32 %.081

261:                                              ; preds = %58, %56
  %.sink = phi ptr [ %12, %58 ], [ %11, %56 ]
  %.pn = phi { ptr, i32 } [ %59, %58 ], [ %57, %56 ]
  call void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %.sink) #10
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %10) #10
  br label %262

262:                                              ; preds = %261, %54
  %.pn.pn = phi { ptr, i32 } [ %.pn, %261 ], [ %55, %54 ]
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %8) #10
  br label %263

263:                                              ; preds = %262, %52
  %.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn, %262 ], [ %53, %52 ]
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %6) #10
  resume { ptr, i32 } %.pn.pn.pn
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef ptr @_Z19get_ptr_from_tensor6Tensor4Arch(ptr noundef, i32 noundef) local_unnamed_addr #8

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6TensorC2ERKS_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN6TensorD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_Z14tensorNumBytes10TensorDesc(ptr noundef byval(%struct.TensorDesc) align 8) local_unnamed_addr #8

declare noundef i32 @_Z15transformFormat10TensorDescPKvS_Pv(ptr noundef byval(%struct.TensorDesc) align 8, ptr noundef, ptr noundef byval(%struct.TensorDesc) align 8, ptr noundef) local_unnamed_addr #9

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z10UNI_MEMSETPvim(ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTS8ArchInfo", !7, i64 0, !10, i64 8}
!7 = !{!"_ZTS4Arch", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!12, !14, i64 4}
!12 = !{!"_ZTS10TensorDesc", !13, i64 0, !14, i64 4, !15, i64 8, !8, i64 12}
!13 = !{!"_ZTS8DataType", !8, i64 0}
!14 = !{!"_ZTS10DataFormat", !8, i64 0}
!15 = !{!"int", !8, i64 0}
!16 = !{!13, !13, i64 0}
!17 = !{i64 0, i64 4, !18, i64 4, i64 80, !19}
!18 = !{!15, !15, i64 0}
!19 = !{!8, !8, i64 0}
!20 = !{!14, !14, i64 0}
!21 = !{!10, !10, i64 0}
!22 = !{!23, !23, i64 0}
!23 = !{!"float", !8, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}


; Effective O3 passes: CorrelatedValuePropagationPass,DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass