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

; 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.RNNParamSpec = type { i32, i32, i32, i32, float, float, i8, float, i32 }

@.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
@.str.2 = external hidden unnamed_addr constant [23 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: 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) #1

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

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

declare i32 @fflush(ptr noundef) #3

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_Z7bytesOf8DataType(i32 noundef) #6

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind noalias writable sret(%struct.TensorDesc) align 4, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #6

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z7rnn_cpu10TensorDescPKvPKS_PS1_jS3_S4_Pf12RNNParamSpecjPvS_S7_4Arch(ptr noundef byval(%struct.TensorDesc) align 8 %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, i32 noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef byval(%struct.RNNParamSpec) align 8 %8, i32 noundef %9, ptr noundef %10, ptr noundef byval(%struct.TensorDesc) align 8 %11, ptr noundef %12, i32 noundef %13) #8 {
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca %struct.TensorDesc, align 8
  %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 ptr, align 8
  %43 = alloca %struct.TensorDesc, align 4
  %44 = alloca %struct.TensorDesc, align 8
  %45 = alloca %struct.TensorDesc, align 8
  %46 = alloca %struct.TensorDesc, align 8
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i8, align 1
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca ptr, align 8
  %54 = alloca ptr, align 8
  %55 = alloca ptr, align 8
  %56 = alloca ptr, align 8
  %57 = alloca i32, align 4
  %58 = alloca [2 x ptr], align 16
  %59 = alloca ptr, align 8
  %60 = alloca %struct.TensorDesc, align 4
  %61 = alloca %struct.TensorDesc, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca [2 x ptr], align 16
  %67 = alloca %struct.TensorDesc, align 4
  %68 = alloca %struct.TensorDesc, align 4
  %69 = alloca %struct.TensorDesc, align 4
  %70 = alloca i32, align 4
  %71 = alloca ptr, align 8
  %72 = alloca %struct.TensorDesc, align 4
  %73 = alloca %struct.TensorDesc, align 4
  %74 = alloca %struct.TensorDesc, align 4
  %75 = alloca %struct.TensorDesc, align 4
  %76 = alloca i32, align 4
  %77 = alloca %struct.TensorDesc, align 8
  %78 = alloca %struct.TensorDesc, align 8
  %79 = alloca %struct.TensorDesc, align 8
  %80 = alloca i32, align 4
  %81 = alloca [2 x ptr], align 16
  %82 = alloca %struct.TensorDesc, align 4
  %83 = alloca i32, align 4
  %84 = alloca ptr, align 8
  %85 = alloca i32, align 4
  %86 = alloca %struct.TensorDesc, align 8
  %87 = alloca %struct.RNNParamSpec, align 8
  %88 = alloca %struct.TensorDesc, align 8
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  %91 = alloca i32, align 4
  %92 = alloca i32, align 4
  %93 = alloca i32, align 4
  %94 = alloca ptr, align 8
  %95 = alloca i32, align 4
  %96 = alloca %struct.TensorDesc, align 8
  %97 = alloca %struct.TensorDesc, align 8
  %98 = alloca %struct.TensorDesc, align 8
  %99 = alloca i32, align 4
  %100 = alloca i32, align 4
  %101 = alloca ptr, align 8
  %102 = alloca i32, align 4
  %103 = alloca %struct.TensorDesc, align 8
  %104 = alloca %struct.RNNParamSpec, align 8
  %105 = alloca %struct.TensorDesc, align 8
  %106 = alloca i32, align 4
  store ptr %1, ptr %15, align 8, !tbaa !5
  store ptr %2, ptr %16, align 8, !tbaa !5
  store ptr %3, ptr %17, align 8, !tbaa !5
  store i32 %4, ptr %18, align 4, !tbaa !9
  store ptr %5, ptr %19, align 8, !tbaa !5
  store ptr %6, ptr %20, align 8, !tbaa !5
  store ptr %7, ptr %21, align 8, !tbaa !5
  store i32 %9, ptr %22, align 4, !tbaa !9
  store ptr %10, ptr %23, align 8, !tbaa !5
  store ptr %12, ptr %24, align 8, !tbaa !5
  store i32 %13, ptr %25, align 4, !tbaa !11
  %107 = load ptr, ptr %15, align 8, !tbaa !5
  %108 = icmp eq ptr null, %107
  br i1 %108, label %121, label %109

109:                                              ; preds = %14
  %110 = load ptr, ptr %17, align 8, !tbaa !5
  %111 = icmp eq ptr null, %110
  br i1 %111, label %121, label %112

112:                                              ; preds = %109
  %113 = load ptr, ptr %20, align 8, !tbaa !5
  %114 = icmp eq ptr null, %113
  br i1 %114, label %121, label %115

115:                                              ; preds = %112
  %116 = load ptr, ptr %23, align 8, !tbaa !5
  %117 = icmp eq ptr null, %116
  br i1 %117, label %121, label %118

118:                                              ; preds = %115
  %119 = load ptr, ptr %24, align 8, !tbaa !5
  %120 = icmp eq ptr null, %119
  br i1 %120, label %121, label %137

121:                                              ; preds = %118, %115, %112, %109, %14
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #10
  store i32 1, ptr %26, align 4, !tbaa !13
  %122 = load i32, ptr %26, align 4, !tbaa !13
  %123 = icmp ne i32 %122, 0
  br i1 %123, label %124, label %136

124:                                              ; preds = %121
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #10
  %125 = call i64 (i64, ...) @syscall(i64 noundef 186) #10
  %126 = trunc i64 %125 to i32
  store i32 %126, ptr %27, align 4, !tbaa !9
  %127 = load i32, ptr %27, align 4, !tbaa !9
  %128 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %127)
  %129 = load ptr, ptr @stdout, align 8, !tbaa !5
  %130 = call i32 @fflush(ptr noundef %129)
  %131 = load i32, ptr %26, align 4, !tbaa !13
  %132 = call ptr @ee2str(i32 noundef %131)
  %133 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef %132)
  %134 = load ptr, ptr @stdout, align 8, !tbaa !5
  %135 = call i32 @fflush(ptr noundef %134)
  call void @exit(i32 noundef 1) #11
  unreachable

136:                                              ; preds = %121
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #10
  br label %137

137:                                              ; preds = %136, %118
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #10
  %138 = getelementptr inbounds %struct.RNNParamSpec, ptr %8, i32 0, i32 6
  %139 = load i8, ptr %138, align 8, !tbaa !15, !range !21, !noundef !22
  %140 = trunc i8 %139 to i1
  %141 = zext i1 %140 to i64
  %142 = select i1 %140, i32 2, i32 1
  store i32 %142, ptr %32, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #10
  %143 = load ptr, ptr %16, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.TensorDesc, ptr %143, i64 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %34, ptr align 4 %144, i64 92, i1 false), !tbaa.struct !23
  %145 = call noundef i32 @_Z11tensor2dGet10TensorDescP8DataTypeP10DataFormatPjS4_(ptr noundef byval(%struct.TensorDesc) align 8 %34, ptr noundef %28, ptr noundef %29, ptr noundef %31, ptr noundef %30)
  store i32 %145, ptr %33, align 4, !tbaa !13
  %146 = load i32, ptr %33, align 4, !tbaa !13
  %147 = icmp ne i32 %146, 0
  br i1 %147, label %148, label %160

148:                                              ; preds = %137
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #10
  %149 = call i64 (i64, ...) @syscall(i64 noundef 186) #10
  %150 = trunc i64 %149 to i32
  store i32 %150, ptr %35, align 4, !tbaa !9
  %151 = load i32, ptr %35, align 4, !tbaa !9
  %152 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %151)
  %153 = load ptr, ptr @stdout, align 8, !tbaa !5
  %154 = call i32 @fflush(ptr noundef %153)
  %155 = load i32, ptr %33, align 4, !tbaa !13
  %156 = call ptr @ee2str(i32 noundef %155)
  %157 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef %156)
  %158 = load ptr, ptr @stdout, align 8, !tbaa !5
  %159 = call i32 @fflush(ptr noundef %158)
  call void @exit(i32 noundef 1) #11
  unreachable

160:                                              ; preds = %137
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #10
  %161 = getelementptr inbounds %struct.TensorDesc, ptr %0, i32 0, i32 0
  %162 = load i32, ptr %161, align 8, !tbaa !29
  store i32 %162, ptr %36, align 4, !tbaa !24
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #10
  %163 = getelementptr inbounds %struct.TensorDesc, ptr %0, i32 0, i32 1
  %164 = load i32, ptr %163, align 4, !tbaa !31
  store i32 %164, ptr %37, align 4, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #10
  %165 = getelementptr inbounds %struct.TensorDesc, ptr %0, i32 0, i32 3
  %166 = getelementptr inbounds %struct.TensorDesc, ptr %0, i32 0, i32 2
  %167 = load i32, ptr %166, align 8, !tbaa !32
  %168 = sub i32 %167, 1
  %169 = zext i32 %168 to i64
  %170 = getelementptr inbounds [20 x i32], ptr %165, i64 0, i64 %169
  %171 = load i32, ptr %170, align 4, !tbaa !9
  store i32 %171, ptr %38, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #10
  %172 = getelementptr inbounds %struct.TensorDesc, ptr %0, i32 0, i32 3
  %173 = getelementptr inbounds %struct.TensorDesc, ptr %0, i32 0, i32 2
  %174 = load i32, ptr %173, align 8, !tbaa !32
  %175 = sub i32 %174, 2
  %176 = zext i32 %175 to i64
  %177 = getelementptr inbounds [20 x i32], ptr %172, i64 0, i64 %176
  %178 = load i32, ptr %177, align 4, !tbaa !9
  store i32 %178, ptr %39, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #10
  %179 = getelementptr inbounds %struct.TensorDesc, ptr %0, i32 0, i32 3
  %180 = getelementptr inbounds %struct.TensorDesc, ptr %0, i32 0, i32 2
  %181 = load i32, ptr %180, align 8, !tbaa !32
  %182 = sub i32 %181, 3
  %183 = zext i32 %182 to i64
  %184 = getelementptr inbounds [20 x i32], ptr %179, i64 0, i64 %183
  %185 = load i32, ptr %184, align 4, !tbaa !9
  store i32 %185, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #10
  store i32 0, ptr %41, align 4, !tbaa !9
  br label %186

186:                                              ; preds = %201, %160
  %187 = load i32, ptr %41, align 4, !tbaa !9
  %188 = getelementptr inbounds %struct.TensorDesc, ptr %0, i32 0, i32 2
  %189 = load i32, ptr %188, align 8, !tbaa !32
  %190 = sub i32 %189, 3
  %191 = icmp ult i32 %187, %190
  br i1 %191, label %193, label %192

192:                                              ; preds = %186
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #10
  br label %204

193:                                              ; preds = %186
  %194 = getelementptr inbounds %struct.TensorDesc, ptr %0, i32 0, i32 3
  %195 = load i32, ptr %41, align 4, !tbaa !9
  %196 = zext i32 %195 to i64
  %197 = getelementptr inbounds [20 x i32], ptr %194, i64 0, i64 %196
  %198 = load i32, ptr %197, align 4, !tbaa !9
  %199 = load i32, ptr %40, align 4, !tbaa !9
  %200 = mul i32 %199, %198
  store i32 %200, ptr %40, align 4, !tbaa !9
  br label %201

201:                                              ; preds = %193
  %202 = load i32, ptr %41, align 4, !tbaa !9
  %203 = add i32 %202, 1
  store i32 %203, ptr %41, align 4, !tbaa !9
  br label %186, !llvm.loop !33

204:                                              ; preds = %192
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #10
  %205 = load ptr, ptr %15, align 8, !tbaa !5
  store ptr %205, ptr %42, align 8, !tbaa !5
  %206 = load i32, ptr %37, align 4, !tbaa !26
  %207 = icmp eq i32 %206, 2
  br i1 %207, label %208, label %218

208:                                              ; preds = %204
  call void @llvm.lifetime.start.p0(i64 92, ptr %43) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %43, ptr align 8 %0, i64 92, i1 false), !tbaa.struct !23
  %209 = getelementptr inbounds %struct.TensorDesc, ptr %43, i32 0, i32 1
  store i32 0, ptr %209, align 4, !tbaa !31
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %44, ptr align 8 %0, i64 92, i1 false), !tbaa.struct !23
  %210 = load ptr, ptr %15, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %45, ptr align 4 %43, i64 92, i1 false), !tbaa.struct !23
  %211 = load ptr, ptr %23, align 8, !tbaa !5
  %212 = call noundef i32 @_Z15transformToNCHW10TensorDescPKvS_Pv(ptr noundef byval(%struct.TensorDesc) align 8 %44, ptr noundef %210, ptr noundef byval(%struct.TensorDesc) align 8 %45, ptr noundef %211)
  %213 = load ptr, ptr %23, align 8, !tbaa !5
  store ptr %213, ptr %42, align 8, !tbaa !5
  %214 = load ptr, ptr %23, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %46, ptr align 4 %43, i64 92, i1 false), !tbaa.struct !23
  %215 = call noundef i32 @_Z14tensorNumBytes10TensorDesc(ptr noundef byval(%struct.TensorDesc) align 8 %46)
  %216 = zext i32 %215 to i64
  %217 = getelementptr inbounds i8, ptr %214, i64 %216
  store ptr %217, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 92, ptr %43) #10
  br label %218

218:                                              ; preds = %208, %204
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #10
  %219 = getelementptr inbounds %struct.RNNParamSpec, ptr %8, i32 0, i32 1
  %220 = load i32, ptr %219, align 4, !tbaa !35
  store i32 %220, ptr %47, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #10
  %221 = getelementptr inbounds %struct.RNNParamSpec, ptr %8, i32 0, i32 3
  %222 = load i32, ptr %221, align 4, !tbaa !36
  %223 = icmp sgt i32 %222, 0
  br i1 %223, label %224, label %227

224:                                              ; preds = %218
  %225 = getelementptr inbounds %struct.RNNParamSpec, ptr %8, i32 0, i32 3
  %226 = load i32, ptr %225, align 4, !tbaa !36
  br label %230

227:                                              ; preds = %218
  %228 = getelementptr inbounds %struct.RNNParamSpec, ptr %8, i32 0, i32 1
  %229 = load i32, ptr %228, align 4, !tbaa !35
  br label %230

230:                                              ; preds = %227, %224
  %231 = phi i32 [ %226, %224 ], [ %229, %227 ]
  store i32 %231, ptr %48, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %49) #10
  %232 = load i32, ptr %36, align 4, !tbaa !24
  %233 = call noundef i32 @_Z7bytesOf8DataType(i32 noundef %232)
  %234 = trunc i32 %233 to i8
  store i8 %234, ptr %49, align 1, !tbaa !28
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #10
  %235 = load i32, ptr %39, align 4, !tbaa !9
  %236 = load i32, ptr %40, align 4, !tbaa !9
  %237 = mul i32 %235, %236
  store i32 %237, ptr %50, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #10
  %238 = load i32, ptr %39, align 4, !tbaa !9
  %239 = load i32, ptr %47, align 4, !tbaa !9
  %240 = mul i32 %238, %239
  %241 = load i32, ptr %32, align 4, !tbaa !9
  %242 = mul i32 %240, %241
  store i32 %242, ptr %51, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #10
  store i32 0, ptr %52, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #10
  %243 = load ptr, ptr %42, align 8, !tbaa !5
  store ptr %243, ptr %53, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #10
  %244 = load ptr, ptr %23, align 8, !tbaa !5
  store ptr %244, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #10
  %245 = load ptr, ptr %54, align 8, !tbaa !5
  %246 = load i32, ptr %38, align 4, !tbaa !9
  %247 = load i32, ptr %32, align 4, !tbaa !9
  %248 = mul i32 %246, %247
  %249 = load i32, ptr %48, align 4, !tbaa !9
  %250 = load i32, ptr %47, align 4, !tbaa !9
  %251 = add i32 %249, %250
  %252 = mul i32 %248, %251
  %253 = load i8, ptr %49, align 1, !tbaa !28
  %254 = zext i8 %253 to i32
  %255 = mul i32 %252, %254
  %256 = zext i32 %255 to i64
  %257 = getelementptr inbounds i8, ptr %245, i64 %256
  store ptr %257, ptr %55, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #10
  %258 = load ptr, ptr %55, align 8, !tbaa !5
  %259 = load i32, ptr %38, align 4, !tbaa !9
  %260 = load i32, ptr %39, align 4, !tbaa !9
  %261 = mul i32 %259, %260
  %262 = load i32, ptr %40, align 4, !tbaa !9
  %263 = mul i32 %261, %262
  %264 = load i8, ptr %49, align 1, !tbaa !28
  %265 = zext i8 %264 to i32
  %266 = mul i32 %263, %265
  %267 = zext i32 %266 to i64
  %268 = getelementptr inbounds i8, ptr %258, i64 %267
  store ptr %268, ptr %56, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #10
  %269 = load i32, ptr %31, align 4, !tbaa !9
  %270 = load i32, ptr %47, align 4, !tbaa !9
  %271 = add i32 %269, %270
  %272 = load i8, ptr %49, align 1, !tbaa !28
  %273 = zext i8 %272 to i32
  %274 = mul i32 %271, %273
  store i32 %274, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr %58) #10
  call void @llvm.memset.p0.i64(ptr align 16 %58, i8 0, i64 16, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #10
  %275 = load ptr, ptr %56, align 8, !tbaa !5
  %276 = load i32, ptr %57, align 4, !tbaa !9
  %277 = zext i32 %276 to i64
  %278 = getelementptr inbounds i8, ptr %275, i64 %277
  store ptr %278, ptr %59, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 92, ptr %60) #10
  %279 = load i32, ptr %36, align 4, !tbaa !24
  %280 = load i32, ptr %38, align 4, !tbaa !9
  %281 = load i32, ptr %52, align 4, !tbaa !9
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind writable sret(%struct.TensorDesc) align 4 %60, i32 noundef %279, i32 noundef 14, i32 noundef %280, i32 noundef %281)
  call void @llvm.lifetime.start.p0(i64 92, ptr %61) #10
  %282 = load i32, ptr %36, align 4, !tbaa !24
  %283 = load i32, ptr %38, align 4, !tbaa !9
  %284 = load i32, ptr %47, align 4, !tbaa !9
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind writable sret(%struct.TensorDesc) align 4 %61, i32 noundef %282, i32 noundef 14, i32 noundef %283, i32 noundef %284)
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #10
  %285 = load i32, ptr %31, align 4, !tbaa !9
  %286 = load i8, ptr %49, align 1, !tbaa !28
  %287 = zext i8 %286 to i32
  %288 = mul i32 %285, %287
  store i32 %288, ptr %62, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #10
  store i32 0, ptr %63, align 4, !tbaa !9
  br label %289

289:                                              ; preds = %320, %230
  %290 = load i32, ptr %63, align 4, !tbaa !9
  %291 = load i32, ptr %38, align 4, !tbaa !9
  %292 = icmp ult i32 %290, %291
  br i1 %292, label %294, label %293

293:                                              ; preds = %289
  store i32 5, ptr %64, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #10
  br label %323

294:                                              ; preds = %289
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #10
  store i32 0, ptr %65, align 4, !tbaa !9
  br label %295

295:                                              ; preds = %316, %294
  %296 = load i32, ptr %65, align 4, !tbaa !9
  %297 = load i32, ptr %39, align 4, !tbaa !9
  %298 = icmp ult i32 %296, %297
  br i1 %298, label %300, label %299

299:                                              ; preds = %295
  store i32 8, ptr %64, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #10
  br label %319

300:                                              ; preds = %295
  %301 = load ptr, ptr %59, align 8, !tbaa !5
  %302 = load i32, ptr %63, align 4, !tbaa !9
  %303 = load i32, ptr %39, align 4, !tbaa !9
  %304 = mul i32 %302, %303
  %305 = load i32, ptr %65, align 4, !tbaa !9
  %306 = add i32 %304, %305
  %307 = load i32, ptr %62, align 4, !tbaa !9
  %308 = mul i32 %306, %307
  %309 = zext i32 %308 to i64
  %310 = getelementptr inbounds i8, ptr %301, i64 %309
  %311 = load ptr, ptr %20, align 8, !tbaa !5
  %312 = getelementptr inbounds ptr, ptr %311, i64 0
  %313 = load ptr, ptr %312, align 8, !tbaa !5
  %314 = load i32, ptr %62, align 4, !tbaa !9
  %315 = zext i32 %314 to i64
  call void @_Z10UNI_MEMCPYPvPKvm(ptr noundef %310, ptr noundef %313, i64 noundef %315)
  br label %316

316:                                              ; preds = %300
  %317 = load i32, ptr %65, align 4, !tbaa !9
  %318 = add i32 %317, 1
  store i32 %318, ptr %65, align 4, !tbaa !9
  br label %295, !llvm.loop !37

319:                                              ; preds = %299
  br label %320

320:                                              ; preds = %319
  %321 = load i32, ptr %63, align 4, !tbaa !9
  %322 = add i32 %321, 1
  store i32 %322, ptr %63, align 4, !tbaa !9
  br label %289, !llvm.loop !38

323:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 16, ptr %66) #10
  %324 = load ptr, ptr %17, align 8, !tbaa !5
  %325 = getelementptr inbounds ptr, ptr %324, i64 0
  %326 = load ptr, ptr %325, align 8, !tbaa !5
  store ptr %326, ptr %66, align 8, !tbaa !5
  %327 = getelementptr inbounds ptr, ptr %66, i64 1
  store ptr null, ptr %327, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 92, ptr %67) #10
  call void @_ZN10TensorDescC2Ev(ptr noundef nonnull align 4 dereferenceable(92) %67) #10
  call void @llvm.lifetime.start.p0(i64 92, ptr %68) #10
  call void @_ZN10TensorDescC2Ev(ptr noundef nonnull align 4 dereferenceable(92) %68) #10
  call void @llvm.lifetime.start.p0(i64 92, ptr %69) #10
  call void @_ZN10TensorDescC2Ev(ptr noundef nonnull align 4 dereferenceable(92) %69) #10
  %328 = load i32, ptr %52, align 4, !tbaa !9
  %329 = icmp ne i32 %328, 0
  br i1 %329, label %409, label %330

330:                                              ; preds = %323
  %331 = load i32, ptr %29, align 4, !tbaa !26
  %332 = icmp eq i32 %331, 40
  br i1 %332, label %343, label %333

333:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #10
  %334 = call i64 (i64, ...) @syscall(i64 noundef 186) #10
  %335 = trunc i64 %334 to i32
  store i32 %335, ptr %70, align 4, !tbaa !9
  %336 = load i32, ptr %70, align 4, !tbaa !9
  %337 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %336)
  %338 = load ptr, ptr @stdout, align 8, !tbaa !5
  %339 = call i32 @fflush(ptr noundef %338)
  %340 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  %341 = load ptr, ptr @stdout, align 8, !tbaa !5
  %342 = call i32 @fflush(ptr noundef %341)
  call void @exit(i32 noundef 1) #11
  unreachable

343:                                              ; preds = %330
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #10
  %344 = load ptr, ptr %17, align 8, !tbaa !5
  %345 = getelementptr inbounds ptr, ptr %344, i64 0
  %346 = load ptr, ptr %345, align 8, !tbaa !5
  store ptr %346, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 92, ptr %72) #10
  %347 = load i32, ptr %36, align 4, !tbaa !24
  %348 = load i32, ptr %38, align 4, !tbaa !9
  %349 = load i32, ptr %39, align 4, !tbaa !9
  %350 = mul i32 %348, %349
  %351 = load i32, ptr %40, align 4, !tbaa !9
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind writable sret(%struct.TensorDesc) align 4 %72, i32 noundef %347, i32 noundef 14, i32 noundef %350, i32 noundef %351)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %67, ptr align 4 %72, i64 92, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 92, ptr %72) #10
  call void @llvm.lifetime.start.p0(i64 92, ptr %73) #10
  %352 = load i32, ptr %36, align 4, !tbaa !24
  %353 = load i32, ptr %38, align 4, !tbaa !9
  %354 = load i32, ptr %39, align 4, !tbaa !9
  %355 = mul i32 %353, %354
  %356 = load i32, ptr %31, align 4, !tbaa !9
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind writable sret(%struct.TensorDesc) align 4 %73, i32 noundef %352, i32 noundef 14, i32 noundef %355, i32 noundef %356)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %69, ptr align 4 %73, i64 92, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 92, ptr %73) #10
  %357 = load i32, ptr %25, align 4, !tbaa !11
  %358 = icmp eq i32 %357, 1
  br i1 %358, label %359, label %363

359:                                              ; preds = %343
  call void @llvm.lifetime.start.p0(i64 92, ptr %74) #10
  %360 = load i32, ptr %28, align 4, !tbaa !24
  %361 = load i32, ptr %31, align 4, !tbaa !9
  %362 = load i32, ptr %40, align 4, !tbaa !9
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind writable sret(%struct.TensorDesc) align 4 %74, i32 noundef %360, i32 noundef 13, i32 noundef %361, i32 noundef %362)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %68, ptr align 4 %74, i64 92, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 92, ptr %74) #10
  br label %369

363:                                              ; preds = %343
  call void @llvm.lifetime.start.p0(i64 92, ptr %75) #10
  %364 = load i32, ptr %28, align 4, !tbaa !24
  %365 = load i32, ptr %28, align 4, !tbaa !24
  %366 = call i32 @matrix_matrix_multiply_rhs_format(i32 noundef %365)
  %367 = load i32, ptr %40, align 4, !tbaa !9
  %368 = load i32, ptr %31, align 4, !tbaa !9
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind writable sret(%struct.TensorDesc) align 4 %75, i32 noundef %364, i32 noundef %366, i32 noundef %367, i32 noundef %368)
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %68, ptr align 4 %75, i64 92, i1 false), !tbaa.struct !23
  call void @llvm.lifetime.end.p0(i64 92, ptr %75) #10
  br label %369

369:                                              ; preds = %363, %359
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %77, ptr align 4 %67, i64 92, i1 false), !tbaa.struct !23
  %370 = load ptr, ptr %53, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %78, ptr align 4 %68, i64 92, i1 false), !tbaa.struct !23
  %371 = load ptr, ptr %71, align 8, !tbaa !5
  %372 = load i32, ptr %38, align 4, !tbaa !9
  %373 = load i32, ptr %39, align 4, !tbaa !9
  %374 = mul i32 %372, %373
  %375 = load i32, ptr %40, align 4, !tbaa !9
  %376 = mul i32 %374, %375
  %377 = load i8, ptr %49, align 1, !tbaa !28
  %378 = zext i8 %377 to i32
  %379 = mul i32 %376, %378
  %380 = load ptr, ptr %55, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %79, ptr align 4 %69, i64 92, i1 false), !tbaa.struct !23
  %381 = load ptr, ptr %59, align 8, !tbaa !5
  %382 = load i32, ptr %25, align 4, !tbaa !11
  %383 = call i32 @matrix_matrix_multiply(ptr noundef byval(%struct.TensorDesc) align 8 %77, ptr noundef %370, ptr noundef byval(%struct.TensorDesc) align 8 %78, ptr noundef %371, i32 noundef %379, ptr noundef %380, ptr noundef byval(%struct.TensorDesc) align 8 %79, ptr noundef %381, ptr noundef null, i32 noundef %382)
  store i32 %383, ptr %76, align 4, !tbaa !13
  %384 = load i32, ptr %76, align 4, !tbaa !13
  %385 = icmp ne i32 %384, 0
  br i1 %385, label %386, label %398

386:                                              ; preds = %369
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #10
  %387 = call i64 (i64, ...) @syscall(i64 noundef 186) #10
  %388 = trunc i64 %387 to i32
  store i32 %388, ptr %80, align 4, !tbaa !9
  %389 = load i32, ptr %80, align 4, !tbaa !9
  %390 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %389)
  %391 = load ptr, ptr @stdout, align 8, !tbaa !5
  %392 = call i32 @fflush(ptr noundef %391)
  %393 = load i32, ptr %76, align 4, !tbaa !13
  %394 = call ptr @ee2str(i32 noundef %393)
  %395 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef %394)
  %396 = load ptr, ptr @stdout, align 8, !tbaa !5
  %397 = call i32 @fflush(ptr noundef %396)
  call void @exit(i32 noundef 1) #11
  unreachable

398:                                              ; preds = %369
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #10
  %399 = load ptr, ptr %71, align 8, !tbaa !5
  %400 = load i32, ptr %31, align 4, !tbaa !9
  %401 = load i32, ptr %40, align 4, !tbaa !9
  %402 = mul i32 %400, %401
  %403 = load i8, ptr %49, align 1, !tbaa !28
  %404 = zext i8 %403 to i32
  %405 = mul i32 %402, %404
  %406 = zext i32 %405 to i64
  %407 = getelementptr inbounds i8, ptr %399, i64 %406
  %408 = getelementptr inbounds [2 x ptr], ptr %66, i64 0, i64 0
  store ptr %407, ptr %408, align 16, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #10
  br label %409

409:                                              ; preds = %398, %323
  call void @llvm.lifetime.start.p0(i64 16, ptr %81) #10
  %410 = load ptr, ptr %20, align 8, !tbaa !5
  %411 = getelementptr inbounds ptr, ptr %410, i64 0
  %412 = load ptr, ptr %411, align 8, !tbaa !5
  store ptr %412, ptr %81, align 8, !tbaa !5
  %413 = getelementptr inbounds ptr, ptr %81, i64 1
  store ptr null, ptr %413, align 8, !tbaa !5
  %414 = getelementptr inbounds %struct.RNNParamSpec, ptr %8, i32 0, i32 3
  %415 = load i32, ptr %414, align 4, !tbaa !36
  %416 = icmp sgt i32 %415, 0
  br i1 %416, label %417, label %422

417:                                              ; preds = %409
  %418 = load ptr, ptr %17, align 8, !tbaa !5
  %419 = getelementptr inbounds ptr, ptr %418, i64 1
  %420 = load ptr, ptr %419, align 8, !tbaa !5
  %421 = getelementptr inbounds [2 x ptr], ptr %66, i64 0, i64 1
  store ptr %420, ptr %421, align 8, !tbaa !5
  br label %422

422:                                              ; preds = %417, %409
  %423 = getelementptr inbounds %struct.RNNParamSpec, ptr %8, i32 0, i32 0
  %424 = load i32, ptr %423, align 8, !tbaa !39
  %425 = icmp eq i32 %424, 3
  br i1 %425, label %426, label %431

426:                                              ; preds = %422
  %427 = load ptr, ptr %20, align 8, !tbaa !5
  %428 = getelementptr inbounds ptr, ptr %427, i64 1
  %429 = load ptr, ptr %428, align 8, !tbaa !5
  %430 = getelementptr inbounds [2 x ptr], ptr %81, i64 0, i64 1
  store ptr %429, ptr %430, align 8, !tbaa !5
  br label %431

431:                                              ; preds = %426, %422
  call void @llvm.lifetime.start.p0(i64 92, ptr %82) #10
  %432 = load i32, ptr %28, align 4, !tbaa !24
  %433 = load i32, ptr %31, align 4, !tbaa !9
  %434 = load i32, ptr %47, align 4, !tbaa !9
  %435 = load i32, ptr %52, align 4, !tbaa !9
  %436 = add i32 %434, %435
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind writable sret(%struct.TensorDesc) align 4 %82, i32 noundef %432, i32 noundef 19, i32 noundef %433, i32 noundef %436)
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #10
  store i32 0, ptr %83, align 4, !tbaa !9
  br label %437

437:                                              ; preds = %505, %431
  %438 = load i32, ptr %83, align 4, !tbaa !9
  %439 = load i32, ptr %39, align 4, !tbaa !9
  %440 = icmp ult i32 %438, %439
  br i1 %440, label %442, label %441

441:                                              ; preds = %437
  store i32 11, ptr %64, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #10
  br label %508

442:                                              ; preds = %437
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #10
  %443 = load ptr, ptr %24, align 8, !tbaa !5
  %444 = load i32, ptr %83, align 4, !tbaa !9
  %445 = load i32, ptr %47, align 4, !tbaa !9
  %446 = mul i32 %444, %445
  %447 = load i32, ptr %32, align 4, !tbaa !9
  %448 = mul i32 %446, %447
  %449 = load i8, ptr %49, align 1, !tbaa !28
  %450 = zext i8 %449 to i32
  %451 = mul i32 %448, %450
  %452 = zext i32 %451 to i64
  %453 = getelementptr inbounds i8, ptr %443, i64 %452
  store ptr %453, ptr %84, align 8, !tbaa !5
  %454 = load i32, ptr %52, align 4, !tbaa !9
  %455 = icmp ne i32 %454, 0
  br i1 %455, label %467, label %456

456:                                              ; preds = %442
  %457 = load ptr, ptr %59, align 8, !tbaa !5
  %458 = load i32, ptr %83, align 4, !tbaa !9
  %459 = load i32, ptr %31, align 4, !tbaa !9
  %460 = mul i32 %458, %459
  %461 = load i8, ptr %49, align 1, !tbaa !28
  %462 = zext i8 %461 to i32
  %463 = mul i32 %460, %462
  %464 = zext i32 %463 to i64
  %465 = getelementptr inbounds i8, ptr %457, i64 %464
  %466 = getelementptr inbounds [2 x ptr], ptr %81, i64 0, i64 0
  store ptr %465, ptr %466, align 16, !tbaa !5
  br label %467

467:                                              ; preds = %456, %442
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %86, ptr align 4 %60, i64 92, i1 false), !tbaa.struct !23
  %468 = load ptr, ptr %53, align 8, !tbaa !5
  %469 = load i32, ptr %83, align 4, !tbaa !9
  %470 = load i32, ptr %40, align 4, !tbaa !9
  %471 = mul i32 %469, %470
  %472 = load i8, ptr %49, align 1, !tbaa !28
  %473 = zext i8 %472 to i32
  %474 = mul i32 %471, %473
  %475 = zext i32 %474 to i64
  %476 = getelementptr inbounds i8, ptr %468, i64 %475
  %477 = getelementptr inbounds [2 x ptr], ptr %66, i64 0, i64 0
  %478 = load ptr, ptr %19, align 8, !tbaa !5
  %479 = getelementptr inbounds [2 x ptr], ptr %81, i64 0, i64 0
  %480 = getelementptr inbounds [2 x ptr], ptr %58, i64 0, i64 0
  %481 = load ptr, ptr %480, align 16, !tbaa !5
  %482 = load ptr, ptr %54, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %87, ptr align 8 %8, i64 36, i1 false), !tbaa.struct !40
  %483 = load i32, ptr %50, align 4, !tbaa !9
  %484 = load i32, ptr %51, align 4, !tbaa !9
  %485 = load i32, ptr %22, align 4, !tbaa !9
  %486 = load ptr, ptr %56, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %88, ptr align 4 %61, i64 92, i1 false), !tbaa.struct !23
  %487 = load ptr, ptr %84, align 8, !tbaa !5
  %488 = load i32, ptr %25, align 4, !tbaa !11
  %489 = call noundef i32 @_Z11rnncell_cpu10TensorDescPKvPKS_PS1_S3_S4_PfPv12RNNParamSpecjjjS6_S_S6_4Arch(ptr noundef byval(%struct.TensorDesc) align 8 %86, ptr noundef %476, ptr noundef %82, ptr noundef %477, ptr noundef %478, ptr noundef %479, ptr noundef %481, ptr noundef %482, ptr noundef byval(%struct.RNNParamSpec) align 8 %87, i32 noundef %483, i32 noundef %484, i32 noundef %485, ptr noundef %486, ptr noundef byval(%struct.TensorDesc) align 8 %88, ptr noundef %487, i32 noundef %488)
  store i32 %489, ptr %85, align 4, !tbaa !13
  %490 = load i32, ptr %85, align 4, !tbaa !13
  %491 = icmp ne i32 %490, 0
  br i1 %491, label %492, label %504

492:                                              ; preds = %467
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #10
  %493 = call i64 (i64, ...) @syscall(i64 noundef 186) #10
  %494 = trunc i64 %493 to i32
  store i32 %494, ptr %89, align 4, !tbaa !9
  %495 = load i32, ptr %89, align 4, !tbaa !9
  %496 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %495)
  %497 = load ptr, ptr @stdout, align 8, !tbaa !5
  %498 = call i32 @fflush(ptr noundef %497)
  %499 = load i32, ptr %85, align 4, !tbaa !13
  %500 = call ptr @ee2str(i32 noundef %499)
  %501 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef %500)
  %502 = load ptr, ptr @stdout, align 8, !tbaa !5
  %503 = call i32 @fflush(ptr noundef %502)
  call void @exit(i32 noundef 1) #11
  unreachable

504:                                              ; preds = %467
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #10
  br label %505

505:                                              ; preds = %504
  %506 = load i32, ptr %83, align 4, !tbaa !9
  %507 = add i32 %506, 1
  store i32 %507, ptr %83, align 4, !tbaa !9
  br label %437, !llvm.loop !45

508:                                              ; preds = %441
  %509 = getelementptr inbounds %struct.RNNParamSpec, ptr %8, i32 0, i32 6
  %510 = load i8, ptr %509, align 8, !tbaa !15, !range !21, !noundef !22
  %511 = trunc i8 %510 to i1
  br i1 %511, label %512, label %728

512:                                              ; preds = %508
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #10
  %513 = getelementptr inbounds %struct.RNNParamSpec, ptr %8, i32 0, i32 3
  %514 = load i32, ptr %513, align 4, !tbaa !36
  %515 = icmp sgt i32 %514, 0
  %516 = zext i1 %515 to i64
  %517 = select i1 %515, i32 2, i32 1
  store i32 %517, ptr %90, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #10
  %518 = getelementptr inbounds %struct.RNNParamSpec, ptr %8, i32 0, i32 0
  %519 = load i32, ptr %518, align 8, !tbaa !39
  %520 = icmp eq i32 %519, 3
  %521 = zext i1 %520 to i64
  %522 = select i1 %520, i32 2, i32 1
  store i32 %522, ptr %91, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %92) #10
  store i32 0, ptr %92, align 4, !tbaa !9
  br label %523

523:                                              ; preds = %556, %512
  %524 = load i32, ptr %92, align 4, !tbaa !9
  %525 = load i32, ptr %38, align 4, !tbaa !9
  %526 = icmp ult i32 %524, %525
  br i1 %526, label %528, label %527

527:                                              ; preds = %523
  store i32 14, ptr %64, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %92) #10
  br label %559

528:                                              ; preds = %523
  call void @llvm.lifetime.start.p0(i64 4, ptr %93) #10
  store i32 0, ptr %93, align 4, !tbaa !9
  br label %529

529:                                              ; preds = %552, %528
  %530 = load i32, ptr %93, align 4, !tbaa !9
  %531 = load i32, ptr %39, align 4, !tbaa !9
  %532 = icmp ult i32 %530, %531
  br i1 %532, label %534, label %533

533:                                              ; preds = %529
  store i32 17, ptr %64, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %93) #10
  br label %555

534:                                              ; preds = %529
  %535 = load ptr, ptr %59, align 8, !tbaa !5
  %536 = load i32, ptr %92, align 4, !tbaa !9
  %537 = load i32, ptr %39, align 4, !tbaa !9
  %538 = mul i32 %536, %537
  %539 = load i32, ptr %93, align 4, !tbaa !9
  %540 = add i32 %538, %539
  %541 = load i32, ptr %62, align 4, !tbaa !9
  %542 = mul i32 %540, %541
  %543 = zext i32 %542 to i64
  %544 = getelementptr inbounds i8, ptr %535, i64 %543
  %545 = load ptr, ptr %20, align 8, !tbaa !5
  %546 = load i32, ptr %91, align 4, !tbaa !9
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds ptr, ptr %545, i64 %547
  %549 = load ptr, ptr %548, align 8, !tbaa !5
  %550 = load i32, ptr %62, align 4, !tbaa !9
  %551 = zext i32 %550 to i64
  call void @_Z10UNI_MEMCPYPvPKvm(ptr noundef %544, ptr noundef %549, i64 noundef %551)
  br label %552

552:                                              ; preds = %534
  %553 = load i32, ptr %93, align 4, !tbaa !9
  %554 = add i32 %553, 1
  store i32 %554, ptr %93, align 4, !tbaa !9
  br label %529, !llvm.loop !46

555:                                              ; preds = %533
  br label %556

556:                                              ; preds = %555
  %557 = load i32, ptr %92, align 4, !tbaa !9
  %558 = add i32 %557, 1
  store i32 %558, ptr %92, align 4, !tbaa !9
  br label %523, !llvm.loop !47

559:                                              ; preds = %527
  %560 = load ptr, ptr %20, align 8, !tbaa !5
  %561 = load i32, ptr %91, align 4, !tbaa !9
  %562 = sext i32 %561 to i64
  %563 = getelementptr inbounds ptr, ptr %560, i64 %562
  %564 = load ptr, ptr %563, align 8, !tbaa !5
  %565 = getelementptr inbounds [2 x ptr], ptr %81, i64 0, i64 0
  store ptr %564, ptr %565, align 16, !tbaa !5
  %566 = load ptr, ptr %17, align 8, !tbaa !5
  %567 = load i32, ptr %90, align 4, !tbaa !9
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds ptr, ptr %566, i64 %568
  %570 = load ptr, ptr %569, align 8, !tbaa !5
  %571 = getelementptr inbounds [2 x ptr], ptr %66, i64 0, i64 0
  store ptr %570, ptr %571, align 16, !tbaa !5
  %572 = load i32, ptr %52, align 4, !tbaa !9
  %573 = icmp ne i32 %572, 0
  br i1 %573, label %617, label %574

574:                                              ; preds = %559
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #10
  %575 = load ptr, ptr %17, align 8, !tbaa !5
  %576 = load i32, ptr %90, align 4, !tbaa !9
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds ptr, ptr %575, i64 %577
  %579 = load ptr, ptr %578, align 8, !tbaa !5
  store ptr %579, ptr %94, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %95) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %96, ptr align 4 %67, i64 92, i1 false), !tbaa.struct !23
  %580 = load ptr, ptr %53, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %97, ptr align 4 %68, i64 92, i1 false), !tbaa.struct !23
  %581 = load ptr, ptr %94, align 8, !tbaa !5
  %582 = load i32, ptr %39, align 4, !tbaa !9
  %583 = load i32, ptr %40, align 4, !tbaa !9
  %584 = mul i32 %582, %583
  %585 = load i8, ptr %49, align 1, !tbaa !28
  %586 = zext i8 %585 to i32
  %587 = mul i32 %584, %586
  %588 = load ptr, ptr %55, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %98, ptr align 4 %69, i64 92, i1 false), !tbaa.struct !23
  %589 = load ptr, ptr %59, align 8, !tbaa !5
  %590 = load i32, ptr %25, align 4, !tbaa !11
  %591 = call i32 @matrix_matrix_multiply(ptr noundef byval(%struct.TensorDesc) align 8 %96, ptr noundef %580, ptr noundef byval(%struct.TensorDesc) align 8 %97, ptr noundef %581, i32 noundef %587, ptr noundef %588, ptr noundef byval(%struct.TensorDesc) align 8 %98, ptr noundef %589, ptr noundef null, i32 noundef %590)
  store i32 %591, ptr %95, align 4, !tbaa !13
  %592 = load i32, ptr %95, align 4, !tbaa !13
  %593 = icmp ne i32 %592, 0
  br i1 %593, label %594, label %606

594:                                              ; preds = %574
  call void @llvm.lifetime.start.p0(i64 4, ptr %99) #10
  %595 = call i64 (i64, ...) @syscall(i64 noundef 186) #10
  %596 = trunc i64 %595 to i32
  store i32 %596, ptr %99, align 4, !tbaa !9
  %597 = load i32, ptr %99, align 4, !tbaa !9
  %598 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %597)
  %599 = load ptr, ptr @stdout, align 8, !tbaa !5
  %600 = call i32 @fflush(ptr noundef %599)
  %601 = load i32, ptr %95, align 4, !tbaa !13
  %602 = call ptr @ee2str(i32 noundef %601)
  %603 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef %602)
  %604 = load ptr, ptr @stdout, align 8, !tbaa !5
  %605 = call i32 @fflush(ptr noundef %604)
  call void @exit(i32 noundef 1) #11
  unreachable

606:                                              ; preds = %574
  call void @llvm.lifetime.end.p0(i64 4, ptr %95) #10
  %607 = load ptr, ptr %94, align 8, !tbaa !5
  %608 = load i32, ptr %31, align 4, !tbaa !9
  %609 = load i32, ptr %40, align 4, !tbaa !9
  %610 = mul i32 %608, %609
  %611 = load i8, ptr %49, align 1, !tbaa !28
  %612 = zext i8 %611 to i32
  %613 = mul i32 %610, %612
  %614 = zext i32 %613 to i64
  %615 = getelementptr inbounds i8, ptr %607, i64 %614
  %616 = getelementptr inbounds [2 x ptr], ptr %66, i64 0, i64 0
  store ptr %615, ptr %616, align 16, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #10
  br label %617

617:                                              ; preds = %606, %559
  %618 = getelementptr inbounds %struct.RNNParamSpec, ptr %8, i32 0, i32 3
  %619 = load i32, ptr %618, align 4, !tbaa !36
  %620 = icmp sgt i32 %619, 0
  br i1 %620, label %621, label %629

621:                                              ; preds = %617
  %622 = load ptr, ptr %17, align 8, !tbaa !5
  %623 = load i32, ptr %90, align 4, !tbaa !9
  %624 = add nsw i32 %623, 1
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds ptr, ptr %622, i64 %625
  %627 = load ptr, ptr %626, align 8, !tbaa !5
  %628 = getelementptr inbounds [2 x ptr], ptr %66, i64 0, i64 1
  store ptr %627, ptr %628, align 8, !tbaa !5
  br label %629

629:                                              ; preds = %621, %617
  %630 = getelementptr inbounds %struct.RNNParamSpec, ptr %8, i32 0, i32 0
  %631 = load i32, ptr %630, align 8, !tbaa !39
  %632 = icmp eq i32 %631, 3
  br i1 %632, label %633, label %641

633:                                              ; preds = %629
  %634 = load ptr, ptr %20, align 8, !tbaa !5
  %635 = load i32, ptr %91, align 4, !tbaa !9
  %636 = add nsw i32 %635, 1
  %637 = sext i32 %636 to i64
  %638 = getelementptr inbounds ptr, ptr %634, i64 %637
  %639 = load ptr, ptr %638, align 8, !tbaa !5
  %640 = getelementptr inbounds [2 x ptr], ptr %81, i64 0, i64 1
  store ptr %639, ptr %640, align 8, !tbaa !5
  br label %641

641:                                              ; preds = %633, %629
  %642 = load i32, ptr %38, align 4, !tbaa !9
  %643 = load i32, ptr %48, align 4, !tbaa !9
  %644 = load i32, ptr %47, align 4, !tbaa !9
  %645 = add i32 %643, %644
  %646 = mul i32 %642, %645
  %647 = load i8, ptr %49, align 1, !tbaa !28
  %648 = zext i8 %647 to i32
  %649 = mul i32 %646, %648
  %650 = load ptr, ptr %54, align 8, !tbaa !5
  %651 = zext i32 %649 to i64
  %652 = getelementptr inbounds i8, ptr %650, i64 %651
  store ptr %652, ptr %54, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %100) #10
  %653 = load i32, ptr %39, align 4, !tbaa !9
  %654 = sub i32 %653, 1
  store i32 %654, ptr %100, align 4, !tbaa !9
  br label %655

655:                                              ; preds = %724, %641
  %656 = load i32, ptr %100, align 4, !tbaa !9
  %657 = icmp sge i32 %656, 0
  br i1 %657, label %659, label %658

658:                                              ; preds = %655
  store i32 20, ptr %64, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %100) #10
  br label %727

659:                                              ; preds = %655
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #10
  %660 = load ptr, ptr %24, align 8, !tbaa !5
  %661 = load i32, ptr %100, align 4, !tbaa !9
  %662 = load i32, ptr %47, align 4, !tbaa !9
  %663 = mul i32 %661, %662
  %664 = load i32, ptr %32, align 4, !tbaa !9
  %665 = mul i32 %663, %664
  %666 = load i32, ptr %47, align 4, !tbaa !9
  %667 = add i32 %665, %666
  %668 = load i8, ptr %49, align 1, !tbaa !28
  %669 = zext i8 %668 to i32
  %670 = mul i32 %667, %669
  %671 = zext i32 %670 to i64
  %672 = getelementptr inbounds i8, ptr %660, i64 %671
  store ptr %672, ptr %101, align 8, !tbaa !5
  %673 = load i32, ptr %52, align 4, !tbaa !9
  %674 = icmp ne i32 %673, 0
  br i1 %674, label %686, label %675

675:                                              ; preds = %659
  %676 = load ptr, ptr %59, align 8, !tbaa !5
  %677 = load i32, ptr %100, align 4, !tbaa !9
  %678 = load i32, ptr %31, align 4, !tbaa !9
  %679 = mul i32 %677, %678
  %680 = load i8, ptr %49, align 1, !tbaa !28
  %681 = zext i8 %680 to i32
  %682 = mul i32 %679, %681
  %683 = zext i32 %682 to i64
  %684 = getelementptr inbounds i8, ptr %676, i64 %683
  %685 = getelementptr inbounds [2 x ptr], ptr %81, i64 0, i64 0
  store ptr %684, ptr %685, align 16, !tbaa !5
  br label %686

686:                                              ; preds = %675, %659
  call void @llvm.lifetime.start.p0(i64 4, ptr %102) #10
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %103, ptr align 4 %60, i64 92, i1 false), !tbaa.struct !23
  %687 = load ptr, ptr %53, align 8, !tbaa !5
  %688 = load i32, ptr %100, align 4, !tbaa !9
  %689 = load i32, ptr %40, align 4, !tbaa !9
  %690 = mul i32 %688, %689
  %691 = load i8, ptr %49, align 1, !tbaa !28
  %692 = zext i8 %691 to i32
  %693 = mul i32 %690, %692
  %694 = zext i32 %693 to i64
  %695 = getelementptr inbounds i8, ptr %687, i64 %694
  %696 = getelementptr inbounds [2 x ptr], ptr %66, i64 0, i64 0
  %697 = load ptr, ptr %19, align 8, !tbaa !5
  %698 = getelementptr inbounds [2 x ptr], ptr %81, i64 0, i64 0
  %699 = getelementptr inbounds [2 x ptr], ptr %58, i64 0, i64 1
  %700 = load ptr, ptr %699, align 8, !tbaa !5
  %701 = load ptr, ptr %54, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %104, ptr align 8 %8, i64 36, i1 false), !tbaa.struct !40
  %702 = load i32, ptr %50, align 4, !tbaa !9
  %703 = load i32, ptr %51, align 4, !tbaa !9
  %704 = load i32, ptr %22, align 4, !tbaa !9
  %705 = load ptr, ptr %56, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %105, ptr align 4 %61, i64 92, i1 false), !tbaa.struct !23
  %706 = load ptr, ptr %101, align 8, !tbaa !5
  %707 = load i32, ptr %25, align 4, !tbaa !11
  %708 = call noundef i32 @_Z11rnncell_cpu10TensorDescPKvPKS_PS1_S3_S4_PfPv12RNNParamSpecjjjS6_S_S6_4Arch(ptr noundef byval(%struct.TensorDesc) align 8 %103, ptr noundef %695, ptr noundef %82, ptr noundef %696, ptr noundef %697, ptr noundef %698, ptr noundef %700, ptr noundef %701, ptr noundef byval(%struct.RNNParamSpec) align 8 %104, i32 noundef %702, i32 noundef %703, i32 noundef %704, ptr noundef %705, ptr noundef byval(%struct.TensorDesc) align 8 %105, ptr noundef %706, i32 noundef %707)
  store i32 %708, ptr %102, align 4, !tbaa !13
  %709 = load i32, ptr %102, align 4, !tbaa !13
  %710 = icmp ne i32 %709, 0
  br i1 %710, label %711, label %723

711:                                              ; preds = %686
  call void @llvm.lifetime.start.p0(i64 4, ptr %106) #10
  %712 = call i64 (i64, ...) @syscall(i64 noundef 186) #10
  %713 = trunc i64 %712 to i32
  store i32 %713, ptr %106, align 4, !tbaa !9
  %714 = load i32, ptr %106, align 4, !tbaa !9
  %715 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %714)
  %716 = load ptr, ptr @stdout, align 8, !tbaa !5
  %717 = call i32 @fflush(ptr noundef %716)
  %718 = load i32, ptr %102, align 4, !tbaa !13
  %719 = call ptr @ee2str(i32 noundef %718)
  %720 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, ptr noundef %719)
  %721 = load ptr, ptr @stdout, align 8, !tbaa !5
  %722 = call i32 @fflush(ptr noundef %721)
  call void @exit(i32 noundef 1) #11
  unreachable

723:                                              ; preds = %686
  call void @llvm.lifetime.end.p0(i64 4, ptr %102) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #10
  br label %724

724:                                              ; preds = %723
  %725 = load i32, ptr %100, align 4, !tbaa !9
  %726 = add nsw i32 %725, -1
  store i32 %726, ptr %100, align 4, !tbaa !9
  br label %655, !llvm.loop !48

727:                                              ; preds = %658
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #10
  br label %728

728:                                              ; preds = %727, %508
  store i32 1, ptr %64, align 4
  call void @llvm.lifetime.end.p0(i64 92, ptr %82) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %81) #10
  call void @llvm.lifetime.end.p0(i64 92, ptr %69) #10
  call void @llvm.lifetime.end.p0(i64 92, ptr %68) #10
  call void @llvm.lifetime.end.p0(i64 92, ptr %67) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %66) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #10
  call void @llvm.lifetime.end.p0(i64 92, ptr %61) #10
  call void @llvm.lifetime.end.p0(i64 92, ptr %60) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %58) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %49) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #10
  ret i32 0
}

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z10UNI_MEMCPYPvPKvm(ptr noundef, ptr noundef, i64 noundef) #6

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

declare i32 @matrix_matrix_multiply_rhs_format(i32 noundef) #3

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress 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 = { 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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"_ZTS4Arch", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"_ZTS2EE", !7, i64 0}
!15 = !{!16, !19, i64 24}
!16 = !{!"_ZTS12RNNParamSpec", !17, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !18, i64 16, !18, i64 20, !19, i64 24, !18, i64 28, !20, i64 32}
!17 = !{!"_ZTS7RNNMode", !7, i64 0}
!18 = !{!"float", !7, i64 0}
!19 = !{!"bool", !7, i64 0}
!20 = !{!"_ZTS14ActivationMode", !7, i64 0}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = !{i64 0, i64 4, !24, i64 4, i64 4, !26, i64 8, i64 4, !9, i64 12, i64 80, !28}
!24 = !{!25, !25, i64 0}
!25 = !{!"_ZTS8DataType", !7, i64 0}
!26 = !{!27, !27, i64 0}
!27 = !{!"_ZTS10DataFormat", !7, i64 0}
!28 = !{!7, !7, i64 0}
!29 = !{!30, !25, i64 0}
!30 = !{!"_ZTS10TensorDesc", !25, i64 0, !27, i64 4, !10, i64 8, !7, i64 12}
!31 = !{!30, !27, i64 4}
!32 = !{!30, !10, i64 8}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!16, !10, i64 4}
!36 = !{!16, !10, i64 12}
!37 = distinct !{!37, !34}
!38 = distinct !{!38, !34}
!39 = !{!16, !17, i64 0}
!40 = !{i64 0, i64 4, !41, i64 4, i64 4, !9, i64 8, i64 4, !9, i64 12, i64 4, !9, i64 16, i64 4, !42, i64 20, i64 4, !42, i64 24, i64 1, !43, i64 28, i64 4, !42, i64 32, i64 4, !44}
!41 = !{!17, !17, i64 0}
!42 = !{!18, !18, i64 0}
!43 = !{!19, !19, i64 0}
!44 = !{!20, !20, i64 0}
!45 = distinct !{!45, !34}
!46 = distinct !{!46, !34}
!47 = distinct !{!47, !34}
!48 = distinct !{!48, !34}


; 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.RNNParamSpec = type { i32, i32, i32, i32, float, float, i8, float, i32 }

@.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
@.str.2 = external hidden unnamed_addr constant [23 x i8], align 1

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

; Function Attrs: mustprogress 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) #1

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef i32 @_Z7bytesOf8DataType(i32 noundef) local_unnamed_addr #6

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind noalias writable sret(%struct.TensorDesc) align 4, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #6

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef i32 @_Z7rnn_cpu10TensorDescPKvPKS_PS1_jS3_S4_Pf12RNNParamSpecjPvS_S7_4Arch(ptr nocapture noundef readonly byval(%struct.TensorDesc) align 8 %0, ptr noundef %1, ptr nocapture noundef readonly %2, ptr noundef readonly %3, i32 noundef %4, ptr noundef %5, ptr noundef readonly %6, ptr nocapture noundef readnone %7, ptr nocapture noundef readonly byval(%struct.RNNParamSpec) align 8 %8, i32 noundef %9, ptr noundef %10, ptr nocapture noundef readnone byval(%struct.TensorDesc) align 8 %11, ptr noundef %12, i32 noundef %13) local_unnamed_addr #8 {
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca %struct.TensorDesc, align 8
  %.sroa.6 = alloca { i32, [20 x i32] }, align 8
  %20 = alloca %struct.TensorDesc, align 8
  %21 = alloca %struct.TensorDesc, align 8
  %22 = alloca %struct.TensorDesc, align 8
  %23 = alloca %struct.TensorDesc, align 8
  %24 = alloca [2 x ptr], align 16
  %25 = alloca %struct.TensorDesc, align 8
  %26 = alloca %struct.TensorDesc, align 8
  %27 = alloca %struct.TensorDesc, align 8
  %28 = alloca %struct.TensorDesc, align 4
  %29 = alloca %struct.TensorDesc, align 4
  %30 = alloca %struct.TensorDesc, align 4
  %31 = alloca %struct.TensorDesc, align 4
  %32 = alloca [2 x ptr], align 16
  %33 = alloca %struct.TensorDesc, align 4
  %34 = insertelement <4 x ptr> poison, ptr %1, i64 0
  %35 = insertelement <4 x ptr> %34, ptr %3, i64 1
  %36 = insertelement <4 x ptr> %35, ptr %6, i64 2
  %37 = insertelement <4 x ptr> %36, ptr %10, i64 3
  %38 = icmp eq <4 x ptr> %37, zeroinitializer
  %39 = icmp eq ptr %12, null
  %40 = bitcast <4 x i1> %38 to i4
  %41 = icmp ne i4 %40, 0
  %op.rdx = or i1 %41, %39
  br i1 %op.rdx, label %42, label %52

42:                                               ; preds = %14
  %43 = tail call i64 (i64, ...) @syscall(i64 noundef 186) #11
  %44 = trunc i64 %43 to i32
  %45 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %44)
  %46 = load ptr, ptr @stdout, align 8, !tbaa !5
  %47 = tail call i32 @fflush(ptr noundef %46)
  %48 = tail call ptr @ee2str(i32 noundef 1)
  %49 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef %48)
  %50 = load ptr, ptr @stdout, align 8, !tbaa !5
  %51 = tail call i32 @fflush(ptr noundef %50)
  tail call void @exit(i32 noundef 1) #12
  unreachable

52:                                               ; preds = %14
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %15) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #11
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #11
  %53 = getelementptr inbounds i8, ptr %8, i64 24
  %54 = load i8, ptr %53, align 8, !tbaa !9, !range !16, !noundef !17
  %55 = zext nneg i8 %54 to i32
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(92) %19, ptr noundef nonnull align 4 dereferenceable(92) %2, i64 92, i1 false), !tbaa.struct !18
  %56 = call noundef i32 @_Z11tensor2dGet10TensorDescP8DataTypeP10DataFormatPjS4_(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %19, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef nonnull %18, ptr noundef nonnull %17)
  %.not = icmp eq i32 %56, 0
  br i1 %.not, label %67, label %57

57:                                               ; preds = %52
  %58 = call i64 (i64, ...) @syscall(i64 noundef 186) #11
  %59 = trunc i64 %58 to i32
  %60 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %59)
  %61 = load ptr, ptr @stdout, align 8, !tbaa !5
  %62 = call i32 @fflush(ptr noundef %61)
  %63 = call ptr @ee2str(i32 noundef %56)
  %64 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef %63)
  %65 = load ptr, ptr @stdout, align 8, !tbaa !5
  %66 = call i32 @fflush(ptr noundef %65)
  call void @exit(i32 noundef 1) #12
  unreachable

67:                                               ; preds = %52
  %68 = load i32, ptr %0, align 8, !tbaa !19
  %69 = getelementptr inbounds i8, ptr %0, i64 4
  %70 = load i32, ptr %69, align 4, !tbaa !25
  %71 = getelementptr inbounds i8, ptr %0, i64 12
  %72 = getelementptr inbounds i8, ptr %0, i64 8
  %73 = load i32, ptr %72, align 8, !tbaa !27
  %74 = add i32 %73, -1
  %75 = zext i32 %74 to i64
  %76 = getelementptr inbounds [20 x i32], ptr %71, i64 0, i64 %75
  %77 = load i32, ptr %76, align 4, !tbaa !23
  %78 = add i32 %73, -2
  %79 = zext i32 %78 to i64
  %80 = getelementptr inbounds [20 x i32], ptr %71, i64 0, i64 %79
  %81 = load i32, ptr %80, align 4, !tbaa !23
  %82 = add i32 %73, -3
  %83 = zext i32 %82 to i64
  %84 = getelementptr inbounds [20 x i32], ptr %71, i64 0, i64 %83
  %85 = load i32, ptr %84, align 4, !tbaa !23
  %.not251 = icmp eq i32 %82, 0
  br i1 %.not251, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %67
  %min.iters.check = icmp ult i32 %82, 8
  br i1 %min.iters.check, label %.lr.ph.preheader293, label %vector.ph

.lr.ph.preheader293:                              ; preds = %middle.block, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  %.0213236.ph = phi i32 [ %85, %.lr.ph.preheader ], [ %92, %middle.block ]
  br label %.lr.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %83, 4294967288
  %86 = insertelement <4 x i32> <i32 poison, i32 1, i32 1, i32 1>, i32 %85, i64 0
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <4 x i32> [ %86, %vector.ph ], [ %89, %vector.body ]
  %vec.phi289 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %vector.ph ], [ %90, %vector.body ]
  %87 = getelementptr inbounds [20 x i32], ptr %71, i64 0, i64 %index
  %88 = getelementptr inbounds i8, ptr %87, i64 16
  %wide.load = load <4 x i32>, ptr %87, align 4, !tbaa !23
  %wide.load290 = load <4 x i32>, ptr %88, align 4, !tbaa !23
  %89 = mul <4 x i32> %wide.load, %vec.phi
  %90 = mul <4 x i32> %wide.load290, %vec.phi289
  %index.next = add nuw i64 %index, 8
  %91 = icmp eq i64 %index.next, %n.vec
  br i1 %91, label %middle.block, label %vector.body, !llvm.loop !28

middle.block:                                     ; preds = %vector.body
  %bin.rdx = mul <4 x i32> %90, %89
  %92 = call i32 @llvm.vector.reduce.mul.v4i32(<4 x i32> %bin.rdx)
  %cmp.n = icmp eq i64 %n.vec, %83
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader293

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %67
  %.0213.lcssa = phi i32 [ %85, %67 ], [ %92, %middle.block ], [ %96, %.lr.ph ]
  %93 = icmp eq i32 %70, 2
  br i1 %93, label %97, label %102

.lr.ph:                                           ; preds = %.lr.ph.preheader293, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader293 ]
  %.0213236 = phi i32 [ %96, %.lr.ph ], [ %.0213236.ph, %.lr.ph.preheader293 ]
  %94 = getelementptr inbounds [20 x i32], ptr %71, i64 0, i64 %indvars.iv
  %95 = load i32, ptr %94, align 4, !tbaa !23
  %96 = mul i32 %95, %.0213236
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %83
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !32

97:                                               ; preds = %._crit_edge
  call void @llvm.lifetime.start.p0(i64 84, ptr nonnull %.sroa.6)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(84) %.sroa.6, ptr noundef nonnull align 8 dereferenceable(84) %72, i64 84, i1 false), !tbaa.struct !33
  store i32 %68, ptr %20, align 8, !tbaa !19
  %.sroa.5.0..sroa_idx117 = getelementptr inbounds i8, ptr %20, i64 4
  store i32 0, ptr %.sroa.5.0..sroa_idx117, align 4, !tbaa !21
  %.sroa.6.0..sroa_idx121 = getelementptr inbounds i8, ptr %20, i64 8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(84) %.sroa.6.0..sroa_idx121, ptr noundef nonnull align 8 dereferenceable(84) %72, i64 84, i1 false)
  %98 = call noundef i32 @_Z15transformToNCHW10TensorDescPKvS_Pv(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %0, ptr noundef %1, ptr noundef nonnull byval(%struct.TensorDesc) align 8 %20, ptr noundef %10)
  store i32 %68, ptr %21, align 8, !tbaa !19
  %.sroa.5.0..sroa_idx119 = getelementptr inbounds i8, ptr %21, i64 4
  store i32 0, ptr %.sroa.5.0..sroa_idx119, align 4, !tbaa !21
  %.sroa.6.0..sroa_idx122 = getelementptr inbounds i8, ptr %21, i64 8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(84) %.sroa.6.0..sroa_idx122, ptr noundef nonnull align 8 dereferenceable(84) %.sroa.6, i64 84, i1 false), !tbaa.struct !33
  %99 = call noundef i32 @_Z14tensorNumBytes10TensorDesc(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %21)
  %100 = zext i32 %99 to i64
  %101 = getelementptr inbounds i8, ptr %10, i64 %100
  call void @llvm.lifetime.end.p0(i64 84, ptr nonnull %.sroa.6)
  br label %102

102:                                              ; preds = %97, %._crit_edge
  %.0216 = phi ptr [ %10, %97 ], [ %1, %._crit_edge ]
  %.0 = phi ptr [ %101, %97 ], [ %10, %._crit_edge ]
  %103 = getelementptr inbounds i8, ptr %8, i64 4
  %104 = load i32, ptr %103, align 4
  %105 = getelementptr inbounds i8, ptr %8, i64 12
  %106 = load i32, ptr %105, align 4
  %107 = icmp sgt i32 %106, 0
  %108 = select i1 %107, i32 %106, i32 %104
  %109 = call noundef i32 @_Z7bytesOf8DataType(i32 noundef %68)
  %110 = mul i32 %.0213.lcssa, %81
  %111 = mul i32 %104, %81
  %112 = shl i32 %111, %55
  %113 = shl i32 %77, %55
  %114 = add i32 %108, %104
  %115 = and i32 %109, 255
  %116 = mul i32 %114, %115
  %117 = mul i32 %116, %113
  %118 = zext i32 %117 to i64
  %119 = getelementptr inbounds i8, ptr %.0, i64 %118
  %120 = mul i32 %81, %77
  %121 = mul i32 %.0213.lcssa, %120
  %122 = mul i32 %121, %115
  %123 = zext i32 %122 to i64
  %124 = getelementptr inbounds i8, ptr %119, i64 %123
  %125 = load i32, ptr %18, align 4, !tbaa !23
  %126 = add i32 %125, %104
  %127 = mul i32 %126, %115
  %128 = zext i32 %127 to i64
  %129 = getelementptr inbounds i8, ptr %124, i64 %128
  call void @llvm.lifetime.start.p0(i64 92, ptr nonnull %22) #11
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind nonnull writable sret(%struct.TensorDesc) align 4 %22, i32 noundef %68, i32 noundef 14, i32 noundef %77, i32 noundef 0)
  call void @llvm.lifetime.start.p0(i64 92, ptr nonnull %23) #11
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind nonnull writable sret(%struct.TensorDesc) align 4 %23, i32 noundef %68, i32 noundef 14, i32 noundef %77, i32 noundef %104)
  %130 = load i32, ptr %18, align 4, !tbaa !23
  %131 = mul i32 %130, %115
  %.not252 = icmp eq i32 %77, 0
  br i1 %.not252, label %._crit_edge241, label %.preheader233.lr.ph

.preheader233.lr.ph:                              ; preds = %102
  %.not253 = icmp eq i32 %81, 0
  %132 = zext i32 %131 to i64
  br i1 %.not253, label %._crit_edge241, label %.preheader233.us.preheader

.preheader233.us.preheader:                       ; preds = %.preheader233.lr.ph
  %wide.trip.count266 = zext i32 %81 to i64
  br label %.preheader233.us

.preheader233.us:                                 ; preds = %.preheader233.us.preheader, %._crit_edge239.us
  %.0217240.us = phi i32 [ %141, %._crit_edge239.us ], [ 0, %.preheader233.us.preheader ]
  %133 = mul i32 %.0217240.us, %81
  br label %134

134:                                              ; preds = %.preheader233.us, %134
  %indvars.iv263 = phi i64 [ 0, %.preheader233.us ], [ %indvars.iv.next264, %134 ]
  %135 = trunc nuw i64 %indvars.iv263 to i32
  %136 = add i32 %133, %135
  %137 = mul i32 %136, %131
  %138 = zext i32 %137 to i64
  %139 = getelementptr inbounds i8, ptr %129, i64 %138
  %140 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_Z10UNI_MEMCPYPvPKvm(ptr noundef %139, ptr noundef %140, i64 noundef %132)
  %indvars.iv.next264 = add nuw nsw i64 %indvars.iv263, 1
  %exitcond267.not = icmp eq i64 %indvars.iv.next264, %wide.trip.count266
  br i1 %exitcond267.not, label %._crit_edge239.us, label %134, !llvm.loop !34

._crit_edge239.us:                                ; preds = %134
  %141 = add nuw i32 %.0217240.us, 1
  %exitcond268.not = icmp eq i32 %141, %77
  br i1 %exitcond268.not, label %._crit_edge241, label %.preheader233.us, !llvm.loop !35

._crit_edge241:                                   ; preds = %._crit_edge239.us, %.preheader233.lr.ph, %102
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #11
  %142 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %142, ptr %24, align 16, !tbaa !5
  %143 = getelementptr inbounds i8, ptr %24, i64 8
  store ptr null, ptr %143, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 92, ptr nonnull %25) #11
  call void @_ZN10TensorDescC2Ev(ptr noundef nonnull align 4 dereferenceable(92) %25) #11
  call void @llvm.lifetime.start.p0(i64 92, ptr nonnull %26) #11
  call void @_ZN10TensorDescC2Ev(ptr noundef nonnull align 4 dereferenceable(92) %26) #11
  call void @llvm.lifetime.start.p0(i64 92, ptr nonnull %27) #11
  call void @_ZN10TensorDescC2Ev(ptr noundef nonnull align 4 dereferenceable(92) %27) #11
  %144 = load i32, ptr %16, align 4, !tbaa !21
  %145 = icmp eq i32 %144, 40
  br i1 %145, label %155, label %146

146:                                              ; preds = %._crit_edge241
  %147 = call i64 (i64, ...) @syscall(i64 noundef 186) #11
  %148 = trunc i64 %147 to i32
  %149 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %148)
  %150 = load ptr, ptr @stdout, align 8, !tbaa !5
  %151 = call i32 @fflush(ptr noundef %150)
  %152 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  %153 = load ptr, ptr @stdout, align 8, !tbaa !5
  %154 = call i32 @fflush(ptr noundef %153)
  call void @exit(i32 noundef 1) #12
  unreachable

155:                                              ; preds = %._crit_edge241
  %156 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 92, ptr nonnull %28) #11
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind nonnull writable sret(%struct.TensorDesc) align 4 %28, i32 noundef %68, i32 noundef 14, i32 noundef %120, i32 noundef %.0213.lcssa)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(92) %25, ptr noundef nonnull align 4 dereferenceable(92) %28, i64 92, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %28) #11
  call void @llvm.lifetime.start.p0(i64 92, ptr nonnull %29) #11
  %157 = load i32, ptr %18, align 4, !tbaa !23
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind nonnull writable sret(%struct.TensorDesc) align 4 %29, i32 noundef %68, i32 noundef 14, i32 noundef %120, i32 noundef %157)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(92) %27, ptr noundef nonnull align 4 dereferenceable(92) %29, i64 92, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %29) #11
  %158 = icmp eq i32 %13, 1
  br i1 %158, label %159, label %162

159:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 92, ptr nonnull %30) #11
  %160 = load i32, ptr %15, align 4, !tbaa !19
  %161 = load i32, ptr %18, align 4, !tbaa !23
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind nonnull writable sret(%struct.TensorDesc) align 4 %30, i32 noundef %160, i32 noundef 13, i32 noundef %161, i32 noundef %.0213.lcssa)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(92) %26, ptr noundef nonnull align 4 dereferenceable(92) %30, i64 92, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %30) #11
  br label %166

162:                                              ; preds = %155
  call void @llvm.lifetime.start.p0(i64 92, ptr nonnull %31) #11
  %163 = load i32, ptr %15, align 4, !tbaa !19
  %164 = call i32 @matrix_matrix_multiply_rhs_format(i32 noundef %163)
  %165 = load i32, ptr %18, align 4, !tbaa !23
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind nonnull writable sret(%struct.TensorDesc) align 4 %31, i32 noundef %163, i32 noundef %164, i32 noundef %.0213.lcssa, i32 noundef %165)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(92) %26, ptr noundef nonnull align 4 dereferenceable(92) %31, i64 92, i1 false), !tbaa.struct !18
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %31) #11
  br label %166

166:                                              ; preds = %162, %159
  %167 = call i32 @matrix_matrix_multiply(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %25, ptr noundef %.0216, ptr noundef nonnull byval(%struct.TensorDesc) align 8 %26, ptr noundef %156, i32 noundef %122, ptr noundef %119, ptr noundef nonnull byval(%struct.TensorDesc) align 8 %27, ptr noundef %129, ptr noundef null, i32 noundef %13)
  %.not229 = icmp eq i32 %167, 0
  br i1 %.not229, label %178, label %168

168:                                              ; preds = %166
  %169 = call i64 (i64, ...) @syscall(i64 noundef 186) #11
  %170 = trunc i64 %169 to i32
  %171 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %170)
  %172 = load ptr, ptr @stdout, align 8, !tbaa !5
  %173 = call i32 @fflush(ptr noundef %172)
  %174 = call ptr @ee2str(i32 noundef %167)
  %175 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef %174)
  %176 = load ptr, ptr @stdout, align 8, !tbaa !5
  %177 = call i32 @fflush(ptr noundef %176)
  call void @exit(i32 noundef 1) #12
  unreachable

178:                                              ; preds = %166
  %179 = load i32, ptr %18, align 4, !tbaa !23
  %180 = mul i32 %115, %.0213.lcssa
  %181 = mul i32 %180, %179
  %182 = zext i32 %181 to i64
  %183 = getelementptr inbounds i8, ptr %156, i64 %182
  store ptr %183, ptr %24, align 16, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %32) #11
  %184 = load ptr, ptr %6, align 8, !tbaa !5
  store ptr %184, ptr %32, align 16, !tbaa !5
  %185 = getelementptr inbounds i8, ptr %32, i64 8
  store ptr null, ptr %185, align 8, !tbaa !5
  %186 = load i32, ptr %105, align 4, !tbaa !36
  %187 = icmp sgt i32 %186, 0
  br i1 %187, label %188, label %191

188:                                              ; preds = %178
  %189 = getelementptr inbounds i8, ptr %3, i64 8
  %190 = load ptr, ptr %189, align 8, !tbaa !5
  store ptr %190, ptr %143, align 8, !tbaa !5
  br label %191

191:                                              ; preds = %188, %178
  %192 = load i32, ptr %8, align 8, !tbaa !37
  %193 = icmp eq i32 %192, 3
  br i1 %193, label %194, label %197

194:                                              ; preds = %191
  %195 = getelementptr inbounds i8, ptr %6, i64 8
  %196 = load ptr, ptr %195, align 8, !tbaa !5
  store ptr %196, ptr %185, align 8, !tbaa !5
  br label %197

197:                                              ; preds = %194, %191
  call void @llvm.lifetime.start.p0(i64 92, ptr nonnull %33) #11
  %198 = load i32, ptr %15, align 4, !tbaa !19
  call void @_Z9tensor2df8DataType10DataFormatjj(ptr dead_on_unwind nonnull writable sret(%struct.TensorDesc) align 4 %33, i32 noundef %198, i32 noundef 19, i32 noundef %179, i32 noundef %104)
  %.not254 = icmp eq i32 %81, 0
  br i1 %.not254, label %._crit_edge245, label %.lr.ph244

.lr.ph244:                                        ; preds = %197
  %wide.trip.count272 = zext i32 %81 to i64
  br label %202

199:                                              ; preds = %202
  %indvars.iv.next270 = add nuw nsw i64 %indvars.iv269, 1
  %exitcond273.not = icmp eq i64 %indvars.iv.next270, %wide.trip.count272
  br i1 %exitcond273.not, label %._crit_edge245, label %202, !llvm.loop !38

._crit_edge245:                                   ; preds = %199, %197
  %200 = load i8, ptr %53, align 8, !tbaa !9, !range !16, !noundef !17
  %201 = trunc nuw i8 %200 to i1
  br i1 %201, label %228, label %.loopexit

202:                                              ; preds = %.lr.ph244, %199
  %indvars.iv269 = phi i64 [ 0, %.lr.ph244 ], [ %indvars.iv.next270, %199 ]
  %203 = trunc nuw i64 %indvars.iv269 to i32
  %204 = mul i32 %104, %203
  %205 = shl i32 %204, %55
  %206 = mul i32 %205, %115
  %207 = zext i32 %206 to i64
  %208 = getelementptr inbounds i8, ptr %12, i64 %207
  %209 = load i32, ptr %18, align 4, !tbaa !23
  %210 = mul i32 %115, %203
  %211 = mul i32 %210, %209
  %212 = zext i32 %211 to i64
  %213 = getelementptr inbounds i8, ptr %129, i64 %212
  store ptr %213, ptr %32, align 16, !tbaa !5
  %214 = mul i32 %180, %203
  %215 = zext i32 %214 to i64
  %216 = getelementptr inbounds i8, ptr %.0216, i64 %215
  %217 = call noundef i32 @_Z11rnncell_cpu10TensorDescPKvPKS_PS1_S3_S4_PfPv12RNNParamSpecjjjS6_S_S6_4Arch(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %22, ptr noundef %216, ptr noundef nonnull %33, ptr noundef nonnull %24, ptr noundef %5, ptr noundef nonnull %32, ptr noundef null, ptr noundef %.0, ptr noundef nonnull byval(%struct.RNNParamSpec) align 8 %8, i32 noundef %110, i32 noundef %112, i32 noundef %9, ptr noundef %124, ptr noundef nonnull byval(%struct.TensorDesc) align 8 %23, ptr noundef %208, i32 noundef %13)
  %.not232 = icmp eq i32 %217, 0
  br i1 %.not232, label %199, label %218

218:                                              ; preds = %202
  %219 = call i64 (i64, ...) @syscall(i64 noundef 186) #11
  %220 = trunc i64 %219 to i32
  %221 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %220)
  %222 = load ptr, ptr @stdout, align 8, !tbaa !5
  %223 = call i32 @fflush(ptr noundef %222)
  %224 = call ptr @ee2str(i32 noundef %217)
  %225 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef %224)
  %226 = load ptr, ptr @stdout, align 8, !tbaa !5
  %227 = call i32 @fflush(ptr noundef %226)
  call void @exit(i32 noundef 1) #12
  unreachable

228:                                              ; preds = %._crit_edge245
  %229 = load i32, ptr %105, align 4, !tbaa !36
  %.inv = icmp slt i32 %229, 1
  %230 = select i1 %.inv, i64 1, i64 2
  %231 = load i32, ptr %8, align 8, !tbaa !37
  %232 = icmp eq i32 %231, 3
  %.pre = select i1 %232, i64 2, i64 1
  br i1 %.not252, label %._crit_edge250, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %228
  %233 = getelementptr inbounds ptr, ptr %6, i64 %.pre
  %234 = zext i32 %131 to i64
  br i1 %.not254, label %._crit_edge250, label %.preheader.us.preheader

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph
  %wide.trip.count277 = zext i32 %81 to i64
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge248.us
  %.0219249.us = phi i32 [ %243, %._crit_edge248.us ], [ 0, %.preheader.us.preheader ]
  %235 = mul i32 %.0219249.us, %81
  br label %236

236:                                              ; preds = %.preheader.us, %236
  %indvars.iv274 = phi i64 [ 0, %.preheader.us ], [ %indvars.iv.next275, %236 ]
  %237 = trunc nuw i64 %indvars.iv274 to i32
  %238 = add i32 %235, %237
  %239 = mul i32 %238, %131
  %240 = zext i32 %239 to i64
  %241 = getelementptr inbounds i8, ptr %129, i64 %240
  %242 = load ptr, ptr %233, align 8, !tbaa !5
  call void @_Z10UNI_MEMCPYPvPKvm(ptr noundef %241, ptr noundef %242, i64 noundef %234)
  %indvars.iv.next275 = add nuw nsw i64 %indvars.iv274, 1
  %exitcond278.not = icmp eq i64 %indvars.iv.next275, %wide.trip.count277
  br i1 %exitcond278.not, label %._crit_edge248.us, label %236, !llvm.loop !39

._crit_edge248.us:                                ; preds = %236
  %243 = add nuw i32 %.0219249.us, 1
  %exitcond279.not = icmp eq i32 %243, %77
  br i1 %exitcond279.not, label %._crit_edge250, label %.preheader.us, !llvm.loop !40

._crit_edge250:                                   ; preds = %._crit_edge248.us, %228, %.preheader.lr.ph
  %244 = getelementptr inbounds ptr, ptr %6, i64 %.pre
  %245 = load ptr, ptr %244, align 8, !tbaa !5
  store ptr %245, ptr %32, align 16, !tbaa !5
  %246 = getelementptr inbounds ptr, ptr %3, i64 %230
  %247 = load ptr, ptr %246, align 8, !tbaa !5
  store ptr %247, ptr %24, align 16, !tbaa !5
  %248 = mul i32 %115, %110
  %249 = call i32 @matrix_matrix_multiply(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %25, ptr noundef %.0216, ptr noundef nonnull byval(%struct.TensorDesc) align 8 %26, ptr noundef %247, i32 noundef %248, ptr noundef %119, ptr noundef nonnull byval(%struct.TensorDesc) align 8 %27, ptr noundef %129, ptr noundef null, i32 noundef %13)
  %.not230 = icmp eq i32 %249, 0
  br i1 %.not230, label %260, label %250

250:                                              ; preds = %._crit_edge250
  %251 = call i64 (i64, ...) @syscall(i64 noundef 186) #11
  %252 = trunc i64 %251 to i32
  %253 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %252)
  %254 = load ptr, ptr @stdout, align 8, !tbaa !5
  %255 = call i32 @fflush(ptr noundef %254)
  %256 = call ptr @ee2str(i32 noundef %249)
  %257 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef %256)
  %258 = load ptr, ptr @stdout, align 8, !tbaa !5
  %259 = call i32 @fflush(ptr noundef %258)
  call void @exit(i32 noundef 1) #12
  unreachable

260:                                              ; preds = %._crit_edge250
  %261 = load i32, ptr %18, align 4, !tbaa !23
  %262 = mul i32 %180, %261
  %263 = zext i32 %262 to i64
  %264 = getelementptr inbounds i8, ptr %247, i64 %263
  store ptr %264, ptr %24, align 16, !tbaa !5
  %265 = load i32, ptr %105, align 4, !tbaa !36
  %266 = icmp sgt i32 %265, 0
  br i1 %266, label %267, label %270

267:                                              ; preds = %260
  %268 = getelementptr inbounds i8, ptr %246, i64 8
  %269 = load ptr, ptr %268, align 8, !tbaa !5
  store ptr %269, ptr %143, align 8, !tbaa !5
  br label %270

270:                                              ; preds = %267, %260
  %271 = load i32, ptr %8, align 8, !tbaa !37
  %272 = icmp eq i32 %271, 3
  br i1 %272, label %273, label %276

273:                                              ; preds = %270
  %274 = getelementptr inbounds i8, ptr %244, i64 8
  %275 = load ptr, ptr %274, align 8, !tbaa !5
  store ptr %275, ptr %185, align 8, !tbaa !5
  br label %276

276:                                              ; preds = %273, %270
  %277 = mul i32 %116, %77
  %278 = zext i32 %277 to i64
  %279 = getelementptr inbounds i8, ptr %.0, i64 %278
  %280 = zext i32 %81 to i64
  br label %281

281:                                              ; preds = %283, %276
  %indvars.iv280 = phi i64 [ %indvars.iv.next281, %283 ], [ %280, %276 ]
  %indvars.iv.next281 = add nsw i64 %indvars.iv280, -1
  %indvars = trunc i64 %indvars.iv.next281 to i32
  %282 = icmp sgt i32 %indvars, -1
  br i1 %282, label %283, label %.loopexit

283:                                              ; preds = %281
  %284 = mul i32 %104, %indvars
  %285 = shl i32 %284, %55
  %286 = add i32 %285, %104
  %287 = mul i32 %286, %115
  %288 = zext i32 %287 to i64
  %289 = getelementptr inbounds i8, ptr %12, i64 %288
  %290 = load i32, ptr %18, align 4, !tbaa !23
  %291 = mul i32 %115, %indvars
  %292 = mul i32 %291, %290
  %293 = zext i32 %292 to i64
  %294 = getelementptr inbounds i8, ptr %129, i64 %293
  store ptr %294, ptr %32, align 16, !tbaa !5
  %295 = mul i32 %180, %indvars
  %296 = zext i32 %295 to i64
  %297 = getelementptr inbounds i8, ptr %.0216, i64 %296
  %298 = call noundef i32 @_Z11rnncell_cpu10TensorDescPKvPKS_PS1_S3_S4_PfPv12RNNParamSpecjjjS6_S_S6_4Arch(ptr noundef nonnull byval(%struct.TensorDesc) align 8 %22, ptr noundef %297, ptr noundef nonnull %33, ptr noundef nonnull %24, ptr noundef %5, ptr noundef nonnull %32, ptr noundef null, ptr noundef %279, ptr noundef nonnull byval(%struct.RNNParamSpec) align 8 %8, i32 noundef %110, i32 noundef %112, i32 noundef %9, ptr noundef %124, ptr noundef nonnull byval(%struct.TensorDesc) align 8 %23, ptr noundef %289, i32 noundef %13)
  %.not231 = icmp eq i32 %298, 0
  br i1 %.not231, label %281, label %299, !llvm.loop !41

299:                                              ; preds = %283
  %300 = call i64 (i64, ...) @syscall(i64 noundef 186) #11
  %301 = trunc i64 %300 to i32
  %302 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %301)
  %303 = load ptr, ptr @stdout, align 8, !tbaa !5
  %304 = call i32 @fflush(ptr noundef %303)
  %305 = call ptr @ee2str(i32 noundef %298)
  %306 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, ptr noundef %305)
  %307 = load ptr, ptr @stdout, align 8, !tbaa !5
  %308 = call i32 @fflush(ptr noundef %307)
  call void @exit(i32 noundef 1) #12
  unreachable

.loopexit:                                        ; preds = %281, %._crit_edge245
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %33) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %32) #11
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %27) #11
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %26) #11
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %25) #11
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #11
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %23) #11
  call void @llvm.lifetime.end.p0(i64 92, ptr nonnull %22) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #11
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %15) #11
  ret i32 0
}

declare noundef i32 @_Z15transformToNCHW10TensorDescPKvS_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 uwtable
declare dso_local void @_Z10UNI_MEMCPYPvPKvm(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #6

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

declare i32 @matrix_matrix_multiply_rhs_format(i32 noundef) local_unnamed_addr #9

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.vector.reduce.mul.v4i32(<4 x i32>) #10

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 = { 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 #4 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress 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 = { 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #11 = { nounwind }
attributes #12 = { 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, !14, i64 24}
!10 = !{!"_ZTS12RNNParamSpec", !11, i64 0, !12, i64 4, !12, i64 8, !12, i64 12, !13, i64 16, !13, i64 20, !14, i64 24, !13, i64 28, !15, i64 32}
!11 = !{!"_ZTS7RNNMode", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!"float", !7, i64 0}
!14 = !{!"bool", !7, i64 0}
!15 = !{!"_ZTS14ActivationMode", !7, i64 0}
!16 = !{i8 0, i8 2}
!17 = !{}
!18 = !{i64 0, i64 4, !19, i64 4, i64 4, !21, i64 8, i64 4, !23, i64 12, i64 80, !24}
!19 = !{!20, !20, i64 0}
!20 = !{!"_ZTS8DataType", !7, i64 0}
!21 = !{!22, !22, i64 0}
!22 = !{!"_ZTS10DataFormat", !7, i64 0}
!23 = !{!12, !12, i64 0}
!24 = !{!7, !7, i64 0}
!25 = !{!26, !22, i64 4}
!26 = !{!"_ZTS10TensorDesc", !20, i64 0, !22, i64 4, !12, i64 8, !7, i64 12}
!27 = !{!26, !12, i64 8}
!28 = distinct !{!28, !29, !30, !31}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!"llvm.loop.isvectorized", i32 1}
!31 = !{!"llvm.loop.unroll.runtime.disable"}
!32 = distinct !{!32, !29, !31, !30}
!33 = !{i64 0, i64 4, !23, i64 4, i64 80, !24}
!34 = distinct !{!34, !29}
!35 = distinct !{!35, !29}
!36 = !{!10, !12, i64 12}
!37 = !{!10, !11, i64 0}
!38 = distinct !{!38, !29}
!39 = distinct !{!39, !29}
!40 = distinct !{!40, !29}
!41 = distinct !{!41, !29}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,MemCpyOptPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass