; LLVM IR from ermig1979/Simd :: src/Simd/SimdBaseSynetPermute.ll (ZN4Simd4Base12SynetPermuteC2ERKNS0_12PermuteParamE)

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

%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.0" = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.Simd::Base::SynetPermute" = type { %"struct.Simd::Deletable", %"struct.Simd::Base::PermuteParam", %"struct.Simd::Array", i64, i64, i64, %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector", %"class.std::vector", ptr }
%"struct.Simd::Deletable" = type { ptr }
%"struct.Simd::Base::PermuteParam" = type <{ %"class.std::vector", %"class.std::vector", i64, i64, i32, [4 x i8] }>
%"struct.Simd::Array" = type { ptr, i64 }

@_ZTVN4Simd4Base12SynetPermuteE = external dso_local unnamed_addr constant { [4 x ptr] }, align 8

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4Simd4Base12SynetPermuteC2ERKNS0_12PermuteParamE(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull align 8 dereferenceable(68) %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca %"class.std::vector", align 8
  %11 = alloca %"class.std::vector", align 8
  %12 = alloca %"class.std::vector", align 8
  %13 = alloca %"class.std::vector", align 8
  %14 = alloca %"class.std::vector", align 8
  %15 = alloca %"class.std::vector", align 8
  %16 = alloca %"class.std::vector", align 8
  %17 = alloca %"class.std::vector", align 8
  %18 = alloca %"class.__gnu_cxx::__normal_iterator.0", align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator.0", align 8
  %22 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %24 = alloca %"class.std::vector", align 8
  %25 = alloca %"class.std::vector", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %26 = load ptr, ptr %3, align 8
  call void @_ZN4Simd9DeletableC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #7
  store ptr getelementptr inbounds inrange(-16, 16) ({ [4 x ptr] }, ptr @_ZTVN4Simd4Base12SynetPermuteE, i32 0, i32 0, i32 2), ptr %26, align 8, !tbaa !9
  %27 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 1
  %28 = load ptr, ptr %4, align 8, !tbaa !5
  invoke void @_ZN4Simd4Base12PermuteParamC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(68) %27, ptr noundef nonnull align 8 dereferenceable(68) %28)
          to label %29 unwind label %63

29:                                               ; preds = %2
  %30 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 2
  invoke void @_ZN4Simd5ArrayIiEC2Embm(ptr noundef nonnull align 8 dereferenceable(16) %30, i64 noundef 0, i1 noundef zeroext false, i64 noundef 8)
          to label %31 unwind label %67

31:                                               ; preds = %29
  %32 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 6
  call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #7
  %33 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 7
  call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #7
  %34 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 8
  call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #7
  %35 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 9
  call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #7
  %36 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 10
  call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #7
  %37 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 11
  call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #7
  %38 = load ptr, ptr %4, align 8, !tbaa !5
  %39 = getelementptr inbounds %"struct.Simd::Base::PermuteParam", ptr %38, i32 0, i32 2
  %40 = load i64, ptr %39, align 8, !tbaa !11
  %41 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 5
  store i64 %40, ptr %41, align 8, !tbaa !19
  %42 = load ptr, ptr %4, align 8, !tbaa !5
  %43 = getelementptr inbounds %"struct.Simd::Base::PermuteParam", ptr %42, i32 0, i32 0
  %44 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 6
  %45 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %44, ptr noundef nonnull align 8 dereferenceable(24) %43)
          to label %46 unwind label %71

46:                                               ; preds = %31
  %47 = load ptr, ptr %4, align 8, !tbaa !5
  %48 = getelementptr inbounds %"struct.Simd::Base::PermuteParam", ptr %47, i32 0, i32 1
  %49 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 10
  %50 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %49, ptr noundef nonnull align 8 dereferenceable(24) %48)
          to label %51 unwind label %71

51:                                               ; preds = %46
  %52 = load ptr, ptr %4, align 8, !tbaa !5
  %53 = getelementptr inbounds %"struct.Simd::Base::PermuteParam", ptr %52, i32 0, i32 1
  %54 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 7
  %55 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %54, ptr noundef nonnull align 8 dereferenceable(24) %53)
          to label %56 unwind label %71

56:                                               ; preds = %51
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  store i64 0, ptr %7, align 8, !tbaa !23
  br label %57

57:                                               ; preds = %91, %56
  %58 = load i64, ptr %7, align 8, !tbaa !23
  %59 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 5
  %60 = load i64, ptr %59, align 8, !tbaa !19
  %61 = icmp ult i64 %58, %60
  br i1 %61, label %75, label %62

62:                                               ; preds = %57
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  br label %98

63:                                               ; preds = %2
  %64 = landingpad { ptr, i32 }
          cleanup
  %65 = extractvalue { ptr, i32 } %64, 0
  store ptr %65, ptr %5, align 8
  %66 = extractvalue { ptr, i32 } %64, 1
  store i32 %66, ptr %6, align 4
  br label %287

67:                                               ; preds = %29
  %68 = landingpad { ptr, i32 }
          cleanup
  %69 = extractvalue { ptr, i32 } %68, 0
  store ptr %69, ptr %5, align 8
  %70 = extractvalue { ptr, i32 } %68, 1
  store i32 %70, ptr %6, align 4
  br label %286

71:                                               ; preds = %51, %46, %31
  %72 = landingpad { ptr, i32 }
          cleanup
  %73 = extractvalue { ptr, i32 } %72, 0
  store ptr %73, ptr %5, align 8
  %74 = extractvalue { ptr, i32 } %72, 1
  store i32 %74, ptr %6, align 4
  br label %285

75:                                               ; preds = %57
  %76 = load i64, ptr %7, align 8, !tbaa !23
  %77 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 7
  %78 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 10
  %79 = load i64, ptr %7, align 8, !tbaa !23
  %80 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %78, i64 noundef %79) #7
  %81 = load i64, ptr %80, align 8, !tbaa !23
  %82 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %77, i64 noundef %81) #7
  store i64 %76, ptr %82, align 8, !tbaa !23
  %83 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 9
  %84 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 6
  %85 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 10
  %86 = load i64, ptr %7, align 8, !tbaa !23
  %87 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %85, i64 noundef %86) #7
  %88 = load i64, ptr %87, align 8, !tbaa !23
  %89 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %84, i64 noundef %88) #7
  invoke void @_ZNSt6vectorImSaImEE9push_backERKm(ptr noundef nonnull align 8 dereferenceable(24) %83, ptr noundef nonnull align 8 dereferenceable(8) %89)
          to label %90 unwind label %94

90:                                               ; preds = %75
  br label %91

91:                                               ; preds = %90
  %92 = load i64, ptr %7, align 8, !tbaa !23
  %93 = add i64 %92, 1
  store i64 %93, ptr %7, align 8, !tbaa !23
  br label %57, !llvm.loop !24

94:                                               ; preds = %75
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %5, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  br label %285

98:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  store i64 0, ptr %8, align 8, !tbaa !23
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  store i64 0, ptr %9, align 8, !tbaa !23
  br label %99

99:                                               ; preds = %124, %98
  %100 = load i64, ptr %9, align 8, !tbaa !23
  %101 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 5
  %102 = load i64, ptr %101, align 8, !tbaa !19
  %103 = icmp ult i64 %100, %102
  br i1 %103, label %105, label %104

104:                                              ; preds = %99
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  br label %127

105:                                              ; preds = %99
  %106 = load i64, ptr %9, align 8, !tbaa !23
  %107 = icmp eq i64 %106, 0
  br i1 %107, label %120, label %108

108:                                              ; preds = %105
  %109 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 10
  %110 = load i64, ptr %9, align 8, !tbaa !23
  %111 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %109, i64 noundef %110) #7
  %112 = load i64, ptr %111, align 8, !tbaa !23
  %113 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 10
  %114 = load i64, ptr %9, align 8, !tbaa !23
  %115 = sub i64 %114, 1
  %116 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %113, i64 noundef %115) #7
  %117 = load i64, ptr %116, align 8, !tbaa !23
  %118 = add i64 %117, 1
  %119 = icmp ne i64 %112, %118
  br i1 %119, label %120, label %123

120:                                              ; preds = %108, %105
  %121 = load i64, ptr %8, align 8, !tbaa !23
  %122 = add i64 %121, 1
  store i64 %122, ptr %8, align 8, !tbaa !23
  br label %123

123:                                              ; preds = %120, %108
  br label %124

124:                                              ; preds = %123
  %125 = load i64, ptr %9, align 8, !tbaa !23
  %126 = add i64 %125, 1
  store i64 %126, ptr %9, align 8, !tbaa !23
  br label %99, !llvm.loop !26

127:                                              ; preds = %104
  %128 = load i64, ptr %8, align 8, !tbaa !23
  %129 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 5
  %130 = load i64, ptr %129, align 8, !tbaa !19
  %131 = icmp ne i64 %128, %130
  br i1 %131, label %132, label %188

132:                                              ; preds = %127
  %133 = load i64, ptr %8, align 8, !tbaa !23
  %134 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 5
  store i64 %133, ptr %134, align 8, !tbaa !19
  call void @llvm.lifetime.start.p0(i64 24, ptr %10) #7
  %135 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 9
  invoke void @_ZNSt6vectorImSaImEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(24) %135)
          to label %136 unwind label %156

136:                                              ; preds = %132
  call void @llvm.lifetime.start.p0(i64 24, ptr %11) #7
  %137 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 6
  %138 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 10
  invoke void @_ZN4Simd4Base12CompactShapeERKSt6vectorImSaImEES5_(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %11, ptr noundef nonnull align 8 dereferenceable(24) %137, ptr noundef nonnull align 8 dereferenceable(24) %138)
          to label %139 unwind label %160

139:                                              ; preds = %136
  %140 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 9
  %141 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %140, ptr noundef nonnull align 8 dereferenceable(24) %11) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %11) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %12) #7
  %142 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 7
  invoke void @_ZN4Simd4Base12CompactShapeERKSt6vectorImSaImEES5_(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %12, ptr noundef nonnull align 8 dereferenceable(24) %10, ptr noundef nonnull align 8 dereferenceable(24) %142)
          to label %143 unwind label %164

143:                                              ; preds = %139
  %144 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 6
  %145 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %144, ptr noundef nonnull align 8 dereferenceable(24) %12) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #7
  %146 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 10
  invoke void @_ZNSt6vectorImSaImEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %14, ptr noundef nonnull align 8 dereferenceable(24) %146)
          to label %147 unwind label %168

147:                                              ; preds = %143
  invoke void @_ZN4Simd4Base12CompactOrderESt6vectorImSaImEE(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %13, ptr noundef %14)
          to label %148 unwind label %172

148:                                              ; preds = %147
  %149 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 10
  %150 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %149, ptr noundef nonnull align 8 dereferenceable(24) %13) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #7
  %151 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 7
  invoke void @_ZNSt6vectorImSaImEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %16, ptr noundef nonnull align 8 dereferenceable(24) %151)
          to label %152 unwind label %177

152:                                              ; preds = %148
  invoke void @_ZN4Simd4Base12CompactOrderESt6vectorImSaImEE(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %15, ptr noundef %16)
          to label %153 unwind label %181

153:                                              ; preds = %152
  %154 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 7
  %155 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %154, ptr noundef nonnull align 8 dereferenceable(24) %15) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #7
  br label %188

156:                                              ; preds = %132
  %157 = landingpad { ptr, i32 }
          cleanup
  %158 = extractvalue { ptr, i32 } %157, 0
  store ptr %158, ptr %5, align 8
  %159 = extractvalue { ptr, i32 } %157, 1
  store i32 %159, ptr %6, align 4
  br label %187

160:                                              ; preds = %136
  %161 = landingpad { ptr, i32 }
          cleanup
  %162 = extractvalue { ptr, i32 } %161, 0
  store ptr %162, ptr %5, align 8
  %163 = extractvalue { ptr, i32 } %161, 1
  store i32 %163, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %11) #7
  br label %186

164:                                              ; preds = %139
  %165 = landingpad { ptr, i32 }
          cleanup
  %166 = extractvalue { ptr, i32 } %165, 0
  store ptr %166, ptr %5, align 8
  %167 = extractvalue { ptr, i32 } %165, 1
  store i32 %167, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %12) #7
  br label %186

168:                                              ; preds = %143
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %5, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %6, align 4
  br label %176

172:                                              ; preds = %147
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %5, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %6, align 4
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %14) #7
  br label %176

176:                                              ; preds = %172, %168
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #7
  br label %186

177:                                              ; preds = %148
  %178 = landingpad { ptr, i32 }
          cleanup
  %179 = extractvalue { ptr, i32 } %178, 0
  store ptr %179, ptr %5, align 8
  %180 = extractvalue { ptr, i32 } %178, 1
  store i32 %180, ptr %6, align 4
  br label %185

181:                                              ; preds = %152
  %182 = landingpad { ptr, i32 }
          cleanup
  %183 = extractvalue { ptr, i32 } %182, 0
  store ptr %183, ptr %5, align 8
  %184 = extractvalue { ptr, i32 } %182, 1
  store i32 %184, ptr %6, align 4
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #7
  br label %185

185:                                              ; preds = %181, %177
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #7
  br label %186

186:                                              ; preds = %185, %176, %164, %160
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  br label %187

187:                                              ; preds = %186, %156
  call void @llvm.lifetime.end.p0(i64 24, ptr %10) #7
  br label %284

188:                                              ; preds = %153, %127
  %189 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 10
  %190 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %189, i64 noundef 0) #7
  %191 = load i64, ptr %190, align 8, !tbaa !23
  %192 = icmp eq i64 %191, 0
  br i1 %192, label %193, label %254

193:                                              ; preds = %188
  %194 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 9
  %195 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %194, i64 noundef 0) #7
  %196 = load i64, ptr %195, align 8, !tbaa !23
  %197 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 3
  store i64 %196, ptr %197, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #7
  %198 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 9
  %199 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 10
  invoke void @_ZN4Simd4Base6StrideERKSt6vectorImSaImEES5_(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %17, ptr noundef nonnull align 8 dereferenceable(24) %198, ptr noundef nonnull align 8 dereferenceable(24) %199)
          to label %200 unwind label %233

200:                                              ; preds = %193
  %201 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %17, i64 noundef 0) #7
  %202 = load i64, ptr %201, align 8, !tbaa !23
  %203 = load ptr, ptr %4, align 8, !tbaa !5
  %204 = invoke noundef i64 @_ZNK4Simd4Base12PermuteParam9PixelSizeEv(ptr noundef nonnull align 8 dereferenceable(68) %203)
          to label %205 unwind label %237

205:                                              ; preds = %200
  %206 = mul i64 %202, %204
  %207 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 4
  store i64 %206, ptr %207, align 8, !tbaa !28
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #7
  %208 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 6
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %209 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 6
  %210 = call ptr @_ZNSt6vectorImSaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %209) #7
  %211 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %19, i32 0, i32 0
  store ptr %210, ptr %211, align 8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEC2IPmvEERKNS0_IT_S5_EE(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  %212 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.0", ptr %18, i32 0, i32 0
  %213 = load ptr, ptr %212, align 8
  %214 = invoke ptr @_ZNSt6vectorImSaImEE5eraseEN9__gnu_cxx17__normal_iteratorIPKmS1_EE(ptr noundef nonnull align 8 dereferenceable(24) %208, ptr %213)
          to label %215 unwind label %242

215:                                              ; preds = %205
  %216 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %20, i32 0, i32 0
  store ptr %214, ptr %216, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  %217 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %218 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 9
  %219 = call ptr @_ZNSt6vectorImSaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %218) #7
  %220 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %22, i32 0, i32 0
  store ptr %219, ptr %220, align 8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEC2IPmvEERKNS0_IT_S5_EE(ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %22) #7
  %221 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.0", ptr %21, i32 0, i32 0
  %222 = load ptr, ptr %221, align 8
  %223 = invoke ptr @_ZNSt6vectorImSaImEE5eraseEN9__gnu_cxx17__normal_iteratorIPKmS1_EE(ptr noundef nonnull align 8 dereferenceable(24) %217, ptr %222)
          to label %224 unwind label %246

224:                                              ; preds = %215
  %225 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %23, i32 0, i32 0
  store ptr %223, ptr %225, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  %226 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 7
  invoke void @_ZN4Simd4Base10EraseBatchERSt6vectorImSaImEE(ptr noundef nonnull align 8 dereferenceable(24) %226)
          to label %227 unwind label %250

227:                                              ; preds = %224
  %228 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 10
  invoke void @_ZN4Simd4Base10EraseBatchERSt6vectorImSaImEE(ptr noundef nonnull align 8 dereferenceable(24) %228)
          to label %229 unwind label %250

229:                                              ; preds = %227
  %230 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 5
  %231 = load i64, ptr %230, align 8, !tbaa !19
  %232 = add i64 %231, -1
  store i64 %232, ptr %230, align 8, !tbaa !19
  br label %257

233:                                              ; preds = %193
  %234 = landingpad { ptr, i32 }
          cleanup
  %235 = extractvalue { ptr, i32 } %234, 0
  store ptr %235, ptr %5, align 8
  %236 = extractvalue { ptr, i32 } %234, 1
  store i32 %236, ptr %6, align 4
  br label %241

237:                                              ; preds = %200
  %238 = landingpad { ptr, i32 }
          cleanup
  %239 = extractvalue { ptr, i32 } %238, 0
  store ptr %239, ptr %5, align 8
  %240 = extractvalue { ptr, i32 } %238, 1
  store i32 %240, ptr %6, align 4
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #7
  br label %241

241:                                              ; preds = %237, %233
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #7
  br label %284

242:                                              ; preds = %205
  %243 = landingpad { ptr, i32 }
          cleanup
  %244 = extractvalue { ptr, i32 } %243, 0
  store ptr %244, ptr %5, align 8
  %245 = extractvalue { ptr, i32 } %243, 1
  store i32 %245, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  br label %284

246:                                              ; preds = %215
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %5, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  br label %284

250:                                              ; preds = %265, %227, %224
  %251 = landingpad { ptr, i32 }
          cleanup
  %252 = extractvalue { ptr, i32 } %251, 0
  store ptr %252, ptr %5, align 8
  %253 = extractvalue { ptr, i32 } %251, 1
  store i32 %253, ptr %6, align 4
  br label %284

254:                                              ; preds = %188
  %255 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 3
  store i64 1, ptr %255, align 8, !tbaa !27
  %256 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 4
  store i64 0, ptr %256, align 8, !tbaa !28
  br label %257

257:                                              ; preds = %254, %229
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #7
  %258 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 6
  %259 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 7
  invoke void @_ZN4Simd4Base6StrideERKSt6vectorImSaImEES5_(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %24, ptr noundef nonnull align 8 dereferenceable(24) %258, ptr noundef nonnull align 8 dereferenceable(24) %259)
          to label %260 unwind label %276

260:                                              ; preds = %257
  %261 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 8
  %262 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %261, ptr noundef nonnull align 8 dereferenceable(24) %24) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr %25) #7
  %263 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 9
  %264 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 10
  invoke void @_ZN4Simd4Base6StrideERKSt6vectorImSaImEES5_(ptr dead_on_unwind writable sret(%"class.std::vector") align 8 %25, ptr noundef nonnull align 8 dereferenceable(24) %263, ptr noundef nonnull align 8 dereferenceable(24) %264)
          to label %265 unwind label %280

265:                                              ; preds = %260
  %266 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 11
  %267 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %266, ptr noundef nonnull align 8 dereferenceable(24) %25) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #7
  %268 = load ptr, ptr %4, align 8, !tbaa !5
  %269 = getelementptr inbounds %"struct.Simd::Base::PermuteParam", ptr %268, i32 0, i32 4
  %270 = load i32, ptr %269, align 8, !tbaa !29
  %271 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 5
  %272 = load i64, ptr %271, align 8, !tbaa !19
  %273 = invoke noundef ptr @_ZN4Simd4BaseL10GetPermuteE18SimdTensorDataTypem(i32 noundef %270, i64 noundef %272)
          to label %274 unwind label %250

274:                                              ; preds = %265
  %275 = getelementptr inbounds %"class.Simd::Base::SynetPermute", ptr %26, i32 0, i32 12
  store ptr %273, ptr %275, align 8, !tbaa !30
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  ret void

276:                                              ; preds = %257
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %5, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #7
  br label %284

280:                                              ; preds = %260
  %281 = landingpad { ptr, i32 }
          cleanup
  %282 = extractvalue { ptr, i32 } %281, 0
  store ptr %282, ptr %5, align 8
  %283 = extractvalue { ptr, i32 } %281, 1
  store i32 %283, ptr %6, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #7
  br label %284

284:                                              ; preds = %280, %276, %250, %246, %242, %241, %187
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  br label %285

285:                                              ; preds = %284, %94, %71
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %37) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %36) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %35) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %34) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %33) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %32) #7
  call void @_ZN4Simd5ArrayIiED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %30) #7
  br label %286

286:                                              ; preds = %285, %67
  call void @_ZN4Simd4Base12PermuteParamD2Ev(ptr noundef nonnull align 8 dereferenceable(68) %27) #7
  br label %287

287:                                              ; preds = %286, %63
  call void @_ZN4Simd9DeletableD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %26) #7
  br label %288

288:                                              ; preds = %287
  %289 = load ptr, ptr %5, align 8
  %290 = load i32, ptr %6, align 4
  %291 = insertvalue { ptr, i32 } poison, ptr %289, 0
  %292 = insertvalue { ptr, i32 } %291, i32 %290, 1
  resume { ptr, i32 } %292
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN4Simd4Base12PermuteParamC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(68), ptr noundef nonnull align 8 dereferenceable(68)) unnamed_addr #2 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd5ArrayIiEC2Embm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i1 noundef zeroext, i64 noundef) unnamed_addr #3 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #0 align 2

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorImSaImEE9push_backERKm(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorImSaImEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd4Base12CompactShapeERKSt6vectorImSaImEES5_(ptr dead_on_unwind noalias writable sret(%"class.std::vector") align 8, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #3

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd4Base12CompactOrderESt6vectorImSaImEE(ptr dead_on_unwind noalias writable sret(%"class.std::vector") align 8, ptr noundef) #3

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd4Base6StrideERKSt6vectorImSaImEES5_(ptr dead_on_unwind noalias writable sret(%"class.std::vector") align 8, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK4Simd4Base12PermuteParam9PixelSizeEv(ptr noundef nonnull align 8 dereferenceable(68)) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt6vectorImSaImEE5eraseEN9__gnu_cxx17__normal_iteratorIPKmS1_EE(ptr noundef nonnull align 8 dereferenceable(24), ptr) #0 align 2

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd4Base10EraseBatchERSt6vectorImSaImEE(ptr noundef nonnull align 8 dereferenceable(24)) #3

; Function Attrs: mustprogress uwtable
declare hidden noundef ptr @_ZN4Simd4BaseL10GetPermuteE18SimdTensorDataTypem(i32 noundef, i64 noundef) #0

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN4Simd5ArrayIiED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

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

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

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 #2 = { 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 #3 = { alwaysinline 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 #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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #6 = { alwaysinline 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 #7 = { 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 = !{!"vtable pointer", !8, i64 0}
!11 = !{!12, !17, i64 48}
!12 = !{!"_ZTSN4Simd4Base12PermuteParamE", !13, i64 0, !13, i64 24, !17, i64 48, !17, i64 56, !18, i64 64}
!13 = !{!"_ZTSSt6vectorImSaImEE", !14, i64 0}
!14 = !{!"_ZTSSt12_Vector_baseImSaImEE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseImSaImEE12_Vector_implE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseImSaImEE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!17 = !{!"long", !7, i64 0}
!18 = !{!"_ZTS18SimdTensorDataType", !7, i64 0}
!19 = !{!20, !17, i64 112}
!20 = !{!"_ZTSN4Simd4Base12SynetPermuteE", !21, i64 0, !12, i64 8, !22, i64 80, !17, i64 96, !17, i64 104, !17, i64 112, !13, i64 120, !13, i64 144, !13, i64 168, !13, i64 192, !13, i64 216, !13, i64 240, !6, i64 264}
!21 = !{!"_ZTSN4Simd9DeletableE"}
!22 = !{!"_ZTSN4Simd5ArrayIiEE", !6, i64 0, !17, i64 8}
!23 = !{!17, !17, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = !{!20, !17, i64 96}
!28 = !{!20, !17, i64 104}
!29 = !{!12, !18, i64 64}
!30 = !{!20, !6, i64 264}


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

%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.0" = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }

@_ZTVN4Simd4Base12SynetPermuteE = external dso_local unnamed_addr constant { [4 x ptr] }, align 8

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN4Simd4Base12SynetPermuteC2ERKNS0_12PermuteParamE(ptr noundef nonnull align 8 dereferenceable(272) %0, ptr noundef nonnull align 8 dereferenceable(68) %1) unnamed_addr #0 align 2 personality ptr @__gxx_personality_v0 {
  %3 = alloca %"class.std::vector", align 8
  %4 = alloca %"class.std::vector", align 8
  %5 = alloca %"class.std::vector", align 8
  %6 = alloca %"class.std::vector", align 8
  %7 = alloca %"class.std::vector", align 8
  %8 = alloca %"class.std::vector", align 8
  %9 = alloca %"class.std::vector", align 8
  %10 = alloca %"class.std::vector", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator.0", align 8
  %12 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %13 = alloca %"class.__gnu_cxx::__normal_iterator.0", align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %15 = alloca %"class.std::vector", align 8
  %16 = alloca %"class.std::vector", align 8
  tail call void @_ZN4Simd9DeletableC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  store ptr getelementptr inbounds inrange(-16, 16) (i8, ptr @_ZTVN4Simd4Base12SynetPermuteE, i64 16), ptr %0, align 8, !tbaa !5
  %17 = getelementptr inbounds i8, ptr %0, i64 8
  invoke void @_ZN4Simd4Base12PermuteParamC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(68) %17, ptr noundef nonnull align 8 dereferenceable(68) %1)
          to label %18 unwind label %37

18:                                               ; preds = %2
  %19 = getelementptr inbounds i8, ptr %0, i64 80
  invoke void @_ZN4Simd5ArrayIiEC2Embm(ptr noundef nonnull align 8 dereferenceable(16) %19, i64 noundef 0, i1 noundef zeroext false, i64 noundef 8)
          to label %20 unwind label %39

20:                                               ; preds = %18
  %21 = getelementptr inbounds i8, ptr %0, i64 120
  tail call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #7
  %22 = getelementptr inbounds i8, ptr %0, i64 144
  tail call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #7
  %23 = getelementptr inbounds i8, ptr %0, i64 168
  tail call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #7
  %24 = getelementptr inbounds i8, ptr %0, i64 192
  tail call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #7
  %25 = getelementptr inbounds i8, ptr %0, i64 216
  tail call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #7
  %26 = getelementptr inbounds i8, ptr %0, i64 240
  tail call void @_ZNSt6vectorImSaImEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #7
  %27 = getelementptr inbounds i8, ptr %1, i64 48
  %28 = load i64, ptr %27, align 8, !tbaa !8
  %29 = getelementptr inbounds i8, ptr %0, i64 112
  store i64 %28, ptr %29, align 8, !tbaa !18
  %30 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(24) %1)
          to label %31 unwind label %41

31:                                               ; preds = %20
  %32 = getelementptr inbounds i8, ptr %1, i64 24
  %33 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %34 unwind label %41

34:                                               ; preds = %31
  %35 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %.preheader48 unwind label %41

.preheader48:                                     ; preds = %34
  %36 = load i64, ptr %29, align 8, !tbaa !18
  %.not54 = icmp eq i64 %36, 0
  br i1 %.not54, label %._crit_edge.thread, label %.lr.ph

.preheader:                                       ; preds = %49
  switch i64 %51, label %.lr.ph52.peel.next [
    i64 0, label %._crit_edge.thread
    i64 1, label %._crit_edge
  ]

37:                                               ; preds = %2
  %38 = landingpad { ptr, i32 }
          cleanup
  br label %148

39:                                               ; preds = %18
  %40 = landingpad { ptr, i32 }
          cleanup
  br label %147

41:                                               ; preds = %34, %31, %20
  %42 = landingpad { ptr, i32 }
          cleanup
  br label %146

.lr.ph:                                           ; preds = %.preheader48, %49
  %.03449 = phi i64 [ %50, %49 ], [ 0, %.preheader48 ]
  %43 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.03449) #7
  %44 = load i64, ptr %43, align 8, !tbaa !22
  %45 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %22, i64 noundef %44) #7
  store i64 %.03449, ptr %45, align 8, !tbaa !22
  %46 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.03449) #7
  %47 = load i64, ptr %46, align 8, !tbaa !22
  %48 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %47) #7
  invoke void @_ZNSt6vectorImSaImEE9push_backERKm(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(8) %48)
          to label %49 unwind label %53

49:                                               ; preds = %.lr.ph
  %50 = add nuw i64 %.03449, 1
  %51 = load i64, ptr %29, align 8, !tbaa !18
  %52 = icmp ult i64 %50, %51
  br i1 %52, label %.lr.ph, label %.preheader, !llvm.loop !23

53:                                               ; preds = %.lr.ph
  %54 = landingpad { ptr, i32 }
          cleanup
  br label %146

._crit_edge:                                      ; preds = %.lr.ph52.peel.next, %.preheader
  %.032.lcssa = phi i64 [ %51, %.preheader ], [ %spec.select, %.lr.ph52.peel.next ]
  %.lcssa = phi i64 [ %51, %.preheader ], [ %63, %.lr.ph52.peel.next ]
  %.not = icmp eq i64 %.032.lcssa, %.lcssa
  br i1 %.not, label %._crit_edge.thread, label %65

.lr.ph52.peel.next:                               ; preds = %.preheader, %.lr.ph52.peel.next
  %.03151 = phi i64 [ %62, %.lr.ph52.peel.next ], [ 1, %.preheader ]
  %.03250 = phi i64 [ %spec.select, %.lr.ph52.peel.next ], [ 1, %.preheader ]
  %55 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %.03151) #7
  %56 = load i64, ptr %55, align 8, !tbaa !22
  %57 = add i64 %.03151, -1
  %58 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef %57) #7
  %59 = load i64, ptr %58, align 8, !tbaa !22
  %60 = add i64 %59, 1
  %.not43 = icmp ne i64 %56, %60
  %61 = zext i1 %.not43 to i64
  %spec.select = add i64 %.03250, %61
  %62 = add nuw i64 %.03151, 1
  %63 = load i64, ptr %29, align 8, !tbaa !18
  %64 = icmp ult i64 %62, %63
  br i1 %64, label %.lr.ph52.peel.next, label %._crit_edge, !llvm.loop !25

65:                                               ; preds = %._crit_edge
  store i64 %.032.lcssa, ptr %29, align 8, !tbaa !18
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %3) #7
  invoke void @_ZNSt6vectorImSaImEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %24)
          to label %66 unwind label %77

66:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %4) #7
  invoke void @_ZN4Simd4Base12CompactShapeERKSt6vectorImSaImEES5_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %4, ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %67 unwind label %79

67:                                               ; preds = %66
  %68 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(24) %4) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %4) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %5) #7
  invoke void @_ZN4Simd4Base12CompactShapeERKSt6vectorImSaImEES5_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %5, ptr noundef nonnull align 8 dereferenceable(24) %3, ptr noundef nonnull align 8 dereferenceable(24) %22)
          to label %69 unwind label %81

69:                                               ; preds = %67
  %70 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %5) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %6) #7
  invoke void @_ZNSt6vectorImSaImEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %7, ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %71 unwind label %83

71:                                               ; preds = %69
  invoke void @_ZN4Simd4Base12CompactOrderESt6vectorImSaImEE(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %6, ptr noundef nonnull %7)
          to label %72 unwind label %85

72:                                               ; preds = %71
  %73 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %25, ptr noundef nonnull align 8 dereferenceable(24) %6) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %6) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %8) #7
  invoke void @_ZNSt6vectorImSaImEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(24) %22)
          to label %74 unwind label %88

74:                                               ; preds = %72
  invoke void @_ZN4Simd4Base12CompactOrderESt6vectorImSaImEE(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %8, ptr noundef nonnull %9)
          to label %75 unwind label %90

75:                                               ; preds = %74
  %76 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %22, ptr noundef nonnull align 8 dereferenceable(24) %8) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %8) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #7
  br label %._crit_edge.thread

77:                                               ; preds = %65
  %78 = landingpad { ptr, i32 }
          cleanup
  br label %94

79:                                               ; preds = %66
  %80 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %4) #7
  br label %93

81:                                               ; preds = %67
  %82 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %5) #7
  br label %93

83:                                               ; preds = %69
  %84 = landingpad { ptr, i32 }
          cleanup
  br label %87

85:                                               ; preds = %71
  %86 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7) #7
  br label %87

87:                                               ; preds = %85, %83
  %.pn = phi { ptr, i32 } [ %86, %85 ], [ %84, %83 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %6) #7
  br label %93

88:                                               ; preds = %72
  %89 = landingpad { ptr, i32 }
          cleanup
  br label %92

90:                                               ; preds = %74
  %91 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #7
  br label %92

92:                                               ; preds = %90, %88
  %.pn37 = phi { ptr, i32 } [ %91, %90 ], [ %89, %88 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %8) #7
  br label %93

93:                                               ; preds = %92, %87, %81, %79
  %.pn37.pn = phi { ptr, i32 } [ %.pn37, %92 ], [ %.pn, %87 ], [ %82, %81 ], [ %80, %79 ]
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %3) #7
  br label %94

94:                                               ; preds = %93, %77
  %.pn37.pn.pn = phi { ptr, i32 } [ %.pn37.pn, %93 ], [ %78, %77 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %3) #7
  br label %146

._crit_edge.thread:                               ; preds = %.preheader, %.preheader48, %75, %._crit_edge
  %95 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %25, i64 noundef 0) #7
  %96 = load i64, ptr %95, align 8, !tbaa !22
  %97 = icmp eq i64 %96, 0
  br i1 %97, label %98, label %128

98:                                               ; preds = %._crit_edge.thread
  %99 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %24, i64 noundef 0) #7
  %100 = load i64, ptr %99, align 8, !tbaa !22
  %101 = getelementptr inbounds i8, ptr %0, i64 96
  store i64 %100, ptr %101, align 8, !tbaa !27
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %10) #7
  invoke void @_ZN4Simd4Base6StrideERKSt6vectorImSaImEES5_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %10, ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %102 unwind label %120

102:                                              ; preds = %98
  %103 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorImSaImEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %10, i64 noundef 0) #7
  %104 = load i64, ptr %103, align 8, !tbaa !22
  %105 = call noundef i64 @_ZNK4Simd4Base12PermuteParam9PixelSizeEv(ptr noundef nonnull align 8 dereferenceable(68) %1)
  %106 = mul i64 %105, %104
  %107 = getelementptr inbounds i8, ptr %0, i64 104
  store i64 %106, ptr %107, align 8, !tbaa !28
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %10) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  %108 = call ptr @_ZNSt6vectorImSaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %21) #7
  store ptr %108, ptr %12, align 8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEC2IPmvEERKNS0_IT_S5_EE(ptr noundef nonnull align 8 dereferenceable(8) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #7
  %109 = load ptr, ptr %11, align 8
  %110 = invoke ptr @_ZNSt6vectorImSaImEE5eraseEN9__gnu_cxx17__normal_iteratorIPKmS1_EE(ptr noundef nonnull align 8 dereferenceable(24) %21, ptr %109)
          to label %111 unwind label %122

111:                                              ; preds = %102
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  %112 = call ptr @_ZNSt6vectorImSaImEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #7
  store ptr %112, ptr %14, align 8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKmSt6vectorImSaImEEEC2IPmvEERKNS0_IT_S5_EE(ptr noundef nonnull align 8 dereferenceable(8) %13, ptr noundef nonnull align 8 dereferenceable(8) %14) #7
  %113 = load ptr, ptr %13, align 8
  %114 = invoke ptr @_ZNSt6vectorImSaImEE5eraseEN9__gnu_cxx17__normal_iteratorIPKmS1_EE(ptr noundef nonnull align 8 dereferenceable(24) %24, ptr %113)
          to label %115 unwind label %124

115:                                              ; preds = %111
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  invoke void @_ZN4Simd4Base10EraseBatchERSt6vectorImSaImEE(ptr noundef nonnull align 8 dereferenceable(24) %22)
          to label %116 unwind label %126

116:                                              ; preds = %115
  invoke void @_ZN4Simd4Base10EraseBatchERSt6vectorImSaImEE(ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %117 unwind label %126

117:                                              ; preds = %116
  %118 = load i64, ptr %29, align 8, !tbaa !18
  %119 = add i64 %118, -1
  store i64 %119, ptr %29, align 8, !tbaa !18
  br label %131

120:                                              ; preds = %98
  %121 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %10) #7
  br label %146

122:                                              ; preds = %102
  %123 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  br label %146

124:                                              ; preds = %111
  %125 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  br label %146

126:                                              ; preds = %134, %116, %115
  %127 = landingpad { ptr, i32 }
          cleanup
  br label %146

128:                                              ; preds = %._crit_edge.thread
  %129 = getelementptr inbounds i8, ptr %0, i64 96
  store i64 1, ptr %129, align 8, !tbaa !27
  %130 = getelementptr inbounds i8, ptr %0, i64 104
  store i64 0, ptr %130, align 8, !tbaa !28
  br label %131

131:                                              ; preds = %128, %117
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #7
  invoke void @_ZN4Simd4Base6StrideERKSt6vectorImSaImEES5_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %15, ptr noundef nonnull align 8 dereferenceable(24) %21, ptr noundef nonnull align 8 dereferenceable(24) %22)
          to label %132 unwind label %142

132:                                              ; preds = %131
  %133 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %23, ptr noundef nonnull align 8 dereferenceable(24) %15) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #7
  invoke void @_ZN4Simd4Base6StrideERKSt6vectorImSaImEES5_(ptr dead_on_unwind nonnull writable sret(%"class.std::vector") align 8 %16, ptr noundef nonnull align 8 dereferenceable(24) %24, ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %134 unwind label %144

134:                                              ; preds = %132
  %135 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNSt6vectorImSaImEEaSEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %26, ptr noundef nonnull align 8 dereferenceable(24) %16) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %16) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #7
  %136 = getelementptr inbounds i8, ptr %1, i64 64
  %137 = load i32, ptr %136, align 8, !tbaa !29
  %138 = load i64, ptr %29, align 8, !tbaa !18
  %139 = invoke noundef ptr @_ZN4Simd4BaseL10GetPermuteE18SimdTensorDataTypem(i32 noundef %137, i64 noundef %138)
          to label %140 unwind label %126

140:                                              ; preds = %134
  %141 = getelementptr inbounds i8, ptr %0, i64 264
  store ptr %139, ptr %141, align 8, !tbaa !30
  ret void

142:                                              ; preds = %131
  %143 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #7
  br label %146

144:                                              ; preds = %132
  %145 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #7
  br label %146

146:                                              ; preds = %94, %120, %122, %124, %126, %142, %144, %53, %41
  %.pn44 = phi { ptr, i32 } [ %54, %53 ], [ %42, %41 ], [ %127, %126 ], [ %145, %144 ], [ %143, %142 ], [ %125, %124 ], [ %123, %122 ], [ %121, %120 ], [ %.pn37.pn.pn, %94 ]
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %25) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %23) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %22) #7
  call void @_ZNSt6vectorImSaImEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %21) #7
  call void @_ZN4Simd5ArrayIiED2Ev(ptr noundef nonnull align 8 dereferenceable(16) %19) #7
  br label %147

147:                                              ; preds = %146, %39
  %.pn44.pn = phi { ptr, i32 } [ %.pn44, %146 ], [ %40, %39 ]
  call void @_ZN4Simd4Base12PermuteParamD2Ev(ptr noundef nonnull align 8 dereferenceable(68) %17) #7
  br label %148

148:                                              ; preds = %147, %37
  %.pn44.pn.pn = phi { ptr, i32 } [ %.pn44.pn, %147 ], [ %38, %37 ]
  call void @_ZN4Simd9DeletableD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %0) #7
  resume { ptr, i32 } %.pn44.pn.pn
}

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN4Simd4Base12PermuteParamC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(68), ptr noundef nonnull align 8 dereferenceable(68)) unnamed_addr #2 align 2

declare i32 @__gxx_personality_v0(...)

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd5ArrayIiEC2Embm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i1 noundef zeroext, i64 noundef) unnamed_addr #3 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorImSaImEE9push_backERKm(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #0 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorImSaImEEC2ERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #0 align 2

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd4Base12CompactShapeERKSt6vectorImSaImEES5_(ptr dead_on_unwind noalias writable sret(%"class.std::vector") align 8, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd4Base12CompactOrderESt6vectorImSaImEE(ptr dead_on_unwind noalias writable sret(%"class.std::vector") align 8, ptr noundef) local_unnamed_addr #3

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd4Base6StrideERKSt6vectorImSaImEES5_(ptr dead_on_unwind noalias writable sret(%"class.std::vector") align 8, ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK4Simd4Base12PermuteParam9PixelSizeEv(ptr noundef nonnull align 8 dereferenceable(68)) local_unnamed_addr #6 align 2

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

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

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

; Function Attrs: alwaysinline mustprogress uwtable
declare dso_local void @_ZN4Simd4Base10EraseBatchERSt6vectorImSaImEE(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare hidden noundef ptr @_ZN4Simd4BaseL10GetPermuteE18SimdTensorDataTypem(i32 noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN4Simd5ArrayIiED2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #6 align 2

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"vtable pointer", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !16, i64 48}
!9 = !{!"_ZTSN4Simd4Base12PermuteParamE", !10, i64 0, !10, i64 24, !16, i64 48, !16, i64 56, !17, i64 64}
!10 = !{!"_ZTSSt6vectorImSaImEE", !11, i64 0}
!11 = !{!"_ZTSSt12_Vector_baseImSaImEE", !12, i64 0}
!12 = !{!"_ZTSNSt12_Vector_baseImSaImEE12_Vector_implE", !13, i64 0}
!13 = !{!"_ZTSNSt12_Vector_baseImSaImEE17_Vector_impl_dataE", !14, i64 0, !14, i64 8, !14, i64 16}
!14 = !{!"any pointer", !15, i64 0}
!15 = !{!"omnipotent char", !7, i64 0}
!16 = !{!"long", !15, i64 0}
!17 = !{!"_ZTS18SimdTensorDataType", !15, i64 0}
!18 = !{!19, !16, i64 112}
!19 = !{!"_ZTSN4Simd4Base12SynetPermuteE", !20, i64 0, !9, i64 8, !21, i64 80, !16, i64 96, !16, i64 104, !16, i64 112, !10, i64 120, !10, i64 144, !10, i64 168, !10, i64 192, !10, i64 216, !10, i64 240, !14, i64 264}
!20 = !{!"_ZTSN4Simd9DeletableE"}
!21 = !{!"_ZTSN4Simd5ArrayIiEE", !14, i64 0, !16, i64 8}
!22 = !{!16, !16, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24, !26}
!26 = !{!"llvm.loop.peeled.count", i32 1}
!27 = !{!19, !16, i64 96}
!28 = !{!19, !16, i64 104}
!29 = !{!9, !17, i64 64}
!30 = !{!19, !14, i64 264}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopFullUnrollPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass