From 94d7db254026ab843b11f31849592682b21dcff7 Mon Sep 17 00:00:00 2001 From: 6somehow Date: Thu, 26 Sep 2024 17:39:57 +0800 Subject: [PATCH] [Midend] Enhancements and Optimizations for batch matmul and convolution [Examples] Added MLIRLinalg Examples for Various Optimization Options. (#1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [examples] Add mobilenet example. Co-authored-by: zhanghb97 Co-authored-by: qingqing12138 * [examples] Add examples for transformer-based model optimization. * [examples] Add convolution optimization examples (#333) --------- Co-authored-by: FloatingcloudKnight <‘1348185166@qq.com’> * bmm2mm 0.0 * [examples] Add attention loop and fusion example. * [BuddyWhisper] Add whisper model example and Conv1d operation. Co-authored-by: zhanghb97 * [examples] Add rtclock to attention fusion examples. * [thirdparty] Add riscv-gnu-toolchain as an submodule. * [RVV] Add RVV environment guide and update examples. * [examples] Annotate the llama mlir code. (#337) * [thirdparty] Remove legacy RISC-V toolchain. * [frontend] Update convolution groups feature. (#338) * [examples] Update Whisper README doc. * [NFC] Make buddy tests and examples depends on mlir-cpu-runner (#342) * [examples] Add vector iteration example. * [DAP/Whisper]Add Whisper Preprocessor. (#313) * [examples] Add MLIR CF example. * [examples] Fix cf-iteration-exit filecheck. * [example] Fix cf-iteration-exit example. * [examples] Add sigmoid and rope case. * tiling batch matmul * tiling batch matmul * [frontend] Add missing dependencies into DAP target. (#357) Ninja introduced different build graph algorithm in version v1.12.0, which will required project to explicitly specify dependencies. Without this commit, ninja v1.12.0 will not link mlir-translate and llc before the DAP target and causing build failure. * bmm tile try to remove redundant subview * pass check * bmm tile try to remove redundant subview * bmm tile to vector.load/store * buddy opt add(fake rvv version) * bmm fuse for loop * bmm m n border control add * [Container] Use integrated audio decoding method. * [examples] Use container to read audio file. Co-authored-by: taiqzheng * [NFC] Fix warnings. * [build system] use variable from LLVMConfig (#359) * [build system] use variable from LLVMConfig In the previous build script, we always assumed that the binary and the library are relative to the MLIR_DIR variable. But this prevents buddy-mlir from properly packaging by the system. We should use the LLVMConfig.cmake file to have a more flexible build system. Signed-off-by: Avimitin * [python] add install target for buddy python modules * [nix] update buddy-mlir derivation Signed-off-by: Avimitin --------- Signed-off-by: Avimitin * [chore] fix typo in pass manager (#360) Signed-off-by: Avimitin * [container] Add initial standalone image container. * remove rvv * add int support * [examples] Add initial GPU matmul transform example. * [examples] Add conv2d-nhwc-fhwc manual vectorization. * [Container] Add encoder for wav audio format. (#366) * [examples] Fix rvv intrinsic. * [midend] Fix batch matmul vectorization pass. * [example] Fix typo. * [examples] LeNet E2E pipeline uses batchmatmul-optimize pass. * [examples] Fix LeNet E2E pipeline. * [examples] Add memref type generation example. * [NFC] Fix typo. * [Docs] Add Python Virtual Environment Setup Guide. (#373) * [examples] Update module generation example. * add conv nhwc * add conv nhwc * oc bug repair * [Examples] Adapt Audio Container for dap examples. (#369) * [Examples] Adapt the new Audio Container for 'buddy-whisper-preprocess' example. * [Examples] Adapt the new Audio container for 'buddy-biquad' example. * [Examples] Adapt the new Audio Container for 'buddy-fir' example. * [Examples] Adapt the new Audio Container for 'buddy-iir-scalar' example. * [Examples] Adapt the new Audio Container for 'buddy-iir-vectorization' example. * [DAP] Merge 'BuddyLibDAPVectorization' library into 'BuddyLibDAP' library. * [Container] Update the Audio container to support converting a MemRef (base class) object to an Audio (derived class) object. * [Examples] Adapt the new constructor in the Audio Container to facilitate the conversion of a MemRef object to an Audio object. * [Container] Handle corner case for NaN. Reset NaN to 1. * conv2d +dilation,strides * conv2d +tilling * fixed int float determine * conv2d to forall * clear useless commits * conv2d pass float test * add bmm scf * add depthwise * add depthwise correct * [DAP/Whisper] Extract RFFT operation from 'dap.whisper_preprocess'. (#379) * [DAP/Whisper] Remove 'memref.copy' operation in 'dap.whisper_preprocess'. * [DAP] Extract RFFT400Op from 'dap.whisper_preprocess'. * for dev merge * [examples] add MLIRLinalg example for options: 1.conv-nhwc-fhwc-optimize 2.conv-nhwc-fhwc-tile-optimize 3.depthwise-conv-nhwc-hwc-optimize 4.batchmatmul-tile-optimize 5.batchmatmul-scf-optimize . Example mlir: batchmatmul conv2d_nhwc_fhwc depthwise_conv_2d_nhwc_hwc * [examples] add MLIRLinalg example for options: 1.conv-nhwc-fhwc-optimize 2.conv-nhwc-fhwc-tile-optimize 3.depthwise-conv-nhwc-hwc-optimize 4.batchmatmul-tile-optimize 5.batchmatmul-scf-optimize . Example mlir: batchmatmul conv2d_nhwc_fhwc depthwise_conv_2d_nhwc_hwc * Update .gitmodules * Update .gitignore * [Midend] Enhancements and Optimizations for batch matmul and convolution [Examples] Added MLIRLinalg Examples for Various Optimization Options * [Midend] Enhancements and Optimizations for batch matmul and convolution [Examples] Added MLIRLinalg Examples for Various Optimization Options. fixed thirdparty. * [Examples] Added MLIRLinalg Examples for Various Optimization Options. linalg-batch-matmul-dync.mlir fixed . --------- Signed-off-by: Avimitin Co-authored-by: WuXintong123 <13683168028@163.com> Co-authored-by: zhanghb97 Co-authored-by: qingqing12138 Co-authored-by: FloatingcloudKnight <100988241+FloatingcloudKnight@users.noreply.github.com> Co-authored-by: FloatingcloudKnight <‘1348185166@qq.com’> Co-authored-by: Weijia <1627211374@qq.com> Co-authored-by: effrey-liu <64138454+effrey-liu@users.noreply.github.com> Co-authored-by: Wu Xintong <56297184+WuXintong123@users.noreply.github.com> Co-authored-by: Kiva Co-authored-by: Taiqi Zheng <56971484+taiqzheng@users.noreply.github.com> Co-authored-by: Jiongjia Lu Co-authored-by: taiqzheng Co-authored-by: ShiHaoGao <61191871+ShiHaoGao@users.noreply.github.com> --- .gitignore | 3 + .gitmodules | 4 + CMakeLists.txt | 42 +- README.md | 13 +- backend/include/llvm/IR/CMakeLists.txt | 2 +- backend/llvm/lib/Analysis/CMakeLists.txt | 2 +- backend/llvm/lib/AsmParser/CMakeLists.txt | 2 +- .../llvm/lib/Bitcode/Reader/CMakeLists.txt | 2 +- .../llvm/lib/Bitcode/Writer/CMakeLists.txt | 2 +- .../lib/CodeGen/AsmPrinter/CMakeLists.txt | 2 +- backend/llvm/lib/CodeGen/CMakeLists.txt | 2 +- .../llvm/lib/CodeGen/MIRParser/CMakeLists.txt | 2 +- .../lib/CodeGen/SelectionDAG/CMakeLists.txt | 2 +- backend/llvm/lib/IR/CMakeLists.txt | 2 +- backend/llvm/lib/IRReader/CMakeLists.txt | 2 +- backend/llvm/lib/Object/CMakeLists.txt | 2 +- backend/llvm/lib/ProfileData/CMakeLists.txt | 2 +- backend/llvm/lib/Remarks/CMakeLists.txt | 2 +- backend/llvm/lib/Target/CMakeLists.txt | 2 +- backend/llvm/lib/Target/RISCV/CMakeLists.txt | 2 +- .../llvm/lib/Transforms/IPO/CMakeLists.txt | 2 +- .../llvm/lib/Transforms/Scalar/CMakeLists.txt | 2 +- .../llvm/lib/Transforms/Utils/CMakeLists.txt | 2 +- .../lib/Transforms/Vectorize/CMakeLists.txt | 2 +- docs/PythonEnvironment.md | 10 + docs/RVVEnvironment.md | 153 + docs/rvv-enviroment.md | 35 - examples/BuddyBert/CMakeLists.txt | 20 +- examples/BuddyConvolution/.gitignore | 4 + .../conv2d-nhwc-fhwc-opt.mlir | 137 + .../BuddyConvolution/conv2d-nhwc-fhwc.mlir | 88 + examples/BuddyConvolution/conv2d.mlir | 71 + examples/BuddyConvolution/makefile | 127 + examples/BuddyGPU/.gitignore | 3 + examples/BuddyGPU/makefile | 8 + examples/BuddyGPU/matmul.mlir | 12 + examples/BuddyGPU/transform.mlir | 23 + examples/BuddyGen/.gitignore | 4 + examples/BuddyGen/GenMemRef.cpp | 43 + examples/BuddyLeNet/CMakeLists.txt | 23 +- examples/BuddyLeNet/README.md | 4 +- examples/BuddyLeNet/buddy-lenet-main.cpp | 36 +- examples/BuddyLeNet/fake-lenet.mlir | 7 + examples/BuddyLeNet/images/8.bmp | Bin 0 -> 3190 bytes examples/BuddyLeNet/makefile | 69 +- examples/BuddyLlama/CMakeLists.txt | 22 +- examples/BuddyLlama/import-llama2.py | 17 +- examples/BuddyLlama/llama_annotation.mlir | 6012 ++ examples/BuddyMatmul/.gitignore | 1 + .../BuddyMatmul/linalg-batchmatmul-f32.mlir | 82 + examples/BuddyMatmul/makefile | 37 + examples/BuddyMobileNetV3/.gitignore | 7 + examples/BuddyMobileNetV3/CMakeLists.txt | 75 + examples/BuddyMobileNetV3/Labels.txt | 1001 + examples/BuddyMobileNetV3/README.md | 49 + .../buddy-mobilenetv3-import.py | 78 + .../buddy-mobilenetv3-main.cpp | 166 + examples/BuddyMobileNetV3/images/curtain.png | Bin 0 -> 3948 bytes examples/BuddyMobileNetV3/images/dog.png | Bin 0 -> 661378 bytes .../BuddyMobileNetV3/images/ice-cream.png | Bin 0 -> 123232 bytes examples/BuddyMobileNetV3/images/kite.png | Bin 0 -> 47857 bytes .../BuddyMobileNetV3/images/traffic-light.png | Bin 0 -> 57382 bytes examples/BuddyNext/.gitignore | 3 + examples/BuddyNext/makefile | 232 + examples/BuddyNext/next-attention-fusion.mlir | 240 + examples/BuddyNext/next-attention-loop.mlir | 314 + examples/BuddyNext/next-attention.mlir | 91 + examples/BuddyNext/next-rope.mlir | 157 + examples/BuddyNext/next-sigmoid.mlir | 70 + examples/BuddyPython/module_gen.py | 9 +- examples/BuddyWhisper/.gitignore | 6 + examples/BuddyWhisper/CMakeLists.txt | 95 + examples/BuddyWhisper/README.md | 84 + examples/BuddyWhisper/audio.wav | Bin 0 -> 154124 bytes examples/BuddyWhisper/import-whisper.py | 79 + examples/BuddyWhisper/vocab.txt | 51865 ++++++++++++++++ examples/BuddyWhisper/whisper-main.cpp | 183 + examples/CMakeLists.txt | 9 + examples/ConvOpt/CMakeLists.txt | 10 +- examples/DAPDialect/CMakeLists.txt | 17 +- examples/DAPDialect/FIRLowpass.cpp | 89 +- examples/DAPDialect/IIRLowpass.cpp | 89 +- examples/DAPDialect/IIRVectorization.cpp | 91 +- examples/DAPDialect/WhisperPreprocess.cpp | 77 + examples/DAPDialect/biquad.cpp | 79 +- examples/MLIRCF/.gitignore | 3 + examples/MLIRCF/cf-iteration-exit.mlir | 47 + examples/MLIRCF/makefile | 44 + .../MLIRLinalg/linalg-batch-matmul-dync.mlir | 67 + .../MLIRLinalg/linalg-conv2d_nhwc_fhwc.mlir | 96 + .../linalg-depthwise_conv_2d_nhwc_hwc.mlir | 77 + .../MLIRLinalg/linalg-matmul-opt-f32.mlir | 2 +- examples/MLIRLinalg/linalg-matmul-opt-i8.mlir | 2 +- examples/MLIRLinalg/makefile | 53 +- examples/MLIRVector/makefile | 59 +- examples/MLIRVector/vector-iteration.mlir | 32 + examples/RVVDialect/makefile | 74 +- examples/RVVExperiment/makefile | 400 +- examples/RVVExperiment/rvv-c-setvl.c | 2 +- examples/VectorExpDialect/makefile | 87 +- .../vector-exp-predication-matmul.mlir | 4 +- examples/lit.cfg.py | 3 + flake.lock | 12 +- flake.nix | 23 +- frontend/Interfaces/buddy/Core/Container.h | 4 +- .../Interfaces/buddy/DAP/AudioContainer.h | 632 +- frontend/Interfaces/buddy/DAP/DAP.h | 2 +- .../buddy/DAP/DSP/WhisperPreprocess.h | 54 + frontend/Interfaces/buddy/DIP/ImgContainer.h | 254 + frontend/Interfaces/buddy/LLM/TextContainer.h | 34 + frontend/Interfaces/lib/CMakeLists.txt | 57 +- frontend/Interfaces/lib/DAP-extend.mlir | 4 + frontend/Python/frontend.py | 2 + frontend/Python/graph/operation.py | 10 + frontend/Python/ops/func.py | 5 +- frontend/Python/ops/math.py | 3 +- frontend/Python/ops/tosa.py | 419 +- midend/include/Dialect/DAP/DAPOps.td | 48 +- midend/lib/Conversion/CMakeLists.txt | 2 + .../ConvOptimization/CMakeLists.txt | 2 + .../ConvOptimization/ConvNhwcFhwcOptimize.cpp | 276 + .../ConvNhwcFhwcOptimizeTile.cpp | 342 + .../ConvOptimization/ConvOptimize.cpp | 303 +- .../GEMMPointwiseConv2DNhwcHwcf.cpp | 15 +- .../DepthwiseConvOptimization/CMakeLists.txt | 3 + .../DepthwiseConvNhwcHwc.cpp | 331 + .../lib/Conversion/ExtendDAP/CMakeLists.txt | 3 + .../Conversion/ExtendDAP/ExtendDAPPass.cpp | 1637 + .../BatchMatMulOptimize.cpp | 42 +- .../BatchMatMulSCFOptimize.cpp | 281 + .../BatchMatMulTileOptimize.cpp | 353 + .../MatMulOptimization/CMakeLists.txt | 12 +- .../MatMulParallelVectorization.cpp | 4 +- nix/buddy-llvm.nix | 76 + nix/buddy-mlir.nix | 105 +- nix/overlay.nix | 6 +- requirements.txt | 3 + tests/CMakeLists.txt | 2 + tests/Interface/core/AudioContainerTest.cpp | 68 +- tests/Interface/core/CMakeLists.txt | 6 +- .../Interface/core/NewImageContainerTest.cpp | 58 + tests/Interface/core/TestAudio.wav | Bin 0 -> 154124 bytes tests/Interface/core/TestImage.bmp | Bin 0 -> 3190 bytes tests/lit.cfg.py | 1 + tests/lit.site.cfg.py.in | 2 +- thirdparty/.gitignore | 12 - thirdparty/build-rvv-env.sh | 169 - thirdparty/mimalloc | 2 +- thirdparty/riscv-gnu-toolchain | 1 + tools/buddy-llc/CMakeLists.txt | 2 +- tools/buddy-opt/CMakeLists.txt | 4 + tools/buddy-opt/buddy-opt.cpp | 24 +- 152 files changed, 68143 insertions(+), 1034 deletions(-) create mode 100644 docs/PythonEnvironment.md create mode 100644 docs/RVVEnvironment.md delete mode 100644 docs/rvv-enviroment.md create mode 100644 examples/BuddyConvolution/.gitignore create mode 100644 examples/BuddyConvolution/conv2d-nhwc-fhwc-opt.mlir create mode 100644 examples/BuddyConvolution/conv2d-nhwc-fhwc.mlir create mode 100644 examples/BuddyConvolution/conv2d.mlir create mode 100644 examples/BuddyConvolution/makefile create mode 100644 examples/BuddyGPU/.gitignore create mode 100644 examples/BuddyGPU/makefile create mode 100644 examples/BuddyGPU/matmul.mlir create mode 100644 examples/BuddyGPU/transform.mlir create mode 100644 examples/BuddyGen/.gitignore create mode 100644 examples/BuddyGen/GenMemRef.cpp create mode 100644 examples/BuddyLeNet/images/8.bmp create mode 100644 examples/BuddyLlama/llama_annotation.mlir create mode 100644 examples/BuddyMatmul/.gitignore create mode 100644 examples/BuddyMatmul/linalg-batchmatmul-f32.mlir create mode 100644 examples/BuddyMatmul/makefile create mode 100644 examples/BuddyMobileNetV3/.gitignore create mode 100644 examples/BuddyMobileNetV3/CMakeLists.txt create mode 100644 examples/BuddyMobileNetV3/Labels.txt create mode 100644 examples/BuddyMobileNetV3/README.md create mode 100644 examples/BuddyMobileNetV3/buddy-mobilenetv3-import.py create mode 100644 examples/BuddyMobileNetV3/buddy-mobilenetv3-main.cpp create mode 100644 examples/BuddyMobileNetV3/images/curtain.png create mode 100644 examples/BuddyMobileNetV3/images/dog.png create mode 100644 examples/BuddyMobileNetV3/images/ice-cream.png create mode 100644 examples/BuddyMobileNetV3/images/kite.png create mode 100644 examples/BuddyMobileNetV3/images/traffic-light.png create mode 100644 examples/BuddyNext/.gitignore create mode 100644 examples/BuddyNext/makefile create mode 100644 examples/BuddyNext/next-attention-fusion.mlir create mode 100644 examples/BuddyNext/next-attention-loop.mlir create mode 100644 examples/BuddyNext/next-attention.mlir create mode 100644 examples/BuddyNext/next-rope.mlir create mode 100644 examples/BuddyNext/next-sigmoid.mlir create mode 100644 examples/BuddyWhisper/.gitignore create mode 100644 examples/BuddyWhisper/CMakeLists.txt create mode 100644 examples/BuddyWhisper/README.md create mode 100644 examples/BuddyWhisper/audio.wav create mode 100644 examples/BuddyWhisper/import-whisper.py create mode 100644 examples/BuddyWhisper/vocab.txt create mode 100644 examples/BuddyWhisper/whisper-main.cpp create mode 100644 examples/DAPDialect/WhisperPreprocess.cpp create mode 100644 examples/MLIRCF/.gitignore create mode 100644 examples/MLIRCF/cf-iteration-exit.mlir create mode 100644 examples/MLIRCF/makefile create mode 100644 examples/MLIRLinalg/linalg-batch-matmul-dync.mlir create mode 100644 examples/MLIRLinalg/linalg-conv2d_nhwc_fhwc.mlir create mode 100644 examples/MLIRLinalg/linalg-depthwise_conv_2d_nhwc_hwc.mlir create mode 100644 examples/MLIRVector/vector-iteration.mlir create mode 100644 frontend/Interfaces/buddy/DAP/DSP/WhisperPreprocess.h create mode 100644 frontend/Interfaces/buddy/DIP/ImgContainer.h create mode 100644 frontend/Interfaces/lib/DAP-extend.mlir create mode 100644 midend/lib/Conversion/ConvOptimization/ConvNhwcFhwcOptimize.cpp create mode 100644 midend/lib/Conversion/ConvOptimization/ConvNhwcFhwcOptimizeTile.cpp create mode 100644 midend/lib/Conversion/DepthwiseConvOptimization/CMakeLists.txt create mode 100644 midend/lib/Conversion/DepthwiseConvOptimization/DepthwiseConvNhwcHwc.cpp create mode 100644 midend/lib/Conversion/ExtendDAP/CMakeLists.txt create mode 100644 midend/lib/Conversion/ExtendDAP/ExtendDAPPass.cpp create mode 100644 midend/lib/Conversion/MatMulOptimization/BatchMatMulSCFOptimize.cpp create mode 100644 midend/lib/Conversion/MatMulOptimization/BatchMatMulTileOptimize.cpp create mode 100644 nix/buddy-llvm.nix create mode 100644 tests/Interface/core/NewImageContainerTest.cpp create mode 100644 tests/Interface/core/TestAudio.wav create mode 100644 tests/Interface/core/TestImage.bmp delete mode 100644 thirdparty/.gitignore delete mode 100755 thirdparty/build-rvv-env.sh create mode 160000 thirdparty/riscv-gnu-toolchain diff --git a/.gitignore b/.gitignore index 485cccfcf..29234d44d 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,6 @@ # Clangd cache .cache + +# Clangd configurations +.clangd diff --git a/.gitmodules b/.gitmodules index 00d892bd3..77bef44d1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,7 @@ path = thirdparty/mimalloc url = https://github.com/microsoft/mimalloc.git shallow = true +[submodule "thirdparty/riscv-gnu-toolchain"] + path = thirdparty/riscv-gnu-toolchain + url = https://github.com/riscv-collab/riscv-gnu-toolchain.git + shallow = true diff --git a/CMakeLists.txt b/CMakeLists.txt index 841444541..486346744 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,7 @@ project(buddy-mlir LANGUAGES CXX C) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED YES) +include(ExternalProject) #------------------------------------------------------------------------------- # Options and settings @@ -41,13 +42,15 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR BUDDY_MLIR_OUT_OF_TREE_ message(STATUS "Using MLIRConfig.cmake in: ${MLIR_DIR}") message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") - set(LLVM_MLIR_BINARY_DIR ${MLIR_DIR}/../../../bin) - set(LLVM_MLIR_LIBRARY_DIR ${MLIR_DIR}/../../../lib) - set(LLVM_PROJECT_BUILD_DIR ${MLIR_DIR}/../../../) - if(NOT DEFINED LLVM_PROJECT_SOURCE_DIR) - get_filename_component(LLVM_PROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/llvm/ ABSOLUTE) + # LLVM_MAIN_SRC_DIR is a private variable for the LLVM in-tree build. + # To provide compatibility for unifying the one-step and two-step build, + # we set LLVM_MAIN_SRC_DIR ourselves here. + # This could benefit users who want to specify a custom LLVM source directory, + # but also not interfere with normal users who just want to use the buddy-mlir provided LLVM sources. + if(NOT DEFINED LLVM_MAIN_SRC_DIR) + get_filename_component(LLVM_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/llvm/llvm ABSOLUTE) endif() - set(LLVM_MLIR_SOURCE_DIR ${LLVM_PROJECT_SOURCE_DIR}/mlir) + set(MLIR_MAIN_SRC_DIR ${LLVM_MAIN_SRC_DIR}/../mlir) list(APPEND CMAKE_MODULE_PATH "${MLIR_CMAKE_DIR}") list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}") @@ -65,16 +68,9 @@ else() #------------------------------------------------------------------------------- # MLIR/LLVM Configuration #------------------------------------------------------------------------------- - - # Allow using out-of-tree llvm directory - set(LLVM_PROJECT_SOURCE_DIR ${LLVM_MAIN_SRC_DIR}/..) - message(STATUS "Using LLVM Project ${LLVM_PROJECT_SOURCE_DIR}") - set(MLIR_MAIN_SRC_DIR ${LLVM_MAIN_SRC_DIR}/../mlir) set(MLIR_INCLUDE_DIR ${MLIR_MAIN_SRC_DIR}/include) set(MLIR_GENERATED_INCLUDE_DIR ${LLVM_BINARY_DIR}/tools/mlir/include) - set(LLVM_MLIR_BINARY_DIR ${CMAKE_BINARY_DIR}/bin) - set(MLIR_INCLUDE_DIRS "${MLIR_INCLUDE_DIR};${MLIR_GENERATED_INCLUDE_DIR}") endif() #------------------------------------------------------------------------------- @@ -188,6 +184,24 @@ if(BUDDY_MLIR_USE_MIMALLOC) find_package(mimalloc REQUIRED) endif() +#------------------------------------------------------------------------------- +# The RISC-V toolchain +#------------------------------------------------------------------------------- + +if(BUDDY_MLIR_ENABLE_RISCV_GNU_TOOLCHAIN) + set(RISCV_GNU_TOOLCHAIN_DIR "${BUDDY_SOURCE_DIR}/thirdparty/riscv-gnu-toolchain") + set(RISCV_GNU_TOOLCHAIN_INSTALL_DIR "${CMAKE_BINARY_DIR}/thirdparty/riscv-gnu-toolchain") + ExternalProject_Add( + riscv-gnu-toolchain + SOURCE_DIR ${RISCV_GNU_TOOLCHAIN_DIR} + PREFIX ${RISCV_GNU_TOOLCHAIN_INSTALL_DIR} + CONFIGURE_COMMAND ${RISCV_GNU_TOOLCHAIN_DIR}/configure --prefix=${RISCV_GNU_TOOLCHAIN_INSTALL_DIR} + BUILD_COMMAND make clean && make linux build-qemu -j + BUILD_IN_SOURCE TRUE + INSTALL_COMMAND "" + ) +endif() + #------------------------------------------------------------------------------- # Initialize Python packages #------------------------------------------------------------------------------- @@ -201,6 +215,8 @@ if(BUDDY_MLIR_ENABLE_PYTHON_PACKAGES) # Create empty __init__.py files to make these directories Python packages file(WRITE ${BUDDY_MLIR_PYTHON_PACKAGES_DIR}/buddy/__init__.py "") file(WRITE ${BUDDY_MLIR_PYTHON_PACKAGES_DIR}/buddy/compiler/__init__.py "") + + install(DIRECTORY ${BUDDY_MLIR_PYTHON_PACKAGES_DIR}/buddy DESTINATION python_packages) endif() #------------------------------------------------------------------------------- diff --git a/README.md b/README.md index cb9a5f1c2..be650591b 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,17 @@ If you want to add domain-specific framework support, please add the following c | -------------- | ------------- | ------------- | | OpenCV | `-DBUDDY_ENABLE_OPENCV=ON` | Add `-DOpenCV_DIR=` or install OpenCV release version on your local device. | +To build buddy-mlir with custom LLVM sources: + +``` +$ cmake -G Ninja .. \ + -DMLIR_DIR=PATH/TO/LLVM/lib/cmake/mlir \ + -DLLVM_DIR=PATH/TO/LLVM/lib/cmake/llvm \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DLLVM_MAIN_SRC_DIR=PATH/TO/LLVM_SOURCE +``` +

One-step building strategy

If you only want to use our tools and integrate them more easily into your projects, you can choose to use the one-step build strategy. @@ -134,7 +145,7 @@ This repository have nix flake support. You can follow the [nix installation ins nix develop . ``` -This will setup a bash shell with `clang`, `clangd`, `cmake`, `ninja`, and other necessary dependencies to build buddy-mlir from source. +This will setup a bash shell with `clang`, `ccls`, `cmake`, `ninja`, and other necessary dependencies to build buddy-mlir from source. - If you want to use the buddy-mlir bintools diff --git a/backend/include/llvm/IR/CMakeLists.txt b/backend/include/llvm/IR/CMakeLists.txt index b3447eae6..2de6b999b 100644 --- a/backend/include/llvm/IR/CMakeLists.txt +++ b/backend/include/llvm/IR/CMakeLists.txt @@ -1,4 +1,4 @@ -include_directories(${LLVM_PROJECT_SOURCE_DIR}/llvm/include/llvm/IR/) +include_directories(${LLVM_MAIN_SRC_DIR}/include/llvm/IR/) set(LLVM_TARGET_DEFINITIONS IntrinsicsBuddyExt.td) tablegen(LLVM IntrinsicImpl.inc -gen-intrinsic-impl) diff --git a/backend/llvm/lib/Analysis/CMakeLists.txt b/backend/llvm/lib/Analysis/CMakeLists.txt index 2a3a65971..117f75d89 100644 --- a/backend/llvm/lib/Analysis/CMakeLists.txt +++ b/backend/llvm/lib/Analysis/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_Analysis_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Analysis) +set(LLVM_Analysis_DIR ${LLVM_MAIN_SRC_DIR}/lib/Analysis) add_llvm_component_library(LLVMBuddyAnalysis diff --git a/backend/llvm/lib/AsmParser/CMakeLists.txt b/backend/llvm/lib/AsmParser/CMakeLists.txt index b5411d100..d687d1d3b 100644 --- a/backend/llvm/lib/AsmParser/CMakeLists.txt +++ b/backend/llvm/lib/AsmParser/CMakeLists.txt @@ -1,6 +1,6 @@ # AsmParser -set(LLVM_AsmParser_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/AsmParser) +set(LLVM_AsmParser_DIR ${LLVM_MAIN_SRC_DIR}/lib/AsmParser) add_llvm_component_library(LLVMBuddyAsmParser ${LLVM_AsmParser_DIR}/LLLexer.cpp diff --git a/backend/llvm/lib/Bitcode/Reader/CMakeLists.txt b/backend/llvm/lib/Bitcode/Reader/CMakeLists.txt index cf92a543f..7ea904801 100644 --- a/backend/llvm/lib/Bitcode/Reader/CMakeLists.txt +++ b/backend/llvm/lib/Bitcode/Reader/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_Reader_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Bitcode/Reader) +set(LLVM_Reader_DIR ${LLVM_MAIN_SRC_DIR}/lib/Bitcode/Reader) add_llvm_component_library(LLVMBuddyBitReader ${LLVM_Reader_DIR}/BitcodeAnalyzer.cpp diff --git a/backend/llvm/lib/Bitcode/Writer/CMakeLists.txt b/backend/llvm/lib/Bitcode/Writer/CMakeLists.txt index f19595cea..a8b7f0c27 100644 --- a/backend/llvm/lib/Bitcode/Writer/CMakeLists.txt +++ b/backend/llvm/lib/Bitcode/Writer/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_Writer_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Bitcode/Writer) +set(LLVM_Writer_DIR ${LLVM_MAIN_SRC_DIR}/lib/Bitcode/Writer) add_llvm_component_library(LLVMBuddyBitWriter diff --git a/backend/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt b/backend/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt index fe3273dd5..b942f4f73 100644 --- a/backend/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt +++ b/backend/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_AsmPrinter_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/CodeGen/AsmPrinter) +set(LLVM_AsmPrinter_DIR ${LLVM_MAIN_SRC_DIR}/lib/CodeGen/AsmPrinter) add_llvm_component_library(LLVMBuddyAsmPrinter ${LLVM_AsmPrinter_DIR}/AccelTable.cpp diff --git a/backend/llvm/lib/CodeGen/CMakeLists.txt b/backend/llvm/lib/CodeGen/CMakeLists.txt index 1794b38fa..7eb38876d 100644 --- a/backend/llvm/lib/CodeGen/CMakeLists.txt +++ b/backend/llvm/lib/CodeGen/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_CodeGen_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/CodeGen) +set(LLVM_CodeGen_DIR ${LLVM_MAIN_SRC_DIR}/lib/CodeGen) add_llvm_component_library(LLVMBuddyCodeGen ${LLVM_CodeGen_DIR}/AggressiveAntiDepBreaker.cpp diff --git a/backend/llvm/lib/CodeGen/MIRParser/CMakeLists.txt b/backend/llvm/lib/CodeGen/MIRParser/CMakeLists.txt index 6275b1ece..1ab94ee93 100644 --- a/backend/llvm/lib/CodeGen/MIRParser/CMakeLists.txt +++ b/backend/llvm/lib/CodeGen/MIRParser/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_MIRParser_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/CodeGen/MIRParser) +set(LLVM_MIRParser_DIR ${LLVM_MAIN_SRC_DIR}/lib/CodeGen/MIRParser) add_llvm_component_library(LLVMBuddyMIRParser ${LLVM_MIRParser_DIR}/MILexer.cpp diff --git a/backend/llvm/lib/CodeGen/SelectionDAG/CMakeLists.txt b/backend/llvm/lib/CodeGen/SelectionDAG/CMakeLists.txt index 4bb3cde98..3b467a4ed 100644 --- a/backend/llvm/lib/CodeGen/SelectionDAG/CMakeLists.txt +++ b/backend/llvm/lib/CodeGen/SelectionDAG/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_SelectionDAG_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/CodeGen/SelectionDAG) +set(LLVM_SelectionDAG_DIR ${LLVM_MAIN_SRC_DIR}/lib/CodeGen/SelectionDAG) add_llvm_component_library(LLVMBuddySelectionDAG ${LLVM_SelectionDAG_DIR}/DAGCombiner.cpp diff --git a/backend/llvm/lib/IR/CMakeLists.txt b/backend/llvm/lib/IR/CMakeLists.txt index e6895a1f8..0d5618473 100644 --- a/backend/llvm/lib/IR/CMakeLists.txt +++ b/backend/llvm/lib/IR/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_IR_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/IR) +set(LLVM_IR_DIR ${LLVM_MAIN_SRC_DIR}/lib/IR) add_llvm_component_library(LLVMBuddyCore ${LLVM_IR_DIR}/AbstractCallSite.cpp diff --git a/backend/llvm/lib/IRReader/CMakeLists.txt b/backend/llvm/lib/IRReader/CMakeLists.txt index 9b315dec3..72e95722a 100644 --- a/backend/llvm/lib/IRReader/CMakeLists.txt +++ b/backend/llvm/lib/IRReader/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_IRReader_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/IRReader) +set(LLVM_IRReader_DIR ${LLVM_MAIN_SRC_DIR}/lib/IRReader) add_llvm_component_library(LLVMBuddyIRReader ${LLVM_IRReader_DIR}/IRReader.cpp diff --git a/backend/llvm/lib/Object/CMakeLists.txt b/backend/llvm/lib/Object/CMakeLists.txt index 8695d55ba..a8425e97c 100644 --- a/backend/llvm/lib/Object/CMakeLists.txt +++ b/backend/llvm/lib/Object/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_Object_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Object) +set(LLVM_Object_DIR ${LLVM_MAIN_SRC_DIR}/lib/Object) add_llvm_component_library(LLVMBuddyObject ${LLVM_Object_DIR}/Archive.cpp diff --git a/backend/llvm/lib/ProfileData/CMakeLists.txt b/backend/llvm/lib/ProfileData/CMakeLists.txt index 9ae05a36f..742ecf662 100644 --- a/backend/llvm/lib/ProfileData/CMakeLists.txt +++ b/backend/llvm/lib/ProfileData/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_ProfileData_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/ProfileData) +set(LLVM_ProfileData_DIR ${LLVM_MAIN_SRC_DIR}/lib/ProfileData) add_llvm_component_library(LLVMBuddyProfileData ${LLVM_ProfileData_DIR}/GCOV.cpp diff --git a/backend/llvm/lib/Remarks/CMakeLists.txt b/backend/llvm/lib/Remarks/CMakeLists.txt index 4ed877577..5c1c81b7d 100644 --- a/backend/llvm/lib/Remarks/CMakeLists.txt +++ b/backend/llvm/lib/Remarks/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_Remarks_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Remarks) +set(LLVM_Remarks_DIR ${LLVM_MAIN_SRC_DIR}/lib/Remarks) add_llvm_component_library(LLVMBuddyRemarks ${LLVM_Remarks_DIR}/BitstreamRemarkParser.cpp diff --git a/backend/llvm/lib/Target/CMakeLists.txt b/backend/llvm/lib/Target/CMakeLists.txt index c6298c383..1dd5cd34f 100644 --- a/backend/llvm/lib/Target/CMakeLists.txt +++ b/backend/llvm/lib/Target/CMakeLists.txt @@ -2,7 +2,7 @@ list(APPEND LLVM_COMMON_DEPENDS buddy_intrinsics_gen) list(APPEND LLVM_TABLEGEN_FLAGS -I ${LLVM_MAIN_SRC_DIR}/lib/Target) -set(LLVM_Target_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Target) +set(LLVM_Target_DIR ${LLVM_MAIN_SRC_DIR}/lib/Target) add_llvm_component_library(LLVMBuddyTarget ${LLVM_Target_DIR}/Target.cpp diff --git a/backend/llvm/lib/Target/RISCV/CMakeLists.txt b/backend/llvm/lib/Target/RISCV/CMakeLists.txt index 4a66f6529..6bfee7c2f 100644 --- a/backend/llvm/lib/Target/RISCV/CMakeLists.txt +++ b/backend/llvm/lib/Target/RISCV/CMakeLists.txt @@ -21,7 +21,7 @@ macro(buddy_add_llvm_target target_name) set( CURRENT_LLVM_TARGET LLVM${target_name} ) endmacro(buddy_add_llvm_target) -set(LLVM_TARGET_RISCV_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Target/RISCV) +set(LLVM_TARGET_RISCV_DIR ${LLVM_MAIN_SRC_DIR}/lib/Target/RISCV) # ------------------------------------------------------------------------------ # Configure RISC-V Buddy Extension. diff --git a/backend/llvm/lib/Transforms/IPO/CMakeLists.txt b/backend/llvm/lib/Transforms/IPO/CMakeLists.txt index 74ff79863..08392abf8 100644 --- a/backend/llvm/lib/Transforms/IPO/CMakeLists.txt +++ b/backend/llvm/lib/Transforms/IPO/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_IPO_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Transforms/IPO) +set(LLVM_IPO_DIR ${LLVM_MAIN_SRC_DIR}/lib/Transforms/IPO) add_llvm_component_library(LLVMBuddyIPO ${LLVM_IPO_DIR}/AlwaysInliner.cpp diff --git a/backend/llvm/lib/Transforms/Scalar/CMakeLists.txt b/backend/llvm/lib/Transforms/Scalar/CMakeLists.txt index c3c412b9a..6bbcf432e 100644 --- a/backend/llvm/lib/Transforms/Scalar/CMakeLists.txt +++ b/backend/llvm/lib/Transforms/Scalar/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_Scalar_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Transforms/Scalar) +set(LLVM_Scalar_DIR ${LLVM_MAIN_SRC_DIR}/lib/Transforms/Scalar) add_llvm_component_library(LLVMBuddyScalarOpts ${LLVM_Scalar_DIR}/ADCE.cpp diff --git a/backend/llvm/lib/Transforms/Utils/CMakeLists.txt b/backend/llvm/lib/Transforms/Utils/CMakeLists.txt index 989a672ed..e3313e07b 100644 --- a/backend/llvm/lib/Transforms/Utils/CMakeLists.txt +++ b/backend/llvm/lib/Transforms/Utils/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_Utils_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Transforms/Utils) +set(LLVM_Utils_DIR ${LLVM_MAIN_SRC_DIR}/lib/Transforms/Utils) add_llvm_component_library(LLVMBuddyTransformUtils diff --git a/backend/llvm/lib/Transforms/Vectorize/CMakeLists.txt b/backend/llvm/lib/Transforms/Vectorize/CMakeLists.txt index e9cece2c4..669aae585 100644 --- a/backend/llvm/lib/Transforms/Vectorize/CMakeLists.txt +++ b/backend/llvm/lib/Transforms/Vectorize/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_Vectorize_DIR ${LLVM_PROJECT_SOURCE_DIR}/llvm/lib/Transforms/Vectorize) +set(LLVM_Vectorize_DIR ${LLVM_MAIN_SRC_DIR}/lib/Transforms/Vectorize) add_llvm_component_library(LLVMBuddyVectorize ${LLVM_Vectorize_DIR}/LoadStoreVectorizer.cpp diff --git a/docs/PythonEnvironment.md b/docs/PythonEnvironment.md new file mode 100644 index 000000000..77f431e85 --- /dev/null +++ b/docs/PythonEnvironment.md @@ -0,0 +1,10 @@ +# Python Virtual Environment Setup Guide for Buddy-mlir + +We recommend you to use anaconda3 to create python virtual environment. You should install python packages as buddy-mlir/requirements. + +```bash +$ conda create -n python=3.11 +$ conda activate +$ cd buddy-mlir +$ pip install -r requirements.txt +``` \ No newline at end of file diff --git a/docs/RVVEnvironment.md b/docs/RVVEnvironment.md new file mode 100644 index 000000000..ddca0ab8f --- /dev/null +++ b/docs/RVVEnvironment.md @@ -0,0 +1,153 @@ +# Environment Setup Guide for MLIR and RVV Testing and Experiments + +This guide provides instructions on setting up an environment to test the RISC-V Vector Extension using the buddy-mlir project. +The target platform for emulation is QEMU. + +## Requirements + +Before proceed any further make sure that you installed dependencies below + +* [LLVM dependecies](https://llvm.org/docs/GettingStarted.html#requirements) +* [GNU Toolchain dependecies](https://github.com/riscv-collab/riscv-gnu-toolchain#prerequisites) +* [QEMU dependecies](https://wiki.qemu.org/Hosts/Linux) + +## Build Steps + +> **_NOTE:_** The build process includes several heavy stages. It may take significant time to clone and build all components. + +0. Prepare `buddy-mlir` and Submodules + +``` +$ git clone https://github.com/buddy-compiler/buddy-mlir.git +$ cd buddy-mlir +$ git submodule update --init +``` + +1. Build Local LLVM/MLIR + +``` +$ cd buddy-mlir +$ mkdir llvm/build +$ cd llvm/build +$ cmake -G Ninja ../llvm \ + -DLLVM_ENABLE_PROJECTS="mlir;clang;openmp" \ + -DLLVM_TARGETS_TO_BUILD="host;RISCV" \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DOPENMP_ENABLE_LIBOMPTARGET=OFF \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DMLIR_ENABLE_BINDINGS_PYTHON=ON \ + -DPython3_EXECUTABLE=$(which python3) +$ ninja check-clang check-mlir omp +$ export BUILD_LOCAL_LLVM_DIR=$PWD +``` + +2. Build Local `buddy-mlir` + +``` +$ cd buddy-mlir +$ mkdir build +$ cd build +$ cmake -G Ninja .. \ + -DMLIR_DIR=$PWD/../llvm/build/lib/cmake/mlir \ + -DLLVM_DIR=$PWD/../llvm/build/lib/cmake/llvm \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DBUDDY_MLIR_ENABLE_RISCV_GNU_TOOLCHAIN=ON \ + -DBUDDY_MLIR_ENABLE_PYTHON_PACKAGES=ON \ + -DPython3_EXECUTABLE=$(which python3) +$ ninja +$ ninja check-buddy +$ export BUILD_RISCV_GNU_TOOLCHAIN_DIR=$PWD/thirdparty/riscv-gnu-toolchain/ +$ export RISCV_GNU_TOOLCHAIN_SYSROOT_DIR=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}/sysroot/ +``` + +3. Build Cross-Compiled Clang + +``` +$ cd buddy-mlir +$ mkdir llvm/build-cross-clang-rv +$ cd llvm/build-cross-clang-rv +$ cmake -G Ninja ../llvm \ + -DLLVM_ENABLE_PROJECTS="clang" \ + -DLLVM_TARGETS_TO_BUILD="RISCV" \ + -DCMAKE_SYSTEM_NAME=Linux \ + -DCMAKE_C_COMPILER=${BUILD_LOCAL_LLVM_DIR}/bin/clang \ + -DCMAKE_CXX_COMPILER=${BUILD_LOCAL_LLVM_DIR}/bin/clang++ \ + -DCMAKE_C_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT_DIR} --gcc-toolchain=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}" \ + -DCMAKE_CXX_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT_DIR} --gcc-toolchain=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}" \ + -DLLVM_TABLEGEN=${BUILD_LOCAL_LLVM_DIR}/bin/llvm-tblgen \ + -DCLANG_TABLEGEN=${BUILD_LOCAL_LLVM_DIR}/bin/clang-tblgen \ + -DLLVM_DEFAULT_TARGET_TRIPLE=riscv64-unknown-linux-gnu \ + -DLLVM_TARGET_ARCH=RISCV64 \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_ENABLE_ZSTD=Off +$ ninja clang lli +``` + +4. Build Cross-Compiled MLIR + +``` +$ cd buddy-mlir +$ mkdir llvm/build-cross-mlir-rv +$ cd llvm/build-cross-mlir-rv +$ cmake -G Ninja ../../llvm/llvm \ + -DLLVM_ENABLE_PROJECTS="mlir" \ + -DLLVM_BUILD_EXAMPLES=OFF \ + -DCMAKE_CROSSCOMPILING=True \ + -DLLVM_TARGET_ARCH=RISCV64 \ + -DLLVM_TARGETS_TO_BUILD=RISCV \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DLLVM_NATIVE_ARCH=RISCV \ + -DLLVM_HOST_TRIPLE=riscv64-unknown-linux-gnu \ + -DLLVM_DEFAULT_TARGET_TRIPLE=riscv64-unknown-linux-gnu \ + -DCMAKE_C_COMPILER=${BUILD_LOCAL_LLVM_DIR}/bin/clang \ + -DCMAKE_CXX_COMPILER=${BUILD_LOCAL_LLVM_DIR}/bin/clang++ \ + -DCMAKE_C_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT_DIR} --gcc-toolchain=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}" \ + -DCMAKE_CXX_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT_DIR} --gcc-toolchain=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}" \ + -DMLIR_TABLEGEN=${BUILD_LOCAL_LLVM_DIR}/bin/mlir-tblgen \ + -DLLVM_TABLEGEN=${BUILD_LOCAL_LLVM_DIR}/bin/llvm-tblgen \ + -DMLIR_LINALG_ODS_YAML_GEN=${BUILD_LOCAL_LLVM_DIR}/bin/mlir-linalg-ods-yaml-gen \ + -DMLIR_PDLL_TABLEGEN=${BUILD_LOCAL_LLVM_DIR}/bin/mlir-pdll \ + -DLLVM_ENABLE_ZSTD=Off +$ ninja +$ export BUILD_CROSS_MLIR_DIR=$PWD +``` + +5. Build Cross-Compiled `buddy-mlir` + +``` +$ cd buddy-mlir +$ mkdir build-cross-rv +$ cd build-cross-rv +$ cmake -G Ninja .. \ + -DCMAKE_SYSTEM_NAME=Linux \ + -DMLIR_DIR=${BUILD_CROSS_MLIR_DIR}/lib/cmake/mlir \ + -DLLVM_DIR=${BUILD_CROSS_MLIR_DIR}/lib/cmake/llvm \ + -DCMAKE_CROSSCOMPILING=True \ + -DLLVM_TARGETS_TO_BUILD=RISCV \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DLLVM_NATIVE_ARCH=RISCV \ + -DLLVM_HOST_TRIPLE=riscv64-unknown-linux-gnu \ + -DCMAKE_C_COMPILER=${BUILD_LOCAL_LLVM_DIR}/bin/clang \ + -DCMAKE_CXX_COMPILER=${BUILD_LOCAL_LLVM_DIR}/bin/clang++ \ + -DCMAKE_C_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT_DIR} --gcc-toolchain=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}" \ + -DCMAKE_CXX_FLAGS="--target=riscv64-unknown-linux-gnu --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT_DIR} --gcc-toolchain=${BUILD_RISCV_GNU_TOOLCHAIN_DIR}" \ + -DLLVM_ENABLE_ZSTD=Off +$ ninja StaticMLIRCRunnerUtils StaticMLIRRunnerUtils +``` + +## Testing RVV Environment + +``` +$ cd buddy-mlir +$ cd examples/RVVDialect/ +$ make rvv-mul-add-run + +// Expected Output: +Unranked Memref base@ = 0x55555729aaa0 rank = 1 offset = 0 sizes = [20] strides = [1] data = +[0, 12, 26, 42, 60, 80, 102, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] +``` + +Congratulations! Your RVV environment is now fully set up. Enjoy exploring and testing! diff --git a/docs/rvv-enviroment.md b/docs/rvv-enviroment.md deleted file mode 100644 index f48a8262d..000000000 --- a/docs/rvv-enviroment.md +++ /dev/null @@ -1,35 +0,0 @@ -# Setting up environment for testing MLIR RVV dialect - -This guide will help to set up environment for testing RISC-V Vector Extension using buddy-mlir project and -corresponding RVV Dialect. As a target platform QEMU emulator is used. - -## Requirements - -Before proceed any further make sure that you installed dependencies below - -* [LLVM dependecies](https://llvm.org/docs/GettingStarted.html#requirements) -* [GNU Toolchain dependecies](https://github.com/riscv-collab/riscv-gnu-toolchain#prerequisites) -* [QEMU dependecies](https://wiki.qemu.org/Hosts/Linux) - -## Build steps - -1. Clone buddy-mlir project -``` bash -git clone git@github.com:buddy-compiler/buddy-mlir.git -cd buddy-mlir -git submodule update --init -``` -> **_NOTE:_** `buddly-mlir` contains `llvm-project` as a submodule. `llvm-project` is large, so cloning will take a while - -2. Run a script building environment -``` -cd buddy-mlir/thirdparty -./build-rvv-env.sh -``` -> **_NOTE:_** The scripts consist of multiple heavy stages, so be patient - it will take a while to clone and build -everything. -Detailed description of the steps can be found in [the page](https://gist.github.com/zhanghb97/ad44407e169de298911b8a4235e68497) - -> **_NOTE:_** By default, the script allows `make` to use all available threads for compilation. It may lead -to consuming a lot of memory and crashing the compiler. If you face with the issue, try to limit the number of threads -by passing a corresponding argument to the script. For example, `./build-rvv-env.sh 4` diff --git a/examples/BuddyBert/CMakeLists.txt b/examples/BuddyBert/CMakeLists.txt index 93dc7c2da..95c98dfa9 100644 --- a/examples/BuddyBert/CMakeLists.txt +++ b/examples/BuddyBert/CMakeLists.txt @@ -7,13 +7,13 @@ add_custom_command( add_custom_command( OUTPUT forward.o - COMMAND ${LLVM_MLIR_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyBert/forward.mlir + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyBert/forward.mlir -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith), empty-tensor-to-alloc-tensor, convert-elementwise-to-linalg, arith-bufferize, func.func(linalg-bufferize, tensor-bufferize), func-bufferize)" | - ${LLVM_MLIR_BINARY_DIR}/mlir-opt + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -pass-pipeline "builtin.module(func.func(buffer-deallocation-simplification, convert-linalg-to-loops), eliminate-empty-tensors, func.func(llvm-request-c-wrappers),convert-math-to-llvm, convert-math-to-libm, convert-scf-to-cf, convert-arith-to-llvm, expand-strided-metadata, finalize-memref-to-llvm, convert-func-to-llvm, reconcile-unrealized-casts)" | - ${LLVM_MLIR_BINARY_DIR}/mlir-translate -mlir-to-llvmir | - ${LLVM_MLIR_BINARY_DIR}/llvm-as | - ${LLVM_MLIR_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${BUDDY_BINARY_DIR}/../examples/BuddyBert/forward.o + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${BUDDY_BINARY_DIR}/../examples/BuddyBert/forward.o DEPENDS ${BUDDY_EXAMPLES_DIR}/BuddyBert/forward.mlir COMMENT "Building forward.o" VERBATIM) @@ -22,11 +22,11 @@ add_custom_command( OUTPUT subgraph0.o COMMAND ${BUDDY_BINARY_DIR}/buddy-opt ${BUDDY_EXAMPLES_DIR}/BuddyBert/subgraph0.mlir -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith), empty-tensor-to-alloc-tensor, convert-elementwise-to-linalg, func-bufferize-dynamic-offset, arith-bufferize, func.func(linalg-bufferize, tensor-bufferize))" | - ${LLVM_MLIR_BINARY_DIR}/mlir-opt + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -pass-pipeline "builtin.module(func.func(buffer-deallocation-simplification, convert-linalg-to-loops), eliminate-empty-tensors, func.func(llvm-request-c-wrappers),convert-math-to-llvm, convert-math-to-libm, convert-scf-to-cf, convert-arith-to-llvm, expand-strided-metadata, finalize-memref-to-llvm, convert-func-to-llvm, reconcile-unrealized-casts)" | - ${LLVM_MLIR_BINARY_DIR}/mlir-translate -mlir-to-llvmir | - ${LLVM_MLIR_BINARY_DIR}/llvm-as | - ${LLVM_MLIR_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${BUDDY_BINARY_DIR}/../examples/BuddyBert/subgraph0.o + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${BUDDY_BINARY_DIR}/../examples/BuddyBert/subgraph0.o DEPENDS ${BUDDY_EXAMPLES_DIR}/BuddyBert/subgraph0.mlir COMMENT "Building subgraph0.o" VERBATIM) @@ -36,7 +36,7 @@ add_library(BERT STATIC forward.o subgraph0.o) SET_TARGET_PROPERTIES(BERT PROPERTIES LINKER_LANGUAGE C) add_executable(buddy-bert-run bert-main.cpp) -target_link_directories(buddy-bert-run PRIVATE ${LLVM_MLIR_LIBRARY_DIR}) +target_link_directories(buddy-bert-run PRIVATE ${LLVM_LIBRARY_DIR}) set(BUDDY_BERT_LIBS BERT mlir_c_runner_utils) target_link_libraries(buddy-bert-run ${BUDDY_BERT_LIBS}) diff --git a/examples/BuddyConvolution/.gitignore b/examples/BuddyConvolution/.gitignore new file mode 100644 index 000000000..df9389428 --- /dev/null +++ b/examples/BuddyConvolution/.gitignore @@ -0,0 +1,4 @@ +log.mlir +log.ll +log.s +a.out diff --git a/examples/BuddyConvolution/conv2d-nhwc-fhwc-opt.mlir b/examples/BuddyConvolution/conv2d-nhwc-fhwc-opt.mlir new file mode 100644 index 000000000..76d5e4d93 --- /dev/null +++ b/examples/BuddyConvolution/conv2d-nhwc-fhwc-opt.mlir @@ -0,0 +1,137 @@ +// RUN: buddy-opt %s \ +// RUN: -convert-vector-to-scf \ +// RUN: -lower-affine \ +// RUN: -arith-bufferize \ +// RUN: -convert-scf-to-cf \ +// RUN: -convert-vector-to-llvm \ +// RUN: -convert-arith-to-llvm \ +// RUN: -finalize-memref-to-llvm \ +// RUN: -convert-func-to-llvm \ +// RUN: -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -O3 -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +// Using `8` as the vector size. +#map = affine_map<(d0) -> (d0 floordiv 8)> +#map0 = affine_map<(d0, d1, d2, d3) -> (d2)> +#map1 = affine_map<(d0, d1) -> (d0 + d1)> +#map2 = affine_map<(d0, d1) -> (d0 + d1 * 8)> +#map3 = affine_map<(d0) -> (d0 * 8)> + +module { + func.func private @printMemrefF32(memref<*xf32>) + func.func private @rtclock() -> f64 + + func.func @conv_2d_nhwc_fhwc(%arg0: memref, %arg1: memref, %arg2: memref) { + %f0 = arith.constant 0. : f32 + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %c2 = arith.constant 2 : index + %c3 = arith.constant 3 : index + %n = memref.dim %arg0, %c0 : memref + %h_i = memref.dim %arg0, %c1 : memref + %w_i = memref.dim %arg0, %c2 : memref + %c = memref.dim %arg0, %c3 : memref + %f = memref.dim %arg1, %c0 : memref + %h_k = memref.dim %arg1, %c1 : memref + %w_k = memref.dim %arg1, %c2 : memref + %h_o = memref.dim %arg2, %c1 : memref + %w_o = memref.dim %arg2, %c2 : memref + + // Output is NHoWoF + affine.for %idx_n = %c0 to %n { + affine.for %idx_f = %c0 to %f { + affine.for %idx_c = %c0 to %c { + affine.for %idx_h_o = %c0 to %h_o { + affine.for %idx_h_k = %c0 to %h_k { + affine.for %idx_w_k = %c0 to %w_k { + affine.for %idx_w_o = %c0 to #map(%w_o) { + %kernel_ele = memref.load %arg1[%idx_f, %idx_h_k, %idx_w_k, %idx_c] : memref + %kernel_vec = vector.broadcast %kernel_ele : f32 to vector<8xf32> + %in_iter_h = affine.apply #map1 (%idx_h_k, %idx_h_o) + %in_iter_w = affine.apply #map2 (%idx_w_k, %idx_w_o) + %out_iter_w = affine.apply #map3 (%idx_w_o) + %input_vec = vector.transfer_read %arg0[%idx_n, %in_iter_h, %in_iter_w, %idx_c], %f0 + { permutation_map = #map0 } : memref, vector<8xf32> + %output_vec = vector.transfer_read %arg2[%idx_n, %idx_h_o, %out_iter_w, %idx_f], %f0 + { permutation_map = #map0 } : memref, vector<8xf32> + %res_vec = vector.fma %kernel_vec, %input_vec, %output_vec : vector<8xf32> + vector.transfer_write %res_vec, %arg2[%idx_n, %idx_h_o, %out_iter_w, %idx_f] + { permutation_map = #map0 } : vector<8xf32>, memref + } + } + } + } + } + } + } + + return + } + + func.func @alloc_f32(%arg0: index, %arg1: index, %arg2: index, %arg3: index, %arg4: f32) -> memref { + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %0 = memref.alloc(%arg0, %arg1, %arg2, %arg3) : memref + scf.for %idx0 = %c0 to %arg0 step %c1 { + scf.for %idx1 = %c0 to %arg1 step %c1 { + scf.for %idx2 = %c0 to %arg2 step %c1 { + scf.for %idx3 = %c0 to %arg3 step %c1 { + memref.store %arg4, %0[%idx0, %idx1, %idx2, %idx3] : memref + } + } + } + } + return %0 : memref + } + + func.func @main() { + %f0 = arith.constant 0.000000e+00 : f32 + %f2 = arith.constant 2.000000e+00 : f32 + %f3 = arith.constant 3.000000e+00 : f32 + + %c1 = arith.constant 1 : index + %c2 = arith.constant 2 : index + %c3 = arith.constant 3 : index + %c5 = arith.constant 5 : index + %c6 = arith.constant 6 : index + %c8 = arith.constant 8 : index + %c12 = arith.constant 12 : index + %c16 = arith.constant 16 : index + %c24 = arith.constant 24 : index + %c28 = arith.constant 28 : index + + // %v0 = call @alloc_f32(%c1, %c12, %c12, %c6, %f2) : (index, index, index, index, f32) -> memref + // %v1 = call @alloc_f32(%c16, %c5, %c5, %c6, %f3) : (index, index, index, index, f32) -> memref + // %v2 = call @alloc_f32(%c1, %c8, %c8, %c16, %f0) : (index, index, index, index, f32) -> memref + + %v0 = call @alloc_f32(%c1, %c28, %c28, %c1, %f2) : (index, index, index, index, f32) -> memref + %v1 = call @alloc_f32(%c6, %c5, %c5, %c1, %f3) : (index, index, index, index, f32) -> memref + %v2 = call @alloc_f32(%c1, %c24, %c24, %c6, %f0) : (index, index, index, index, f32) -> memref + + %t_start = call @rtclock() : () -> f64 + call @conv_2d_nhwc_fhwc(%v0, %v1, %v2) : (memref, memref, memref) -> () + %t_end = call @rtclock() : () -> f64 + + // All the elements of the MemRef are the same, + // only check the first line to verify the correctness. + // CHECK: Unranked Memref + // CHECK: [ + // CHECK: [ + // CHECK: [ + // CHECK: [150{{(, 150)*}}], + %print_v2 = memref.cast %v2 : memref to memref<*xf32> + call @printMemrefF32(%print_v2) : (memref<*xf32>) -> () + + %time = arith.subf %t_end, %t_start : f64 + vector.print %time : f64 + + memref.dealloc %v0 : memref + memref.dealloc %v1 : memref + memref.dealloc %v2 : memref + + return + } +} diff --git a/examples/BuddyConvolution/conv2d-nhwc-fhwc.mlir b/examples/BuddyConvolution/conv2d-nhwc-fhwc.mlir new file mode 100644 index 000000000..90759355e --- /dev/null +++ b/examples/BuddyConvolution/conv2d-nhwc-fhwc.mlir @@ -0,0 +1,88 @@ +// RUN: buddy-opt %s \ +// RUN: -convert-linalg-to-loops \ +// RUN: -lower-affine \ +// RUN: -arith-bufferize \ +// RUN: -convert-scf-to-cf \ +// RUN: -convert-vector-to-llvm \ +// RUN: -convert-arith-to-llvm \ +// RUN: -finalize-memref-to-llvm \ +// RUN: -convert-func-to-llvm \ +// RUN: -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +module { + func.func private @printMemrefF32(memref<*xf32>) + func.func private @rtclock() -> f64 + + func.func @conv_2d_nhwc_fhwc(%arg0: memref, %arg1: memref, %arg2: memref) { + linalg.conv_2d_nhwc_fhwc ins (%arg0, %arg1: memref, memref) + outs (%arg2: memref) + return + } + + func.func @alloc_f32(%arg0: index, %arg1: index, %arg2: index, %arg3: index, %arg4: f32) -> memref { + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %0 = memref.alloc(%arg0, %arg1, %arg2, %arg3) : memref + scf.for %idx0 = %c0 to %arg0 step %c1 { + scf.for %idx1 = %c0 to %arg1 step %c1 { + scf.for %idx2 = %c0 to %arg2 step %c1 { + scf.for %idx3 = %c0 to %arg3 step %c1 { + memref.store %arg4, %0[%idx0, %idx1, %idx2, %idx3] : memref + } + } + } + } + return %0 : memref + } + + func.func @main() { + %f0 = arith.constant 0.000000e+00 : f32 + %f2 = arith.constant 2.000000e+00 : f32 + %f3 = arith.constant 3.000000e+00 : f32 + + %c1 = arith.constant 1 : index + %c2 = arith.constant 2 : index + %c3 = arith.constant 3 : index + %c5 = arith.constant 5 : index + %c6 = arith.constant 6 : index + %c8 = arith.constant 8 : index + %c12 = arith.constant 12 : index + %c16 = arith.constant 16 : index + %c24 = arith.constant 24 : index + %c28 = arith.constant 28 : index + + // %v0 = call @alloc_f32(%c1, %c12, %c12, %c6, %f2) : (index, index, index, index, f32) -> memref + // %v1 = call @alloc_f32(%c16, %c5, %c5, %c6, %f3) : (index, index, index, index, f32) -> memref + // %v2 = call @alloc_f32(%c1, %c8, %c8, %c16, %f0) : (index, index, index, index, f32) -> memref + + %v0 = call @alloc_f32(%c1, %c28, %c28, %c1, %f2) : (index, index, index, index, f32) -> memref + %v1 = call @alloc_f32(%c6, %c5, %c5, %c1, %f3) : (index, index, index, index, f32) -> memref + %v2 = call @alloc_f32(%c1, %c24, %c24, %c6, %f0) : (index, index, index, index, f32) -> memref + + %t_start = call @rtclock() : () -> f64 + call @conv_2d_nhwc_fhwc(%v0, %v1, %v2) : (memref, memref, memref) -> () + %t_end = call @rtclock() : () -> f64 + + // All the elements of the MemRef are the same, + // only check the first line to verify the correctness. + // CHECK: Unranked Memref + // CHECK: [ + // CHECK: [ + // CHECK: [ + // CHECK: [150{{(, 150)*}}], + %print_v2 = memref.cast %v2 : memref to memref<*xf32> + call @printMemrefF32(%print_v2) : (memref<*xf32>) -> () + + %time = arith.subf %t_end, %t_start : f64 + vector.print %time : f64 + + memref.dealloc %v0 : memref + memref.dealloc %v1 : memref + memref.dealloc %v2 : memref + return + } +} diff --git a/examples/BuddyConvolution/conv2d.mlir b/examples/BuddyConvolution/conv2d.mlir new file mode 100644 index 000000000..c4f1ac2ef --- /dev/null +++ b/examples/BuddyConvolution/conv2d.mlir @@ -0,0 +1,71 @@ +// RUN: buddy-opt %s \ +// RUN: -conv-vectorization \ +// RUN: -convert-linalg-to-loops \ +// RUN: -lower-affine \ +// RUN: -arith-bufferize \ +// RUN: -convert-scf-to-cf \ +// RUN: -convert-vector-to-llvm \ +// RUN: -convert-arith-to-llvm \ +// RUN: -finalize-memref-to-llvm \ +// RUN: -llvm-request-c-wrappers \ +// RUN: -convert-func-to-llvm \ +// RUN: -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +#map0 = affine_map<(d0, d1) -> (d0 + d1 - 1)> + +module { + func.func private @printMemrefF32(memref<*xf32>) + + func.func @conv_2d(%arg0: memref, %arg1: memref, %arg2: memref) { + linalg.conv_2d ins (%arg0, %arg1: memref, memref) + outs (%arg2: memref) + return + } + + func.func @alloc_f32(%arg0: index, %arg1: index, %arg2: f32) -> memref { + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %0 = memref.alloc(%arg0, %arg1) : memref + scf.for %arg3 = %c0 to %arg0 step %c1 { + scf.for %arg4 = %c0 to %arg1 step %c1 { + memref.store %arg2, %0[%arg3, %arg4] : memref + } + } + return %0 : memref + } + + func.func @main() { + %c0 = arith.constant 0.000000e+00 : f32 + %c1 = arith.constant 1.000000e+00 : f32 + %c2 = arith.constant 2 : index + %c3 = arith.constant 3 : index + + %current_v1 = arith.constant 3 : index + %current_v2 = arith.constant 8 : index + %current_v0 = affine.apply #map0(%current_v2, %current_v1) + + %v0 = call @alloc_f32(%current_v0, %current_v0, %c1) : (index, index, f32) -> memref + %v1 = call @alloc_f32(%current_v1, %current_v1, %c1) : (index, index, f32) -> memref + %v2 = call @alloc_f32(%current_v2, %current_v2, %c0) : (index, index, f32) -> memref + + call @conv_2d(%v0, %v1, %v2) : (memref, memref, memref) -> () + + %print_v2 = memref.cast %v2 : memref to memref<*xf32> + + // All the elements of the MemRef are the same, + // only check the first line to verify the correctness. + // CHECK: Unranked Memref base@ = {{.*}} rank = 2 offset = 0 sizes = [8, 8] strides = [8, 1] data = + // CHECK-NEXT: [ + // CHECK-SAME: [9{{(, 9)*}}], + call @printMemrefF32(%print_v2) : (memref<*xf32>) -> () + + memref.dealloc %v0 : memref + memref.dealloc %v1 : memref + memref.dealloc %v2 : memref + return + } +} diff --git a/examples/BuddyConvolution/makefile b/examples/BuddyConvolution/makefile new file mode 100644 index 000000000..196264376 --- /dev/null +++ b/examples/BuddyConvolution/makefile @@ -0,0 +1,127 @@ +#!/bin/bash +BUDDY_OPT := ../../build/bin/buddy-opt +MLIR_OPT := ../../llvm/build/bin/mlir-opt +CLANG := ../../llvm/build/bin/clang +MLIR_TRANSLATE := ../../llvm/build/bin/mlir-translate +MLIR_CPU_RUNNER := ../../llvm/build/bin/mlir-cpu-runner +LLC := ../../llvm/build/bin/llc +OPT_FLAG := -O3 +MLIR_LIB := ../../llvm/build/lib/ + +ifeq ($(shell uname),Linux) +MLIR_RUNNER_UTILS := ../../llvm/build/lib/libmlir_runner_utils.so +MLIR_C_RUNNER_UTILS := ../../llvm/build/lib/libmlir_c_runner_utils.so +MTRIPLE := x86_64-unknown-linux-gnu +else ifeq ($(shell uname),Darwin) +MLIR_RUNNER_UTILS := ../../llvm/build/lib/libmlir_runner_utils.dylib +MLIR_C_RUNNER_UTILS := ../../llvm/build/lib/libmlir_c_runner_utils.dylib +MTRIPLE := x86_64-apple-darwin +endif + +conv2d-lower: + @${BUDDY_OPT} ./conv2d.mlir \ + -conv-vectorization \ + -convert-linalg-to-loops \ + -lower-affine \ + -arith-bufferize \ + -convert-scf-to-cf \ + -convert-vector-to-llvm \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -llvm-request-c-wrappers \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts \ + -o ./log.mlir + +conv2d-translate: + @${BUDDY_OPT} ./conv2d.mlir \ + -conv-vectorization \ + -convert-linalg-to-loops \ + -lower-affine \ + -arith-bufferize \ + -convert-scf-to-cf \ + -convert-vector-to-llvm \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -llvm-request-c-wrappers \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_TRANSLATE} --mlir-to-llvmir -o log.ll + +conv2d-run: + @${BUDDY_OPT} ./conv2d.mlir \ + -conv-vectorization \ + -convert-linalg-to-loops \ + -lower-affine \ + -arith-bufferize \ + -convert-scf-to-cf \ + -convert-vector-to-llvm \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -llvm-request-c-wrappers \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ + -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} + +conv2d-nhwc-fhwc-run: + @${BUDDY_OPT} ./conv2d-nhwc-fhwc.mlir \ + -convert-linalg-to-loops \ + -lower-affine \ + -arith-bufferize \ + -convert-scf-to-cf \ + -convert-vector-to-llvm \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ + -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} + +conv2d-nhwc-fhwc-aot: + @${BUDDY_OPT} ./conv2d-nhwc-fhwc.mlir \ + -convert-linalg-to-loops \ + -lower-affine \ + -arith-bufferize \ + -convert-scf-to-cf \ + -convert-vector-to-llvm \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_TRANSLATE} -mlir-to-llvmir -o log.ll + ${CLANG} log.ll ${OPT_FLAG} \ + -L${MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ + -o a.out + @LD_LIBRARY_PATH=${MLIR_LIB} ./a.out + +conv2d-nhwc-fhwc-opt-run: + @${BUDDY_OPT} ./conv2d-nhwc-fhwc-opt.mlir \ + -convert-vector-to-scf \ + -lower-affine \ + -arith-bufferize \ + -convert-scf-to-cf \ + -convert-vector-to-llvm \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} -O3 -e main -entry-point-result=void \ + -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} + +conv2d-nhwc-fhwc-opt-aot: + @${BUDDY_OPT} ./conv2d-nhwc-fhwc-opt.mlir \ + -convert-vector-to-scf \ + -lower-affine \ + -arith-bufferize \ + -convert-scf-to-cf \ + -convert-vector-to-llvm \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_TRANSLATE} -mlir-to-llvmir -o log.ll + ${CLANG} log.ll -O3 \ + -L${MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ + -o a.out + @LD_LIBRARY_PATH=${MLIR_LIB} ./a.out diff --git a/examples/BuddyGPU/.gitignore b/examples/BuddyGPU/.gitignore new file mode 100644 index 000000000..0194ea7a6 --- /dev/null +++ b/examples/BuddyGPU/.gitignore @@ -0,0 +1,3 @@ +log.mlir +log.ll +log.s diff --git a/examples/BuddyGPU/makefile b/examples/BuddyGPU/makefile new file mode 100644 index 000000000..677396d1d --- /dev/null +++ b/examples/BuddyGPU/makefile @@ -0,0 +1,8 @@ +#!/bin/bash +BUDDY_OPT := ../../build/bin/buddy-opt + +buddy-gpu-matmul-lower: + @${BUDDY_OPT} matmul.mlir \ + -transform-preload-library="transform-library-paths=transform.mlir" \ + -transform-interpreter="entry-point=codegen" \ + -o log.mlir diff --git a/examples/BuddyGPU/matmul.mlir b/examples/BuddyGPU/matmul.mlir new file mode 100644 index 000000000..2f0fa226c --- /dev/null +++ b/examples/BuddyGPU/matmul.mlir @@ -0,0 +1,12 @@ +!unit = f32 +!lhs = tensor<5376x2048x!unit> +!rhs = tensor<2048x5376x!unit> +!res = tensor<5376x5376x!unit> + +func.func @matmul(%arg0: !lhs, %arg1: !rhs) -> !res { + %cst = arith.constant 0.000000e+00 : !unit + %0 = tensor.empty() : !res + %1 = linalg.fill ins(%cst : !unit) outs(%0 : !res) -> !res + %2 = linalg.matmul ins(%arg0, %arg1: !lhs, !rhs) outs(%1: !res) -> !res + func.return %2 : !res +} diff --git a/examples/BuddyGPU/transform.mlir b/examples/BuddyGPU/transform.mlir new file mode 100644 index 000000000..ef2645199 --- /dev/null +++ b/examples/BuddyGPU/transform.mlir @@ -0,0 +1,23 @@ +module attributes { transform.with_named_sequence } { + transform.named_sequence @codegen(%arg0: !transform.any_op) { + // Match the target operations and assign them to SSA values. + %matmul = transform.structured.match ops{["linalg.matmul"]} in %arg0 + : (!transform.any_op) -> !transform.any_op + %fill = transform.structured.match ops{["linalg.fill"]} in %arg0 + : (!transform.any_op) -> !transform.any_op + + // Perform tiling for the grid. + // For the matrix multiplication of 5376x2048 and 2048x5376, the compilation + // strategy sets the tile size for grid-based partitioning to 128x256. + // This means that each 128x256 matmul tile is computed within a GPU block, + // while multiple such blocks are computed in parallel across the grid. + // `tile_sizes` specify the dimensions of the tiled matmul result. + // `%tiled_op` is the tiled matmul operation within the `scf.forall` loop. + // `%forall_op` is the `scf.forall` loop that maintains tile information. + %tiled_op, %forall_op = transform.structured.tile_using_forall %matmul + tile_sizes [128, 256] (mapping = [#gpu.block, #gpu.block]) + : (!transform.any_op) -> (!transform.any_op, !transform.any_op) + + transform.yield + } +} // module diff --git a/examples/BuddyGen/.gitignore b/examples/BuddyGen/.gitignore new file mode 100644 index 000000000..df9389428 --- /dev/null +++ b/examples/BuddyGen/.gitignore @@ -0,0 +1,4 @@ +log.mlir +log.ll +log.s +a.out diff --git a/examples/BuddyGen/GenMemRef.cpp b/examples/BuddyGen/GenMemRef.cpp new file mode 100644 index 000000000..8ca2526b7 --- /dev/null +++ b/examples/BuddyGen/GenMemRef.cpp @@ -0,0 +1,43 @@ +//===- GenMemRef.cpp ------------------------------------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// + +// $ export LLVM_DIR=$PWD/../../llvm/ +// $ export LLVM_BUILD_DIR=$LLVM_DIR/build +// $ c++ GenMemRef.cpp \ + -I $LLVM_DIR/llvm/include/ -I $LLVM_BUILD_DIR/include/ \ + -I $LLVM_DIR/mlir/include/ -I $LLVM_BUILD_DIR/tools/mlir/include/ \ + -L$LLVM_BUILD_DIR/lib -lMLIRIR -lMLIRParser -lMLIRSupport -lLLVMCore \ + -lLLVMSupport -lncurses -ltinfo -lstdc++ -lLLVMDemangle \ + -o a.out +// $ ./a.out + +#include "mlir/Dialect/MemRef/IR/MemRef.h" +#include "mlir/IR/BuiltinTypes.h" +#include "mlir/IR/MLIRContext.h" + +int main() { + mlir::MLIRContext context; + mlir::OpBuilder builder(&context); + mlir::Type eleType = builder.getF64Type(); + // Target memref type: + // `memref>` + mlir::MemRefType memrefType = mlir::MemRefType::get( + {mlir::ShapedType::kDynamic}, eleType, + mlir::StridedLayoutAttr::get( + &context, /*offset=*/mlir::ShapedType::kDynamic, /*strides=*/{1})); + memrefType.dump(); + return 0; +} diff --git a/examples/BuddyLeNet/CMakeLists.txt b/examples/BuddyLeNet/CMakeLists.txt index 9698f617b..928f1f88c 100644 --- a/examples/BuddyLeNet/CMakeLists.txt +++ b/examples/BuddyLeNet/CMakeLists.txt @@ -6,25 +6,26 @@ add_custom_command( add_custom_command( OUTPUT forward.o - COMMAND ${LLVM_MLIR_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyLeNet/forward.mlir + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyLeNet/forward.mlir -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith), empty-tensor-to-alloc-tensor, convert-elementwise-to-linalg, arith-bufferize, func.func(linalg-bufferize, tensor-bufferize), func-bufferize)" | - ${LLVM_MLIR_BINARY_DIR}/mlir-opt + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -pass-pipeline "builtin.module(func.func(buffer-deallocation-simplification, convert-linalg-to-loops), eliminate-empty-tensors, func.func(llvm-request-c-wrappers),convert-math-to-llvm, convert-math-to-libm, convert-scf-to-cf, convert-arith-to-llvm, expand-strided-metadata, finalize-memref-to-llvm, convert-func-to-llvm, reconcile-unrealized-casts)" | - ${LLVM_MLIR_BINARY_DIR}/mlir-translate -mlir-to-llvmir | - ${LLVM_MLIR_BINARY_DIR}/llvm-as | - ${LLVM_MLIR_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${BUDDY_BINARY_DIR}/../examples/BuddyLeNet/forward.o + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${BUDDY_BINARY_DIR}/../examples/BuddyLeNet/forward.o DEPENDS ${BUDDY_EXAMPLES_DIR}/BuddyLeNet/forward.mlir COMMENT "Building forward.o" VERBATIM) add_custom_command( OUTPUT subgraph0.o - COMMAND ${LLVM_MLIR_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyLeNet/subgraph0.mlir + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyLeNet/subgraph0.mlir -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | ${BUDDY_BINARY_DIR}/buddy-opt -eliminate-empty-tensors - -convert-tensor-to-linalg + -convert-tensor-to-linalg -linalg-bufferize + -batchmatmul-optimize -convert-linalg-to-affine-loops -lower-affine -func-bufferize-dynamic-offset @@ -42,9 +43,9 @@ add_custom_command( -convert-arith-to-llvm -convert-func-to-llvm -reconcile-unrealized-casts | - ${LLVM_MLIR_BINARY_DIR}/mlir-translate -mlir-to-llvmir | - ${LLVM_MLIR_BINARY_DIR}/llvm-as | - ${LLVM_MLIR_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${BUDDY_BINARY_DIR}/../examples/BuddyLeNet/subgraph0.o + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${BUDDY_BINARY_DIR}/../examples/BuddyLeNet/subgraph0.o DEPENDS ${BUDDY_EXAMPLES_DIR}/BuddyLeNet/subgraph0.mlir COMMENT "Building subgraph0.o" VERBATIM) @@ -54,7 +55,7 @@ add_library(LENET STATIC subgraph0.o forward.o) SET_TARGET_PROPERTIES(LENET PROPERTIES LINKER_LANGUAGE C) add_executable(buddy-lenet-run buddy-lenet-main.cpp) -target_link_directories(buddy-lenet-run PRIVATE ${LLVM_MLIR_LIBRARY_DIR}) +target_link_directories(buddy-lenet-run PRIVATE ${LLVM_LIBRARY_DIR}) set(BUDDY_LENET_LIBS LENET mlir_c_runner_utils ${OpenCV_LIBS}) target_link_libraries(buddy-lenet-run ${BUDDY_LENET_LIBS}) diff --git a/examples/BuddyLeNet/README.md b/examples/BuddyLeNet/README.md index 5988edbe7..23ac086cf 100644 --- a/examples/BuddyLeNet/README.md +++ b/examples/BuddyLeNet/README.md @@ -24,9 +24,7 @@ $ cmake -G Ninja .. \ -DLLVM_ENABLE_ASSERTIONS=ON \ -DCMAKE_BUILD_TYPE=RELEASE \ -DBUDDY_MLIR_ENABLE_PYTHON_PACKAGES=ON \ - -DPython3_EXECUTABLE=$(which python3) \ - -DBUDDY_ENABLE_OPENCV=ON \ - -DOpenCV_DIR= + -DPython3_EXECUTABLE=$(which python3) $ ninja $ ninja check-buddy ``` diff --git a/examples/BuddyLeNet/buddy-lenet-main.cpp b/examples/BuddyLeNet/buddy-lenet-main.cpp index 4e2dc2efe..ca12820ba 100644 --- a/examples/BuddyLeNet/buddy-lenet-main.cpp +++ b/examples/BuddyLeNet/buddy-lenet-main.cpp @@ -15,41 +15,24 @@ //===----------------------------------------------------------------------===// #include -#include +#include #include +#include #include #include #include #include -#include #include #include #include constexpr size_t ParamsSize = 44426; -const std::string ImgName = "3.png"; +const std::string ImgName = "8.bmp"; /// Declare LeNet forward function. extern "C" void _mlir_ciface_forward(MemRef *output, MemRef *arg0, - Img *input); - -/// Function for preprocessing the image to match model input requirements. -const cv::Mat imagePreprocessing() { - // Get the directory of the LeNet example and construct the image path. - std::string lenetDir = getenv("LENET_EXAMPLE_PATH"); - std::string imgPath = lenetDir + "/images/" + ImgName; - // Read the image in grayscale mode. - cv::Mat inputImage = cv::imread(imgPath, cv::IMREAD_GRAYSCALE); - assert(!inputImage.empty() && "Could not read the image."); - cv::Mat resizedImage; - int imageWidth = 28; - int imageHeight = 28; - // Resize the image to 28x28 pixels. - cv::resize(inputImage, resizedImage, cv::Size(imageWidth, imageHeight), - cv::INTER_LINEAR); - return resizedImage; -} + dip::Image *input); /// Print [Log] label in bold blue format. void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } @@ -112,19 +95,16 @@ int main() { const std::string title = "LeNet Inference Powered by Buddy Compiler"; std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; - // Preprocess the image to match the input requirements of the model. - cv::Mat image = imagePreprocessing(); - - // Define the sizes of the input and output tensors. - intptr_t sizesInput[4] = {1, 1, 28, 28}; + // Define the sizes of the output tensors. intptr_t sizesOutput[2] = {1, 10}; // Create input and output containers for the image and model output. - Img input(image, sizesInput, true); + std::string lenetDir = getenv("LENET_EXAMPLE_PATH"); + std::string imgPath = lenetDir + "/images/" + ImgName; + dip::Image input(imgPath, dip::DIP_GRAYSCALE, true /* norm */); MemRef output(sizesOutput); // Load model parameters from the specified file. - std::string lenetDir = getenv("LENET_EXAMPLE_PATH"); std::string paramsDir = lenetDir + "/arg0.data"; MemRef paramsContainer({ParamsSize}); loadParameters(paramsDir, paramsContainer); diff --git a/examples/BuddyLeNet/fake-lenet.mlir b/examples/BuddyLeNet/fake-lenet.mlir index 48d91a7fd..d7d80a533 100644 --- a/examples/BuddyLeNet/fake-lenet.mlir +++ b/examples/BuddyLeNet/fake-lenet.mlir @@ -1,5 +1,6 @@ module { func.func private @printMemrefF32(%ptr : tensor<*xf32>) + func.func private @rtclock() -> f64 func.func @forward(%arg0: tensor<44426xf32>, %arg1: tensor<1x1x28x28xf32>) -> tensor<1x10xf32> { %extracted_slice = tensor.extract_slice %arg0[0] [150] [1] : tensor<44426xf32> to tensor<150xf32> @@ -81,10 +82,16 @@ module { %fake_params = arith.constant dense<1.0> : tensor<44426xf32> %fake_input = arith.constant dense<2.0> : tensor<1x1x28x28xf32> + %t_start = call @rtclock() : () -> f64 %fake_output = call @forward(%fake_params, %fake_input) : (tensor<44426xf32>, tensor<1x1x28x28xf32>) -> tensor<1x10xf32> + %t_end = call @rtclock() : () -> f64 %tensor_unranked = tensor.cast %fake_output : tensor<1x10xf32> to tensor<*xf32> call @printMemrefF32(%tensor_unranked) : (tensor<*xf32>) -> () + + %time = arith.subf %t_end, %t_start : f64 + vector.print %time : f64 + return } } diff --git a/examples/BuddyLeNet/images/8.bmp b/examples/BuddyLeNet/images/8.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7a9e02a2957ac4ce3267830b2bb6c29bcbb66968 GIT binary patch literal 3190 zcmai$Sx8q~6vj1ks2rLnqzqGxG_AmFAa6ocSV9j5S3x2QLwYeVdJ2Llquwea0xc*S z2!&F)g$0?Bln_c2YGn|pK`Lc7D1P_Tq=PN!wUXhWJiiwHQlqpj*ZQ3+VojO&~ z(b4vdp1oPKW@-BL>6$!wvI%Egu#Jt4HDB1{3tdD+g!w@a-kdpe3}e!yNw)8J=&{8& z*x)%I$BT-J62dzxHee#0!54lIIQTw(;le&PaLCNeRMDSBDlacrMMZ^*i;J~p%^JnU z#hER3j>lP^Jyurq2)MkH8~kJE9N<5D_H1p~ut8_fo>f;@mj(w1_4Vslb$55`#*G^) zC@8SAaP@fc=kNG~e|UJf$QgL-fgQx*Ec+=bDLQ`qxcdA1_4DUX!}|E~qrHFm@Pes3=HVq zyLUQNaY*y#%`;3ez;%C)N1Q=CY}}R=yp=0g3cn*GBl`5|lTM#LtwoC#SzqSn=BlQq zMjDgu{&m-4bPUduAF#j)wZHjuJjcPF_}q5!;>9|5?wsYZudh!RFJ83X!G;{|D%_7Mq9UTwKHJ-A0GJwlU@$a54iAHv0{a;UAv~YZ{KQgU{IGXU9x_nzRYD+Rh6eVajBW%IKFK6H##3OEE#wLix za}ba72z%Jm`_G?0*YNPL%{=v7w{D%;`1b&Q2)LX9*XM!N@yIKF5%^&bAMEML{QP`X zR#sX}^a(K%Us+k1eb2CU{~jAX;R0{)zyULe2S4>-E8g)-Jmkc=vCp@Wd|kbI)$+$o)YsQ5FE3Ap zg@tx(&nK!t&e);m{I(6!l-Cf+eZ{wPhw)CN=i!X-iAkWbFMRi+{1?t+YC^v>gsB( zU%y_fR;?0u*pVYgR8?K2J9qA=y}e!U-@n(XN!9qJu$*Jh)4eL1y-Jk0~dPcWaUXcdGf^Wu+N`A zTmQhJwY63I_wTpgINWay4Gl_5OS2kso_ex^$Le$GD_972)BtW?-%Xn~*?q}8baZs6 zt*y=Gf_dRL$b$zD?7rh3q8GdugFOgl5ZCd1pEKaXhjrn?g?3+W+_=&5$Zt5`yM6n% z#m{`Cr>7epIrKWwgYK98{}SgzjlqS3&oDZkb3?x~`0du!*`+gQ&S=S!CFTzu!Z~b- z$DbX0q7^RW7+WOR@9ZyKy3{a>ii)h>^ts!jha;=UG!e%5J-780J+ (d1)> +#map1 = affine_map<(d0, d1, d2) -> (d0, d2)> +#map2 = affine_map<(d0, d1, d2) -> (d0, d1)> +#map3 = affine_map<(d0, d1) -> (d0, d1)> +#map4 = affine_map<(d0, d1, d2, d3) -> (d0, d1, d2, d3)> +#map5 = affine_map<(d0, d1, d2) -> (d0, d1, d2)> +#map6 = affine_map<(d0, d1, d2) -> (d0, 0, d1, d2)> +#map7 = affine_map<(d0, d1) -> (0, d0, d1)> +module { + func.func @subgraph0(%arg0: tensor<32000x4096xf32>, %arg1: tensor<1x40xi64>, %arg2: tensor<4096xf32>, %arg3: tensor<4096x4096xf32>, %arg4: tensor<4096x4096xf32>, %arg5: tensor<4096x4096xf32>, %arg6: tensor<1x1x2048x128xf32>, %arg7: tensor<1x1x2048x128xf32>, %arg8: tensor<4096x4096xf32>, %arg9: tensor<4096xf32>, %arg10: tensor<11008x4096xf32>, %arg11: tensor<11008x4096xf32>, %arg12: tensor<4096x11008xf32>, %arg13: tensor<4096xf32>, %arg14: tensor<4096x4096xf32>, %arg15: tensor<4096x4096xf32>, %arg16: tensor<4096x4096xf32>, %arg17: tensor<1x1x2048x128xf32>, %arg18: tensor<1x1x2048x128xf32>, %arg19: tensor<4096x4096xf32>, %arg20: tensor<4096xf32>, %arg21: tensor<11008x4096xf32>, %arg22: tensor<11008x4096xf32>, %arg23: tensor<4096x11008xf32>, %arg24: tensor<4096xf32>, %arg25: tensor<4096x4096xf32>, %arg26: tensor<4096x4096xf32>, %arg27: tensor<4096x4096xf32>, %arg28: tensor<1x1x2048x128xf32>, %arg29: tensor<1x1x2048x128xf32>, %arg30: tensor<4096x4096xf32>, %arg31: tensor<4096xf32>, %arg32: tensor<11008x4096xf32>, %arg33: tensor<11008x4096xf32>, %arg34: tensor<4096x11008xf32>, %arg35: tensor<4096xf32>, %arg36: tensor<4096x4096xf32>, %arg37: tensor<4096x4096xf32>, %arg38: tensor<4096x4096xf32>, %arg39: tensor<1x1x2048x128xf32>, %arg40: tensor<1x1x2048x128xf32>, %arg41: tensor<4096x4096xf32>, %arg42: tensor<4096xf32>, %arg43: tensor<11008x4096xf32>, %arg44: tensor<11008x4096xf32>, %arg45: tensor<4096x11008xf32>, %arg46: tensor<4096xf32>, %arg47: tensor<4096x4096xf32>, %arg48: tensor<4096x4096xf32>, %arg49: tensor<4096x4096xf32>, %arg50: tensor<1x1x2048x128xf32>, %arg51: tensor<1x1x2048x128xf32>, %arg52: tensor<4096x4096xf32>, %arg53: tensor<4096xf32>, %arg54: tensor<11008x4096xf32>, %arg55: tensor<11008x4096xf32>, %arg56: tensor<4096x11008xf32>, %arg57: tensor<4096xf32>, %arg58: tensor<4096x4096xf32>, %arg59: tensor<4096x4096xf32>, %arg60: tensor<4096x4096xf32>, %arg61: tensor<1x1x2048x128xf32>, %arg62: tensor<1x1x2048x128xf32>, %arg63: tensor<4096x4096xf32>, %arg64: tensor<4096xf32>, %arg65: tensor<11008x4096xf32>, %arg66: tensor<11008x4096xf32>, %arg67: tensor<4096x11008xf32>, %arg68: tensor<4096xf32>, %arg69: tensor<4096x4096xf32>, %arg70: tensor<4096x4096xf32>, %arg71: tensor<4096x4096xf32>, %arg72: tensor<1x1x2048x128xf32>, %arg73: tensor<1x1x2048x128xf32>, %arg74: tensor<4096x4096xf32>, %arg75: tensor<4096xf32>, %arg76: tensor<11008x4096xf32>, %arg77: tensor<11008x4096xf32>, %arg78: tensor<4096x11008xf32>, %arg79: tensor<4096xf32>, %arg80: tensor<4096x4096xf32>, %arg81: tensor<4096x4096xf32>, %arg82: tensor<4096x4096xf32>, %arg83: tensor<1x1x2048x128xf32>, %arg84: tensor<1x1x2048x128xf32>, %arg85: tensor<4096x4096xf32>, %arg86: tensor<4096xf32>, %arg87: tensor<11008x4096xf32>, %arg88: tensor<11008x4096xf32>, %arg89: tensor<4096x11008xf32>, %arg90: tensor<4096xf32>, %arg91: tensor<4096x4096xf32>, %arg92: tensor<4096x4096xf32>, %arg93: tensor<4096x4096xf32>, %arg94: tensor<1x1x2048x128xf32>, %arg95: tensor<1x1x2048x128xf32>, %arg96: tensor<4096x4096xf32>, %arg97: tensor<4096xf32>, %arg98: tensor<11008x4096xf32>, %arg99: tensor<11008x4096xf32>, %arg100: tensor<4096x11008xf32>, %arg101: tensor<4096xf32>, %arg102: tensor<4096x4096xf32>, %arg103: tensor<4096x4096xf32>, %arg104: tensor<4096x4096xf32>, %arg105: tensor<1x1x2048x128xf32>, %arg106: tensor<1x1x2048x128xf32>, %arg107: tensor<4096x4096xf32>, %arg108: tensor<4096xf32>, %arg109: tensor<11008x4096xf32>, %arg110: tensor<11008x4096xf32>, %arg111: tensor<4096x11008xf32>, %arg112: tensor<4096xf32>, %arg113: tensor<4096x4096xf32>, %arg114: tensor<4096x4096xf32>, %arg115: tensor<4096x4096xf32>, %arg116: tensor<1x1x2048x128xf32>, %arg117: tensor<1x1x2048x128xf32>, %arg118: tensor<4096x4096xf32>, %arg119: tensor<4096xf32>, %arg120: tensor<11008x4096xf32>, %arg121: tensor<11008x4096xf32>, %arg122: tensor<4096x11008xf32>, %arg123: tensor<4096xf32>, %arg124: tensor<4096x4096xf32>, %arg125: tensor<4096x4096xf32>, %arg126: tensor<4096x4096xf32>, %arg127: tensor<1x1x2048x128xf32>, %arg128: tensor<1x1x2048x128xf32>, %arg129: tensor<4096x4096xf32>, %arg130: tensor<4096xf32>, %arg131: tensor<11008x4096xf32>, %arg132: tensor<11008x4096xf32>, %arg133: tensor<4096x11008xf32>, %arg134: tensor<4096xf32>, %arg135: tensor<4096x4096xf32>, %arg136: tensor<4096x4096xf32>, %arg137: tensor<4096x4096xf32>, %arg138: tensor<1x1x2048x128xf32>, %arg139: tensor<1x1x2048x128xf32>, %arg140: tensor<4096x4096xf32>, %arg141: tensor<4096xf32>, %arg142: tensor<11008x4096xf32>, %arg143: tensor<11008x4096xf32>, %arg144: tensor<4096x11008xf32>, %arg145: tensor<4096xf32>, %arg146: tensor<4096x4096xf32>, %arg147: tensor<4096x4096xf32>, %arg148: tensor<4096x4096xf32>, %arg149: tensor<1x1x2048x128xf32>, %arg150: tensor<1x1x2048x128xf32>, %arg151: tensor<4096x4096xf32>, %arg152: tensor<4096xf32>, %arg153: tensor<11008x4096xf32>, %arg154: tensor<11008x4096xf32>, %arg155: tensor<4096x11008xf32>, %arg156: tensor<4096xf32>, %arg157: tensor<4096x4096xf32>, %arg158: tensor<4096x4096xf32>, %arg159: tensor<4096x4096xf32>, %arg160: tensor<1x1x2048x128xf32>, %arg161: tensor<1x1x2048x128xf32>, %arg162: tensor<4096x4096xf32>, %arg163: tensor<4096xf32>, %arg164: tensor<11008x4096xf32>, %arg165: tensor<11008x4096xf32>, %arg166: tensor<4096x11008xf32>, %arg167: tensor<4096xf32>, %arg168: tensor<4096x4096xf32>, %arg169: tensor<4096x4096xf32>, %arg170: tensor<4096x4096xf32>, %arg171: tensor<1x1x2048x128xf32>, %arg172: tensor<1x1x2048x128xf32>, %arg173: tensor<4096x4096xf32>, %arg174: tensor<4096xf32>, %arg175: tensor<11008x4096xf32>, %arg176: tensor<11008x4096xf32>, %arg177: tensor<4096x11008xf32>, %arg178: tensor<4096xf32>, %arg179: tensor<4096x4096xf32>, %arg180: tensor<4096x4096xf32>, %arg181: tensor<4096x4096xf32>, %arg182: tensor<1x1x2048x128xf32>, %arg183: tensor<1x1x2048x128xf32>, %arg184: tensor<4096x4096xf32>, %arg185: tensor<4096xf32>, %arg186: tensor<11008x4096xf32>, %arg187: tensor<11008x4096xf32>, %arg188: tensor<4096x11008xf32>, %arg189: tensor<4096xf32>, %arg190: tensor<4096x4096xf32>, %arg191: tensor<4096x4096xf32>, %arg192: tensor<4096x4096xf32>, %arg193: tensor<1x1x2048x128xf32>, %arg194: tensor<1x1x2048x128xf32>, %arg195: tensor<4096x4096xf32>, %arg196: tensor<4096xf32>, %arg197: tensor<11008x4096xf32>, %arg198: tensor<11008x4096xf32>, %arg199: tensor<4096x11008xf32>, %arg200: tensor<4096xf32>, %arg201: tensor<4096x4096xf32>, %arg202: tensor<4096x4096xf32>, %arg203: tensor<4096x4096xf32>, %arg204: tensor<1x1x2048x128xf32>, %arg205: tensor<1x1x2048x128xf32>, %arg206: tensor<4096x4096xf32>, %arg207: tensor<4096xf32>, %arg208: tensor<11008x4096xf32>, %arg209: tensor<11008x4096xf32>, %arg210: tensor<4096x11008xf32>, %arg211: tensor<4096xf32>, %arg212: tensor<4096x4096xf32>, %arg213: tensor<4096x4096xf32>, %arg214: tensor<4096x4096xf32>, %arg215: tensor<1x1x2048x128xf32>, %arg216: tensor<1x1x2048x128xf32>, %arg217: tensor<4096x4096xf32>, %arg218: tensor<4096xf32>, %arg219: tensor<11008x4096xf32>, %arg220: tensor<11008x4096xf32>, %arg221: tensor<4096x11008xf32>, %arg222: tensor<4096xf32>, %arg223: tensor<4096x4096xf32>, %arg224: tensor<4096x4096xf32>, %arg225: tensor<4096x4096xf32>, %arg226: tensor<1x1x2048x128xf32>, %arg227: tensor<1x1x2048x128xf32>, %arg228: tensor<4096x4096xf32>, %arg229: tensor<4096xf32>, %arg230: tensor<11008x4096xf32>, %arg231: tensor<11008x4096xf32>, %arg232: tensor<4096x11008xf32>, %arg233: tensor<4096xf32>, %arg234: tensor<4096x4096xf32>, %arg235: tensor<4096x4096xf32>, %arg236: tensor<4096x4096xf32>, %arg237: tensor<1x1x2048x128xf32>, %arg238: tensor<1x1x2048x128xf32>, %arg239: tensor<4096x4096xf32>, %arg240: tensor<4096xf32>, %arg241: tensor<11008x4096xf32>, %arg242: tensor<11008x4096xf32>, %arg243: tensor<4096x11008xf32>, %arg244: tensor<4096xf32>, %arg245: tensor<4096x4096xf32>, %arg246: tensor<4096x4096xf32>, %arg247: tensor<4096x4096xf32>, %arg248: tensor<1x1x2048x128xf32>, %arg249: tensor<1x1x2048x128xf32>, %arg250: tensor<4096x4096xf32>, %arg251: tensor<4096xf32>, %arg252: tensor<11008x4096xf32>, %arg253: tensor<11008x4096xf32>, %arg254: tensor<4096x11008xf32>, %arg255: tensor<4096xf32>, %arg256: tensor<4096x4096xf32>, %arg257: tensor<4096x4096xf32>, %arg258: tensor<4096x4096xf32>, %arg259: tensor<1x1x2048x128xf32>, %arg260: tensor<1x1x2048x128xf32>, %arg261: tensor<4096x4096xf32>, %arg262: tensor<4096xf32>, %arg263: tensor<11008x4096xf32>, %arg264: tensor<11008x4096xf32>, %arg265: tensor<4096x11008xf32>, %arg266: tensor<4096xf32>, %arg267: tensor<4096x4096xf32>, %arg268: tensor<4096x4096xf32>, %arg269: tensor<4096x4096xf32>, %arg270: tensor<1x1x2048x128xf32>, %arg271: tensor<1x1x2048x128xf32>, %arg272: tensor<4096x4096xf32>, %arg273: tensor<4096xf32>, %arg274: tensor<11008x4096xf32>, %arg275: tensor<11008x4096xf32>, %arg276: tensor<4096x11008xf32>, %arg277: tensor<4096xf32>, %arg278: tensor<4096x4096xf32>, %arg279: tensor<4096x4096xf32>, %arg280: tensor<4096x4096xf32>, %arg281: tensor<1x1x2048x128xf32>, %arg282: tensor<1x1x2048x128xf32>, %arg283: tensor<4096x4096xf32>, %arg284: tensor<4096xf32>, %arg285: tensor<11008x4096xf32>, %arg286: tensor<11008x4096xf32>, %arg287: tensor<4096x11008xf32>, %arg288: tensor<4096xf32>, %arg289: tensor<4096x4096xf32>, %arg290: tensor<4096x4096xf32>, %arg291: tensor<4096x4096xf32>, %arg292: tensor<1x1x2048x128xf32>, %arg293: tensor<1x1x2048x128xf32>, %arg294: tensor<4096x4096xf32>, %arg295: tensor<4096xf32>, %arg296: tensor<11008x4096xf32>, %arg297: tensor<11008x4096xf32>, %arg298: tensor<4096x11008xf32>, %arg299: tensor<4096xf32>, %arg300: tensor<4096x4096xf32>, %arg301: tensor<4096x4096xf32>, %arg302: tensor<4096x4096xf32>, %arg303: tensor<1x1x2048x128xf32>, %arg304: tensor<1x1x2048x128xf32>, %arg305: tensor<4096x4096xf32>, %arg306: tensor<4096xf32>, %arg307: tensor<11008x4096xf32>, %arg308: tensor<11008x4096xf32>, %arg309: tensor<4096x11008xf32>, %arg310: tensor<4096xf32>, %arg311: tensor<4096x4096xf32>, %arg312: tensor<4096x4096xf32>, %arg313: tensor<4096x4096xf32>, %arg314: tensor<1x1x2048x128xf32>, %arg315: tensor<1x1x2048x128xf32>, %arg316: tensor<4096x4096xf32>, %arg317: tensor<4096xf32>, %arg318: tensor<11008x4096xf32>, %arg319: tensor<11008x4096xf32>, %arg320: tensor<4096x11008xf32>, %arg321: tensor<4096xf32>, %arg322: tensor<4096x4096xf32>, %arg323: tensor<4096x4096xf32>, %arg324: tensor<4096x4096xf32>, %arg325: tensor<1x1x2048x128xf32>, %arg326: tensor<1x1x2048x128xf32>, %arg327: tensor<4096x4096xf32>, %arg328: tensor<4096xf32>, %arg329: tensor<11008x4096xf32>, %arg330: tensor<11008x4096xf32>, %arg331: tensor<4096x11008xf32>, %arg332: tensor<4096xf32>, %arg333: tensor<4096x4096xf32>, %arg334: tensor<4096x4096xf32>, %arg335: tensor<4096x4096xf32>, %arg336: tensor<1x1x2048x128xf32>, %arg337: tensor<1x1x2048x128xf32>, %arg338: tensor<4096x4096xf32>, %arg339: tensor<4096xf32>, %arg340: tensor<11008x4096xf32>, %arg341: tensor<11008x4096xf32>, %arg342: tensor<4096x11008xf32>, %arg343: tensor<4096xf32>, %arg344: tensor<4096x4096xf32>, %arg345: tensor<4096x4096xf32>, %arg346: tensor<4096x4096xf32>, %arg347: tensor<1x1x2048x128xf32>, %arg348: tensor<1x1x2048x128xf32>, %arg349: tensor<4096x4096xf32>, %arg350: tensor<4096xf32>, %arg351: tensor<11008x4096xf32>, %arg352: tensor<11008x4096xf32>, %arg353: tensor<4096x11008xf32>, %arg354: tensor<4096xf32>, %arg355: tensor<32000x4096xf32>) -> (tensor<1x40x4096xf32>, tensor<1x40x32000xf32>) { + %0 = "tosa.const"() <{value = dense<[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]> : tensor<40xi64>}> : () -> tensor<40xi64> + %1 = tosa.reshape %0 {new_shape = array} : (tensor<40xi64>) -> tensor<1x40xi64> + %2 = tosa.reshape %1 {new_shape = array} : (tensor<1x40xi64>) -> tensor<1x40xi64> + %3 = tosa.cast %arg1 : (tensor<1x40xi64>) -> tensor<1x40xi32> + %4 = tosa.reshape %arg0 {new_shape = array} : (tensor<32000x4096xf32>) -> tensor<1x32000x4096xf32> + %5 = tosa.gather %4, %3 : (tensor<1x32000x4096xf32>, tensor<1x40xi32>) -> tensor<1x40x4096xf32> + %6 = tosa.reshape %5 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %cst = arith.constant dense : tensor<1x40xi1> + %cst_0 = arith.constant dense<-3.40282347E+38> : tensor<40x40xf32> + %7 = "tosa.const"() <{value = dense<[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]> : tensor<40xi64>}> : () -> tensor<40xi64> + %8 = "tosa.const"() <{value = dense<1> : tensor<40xi64>}> : () -> tensor<40xi64> + %9 = tosa.add %7, %8 : (tensor<40xi64>, tensor<40xi64>) -> tensor<40xi64> + %10 = tosa.reshape %9 {new_shape = array} : (tensor<40xi64>) -> tensor<40x1xi64> + %11 = tensor.empty() : tensor<40x40xi1> + %12 = linalg.generic {indexing_maps = [#map, #map1, #map2], iterator_types = ["parallel", "parallel", "reduction"]} ins(%7, %10 : tensor<40xi64>, tensor<40x1xi64>) outs(%11 : tensor<40x40xi1>) { + ^bb0(%in: i64, %in_742: i64, %out: i1): + %4175 = arith.cmpi slt, %in, %in_742 : i64 + linalg.yield %4175 : i1 + } -> tensor<40x40xi1> + %cst_1 = arith.constant 0.000000e+00 : f32 + %13 = tensor.empty() : tensor<40x40xf32> + %14 = linalg.generic {indexing_maps = [#map3, #map3, #map3], iterator_types = ["parallel", "parallel"]} ins(%12, %cst_0 : tensor<40x40xi1>, tensor<40x40xf32>) outs(%13 : tensor<40x40xf32>) { + ^bb0(%in: i1, %in_742: f32, %out: f32): + %4175 = arith.select %in, %cst_1, %in_742 : f32 + linalg.yield %4175 : f32 + } -> tensor<40x40xf32> + %extracted_slice = tensor.extract_slice %cst[0, 0] [1, 40] [1, 1] : tensor<1x40xi1> to tensor<1x40xi1> + %15 = tosa.reshape %extracted_slice {new_shape = array} : (tensor<1x40xi1>) -> tensor<1x1x40xi1> + %16 = tosa.reshape %15 {new_shape = array} : (tensor<1x1x40xi1>) -> tensor<1x1x1x40xi1> + %extracted_slice_2 = tensor.extract_slice %16[0, 0, 0, 0] [1, 1, 1, 40] [1, 1, 1, 1] : tensor<1x1x1x40xi1> to tensor<1x1x1x40xi1> + %17 = "tosa.const"() <{value = dense : tensor<1x1x40x40xi1>}> : () -> tensor<1x1x40x40xi1> + %18 = tosa.add %extracted_slice_2, %17 : (tensor<1x1x1x40xi1>, tensor<1x1x40x40xi1>) -> tensor<1x1x40x40xi1> + %19 = tosa.cast %18 : (tensor<1x1x40x40xi1>) -> tensor<1x1x40x40xf32> + %20 = "tosa.const"() <{value = dense<1.000000e+00> : tensor<1x1x40x40xf32>}> : () -> tensor<1x1x40x40xf32> + %21 = tosa.sub %20, %19 : (tensor<1x1x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x1x40x40xf32> + %22 = tosa.cast %21 : (tensor<1x1x40x40xf32>) -> tensor<1x1x40x40xi1> + %cst_3 = arith.constant -3.40282347E+38 : f32 + %23 = tensor.empty() : tensor<1x1x40x40xf32> + %24 = linalg.generic {indexing_maps = [#map4, #map4, #map4], iterator_types = ["parallel", "parallel", "parallel", "parallel"]} ins(%22, %21 : tensor<1x1x40x40xi1>, tensor<1x1x40x40xf32>) outs(%23 : tensor<1x1x40x40xf32>) { + ^bb0(%in: i1, %in_742: f32, %out: f32): + %4175 = arith.select %in, %cst_3, %in_742 : f32 + linalg.yield %4175 : f32 + } -> tensor<1x1x40x40xf32> + %25 = tosa.reshape %14 {new_shape = array} : (tensor<40x40xf32>) -> tensor<1x40x40xf32> + %26 = tosa.reshape %25 {new_shape = array} : (tensor<1x40x40xf32>) -> tensor<1x1x40x40xf32> + %extracted_slice_4 = tensor.extract_slice %26[0, 0, 0, 0] [1, 1, 40, 40] [1, 1, 1, 1] : tensor<1x1x40x40xf32> to tensor<1x1x40x40xf32> + %extracted_slice_5 = tensor.extract_slice %extracted_slice_4[0, 0, 0, 0] [1, 1, 40, 40] [1, 1, 1, 1] : tensor<1x1x40x40xf32> to tensor<1x1x40x40xf32> + %27 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x1x40x40xf32>}> : () -> tensor<1x1x40x40xf32> + %28 = tosa.add %extracted_slice_5, %27 : (tensor<1x1x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x1x40x40xf32> + %29 = tosa.add %24, %28 : (tensor<1x1x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x1x40x40xf32> + // RMSNorm begins + %30 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32 = arith.constant 2 : i32 + %31 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%6 : tensor<1x40x4096xf32>) outs(%30 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %32 = tosa.reduce_sum %31 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %33 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %34 = tosa.reciprocal %33 : (tensor<1xf32>) -> tensor<1xf32> + %35 = tosa.mul %34, %32 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %36 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %37 = tosa.add %35, %36 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %38 = tosa.rsqrt %37 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %39 = tosa.mul %6, %38 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %40 = tosa.reshape %arg2 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + // %41 is the input matrix X after embedding, + // then there are three consecutive similar codes representing the calculation of Q, K, V (%46, %51, %56): + %41 = tosa.mul %40, %39 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + + %42 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %43 = tosa.transpose %arg3, %42 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %44 = tosa.reshape %41 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_6 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %45 = linalg.matmul {cast = #linalg.type_fn} ins(%44, %43 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_6 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %46 = tosa.reshape %45 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + + %47 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %48 = tosa.transpose %arg4, %47 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %49 = tosa.reshape %41 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_7 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %50 = linalg.matmul {cast = #linalg.type_fn} ins(%49, %48 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_7 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %51 = tosa.reshape %50 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + + %52 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %53 = tosa.transpose %arg5, %52 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %54 = tosa.reshape %41 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_8 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %55 = linalg.matmul {cast = #linalg.type_fn} ins(%54, %53 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_8 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %56 = tosa.reshape %55 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + // completed the calculation of Q, K, V; dimensions is (batch, seq_len, num_heads, head_dims) + // transpose Q, K, V dimensions for RoPE and dot product + + // // begin of RoPE + %57 = tosa.reshape %46 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %58 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %59 = tosa.transpose %57, %58 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + + %60 = tosa.reshape %51 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %61 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %62 = tosa.transpose %60, %61 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + + %63 = tosa.reshape %56 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %64 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %65 = tosa.transpose %63, %64 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + + %extracted_slice_9 = tensor.extract_slice %arg6[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_10 = tensor.extract_slice %extracted_slice_9[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_11 = tensor.extract_slice %extracted_slice_10[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_12 = tensor.extract_slice %arg7[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_13 = tensor.extract_slice %extracted_slice_12[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_14 = tensor.extract_slice %extracted_slice_13[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %66 = tensor.empty() : tensor<1x40x128xf32> + %67 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_11 : tensor<1x1x40x128xf32>) outs(%66 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %68 = tensor.empty() : tensor<40x128xf32> + %69 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%67 : tensor<1x40x128xf32>) outs(%68 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %70 = tensor.empty() : tensor<1x40x128xf32> + %71 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_14 : tensor<1x1x40x128xf32>) outs(%70 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %72 = tensor.empty() : tensor<40x128xf32> + %73 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%71 : tensor<1x40x128xf32>) outs(%72 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + // precompute_theta_pos_frequencies function, which is used to calculating special values ​​of RoPE according to: https://hyper.ai/wiki/29220 + %74 = tensor.empty() : tensor<1x40x128xf32> + %75 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%74 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %69[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %76 = tosa.reshape %75 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %77 = tensor.empty() : tensor<1x40x128xf32> + %78 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%77 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %73[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %79 = tosa.reshape %78 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %80 = tosa.mul %59, %76 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_15 = tensor.extract_slice %59[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_16 = tensor.extract_slice %59[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %81 = tosa.negate %extracted_slice_16 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %82 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice = tensor.insert_slice %81 into %82[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_17 = tensor.insert_slice %extracted_slice_15 into %inserted_slice[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %83 = tosa.mul %inserted_slice_17, %79 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %84 = tosa.add %80, %83 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %85 = tosa.mul %62, %76 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_18 = tensor.extract_slice %62[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_19 = tensor.extract_slice %62[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %86 = tosa.negate %extracted_slice_19 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %87 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_20 = tensor.insert_slice %86 into %87[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_21 = tensor.insert_slice %extracted_slice_18 into %inserted_slice_20[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + // end of RoPE, begin of Softmax(QK/sqrt(d_k)): + %88 = tosa.mul %inserted_slice_21, %79 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %89 = tosa.add %85, %88 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %90 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %91 = tosa.transpose %89, %90 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %92 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %93 = tosa.add %84, %92 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %94 = tosa.reshape %93 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %95 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %96 = tosa.add %91, %95 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %97 = tosa.reshape %96 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %98 = tosa.matmul %94, %97 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %99 = tosa.reshape %98 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %100 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %101 = tosa.reciprocal %100 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %102 = tosa.mul %99, %101 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %103 = tosa.add %102, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %104 = tosa.reduce_max %103 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %105 = tosa.sub %103, %104 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %106 = tosa.exp %105 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %107 = tosa.reduce_sum %106 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %108 = tosa.reciprocal %107 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %109 = tosa.mul %106, %108 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + // end of Softmax(QK/sqrt(d_k)), begin of matmul with V + %110 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %111 = tosa.add %109, %110 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %112 = tosa.reshape %111 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %113 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %114 = tosa.add %65, %113 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %115 = tosa.reshape %114 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + // + %116 = tosa.matmul %112, %115 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + // complete one head Softmax(QK/sqrt(d_k)), collect all heads. + %117 = tosa.reshape %116 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %118 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %119 = tosa.transpose %117, %118 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %120 = tosa.identity %119 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %121 = tosa.reshape %120 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %122 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %123 = tosa.transpose %arg8, %122 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %124 = tosa.reshape %121 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_22 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %125 = linalg.matmul {cast = #linalg.type_fn} ins(%124, %123 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_22 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %126 = tosa.reshape %125 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %127 = tosa.add %6, %126 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + // end of GQA(Group Query Attention) block, begin of FFN block(RMSNorm --> SwiGLU). + %128 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_23 = arith.constant 2 : i32 + %129 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%127 : tensor<1x40x4096xf32>) outs(%128 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_23 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %130 = tosa.reduce_sum %129 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %131 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %132 = tosa.reciprocal %131 : (tensor<1xf32>) -> tensor<1xf32> + %133 = tosa.mul %132, %130 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %134 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %135 = tosa.add %133, %134 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %136 = tosa.rsqrt %135 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %137 = tosa.mul %127, %136 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %138 = tosa.reshape %arg9 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %139 = tosa.mul %138, %137 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %140 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %141 = tosa.transpose %arg10, %140 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %142 = tosa.reshape %139 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_24 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %143 = linalg.matmul {cast = #linalg.type_fn} ins(%142, %141 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_24 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %144 = tosa.reshape %143 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %145 = tosa.sigmoid %144 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %146 = tosa.mul %144, %145 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %147 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %148 = tosa.transpose %arg11, %147 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %149 = tosa.reshape %139 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_25 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %150 = linalg.matmul {cast = #linalg.type_fn} ins(%149, %148 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_25 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %151 = tosa.reshape %150 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %152 = tosa.mul %146, %151 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %153 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %154 = tosa.transpose %arg12, %153 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %155 = tosa.reshape %152 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_26 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %156 = linalg.matmul {cast = #linalg.type_fn} ins(%155, %154 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_26 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %157 = tosa.reshape %156 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %158 = tosa.add %127, %157 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + // end of last decoder block, begin of new decoder block. + %159 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_27 = arith.constant 2 : i32 + %160 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%158 : tensor<1x40x4096xf32>) outs(%159 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_27 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %161 = tosa.reduce_sum %160 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %162 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %163 = tosa.reciprocal %162 : (tensor<1xf32>) -> tensor<1xf32> + %164 = tosa.mul %163, %161 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %165 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %166 = tosa.add %164, %165 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %167 = tosa.rsqrt %166 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %168 = tosa.mul %158, %167 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %169 = tosa.reshape %arg13 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + // %170 is the input matrix X after embedding, + // then there are three consecutive similar code block representing the calculation of Q, K, V (%175, %180, %185): + %170 = tosa.mul %169, %168 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + + %171 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %172 = tosa.transpose %arg14, %171 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %173 = tosa.reshape %170 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_28 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %174 = linalg.matmul {cast = #linalg.type_fn} ins(%173, %172 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_28 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %175 = tosa.reshape %174 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + + %176 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %177 = tosa.transpose %arg15, %176 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %178 = tosa.reshape %170 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_29 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %179 = linalg.matmul {cast = #linalg.type_fn} ins(%178, %177 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_29 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %180 = tosa.reshape %179 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + + %181 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %182 = tosa.transpose %arg16, %181 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %183 = tosa.reshape %170 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_30 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %184 = linalg.matmul {cast = #linalg.type_fn} ins(%183, %182 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_30 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %185 = tosa.reshape %184 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + // completed the calculation of Q, K, V above. + %186 = tosa.reshape %175 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %187 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %188 = tosa.transpose %186, %187 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + + %189 = tosa.reshape %180 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %190 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %191 = tosa.transpose %189, %190 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + + %192 = tosa.reshape %185 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %193 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %194 = tosa.transpose %192, %193 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + + %extracted_slice_31 = tensor.extract_slice %arg17[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_32 = tensor.extract_slice %extracted_slice_31[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_33 = tensor.extract_slice %extracted_slice_32[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_34 = tensor.extract_slice %arg18[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_35 = tensor.extract_slice %extracted_slice_34[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_36 = tensor.extract_slice %extracted_slice_35[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %195 = tensor.empty() : tensor<1x40x128xf32> + %196 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_33 : tensor<1x1x40x128xf32>) outs(%195 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %197 = tensor.empty() : tensor<40x128xf32> + // #map2 = affine_map<(d0, d1, d2) -> (d0, d1)> + // #map3 = affine_map<(d0, d1) -> (d0, d1)> + // #map4 = affine_map<(d0, d1, d2, d3) -> (d0, d1, d2, d3)> + // #map5 = affine_map<(d0, d1, d2) -> (d0, d1, d2)> + // #map6 = affine_map<(d0, d1, d2) -> (d0, 0, d1, d2)> + // #map7 = affine_map<(d0, d1) -> (0, d0, d1)> + %198 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%196 : tensor<1x40x128xf32>) outs(%197 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %199 = tensor.empty() : tensor<1x40x128xf32> + %200 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_36 : tensor<1x1x40x128xf32>) outs(%199 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %201 = tensor.empty() : tensor<40x128xf32> + %202 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%200 : tensor<1x40x128xf32>) outs(%201 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %203 = tensor.empty() : tensor<1x40x128xf32> + %204 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%203 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %198[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %205 = tosa.reshape %204 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %206 = tensor.empty() : tensor<1x40x128xf32> + %207 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%206 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %202[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %208 = tosa.reshape %207 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %209 = tosa.mul %188, %205 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_37 = tensor.extract_slice %188[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_38 = tensor.extract_slice %188[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %210 = tosa.negate %extracted_slice_38 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %211 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_39 = tensor.insert_slice %210 into %211[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_40 = tensor.insert_slice %extracted_slice_37 into %inserted_slice_39[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %212 = tosa.mul %inserted_slice_40, %208 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %213 = tosa.add %209, %212 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + + %214 = tosa.mul %191, %205 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_41 = tensor.extract_slice %191[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_42 = tensor.extract_slice %191[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %215 = tosa.negate %extracted_slice_42 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %216 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_43 = tensor.insert_slice %215 into %216[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_44 = tensor.insert_slice %extracted_slice_41 into %inserted_slice_43[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %217 = tosa.mul %inserted_slice_44, %208 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %218 = tosa.add %214, %217 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + + %219 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %220 = tosa.transpose %218, %219 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %221 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %222 = tosa.add %213, %221 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %223 = tosa.reshape %222 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %224 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %225 = tosa.add %220, %224 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %226 = tosa.reshape %225 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %227 = tosa.matmul %223, %226 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %228 = tosa.reshape %227 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %229 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %230 = tosa.reciprocal %229 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %231 = tosa.mul %228, %230 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %232 = tosa.add %231, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %233 = tosa.reduce_max %232 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %234 = tosa.sub %232, %233 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %235 = tosa.exp %234 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %236 = tosa.reduce_sum %235 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %237 = tosa.reciprocal %236 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %238 = tosa.mul %235, %237 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %239 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %240 = tosa.add %238, %239 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %241 = tosa.reshape %240 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %242 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %243 = tosa.add %194, %242 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %244 = tosa.reshape %243 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %245 = tosa.matmul %241, %244 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %246 = tosa.reshape %245 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %247 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %248 = tosa.transpose %246, %247 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %249 = tosa.identity %248 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %250 = tosa.reshape %249 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %251 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %252 = tosa.transpose %arg19, %251 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %253 = tosa.reshape %250 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_45 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %254 = linalg.matmul {cast = #linalg.type_fn} ins(%253, %252 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_45 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %255 = tosa.reshape %254 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %256 = tosa.add %158, %255 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %257 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_46 = arith.constant 2 : i32 + %258 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%256 : tensor<1x40x4096xf32>) outs(%257 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_46 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %259 = tosa.reduce_sum %258 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %260 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %261 = tosa.reciprocal %260 : (tensor<1xf32>) -> tensor<1xf32> + %262 = tosa.mul %261, %259 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %263 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %264 = tosa.add %262, %263 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %265 = tosa.rsqrt %264 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %266 = tosa.mul %256, %265 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %267 = tosa.reshape %arg20 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %268 = tosa.mul %267, %266 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %269 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %270 = tosa.transpose %arg21, %269 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %271 = tosa.reshape %268 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_47 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %272 = linalg.matmul {cast = #linalg.type_fn} ins(%271, %270 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_47 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %273 = tosa.reshape %272 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %274 = tosa.sigmoid %273 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %275 = tosa.mul %273, %274 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %276 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %277 = tosa.transpose %arg22, %276 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %278 = tosa.reshape %268 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_48 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %279 = linalg.matmul {cast = #linalg.type_fn} ins(%278, %277 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_48 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %280 = tosa.reshape %279 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %281 = tosa.mul %275, %280 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %282 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %283 = tosa.transpose %arg23, %282 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %284 = tosa.reshape %281 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_49 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %285 = linalg.matmul {cast = #linalg.type_fn} ins(%284, %283 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_49 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %286 = tosa.reshape %285 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %287 = tosa.add %256, %286 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %288 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_50 = arith.constant 2 : i32 + %289 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%287 : tensor<1x40x4096xf32>) outs(%288 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_50 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %290 = tosa.reduce_sum %289 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %291 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %292 = tosa.reciprocal %291 : (tensor<1xf32>) -> tensor<1xf32> + %293 = tosa.mul %292, %290 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %294 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %295 = tosa.add %293, %294 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %296 = tosa.rsqrt %295 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %297 = tosa.mul %287, %296 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %298 = tosa.reshape %arg24 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %299 = tosa.mul %298, %297 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %300 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %301 = tosa.transpose %arg25, %300 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %302 = tosa.reshape %299 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_51 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %303 = linalg.matmul {cast = #linalg.type_fn} ins(%302, %301 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_51 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %304 = tosa.reshape %303 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %305 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %306 = tosa.transpose %arg26, %305 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %307 = tosa.reshape %299 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_52 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %308 = linalg.matmul {cast = #linalg.type_fn} ins(%307, %306 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_52 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %309 = tosa.reshape %308 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %310 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %311 = tosa.transpose %arg27, %310 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %312 = tosa.reshape %299 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_53 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %313 = linalg.matmul {cast = #linalg.type_fn} ins(%312, %311 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_53 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %314 = tosa.reshape %313 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %315 = tosa.reshape %304 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %316 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %317 = tosa.transpose %315, %316 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %318 = tosa.reshape %309 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %319 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %320 = tosa.transpose %318, %319 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %321 = tosa.reshape %314 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %322 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %323 = tosa.transpose %321, %322 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_54 = tensor.extract_slice %arg28[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_55 = tensor.extract_slice %extracted_slice_54[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_56 = tensor.extract_slice %extracted_slice_55[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_57 = tensor.extract_slice %arg29[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_58 = tensor.extract_slice %extracted_slice_57[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_59 = tensor.extract_slice %extracted_slice_58[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %324 = tensor.empty() : tensor<1x40x128xf32> + %325 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_56 : tensor<1x1x40x128xf32>) outs(%324 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %326 = tensor.empty() : tensor<40x128xf32> + %327 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%325 : tensor<1x40x128xf32>) outs(%326 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %328 = tensor.empty() : tensor<1x40x128xf32> + %329 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_59 : tensor<1x1x40x128xf32>) outs(%328 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %330 = tensor.empty() : tensor<40x128xf32> + %331 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%329 : tensor<1x40x128xf32>) outs(%330 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %332 = tensor.empty() : tensor<1x40x128xf32> + %333 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%332 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %327[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %334 = tosa.reshape %333 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %335 = tensor.empty() : tensor<1x40x128xf32> + %336 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%335 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %331[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %337 = tosa.reshape %336 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %338 = tosa.mul %317, %334 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_60 = tensor.extract_slice %317[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_61 = tensor.extract_slice %317[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %339 = tosa.negate %extracted_slice_61 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %340 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_62 = tensor.insert_slice %339 into %340[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_63 = tensor.insert_slice %extracted_slice_60 into %inserted_slice_62[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %341 = tosa.mul %inserted_slice_63, %337 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %342 = tosa.add %338, %341 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %343 = tosa.mul %320, %334 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_64 = tensor.extract_slice %320[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_65 = tensor.extract_slice %320[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %344 = tosa.negate %extracted_slice_65 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %345 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_66 = tensor.insert_slice %344 into %345[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_67 = tensor.insert_slice %extracted_slice_64 into %inserted_slice_66[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %346 = tosa.mul %inserted_slice_67, %337 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %347 = tosa.add %343, %346 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %348 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %349 = tosa.transpose %347, %348 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %350 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %351 = tosa.add %342, %350 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %352 = tosa.reshape %351 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %353 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %354 = tosa.add %349, %353 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %355 = tosa.reshape %354 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %356 = tosa.matmul %352, %355 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %357 = tosa.reshape %356 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %358 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %359 = tosa.reciprocal %358 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %360 = tosa.mul %357, %359 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %361 = tosa.add %360, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %362 = tosa.reduce_max %361 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %363 = tosa.sub %361, %362 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %364 = tosa.exp %363 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %365 = tosa.reduce_sum %364 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %366 = tosa.reciprocal %365 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %367 = tosa.mul %364, %366 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %368 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %369 = tosa.add %367, %368 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %370 = tosa.reshape %369 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %371 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %372 = tosa.add %323, %371 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %373 = tosa.reshape %372 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %374 = tosa.matmul %370, %373 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %375 = tosa.reshape %374 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %376 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %377 = tosa.transpose %375, %376 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %378 = tosa.identity %377 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %379 = tosa.reshape %378 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %380 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %381 = tosa.transpose %arg30, %380 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %382 = tosa.reshape %379 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_68 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %383 = linalg.matmul {cast = #linalg.type_fn} ins(%382, %381 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_68 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %384 = tosa.reshape %383 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %385 = tosa.add %287, %384 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %386 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_69 = arith.constant 2 : i32 + %387 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%385 : tensor<1x40x4096xf32>) outs(%386 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_69 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %388 = tosa.reduce_sum %387 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %389 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %390 = tosa.reciprocal %389 : (tensor<1xf32>) -> tensor<1xf32> + %391 = tosa.mul %390, %388 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %392 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %393 = tosa.add %391, %392 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %394 = tosa.rsqrt %393 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %395 = tosa.mul %385, %394 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %396 = tosa.reshape %arg31 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %397 = tosa.mul %396, %395 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %398 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %399 = tosa.transpose %arg32, %398 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %400 = tosa.reshape %397 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_70 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %401 = linalg.matmul {cast = #linalg.type_fn} ins(%400, %399 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_70 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %402 = tosa.reshape %401 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %403 = tosa.sigmoid %402 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %404 = tosa.mul %402, %403 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %405 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %406 = tosa.transpose %arg33, %405 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %407 = tosa.reshape %397 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_71 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %408 = linalg.matmul {cast = #linalg.type_fn} ins(%407, %406 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_71 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %409 = tosa.reshape %408 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %410 = tosa.mul %404, %409 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %411 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %412 = tosa.transpose %arg34, %411 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %413 = tosa.reshape %410 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_72 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %414 = linalg.matmul {cast = #linalg.type_fn} ins(%413, %412 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_72 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %415 = tosa.reshape %414 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %416 = tosa.add %385, %415 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %417 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_73 = arith.constant 2 : i32 + %418 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%416 : tensor<1x40x4096xf32>) outs(%417 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_73 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %419 = tosa.reduce_sum %418 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %420 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %421 = tosa.reciprocal %420 : (tensor<1xf32>) -> tensor<1xf32> + %422 = tosa.mul %421, %419 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %423 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %424 = tosa.add %422, %423 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %425 = tosa.rsqrt %424 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %426 = tosa.mul %416, %425 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %427 = tosa.reshape %arg35 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %428 = tosa.mul %427, %426 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %429 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %430 = tosa.transpose %arg36, %429 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %431 = tosa.reshape %428 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_74 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %432 = linalg.matmul {cast = #linalg.type_fn} ins(%431, %430 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_74 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %433 = tosa.reshape %432 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %434 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %435 = tosa.transpose %arg37, %434 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %436 = tosa.reshape %428 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_75 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %437 = linalg.matmul {cast = #linalg.type_fn} ins(%436, %435 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_75 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %438 = tosa.reshape %437 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %439 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %440 = tosa.transpose %arg38, %439 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %441 = tosa.reshape %428 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_76 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %442 = linalg.matmul {cast = #linalg.type_fn} ins(%441, %440 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_76 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %443 = tosa.reshape %442 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %444 = tosa.reshape %433 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %445 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %446 = tosa.transpose %444, %445 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %447 = tosa.reshape %438 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %448 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %449 = tosa.transpose %447, %448 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %450 = tosa.reshape %443 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %451 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %452 = tosa.transpose %450, %451 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_77 = tensor.extract_slice %arg39[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_78 = tensor.extract_slice %extracted_slice_77[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_79 = tensor.extract_slice %extracted_slice_78[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_80 = tensor.extract_slice %arg40[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_81 = tensor.extract_slice %extracted_slice_80[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_82 = tensor.extract_slice %extracted_slice_81[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %453 = tensor.empty() : tensor<1x40x128xf32> + %454 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_79 : tensor<1x1x40x128xf32>) outs(%453 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %455 = tensor.empty() : tensor<40x128xf32> + %456 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%454 : tensor<1x40x128xf32>) outs(%455 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %457 = tensor.empty() : tensor<1x40x128xf32> + %458 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_82 : tensor<1x1x40x128xf32>) outs(%457 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %459 = tensor.empty() : tensor<40x128xf32> + %460 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%458 : tensor<1x40x128xf32>) outs(%459 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %461 = tensor.empty() : tensor<1x40x128xf32> + %462 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%461 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %456[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %463 = tosa.reshape %462 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %464 = tensor.empty() : tensor<1x40x128xf32> + %465 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%464 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %460[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %466 = tosa.reshape %465 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %467 = tosa.mul %446, %463 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_83 = tensor.extract_slice %446[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_84 = tensor.extract_slice %446[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %468 = tosa.negate %extracted_slice_84 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %469 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_85 = tensor.insert_slice %468 into %469[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_86 = tensor.insert_slice %extracted_slice_83 into %inserted_slice_85[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %470 = tosa.mul %inserted_slice_86, %466 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %471 = tosa.add %467, %470 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %472 = tosa.mul %449, %463 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_87 = tensor.extract_slice %449[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_88 = tensor.extract_slice %449[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %473 = tosa.negate %extracted_slice_88 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %474 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_89 = tensor.insert_slice %473 into %474[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_90 = tensor.insert_slice %extracted_slice_87 into %inserted_slice_89[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %475 = tosa.mul %inserted_slice_90, %466 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %476 = tosa.add %472, %475 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %477 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %478 = tosa.transpose %476, %477 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %479 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %480 = tosa.add %471, %479 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %481 = tosa.reshape %480 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %482 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %483 = tosa.add %478, %482 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %484 = tosa.reshape %483 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %485 = tosa.matmul %481, %484 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %486 = tosa.reshape %485 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %487 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %488 = tosa.reciprocal %487 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %489 = tosa.mul %486, %488 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %490 = tosa.add %489, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %491 = tosa.reduce_max %490 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %492 = tosa.sub %490, %491 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %493 = tosa.exp %492 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %494 = tosa.reduce_sum %493 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %495 = tosa.reciprocal %494 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %496 = tosa.mul %493, %495 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %497 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %498 = tosa.add %496, %497 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %499 = tosa.reshape %498 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %500 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %501 = tosa.add %452, %500 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %502 = tosa.reshape %501 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %503 = tosa.matmul %499, %502 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %504 = tosa.reshape %503 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %505 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %506 = tosa.transpose %504, %505 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %507 = tosa.identity %506 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %508 = tosa.reshape %507 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %509 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %510 = tosa.transpose %arg41, %509 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %511 = tosa.reshape %508 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_91 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %512 = linalg.matmul {cast = #linalg.type_fn} ins(%511, %510 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_91 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %513 = tosa.reshape %512 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %514 = tosa.add %416, %513 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %515 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_92 = arith.constant 2 : i32 + %516 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%514 : tensor<1x40x4096xf32>) outs(%515 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_92 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %517 = tosa.reduce_sum %516 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %518 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %519 = tosa.reciprocal %518 : (tensor<1xf32>) -> tensor<1xf32> + %520 = tosa.mul %519, %517 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %521 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %522 = tosa.add %520, %521 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %523 = tosa.rsqrt %522 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %524 = tosa.mul %514, %523 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %525 = tosa.reshape %arg42 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %526 = tosa.mul %525, %524 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %527 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %528 = tosa.transpose %arg43, %527 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %529 = tosa.reshape %526 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_93 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %530 = linalg.matmul {cast = #linalg.type_fn} ins(%529, %528 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_93 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %531 = tosa.reshape %530 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %532 = tosa.sigmoid %531 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %533 = tosa.mul %531, %532 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %534 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %535 = tosa.transpose %arg44, %534 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %536 = tosa.reshape %526 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_94 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %537 = linalg.matmul {cast = #linalg.type_fn} ins(%536, %535 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_94 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %538 = tosa.reshape %537 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %539 = tosa.mul %533, %538 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %540 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %541 = tosa.transpose %arg45, %540 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %542 = tosa.reshape %539 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_95 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %543 = linalg.matmul {cast = #linalg.type_fn} ins(%542, %541 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_95 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %544 = tosa.reshape %543 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %545 = tosa.add %514, %544 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %546 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_96 = arith.constant 2 : i32 + %547 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%545 : tensor<1x40x4096xf32>) outs(%546 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_96 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %548 = tosa.reduce_sum %547 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %549 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %550 = tosa.reciprocal %549 : (tensor<1xf32>) -> tensor<1xf32> + %551 = tosa.mul %550, %548 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %552 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %553 = tosa.add %551, %552 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %554 = tosa.rsqrt %553 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %555 = tosa.mul %545, %554 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %556 = tosa.reshape %arg46 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %557 = tosa.mul %556, %555 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %558 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %559 = tosa.transpose %arg47, %558 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %560 = tosa.reshape %557 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_97 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %561 = linalg.matmul {cast = #linalg.type_fn} ins(%560, %559 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_97 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %562 = tosa.reshape %561 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %563 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %564 = tosa.transpose %arg48, %563 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %565 = tosa.reshape %557 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_98 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %566 = linalg.matmul {cast = #linalg.type_fn} ins(%565, %564 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_98 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %567 = tosa.reshape %566 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %568 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %569 = tosa.transpose %arg49, %568 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %570 = tosa.reshape %557 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_99 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %571 = linalg.matmul {cast = #linalg.type_fn} ins(%570, %569 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_99 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %572 = tosa.reshape %571 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %573 = tosa.reshape %562 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %574 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %575 = tosa.transpose %573, %574 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %576 = tosa.reshape %567 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %577 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %578 = tosa.transpose %576, %577 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %579 = tosa.reshape %572 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %580 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %581 = tosa.transpose %579, %580 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_100 = tensor.extract_slice %arg50[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_101 = tensor.extract_slice %extracted_slice_100[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_102 = tensor.extract_slice %extracted_slice_101[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_103 = tensor.extract_slice %arg51[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_104 = tensor.extract_slice %extracted_slice_103[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_105 = tensor.extract_slice %extracted_slice_104[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %582 = tensor.empty() : tensor<1x40x128xf32> + %583 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_102 : tensor<1x1x40x128xf32>) outs(%582 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %584 = tensor.empty() : tensor<40x128xf32> + %585 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%583 : tensor<1x40x128xf32>) outs(%584 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %586 = tensor.empty() : tensor<1x40x128xf32> + %587 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_105 : tensor<1x1x40x128xf32>) outs(%586 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %588 = tensor.empty() : tensor<40x128xf32> + %589 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%587 : tensor<1x40x128xf32>) outs(%588 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %590 = tensor.empty() : tensor<1x40x128xf32> + %591 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%590 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %585[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %592 = tosa.reshape %591 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %593 = tensor.empty() : tensor<1x40x128xf32> + %594 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%593 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %589[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %595 = tosa.reshape %594 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %596 = tosa.mul %575, %592 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_106 = tensor.extract_slice %575[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_107 = tensor.extract_slice %575[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %597 = tosa.negate %extracted_slice_107 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %598 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_108 = tensor.insert_slice %597 into %598[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_109 = tensor.insert_slice %extracted_slice_106 into %inserted_slice_108[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %599 = tosa.mul %inserted_slice_109, %595 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %600 = tosa.add %596, %599 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %601 = tosa.mul %578, %592 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_110 = tensor.extract_slice %578[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_111 = tensor.extract_slice %578[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %602 = tosa.negate %extracted_slice_111 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %603 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_112 = tensor.insert_slice %602 into %603[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_113 = tensor.insert_slice %extracted_slice_110 into %inserted_slice_112[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %604 = tosa.mul %inserted_slice_113, %595 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %605 = tosa.add %601, %604 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %606 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %607 = tosa.transpose %605, %606 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %608 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %609 = tosa.add %600, %608 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %610 = tosa.reshape %609 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %611 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %612 = tosa.add %607, %611 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %613 = tosa.reshape %612 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %614 = tosa.matmul %610, %613 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %615 = tosa.reshape %614 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %616 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %617 = tosa.reciprocal %616 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %618 = tosa.mul %615, %617 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %619 = tosa.add %618, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %620 = tosa.reduce_max %619 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %621 = tosa.sub %619, %620 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %622 = tosa.exp %621 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %623 = tosa.reduce_sum %622 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %624 = tosa.reciprocal %623 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %625 = tosa.mul %622, %624 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %626 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %627 = tosa.add %625, %626 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %628 = tosa.reshape %627 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %629 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %630 = tosa.add %581, %629 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %631 = tosa.reshape %630 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %632 = tosa.matmul %628, %631 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %633 = tosa.reshape %632 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %634 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %635 = tosa.transpose %633, %634 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %636 = tosa.identity %635 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %637 = tosa.reshape %636 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %638 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %639 = tosa.transpose %arg52, %638 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %640 = tosa.reshape %637 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_114 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %641 = linalg.matmul {cast = #linalg.type_fn} ins(%640, %639 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_114 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %642 = tosa.reshape %641 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %643 = tosa.add %545, %642 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %644 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_115 = arith.constant 2 : i32 + %645 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%643 : tensor<1x40x4096xf32>) outs(%644 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_115 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %646 = tosa.reduce_sum %645 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %647 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %648 = tosa.reciprocal %647 : (tensor<1xf32>) -> tensor<1xf32> + %649 = tosa.mul %648, %646 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %650 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %651 = tosa.add %649, %650 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %652 = tosa.rsqrt %651 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %653 = tosa.mul %643, %652 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %654 = tosa.reshape %arg53 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %655 = tosa.mul %654, %653 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %656 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %657 = tosa.transpose %arg54, %656 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %658 = tosa.reshape %655 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_116 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %659 = linalg.matmul {cast = #linalg.type_fn} ins(%658, %657 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_116 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %660 = tosa.reshape %659 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %661 = tosa.sigmoid %660 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %662 = tosa.mul %660, %661 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %663 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %664 = tosa.transpose %arg55, %663 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %665 = tosa.reshape %655 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_117 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %666 = linalg.matmul {cast = #linalg.type_fn} ins(%665, %664 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_117 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %667 = tosa.reshape %666 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %668 = tosa.mul %662, %667 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %669 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %670 = tosa.transpose %arg56, %669 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %671 = tosa.reshape %668 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_118 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %672 = linalg.matmul {cast = #linalg.type_fn} ins(%671, %670 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_118 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %673 = tosa.reshape %672 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %674 = tosa.add %643, %673 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %675 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_119 = arith.constant 2 : i32 + %676 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%674 : tensor<1x40x4096xf32>) outs(%675 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_119 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %677 = tosa.reduce_sum %676 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %678 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %679 = tosa.reciprocal %678 : (tensor<1xf32>) -> tensor<1xf32> + %680 = tosa.mul %679, %677 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %681 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %682 = tosa.add %680, %681 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %683 = tosa.rsqrt %682 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %684 = tosa.mul %674, %683 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %685 = tosa.reshape %arg57 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %686 = tosa.mul %685, %684 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %687 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %688 = tosa.transpose %arg58, %687 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %689 = tosa.reshape %686 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_120 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %690 = linalg.matmul {cast = #linalg.type_fn} ins(%689, %688 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_120 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %691 = tosa.reshape %690 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %692 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %693 = tosa.transpose %arg59, %692 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %694 = tosa.reshape %686 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_121 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %695 = linalg.matmul {cast = #linalg.type_fn} ins(%694, %693 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_121 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %696 = tosa.reshape %695 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %697 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %698 = tosa.transpose %arg60, %697 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %699 = tosa.reshape %686 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_122 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %700 = linalg.matmul {cast = #linalg.type_fn} ins(%699, %698 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_122 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %701 = tosa.reshape %700 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %702 = tosa.reshape %691 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %703 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %704 = tosa.transpose %702, %703 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %705 = tosa.reshape %696 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %706 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %707 = tosa.transpose %705, %706 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %708 = tosa.reshape %701 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %709 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %710 = tosa.transpose %708, %709 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_123 = tensor.extract_slice %arg61[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_124 = tensor.extract_slice %extracted_slice_123[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_125 = tensor.extract_slice %extracted_slice_124[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_126 = tensor.extract_slice %arg62[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_127 = tensor.extract_slice %extracted_slice_126[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_128 = tensor.extract_slice %extracted_slice_127[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %711 = tensor.empty() : tensor<1x40x128xf32> + %712 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_125 : tensor<1x1x40x128xf32>) outs(%711 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %713 = tensor.empty() : tensor<40x128xf32> + %714 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%712 : tensor<1x40x128xf32>) outs(%713 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %715 = tensor.empty() : tensor<1x40x128xf32> + %716 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_128 : tensor<1x1x40x128xf32>) outs(%715 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %717 = tensor.empty() : tensor<40x128xf32> + %718 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%716 : tensor<1x40x128xf32>) outs(%717 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %719 = tensor.empty() : tensor<1x40x128xf32> + %720 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%719 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %714[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %721 = tosa.reshape %720 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %722 = tensor.empty() : tensor<1x40x128xf32> + %723 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%722 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %718[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %724 = tosa.reshape %723 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %725 = tosa.mul %704, %721 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_129 = tensor.extract_slice %704[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_130 = tensor.extract_slice %704[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %726 = tosa.negate %extracted_slice_130 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %727 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_131 = tensor.insert_slice %726 into %727[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_132 = tensor.insert_slice %extracted_slice_129 into %inserted_slice_131[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %728 = tosa.mul %inserted_slice_132, %724 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %729 = tosa.add %725, %728 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %730 = tosa.mul %707, %721 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_133 = tensor.extract_slice %707[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_134 = tensor.extract_slice %707[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %731 = tosa.negate %extracted_slice_134 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %732 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_135 = tensor.insert_slice %731 into %732[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_136 = tensor.insert_slice %extracted_slice_133 into %inserted_slice_135[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %733 = tosa.mul %inserted_slice_136, %724 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %734 = tosa.add %730, %733 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %735 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %736 = tosa.transpose %734, %735 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %737 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %738 = tosa.add %729, %737 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %739 = tosa.reshape %738 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %740 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %741 = tosa.add %736, %740 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %742 = tosa.reshape %741 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %743 = tosa.matmul %739, %742 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %744 = tosa.reshape %743 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %745 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %746 = tosa.reciprocal %745 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %747 = tosa.mul %744, %746 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %748 = tosa.add %747, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %749 = tosa.reduce_max %748 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %750 = tosa.sub %748, %749 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %751 = tosa.exp %750 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %752 = tosa.reduce_sum %751 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %753 = tosa.reciprocal %752 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %754 = tosa.mul %751, %753 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %755 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %756 = tosa.add %754, %755 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %757 = tosa.reshape %756 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %758 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %759 = tosa.add %710, %758 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %760 = tosa.reshape %759 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %761 = tosa.matmul %757, %760 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %762 = tosa.reshape %761 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %763 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %764 = tosa.transpose %762, %763 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %765 = tosa.identity %764 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %766 = tosa.reshape %765 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %767 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %768 = tosa.transpose %arg63, %767 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %769 = tosa.reshape %766 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_137 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %770 = linalg.matmul {cast = #linalg.type_fn} ins(%769, %768 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_137 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %771 = tosa.reshape %770 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %772 = tosa.add %674, %771 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %773 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_138 = arith.constant 2 : i32 + %774 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%772 : tensor<1x40x4096xf32>) outs(%773 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_138 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %775 = tosa.reduce_sum %774 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %776 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %777 = tosa.reciprocal %776 : (tensor<1xf32>) -> tensor<1xf32> + %778 = tosa.mul %777, %775 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %779 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %780 = tosa.add %778, %779 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %781 = tosa.rsqrt %780 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %782 = tosa.mul %772, %781 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %783 = tosa.reshape %arg64 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %784 = tosa.mul %783, %782 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %785 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %786 = tosa.transpose %arg65, %785 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %787 = tosa.reshape %784 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_139 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %788 = linalg.matmul {cast = #linalg.type_fn} ins(%787, %786 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_139 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %789 = tosa.reshape %788 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %790 = tosa.sigmoid %789 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %791 = tosa.mul %789, %790 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %792 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %793 = tosa.transpose %arg66, %792 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %794 = tosa.reshape %784 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_140 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %795 = linalg.matmul {cast = #linalg.type_fn} ins(%794, %793 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_140 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %796 = tosa.reshape %795 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %797 = tosa.mul %791, %796 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %798 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %799 = tosa.transpose %arg67, %798 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %800 = tosa.reshape %797 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_141 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %801 = linalg.matmul {cast = #linalg.type_fn} ins(%800, %799 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_141 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %802 = tosa.reshape %801 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %803 = tosa.add %772, %802 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %804 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_142 = arith.constant 2 : i32 + %805 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%803 : tensor<1x40x4096xf32>) outs(%804 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_142 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %806 = tosa.reduce_sum %805 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %807 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %808 = tosa.reciprocal %807 : (tensor<1xf32>) -> tensor<1xf32> + %809 = tosa.mul %808, %806 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %810 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %811 = tosa.add %809, %810 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %812 = tosa.rsqrt %811 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %813 = tosa.mul %803, %812 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %814 = tosa.reshape %arg68 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %815 = tosa.mul %814, %813 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %816 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %817 = tosa.transpose %arg69, %816 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %818 = tosa.reshape %815 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_143 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %819 = linalg.matmul {cast = #linalg.type_fn} ins(%818, %817 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_143 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %820 = tosa.reshape %819 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %821 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %822 = tosa.transpose %arg70, %821 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %823 = tosa.reshape %815 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_144 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %824 = linalg.matmul {cast = #linalg.type_fn} ins(%823, %822 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_144 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %825 = tosa.reshape %824 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %826 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %827 = tosa.transpose %arg71, %826 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %828 = tosa.reshape %815 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_145 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %829 = linalg.matmul {cast = #linalg.type_fn} ins(%828, %827 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_145 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %830 = tosa.reshape %829 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %831 = tosa.reshape %820 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %832 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %833 = tosa.transpose %831, %832 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %834 = tosa.reshape %825 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %835 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %836 = tosa.transpose %834, %835 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %837 = tosa.reshape %830 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %838 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %839 = tosa.transpose %837, %838 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_146 = tensor.extract_slice %arg72[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_147 = tensor.extract_slice %extracted_slice_146[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_148 = tensor.extract_slice %extracted_slice_147[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_149 = tensor.extract_slice %arg73[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_150 = tensor.extract_slice %extracted_slice_149[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_151 = tensor.extract_slice %extracted_slice_150[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %840 = tensor.empty() : tensor<1x40x128xf32> + %841 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_148 : tensor<1x1x40x128xf32>) outs(%840 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %842 = tensor.empty() : tensor<40x128xf32> + %843 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%841 : tensor<1x40x128xf32>) outs(%842 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %844 = tensor.empty() : tensor<1x40x128xf32> + %845 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_151 : tensor<1x1x40x128xf32>) outs(%844 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %846 = tensor.empty() : tensor<40x128xf32> + %847 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%845 : tensor<1x40x128xf32>) outs(%846 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %848 = tensor.empty() : tensor<1x40x128xf32> + %849 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%848 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %843[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %850 = tosa.reshape %849 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %851 = tensor.empty() : tensor<1x40x128xf32> + %852 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%851 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %847[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %853 = tosa.reshape %852 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %854 = tosa.mul %833, %850 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_152 = tensor.extract_slice %833[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_153 = tensor.extract_slice %833[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %855 = tosa.negate %extracted_slice_153 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %856 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_154 = tensor.insert_slice %855 into %856[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_155 = tensor.insert_slice %extracted_slice_152 into %inserted_slice_154[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %857 = tosa.mul %inserted_slice_155, %853 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %858 = tosa.add %854, %857 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %859 = tosa.mul %836, %850 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_156 = tensor.extract_slice %836[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_157 = tensor.extract_slice %836[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %860 = tosa.negate %extracted_slice_157 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %861 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_158 = tensor.insert_slice %860 into %861[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_159 = tensor.insert_slice %extracted_slice_156 into %inserted_slice_158[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %862 = tosa.mul %inserted_slice_159, %853 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %863 = tosa.add %859, %862 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %864 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %865 = tosa.transpose %863, %864 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %866 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %867 = tosa.add %858, %866 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %868 = tosa.reshape %867 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %869 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %870 = tosa.add %865, %869 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %871 = tosa.reshape %870 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %872 = tosa.matmul %868, %871 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %873 = tosa.reshape %872 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %874 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %875 = tosa.reciprocal %874 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %876 = tosa.mul %873, %875 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %877 = tosa.add %876, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %878 = tosa.reduce_max %877 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %879 = tosa.sub %877, %878 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %880 = tosa.exp %879 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %881 = tosa.reduce_sum %880 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %882 = tosa.reciprocal %881 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %883 = tosa.mul %880, %882 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %884 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %885 = tosa.add %883, %884 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %886 = tosa.reshape %885 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %887 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %888 = tosa.add %839, %887 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %889 = tosa.reshape %888 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %890 = tosa.matmul %886, %889 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %891 = tosa.reshape %890 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %892 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %893 = tosa.transpose %891, %892 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %894 = tosa.identity %893 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %895 = tosa.reshape %894 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %896 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %897 = tosa.transpose %arg74, %896 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %898 = tosa.reshape %895 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_160 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %899 = linalg.matmul {cast = #linalg.type_fn} ins(%898, %897 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_160 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %900 = tosa.reshape %899 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %901 = tosa.add %803, %900 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %902 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_161 = arith.constant 2 : i32 + %903 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%901 : tensor<1x40x4096xf32>) outs(%902 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_161 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %904 = tosa.reduce_sum %903 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %905 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %906 = tosa.reciprocal %905 : (tensor<1xf32>) -> tensor<1xf32> + %907 = tosa.mul %906, %904 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %908 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %909 = tosa.add %907, %908 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %910 = tosa.rsqrt %909 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %911 = tosa.mul %901, %910 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %912 = tosa.reshape %arg75 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %913 = tosa.mul %912, %911 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %914 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %915 = tosa.transpose %arg76, %914 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %916 = tosa.reshape %913 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_162 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %917 = linalg.matmul {cast = #linalg.type_fn} ins(%916, %915 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_162 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %918 = tosa.reshape %917 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %919 = tosa.sigmoid %918 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %920 = tosa.mul %918, %919 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %921 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %922 = tosa.transpose %arg77, %921 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %923 = tosa.reshape %913 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_163 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %924 = linalg.matmul {cast = #linalg.type_fn} ins(%923, %922 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_163 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %925 = tosa.reshape %924 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %926 = tosa.mul %920, %925 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %927 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %928 = tosa.transpose %arg78, %927 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %929 = tosa.reshape %926 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_164 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %930 = linalg.matmul {cast = #linalg.type_fn} ins(%929, %928 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_164 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %931 = tosa.reshape %930 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %932 = tosa.add %901, %931 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %933 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_165 = arith.constant 2 : i32 + %934 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%932 : tensor<1x40x4096xf32>) outs(%933 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_165 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %935 = tosa.reduce_sum %934 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %936 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %937 = tosa.reciprocal %936 : (tensor<1xf32>) -> tensor<1xf32> + %938 = tosa.mul %937, %935 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %939 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %940 = tosa.add %938, %939 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %941 = tosa.rsqrt %940 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %942 = tosa.mul %932, %941 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %943 = tosa.reshape %arg79 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %944 = tosa.mul %943, %942 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %945 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %946 = tosa.transpose %arg80, %945 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %947 = tosa.reshape %944 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_166 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %948 = linalg.matmul {cast = #linalg.type_fn} ins(%947, %946 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_166 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %949 = tosa.reshape %948 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %950 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %951 = tosa.transpose %arg81, %950 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %952 = tosa.reshape %944 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_167 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %953 = linalg.matmul {cast = #linalg.type_fn} ins(%952, %951 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_167 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %954 = tosa.reshape %953 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %955 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %956 = tosa.transpose %arg82, %955 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %957 = tosa.reshape %944 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_168 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %958 = linalg.matmul {cast = #linalg.type_fn} ins(%957, %956 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_168 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %959 = tosa.reshape %958 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %960 = tosa.reshape %949 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %961 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %962 = tosa.transpose %960, %961 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %963 = tosa.reshape %954 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %964 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %965 = tosa.transpose %963, %964 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %966 = tosa.reshape %959 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %967 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %968 = tosa.transpose %966, %967 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_169 = tensor.extract_slice %arg83[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_170 = tensor.extract_slice %extracted_slice_169[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_171 = tensor.extract_slice %extracted_slice_170[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_172 = tensor.extract_slice %arg84[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_173 = tensor.extract_slice %extracted_slice_172[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_174 = tensor.extract_slice %extracted_slice_173[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %969 = tensor.empty() : tensor<1x40x128xf32> + %970 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_171 : tensor<1x1x40x128xf32>) outs(%969 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %971 = tensor.empty() : tensor<40x128xf32> + %972 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%970 : tensor<1x40x128xf32>) outs(%971 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %973 = tensor.empty() : tensor<1x40x128xf32> + %974 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_174 : tensor<1x1x40x128xf32>) outs(%973 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %975 = tensor.empty() : tensor<40x128xf32> + %976 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%974 : tensor<1x40x128xf32>) outs(%975 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %977 = tensor.empty() : tensor<1x40x128xf32> + %978 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%977 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %972[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %979 = tosa.reshape %978 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %980 = tensor.empty() : tensor<1x40x128xf32> + %981 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%980 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %976[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %982 = tosa.reshape %981 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %983 = tosa.mul %962, %979 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_175 = tensor.extract_slice %962[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_176 = tensor.extract_slice %962[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %984 = tosa.negate %extracted_slice_176 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %985 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_177 = tensor.insert_slice %984 into %985[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_178 = tensor.insert_slice %extracted_slice_175 into %inserted_slice_177[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %986 = tosa.mul %inserted_slice_178, %982 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %987 = tosa.add %983, %986 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %988 = tosa.mul %965, %979 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_179 = tensor.extract_slice %965[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_180 = tensor.extract_slice %965[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %989 = tosa.negate %extracted_slice_180 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %990 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_181 = tensor.insert_slice %989 into %990[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_182 = tensor.insert_slice %extracted_slice_179 into %inserted_slice_181[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %991 = tosa.mul %inserted_slice_182, %982 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %992 = tosa.add %988, %991 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %993 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %994 = tosa.transpose %992, %993 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %995 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %996 = tosa.add %987, %995 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %997 = tosa.reshape %996 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %998 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %999 = tosa.add %994, %998 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %1000 = tosa.reshape %999 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %1001 = tosa.matmul %997, %1000 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %1002 = tosa.reshape %1001 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1003 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1004 = tosa.reciprocal %1003 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1005 = tosa.mul %1002, %1004 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1006 = tosa.add %1005, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %1007 = tosa.reduce_max %1006 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1008 = tosa.sub %1006, %1007 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1009 = tosa.exp %1008 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1010 = tosa.reduce_sum %1009 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1011 = tosa.reciprocal %1010 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %1012 = tosa.mul %1009, %1011 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1013 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1014 = tosa.add %1012, %1013 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1015 = tosa.reshape %1014 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %1016 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1017 = tosa.add %968, %1016 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1018 = tosa.reshape %1017 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1019 = tosa.matmul %1015, %1018 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %1020 = tosa.reshape %1019 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1021 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1022 = tosa.transpose %1020, %1021 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %1023 = tosa.identity %1022 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %1024 = tosa.reshape %1023 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %1025 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1026 = tosa.transpose %arg85, %1025 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1027 = tosa.reshape %1024 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_183 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1028 = linalg.matmul {cast = #linalg.type_fn} ins(%1027, %1026 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_183 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1029 = tosa.reshape %1028 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1030 = tosa.add %932, %1029 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1031 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_184 = arith.constant 2 : i32 + %1032 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1030 : tensor<1x40x4096xf32>) outs(%1031 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_184 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1033 = tosa.reduce_sum %1032 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1034 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1035 = tosa.reciprocal %1034 : (tensor<1xf32>) -> tensor<1xf32> + %1036 = tosa.mul %1035, %1033 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1037 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1038 = tosa.add %1036, %1037 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1039 = tosa.rsqrt %1038 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1040 = tosa.mul %1030, %1039 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1041 = tosa.reshape %arg86 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1042 = tosa.mul %1041, %1040 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1043 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1044 = tosa.transpose %arg87, %1043 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1045 = tosa.reshape %1042 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_185 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1046 = linalg.matmul {cast = #linalg.type_fn} ins(%1045, %1044 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_185 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1047 = tosa.reshape %1046 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1048 = tosa.sigmoid %1047 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1049 = tosa.mul %1047, %1048 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1050 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1051 = tosa.transpose %arg88, %1050 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1052 = tosa.reshape %1042 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_186 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1053 = linalg.matmul {cast = #linalg.type_fn} ins(%1052, %1051 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_186 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1054 = tosa.reshape %1053 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1055 = tosa.mul %1049, %1054 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1056 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1057 = tosa.transpose %arg89, %1056 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %1058 = tosa.reshape %1055 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_187 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1059 = linalg.matmul {cast = #linalg.type_fn} ins(%1058, %1057 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_187 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1060 = tosa.reshape %1059 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1061 = tosa.add %1030, %1060 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1062 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_188 = arith.constant 2 : i32 + %1063 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1061 : tensor<1x40x4096xf32>) outs(%1062 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_188 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1064 = tosa.reduce_sum %1063 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1065 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1066 = tosa.reciprocal %1065 : (tensor<1xf32>) -> tensor<1xf32> + %1067 = tosa.mul %1066, %1064 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1068 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1069 = tosa.add %1067, %1068 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1070 = tosa.rsqrt %1069 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1071 = tosa.mul %1061, %1070 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1072 = tosa.reshape %arg90 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1073 = tosa.mul %1072, %1071 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1074 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1075 = tosa.transpose %arg91, %1074 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1076 = tosa.reshape %1073 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_189 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1077 = linalg.matmul {cast = #linalg.type_fn} ins(%1076, %1075 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_189 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1078 = tosa.reshape %1077 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1079 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1080 = tosa.transpose %arg92, %1079 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1081 = tosa.reshape %1073 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_190 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1082 = linalg.matmul {cast = #linalg.type_fn} ins(%1081, %1080 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_190 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1083 = tosa.reshape %1082 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1084 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1085 = tosa.transpose %arg93, %1084 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1086 = tosa.reshape %1073 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_191 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1087 = linalg.matmul {cast = #linalg.type_fn} ins(%1086, %1085 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_191 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1088 = tosa.reshape %1087 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1089 = tosa.reshape %1078 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1090 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1091 = tosa.transpose %1089, %1090 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1092 = tosa.reshape %1083 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1093 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1094 = tosa.transpose %1092, %1093 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1095 = tosa.reshape %1088 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1096 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1097 = tosa.transpose %1095, %1096 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_192 = tensor.extract_slice %arg94[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_193 = tensor.extract_slice %extracted_slice_192[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_194 = tensor.extract_slice %extracted_slice_193[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_195 = tensor.extract_slice %arg95[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_196 = tensor.extract_slice %extracted_slice_195[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_197 = tensor.extract_slice %extracted_slice_196[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %1098 = tensor.empty() : tensor<1x40x128xf32> + %1099 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_194 : tensor<1x1x40x128xf32>) outs(%1098 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1100 = tensor.empty() : tensor<40x128xf32> + %1101 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1099 : tensor<1x40x128xf32>) outs(%1100 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1102 = tensor.empty() : tensor<1x40x128xf32> + %1103 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_197 : tensor<1x1x40x128xf32>) outs(%1102 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1104 = tensor.empty() : tensor<40x128xf32> + %1105 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1103 : tensor<1x40x128xf32>) outs(%1104 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1106 = tensor.empty() : tensor<1x40x128xf32> + %1107 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1106 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1101[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1108 = tosa.reshape %1107 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1109 = tensor.empty() : tensor<1x40x128xf32> + %1110 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1109 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1105[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1111 = tosa.reshape %1110 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1112 = tosa.mul %1091, %1108 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_198 = tensor.extract_slice %1091[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_199 = tensor.extract_slice %1091[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1113 = tosa.negate %extracted_slice_199 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1114 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_200 = tensor.insert_slice %1113 into %1114[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_201 = tensor.insert_slice %extracted_slice_198 into %inserted_slice_200[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1115 = tosa.mul %inserted_slice_201, %1111 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1116 = tosa.add %1112, %1115 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1117 = tosa.mul %1094, %1108 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_202 = tensor.extract_slice %1094[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_203 = tensor.extract_slice %1094[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1118 = tosa.negate %extracted_slice_203 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1119 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_204 = tensor.insert_slice %1118 into %1119[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_205 = tensor.insert_slice %extracted_slice_202 into %inserted_slice_204[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1120 = tosa.mul %inserted_slice_205, %1111 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1121 = tosa.add %1117, %1120 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1122 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1123 = tosa.transpose %1121, %1122 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %1124 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1125 = tosa.add %1116, %1124 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1126 = tosa.reshape %1125 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1127 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %1128 = tosa.add %1123, %1127 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %1129 = tosa.reshape %1128 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %1130 = tosa.matmul %1126, %1129 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %1131 = tosa.reshape %1130 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1132 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1133 = tosa.reciprocal %1132 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1134 = tosa.mul %1131, %1133 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1135 = tosa.add %1134, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %1136 = tosa.reduce_max %1135 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1137 = tosa.sub %1135, %1136 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1138 = tosa.exp %1137 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1139 = tosa.reduce_sum %1138 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1140 = tosa.reciprocal %1139 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %1141 = tosa.mul %1138, %1140 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1142 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1143 = tosa.add %1141, %1142 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1144 = tosa.reshape %1143 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %1145 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1146 = tosa.add %1097, %1145 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1147 = tosa.reshape %1146 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1148 = tosa.matmul %1144, %1147 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %1149 = tosa.reshape %1148 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1150 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1151 = tosa.transpose %1149, %1150 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %1152 = tosa.identity %1151 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %1153 = tosa.reshape %1152 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %1154 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1155 = tosa.transpose %arg96, %1154 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1156 = tosa.reshape %1153 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_206 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1157 = linalg.matmul {cast = #linalg.type_fn} ins(%1156, %1155 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_206 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1158 = tosa.reshape %1157 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1159 = tosa.add %1061, %1158 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1160 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_207 = arith.constant 2 : i32 + %1161 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1159 : tensor<1x40x4096xf32>) outs(%1160 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_207 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1162 = tosa.reduce_sum %1161 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1163 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1164 = tosa.reciprocal %1163 : (tensor<1xf32>) -> tensor<1xf32> + %1165 = tosa.mul %1164, %1162 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1166 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1167 = tosa.add %1165, %1166 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1168 = tosa.rsqrt %1167 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1169 = tosa.mul %1159, %1168 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1170 = tosa.reshape %arg97 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1171 = tosa.mul %1170, %1169 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1172 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1173 = tosa.transpose %arg98, %1172 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1174 = tosa.reshape %1171 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_208 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1175 = linalg.matmul {cast = #linalg.type_fn} ins(%1174, %1173 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_208 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1176 = tosa.reshape %1175 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1177 = tosa.sigmoid %1176 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1178 = tosa.mul %1176, %1177 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1179 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1180 = tosa.transpose %arg99, %1179 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1181 = tosa.reshape %1171 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_209 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1182 = linalg.matmul {cast = #linalg.type_fn} ins(%1181, %1180 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_209 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1183 = tosa.reshape %1182 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1184 = tosa.mul %1178, %1183 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1185 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1186 = tosa.transpose %arg100, %1185 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %1187 = tosa.reshape %1184 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_210 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1188 = linalg.matmul {cast = #linalg.type_fn} ins(%1187, %1186 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_210 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1189 = tosa.reshape %1188 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1190 = tosa.add %1159, %1189 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1191 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_211 = arith.constant 2 : i32 + %1192 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1190 : tensor<1x40x4096xf32>) outs(%1191 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_211 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1193 = tosa.reduce_sum %1192 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1194 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1195 = tosa.reciprocal %1194 : (tensor<1xf32>) -> tensor<1xf32> + %1196 = tosa.mul %1195, %1193 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1197 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1198 = tosa.add %1196, %1197 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1199 = tosa.rsqrt %1198 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1200 = tosa.mul %1190, %1199 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1201 = tosa.reshape %arg101 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1202 = tosa.mul %1201, %1200 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1203 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1204 = tosa.transpose %arg102, %1203 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1205 = tosa.reshape %1202 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_212 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1206 = linalg.matmul {cast = #linalg.type_fn} ins(%1205, %1204 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_212 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1207 = tosa.reshape %1206 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1208 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1209 = tosa.transpose %arg103, %1208 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1210 = tosa.reshape %1202 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_213 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1211 = linalg.matmul {cast = #linalg.type_fn} ins(%1210, %1209 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_213 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1212 = tosa.reshape %1211 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1213 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1214 = tosa.transpose %arg104, %1213 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1215 = tosa.reshape %1202 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_214 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1216 = linalg.matmul {cast = #linalg.type_fn} ins(%1215, %1214 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_214 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1217 = tosa.reshape %1216 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1218 = tosa.reshape %1207 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1219 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1220 = tosa.transpose %1218, %1219 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1221 = tosa.reshape %1212 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1222 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1223 = tosa.transpose %1221, %1222 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1224 = tosa.reshape %1217 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1225 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1226 = tosa.transpose %1224, %1225 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_215 = tensor.extract_slice %arg105[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_216 = tensor.extract_slice %extracted_slice_215[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_217 = tensor.extract_slice %extracted_slice_216[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_218 = tensor.extract_slice %arg106[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_219 = tensor.extract_slice %extracted_slice_218[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_220 = tensor.extract_slice %extracted_slice_219[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %1227 = tensor.empty() : tensor<1x40x128xf32> + %1228 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_217 : tensor<1x1x40x128xf32>) outs(%1227 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1229 = tensor.empty() : tensor<40x128xf32> + %1230 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1228 : tensor<1x40x128xf32>) outs(%1229 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1231 = tensor.empty() : tensor<1x40x128xf32> + %1232 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_220 : tensor<1x1x40x128xf32>) outs(%1231 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1233 = tensor.empty() : tensor<40x128xf32> + %1234 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1232 : tensor<1x40x128xf32>) outs(%1233 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1235 = tensor.empty() : tensor<1x40x128xf32> + %1236 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1235 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1230[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1237 = tosa.reshape %1236 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1238 = tensor.empty() : tensor<1x40x128xf32> + %1239 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1238 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1234[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1240 = tosa.reshape %1239 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1241 = tosa.mul %1220, %1237 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_221 = tensor.extract_slice %1220[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_222 = tensor.extract_slice %1220[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1242 = tosa.negate %extracted_slice_222 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1243 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_223 = tensor.insert_slice %1242 into %1243[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_224 = tensor.insert_slice %extracted_slice_221 into %inserted_slice_223[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1244 = tosa.mul %inserted_slice_224, %1240 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1245 = tosa.add %1241, %1244 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1246 = tosa.mul %1223, %1237 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_225 = tensor.extract_slice %1223[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_226 = tensor.extract_slice %1223[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1247 = tosa.negate %extracted_slice_226 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1248 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_227 = tensor.insert_slice %1247 into %1248[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_228 = tensor.insert_slice %extracted_slice_225 into %inserted_slice_227[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1249 = tosa.mul %inserted_slice_228, %1240 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1250 = tosa.add %1246, %1249 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1251 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1252 = tosa.transpose %1250, %1251 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %1253 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1254 = tosa.add %1245, %1253 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1255 = tosa.reshape %1254 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1256 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %1257 = tosa.add %1252, %1256 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %1258 = tosa.reshape %1257 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %1259 = tosa.matmul %1255, %1258 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %1260 = tosa.reshape %1259 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1261 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1262 = tosa.reciprocal %1261 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1263 = tosa.mul %1260, %1262 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1264 = tosa.add %1263, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %1265 = tosa.reduce_max %1264 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1266 = tosa.sub %1264, %1265 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1267 = tosa.exp %1266 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1268 = tosa.reduce_sum %1267 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1269 = tosa.reciprocal %1268 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %1270 = tosa.mul %1267, %1269 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1271 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1272 = tosa.add %1270, %1271 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1273 = tosa.reshape %1272 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %1274 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1275 = tosa.add %1226, %1274 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1276 = tosa.reshape %1275 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1277 = tosa.matmul %1273, %1276 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %1278 = tosa.reshape %1277 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1279 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1280 = tosa.transpose %1278, %1279 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %1281 = tosa.identity %1280 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %1282 = tosa.reshape %1281 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %1283 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1284 = tosa.transpose %arg107, %1283 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1285 = tosa.reshape %1282 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_229 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1286 = linalg.matmul {cast = #linalg.type_fn} ins(%1285, %1284 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_229 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1287 = tosa.reshape %1286 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1288 = tosa.add %1190, %1287 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1289 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_230 = arith.constant 2 : i32 + %1290 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1288 : tensor<1x40x4096xf32>) outs(%1289 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_230 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1291 = tosa.reduce_sum %1290 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1292 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1293 = tosa.reciprocal %1292 : (tensor<1xf32>) -> tensor<1xf32> + %1294 = tosa.mul %1293, %1291 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1295 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1296 = tosa.add %1294, %1295 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1297 = tosa.rsqrt %1296 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1298 = tosa.mul %1288, %1297 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1299 = tosa.reshape %arg108 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1300 = tosa.mul %1299, %1298 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1301 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1302 = tosa.transpose %arg109, %1301 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1303 = tosa.reshape %1300 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_231 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1304 = linalg.matmul {cast = #linalg.type_fn} ins(%1303, %1302 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_231 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1305 = tosa.reshape %1304 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1306 = tosa.sigmoid %1305 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1307 = tosa.mul %1305, %1306 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1308 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1309 = tosa.transpose %arg110, %1308 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1310 = tosa.reshape %1300 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_232 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1311 = linalg.matmul {cast = #linalg.type_fn} ins(%1310, %1309 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_232 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1312 = tosa.reshape %1311 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1313 = tosa.mul %1307, %1312 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1314 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1315 = tosa.transpose %arg111, %1314 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %1316 = tosa.reshape %1313 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_233 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1317 = linalg.matmul {cast = #linalg.type_fn} ins(%1316, %1315 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_233 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1318 = tosa.reshape %1317 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1319 = tosa.add %1288, %1318 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1320 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_234 = arith.constant 2 : i32 + %1321 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1319 : tensor<1x40x4096xf32>) outs(%1320 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_234 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1322 = tosa.reduce_sum %1321 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1323 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1324 = tosa.reciprocal %1323 : (tensor<1xf32>) -> tensor<1xf32> + %1325 = tosa.mul %1324, %1322 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1326 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1327 = tosa.add %1325, %1326 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1328 = tosa.rsqrt %1327 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1329 = tosa.mul %1319, %1328 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1330 = tosa.reshape %arg112 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1331 = tosa.mul %1330, %1329 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1332 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1333 = tosa.transpose %arg113, %1332 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1334 = tosa.reshape %1331 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_235 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1335 = linalg.matmul {cast = #linalg.type_fn} ins(%1334, %1333 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_235 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1336 = tosa.reshape %1335 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1337 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1338 = tosa.transpose %arg114, %1337 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1339 = tosa.reshape %1331 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_236 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1340 = linalg.matmul {cast = #linalg.type_fn} ins(%1339, %1338 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_236 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1341 = tosa.reshape %1340 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1342 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1343 = tosa.transpose %arg115, %1342 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1344 = tosa.reshape %1331 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_237 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1345 = linalg.matmul {cast = #linalg.type_fn} ins(%1344, %1343 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_237 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1346 = tosa.reshape %1345 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1347 = tosa.reshape %1336 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1348 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1349 = tosa.transpose %1347, %1348 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1350 = tosa.reshape %1341 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1351 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1352 = tosa.transpose %1350, %1351 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1353 = tosa.reshape %1346 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1354 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1355 = tosa.transpose %1353, %1354 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_238 = tensor.extract_slice %arg116[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_239 = tensor.extract_slice %extracted_slice_238[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_240 = tensor.extract_slice %extracted_slice_239[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_241 = tensor.extract_slice %arg117[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_242 = tensor.extract_slice %extracted_slice_241[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_243 = tensor.extract_slice %extracted_slice_242[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %1356 = tensor.empty() : tensor<1x40x128xf32> + %1357 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_240 : tensor<1x1x40x128xf32>) outs(%1356 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1358 = tensor.empty() : tensor<40x128xf32> + %1359 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1357 : tensor<1x40x128xf32>) outs(%1358 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1360 = tensor.empty() : tensor<1x40x128xf32> + %1361 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_243 : tensor<1x1x40x128xf32>) outs(%1360 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1362 = tensor.empty() : tensor<40x128xf32> + %1363 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1361 : tensor<1x40x128xf32>) outs(%1362 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1364 = tensor.empty() : tensor<1x40x128xf32> + %1365 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1364 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1359[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1366 = tosa.reshape %1365 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1367 = tensor.empty() : tensor<1x40x128xf32> + %1368 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1367 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1363[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1369 = tosa.reshape %1368 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1370 = tosa.mul %1349, %1366 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_244 = tensor.extract_slice %1349[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_245 = tensor.extract_slice %1349[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1371 = tosa.negate %extracted_slice_245 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1372 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_246 = tensor.insert_slice %1371 into %1372[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_247 = tensor.insert_slice %extracted_slice_244 into %inserted_slice_246[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1373 = tosa.mul %inserted_slice_247, %1369 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1374 = tosa.add %1370, %1373 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1375 = tosa.mul %1352, %1366 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_248 = tensor.extract_slice %1352[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_249 = tensor.extract_slice %1352[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1376 = tosa.negate %extracted_slice_249 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1377 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_250 = tensor.insert_slice %1376 into %1377[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_251 = tensor.insert_slice %extracted_slice_248 into %inserted_slice_250[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1378 = tosa.mul %inserted_slice_251, %1369 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1379 = tosa.add %1375, %1378 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1380 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1381 = tosa.transpose %1379, %1380 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %1382 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1383 = tosa.add %1374, %1382 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1384 = tosa.reshape %1383 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1385 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %1386 = tosa.add %1381, %1385 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %1387 = tosa.reshape %1386 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %1388 = tosa.matmul %1384, %1387 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %1389 = tosa.reshape %1388 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1390 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1391 = tosa.reciprocal %1390 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1392 = tosa.mul %1389, %1391 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1393 = tosa.add %1392, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %1394 = tosa.reduce_max %1393 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1395 = tosa.sub %1393, %1394 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1396 = tosa.exp %1395 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1397 = tosa.reduce_sum %1396 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1398 = tosa.reciprocal %1397 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %1399 = tosa.mul %1396, %1398 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1400 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1401 = tosa.add %1399, %1400 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1402 = tosa.reshape %1401 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %1403 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1404 = tosa.add %1355, %1403 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1405 = tosa.reshape %1404 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1406 = tosa.matmul %1402, %1405 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %1407 = tosa.reshape %1406 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1408 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1409 = tosa.transpose %1407, %1408 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %1410 = tosa.identity %1409 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %1411 = tosa.reshape %1410 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %1412 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1413 = tosa.transpose %arg118, %1412 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1414 = tosa.reshape %1411 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_252 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1415 = linalg.matmul {cast = #linalg.type_fn} ins(%1414, %1413 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_252 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1416 = tosa.reshape %1415 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1417 = tosa.add %1319, %1416 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1418 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_253 = arith.constant 2 : i32 + %1419 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1417 : tensor<1x40x4096xf32>) outs(%1418 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_253 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1420 = tosa.reduce_sum %1419 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1421 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1422 = tosa.reciprocal %1421 : (tensor<1xf32>) -> tensor<1xf32> + %1423 = tosa.mul %1422, %1420 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1424 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1425 = tosa.add %1423, %1424 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1426 = tosa.rsqrt %1425 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1427 = tosa.mul %1417, %1426 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1428 = tosa.reshape %arg119 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1429 = tosa.mul %1428, %1427 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1430 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1431 = tosa.transpose %arg120, %1430 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1432 = tosa.reshape %1429 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_254 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1433 = linalg.matmul {cast = #linalg.type_fn} ins(%1432, %1431 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_254 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1434 = tosa.reshape %1433 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1435 = tosa.sigmoid %1434 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1436 = tosa.mul %1434, %1435 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1437 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1438 = tosa.transpose %arg121, %1437 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1439 = tosa.reshape %1429 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_255 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1440 = linalg.matmul {cast = #linalg.type_fn} ins(%1439, %1438 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_255 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1441 = tosa.reshape %1440 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1442 = tosa.mul %1436, %1441 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1443 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1444 = tosa.transpose %arg122, %1443 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %1445 = tosa.reshape %1442 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_256 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1446 = linalg.matmul {cast = #linalg.type_fn} ins(%1445, %1444 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_256 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1447 = tosa.reshape %1446 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1448 = tosa.add %1417, %1447 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1449 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_257 = arith.constant 2 : i32 + %1450 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1448 : tensor<1x40x4096xf32>) outs(%1449 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_257 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1451 = tosa.reduce_sum %1450 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1452 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1453 = tosa.reciprocal %1452 : (tensor<1xf32>) -> tensor<1xf32> + %1454 = tosa.mul %1453, %1451 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1455 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1456 = tosa.add %1454, %1455 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1457 = tosa.rsqrt %1456 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1458 = tosa.mul %1448, %1457 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1459 = tosa.reshape %arg123 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1460 = tosa.mul %1459, %1458 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1461 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1462 = tosa.transpose %arg124, %1461 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1463 = tosa.reshape %1460 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_258 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1464 = linalg.matmul {cast = #linalg.type_fn} ins(%1463, %1462 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_258 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1465 = tosa.reshape %1464 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1466 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1467 = tosa.transpose %arg125, %1466 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1468 = tosa.reshape %1460 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_259 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1469 = linalg.matmul {cast = #linalg.type_fn} ins(%1468, %1467 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_259 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1470 = tosa.reshape %1469 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1471 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1472 = tosa.transpose %arg126, %1471 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1473 = tosa.reshape %1460 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_260 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1474 = linalg.matmul {cast = #linalg.type_fn} ins(%1473, %1472 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_260 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1475 = tosa.reshape %1474 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1476 = tosa.reshape %1465 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1477 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1478 = tosa.transpose %1476, %1477 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1479 = tosa.reshape %1470 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1480 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1481 = tosa.transpose %1479, %1480 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1482 = tosa.reshape %1475 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1483 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1484 = tosa.transpose %1482, %1483 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_261 = tensor.extract_slice %arg127[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_262 = tensor.extract_slice %extracted_slice_261[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_263 = tensor.extract_slice %extracted_slice_262[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_264 = tensor.extract_slice %arg128[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_265 = tensor.extract_slice %extracted_slice_264[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_266 = tensor.extract_slice %extracted_slice_265[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %1485 = tensor.empty() : tensor<1x40x128xf32> + %1486 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_263 : tensor<1x1x40x128xf32>) outs(%1485 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1487 = tensor.empty() : tensor<40x128xf32> + %1488 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1486 : tensor<1x40x128xf32>) outs(%1487 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1489 = tensor.empty() : tensor<1x40x128xf32> + %1490 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_266 : tensor<1x1x40x128xf32>) outs(%1489 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1491 = tensor.empty() : tensor<40x128xf32> + %1492 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1490 : tensor<1x40x128xf32>) outs(%1491 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1493 = tensor.empty() : tensor<1x40x128xf32> + %1494 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1493 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1488[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1495 = tosa.reshape %1494 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1496 = tensor.empty() : tensor<1x40x128xf32> + %1497 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1496 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1492[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1498 = tosa.reshape %1497 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1499 = tosa.mul %1478, %1495 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_267 = tensor.extract_slice %1478[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_268 = tensor.extract_slice %1478[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1500 = tosa.negate %extracted_slice_268 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1501 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_269 = tensor.insert_slice %1500 into %1501[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_270 = tensor.insert_slice %extracted_slice_267 into %inserted_slice_269[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1502 = tosa.mul %inserted_slice_270, %1498 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1503 = tosa.add %1499, %1502 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1504 = tosa.mul %1481, %1495 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_271 = tensor.extract_slice %1481[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_272 = tensor.extract_slice %1481[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1505 = tosa.negate %extracted_slice_272 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1506 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_273 = tensor.insert_slice %1505 into %1506[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_274 = tensor.insert_slice %extracted_slice_271 into %inserted_slice_273[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1507 = tosa.mul %inserted_slice_274, %1498 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1508 = tosa.add %1504, %1507 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1509 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1510 = tosa.transpose %1508, %1509 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %1511 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1512 = tosa.add %1503, %1511 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1513 = tosa.reshape %1512 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1514 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %1515 = tosa.add %1510, %1514 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %1516 = tosa.reshape %1515 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %1517 = tosa.matmul %1513, %1516 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %1518 = tosa.reshape %1517 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1519 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1520 = tosa.reciprocal %1519 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1521 = tosa.mul %1518, %1520 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1522 = tosa.add %1521, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %1523 = tosa.reduce_max %1522 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1524 = tosa.sub %1522, %1523 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1525 = tosa.exp %1524 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1526 = tosa.reduce_sum %1525 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1527 = tosa.reciprocal %1526 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %1528 = tosa.mul %1525, %1527 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1529 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1530 = tosa.add %1528, %1529 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1531 = tosa.reshape %1530 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %1532 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1533 = tosa.add %1484, %1532 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1534 = tosa.reshape %1533 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1535 = tosa.matmul %1531, %1534 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %1536 = tosa.reshape %1535 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1537 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1538 = tosa.transpose %1536, %1537 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %1539 = tosa.identity %1538 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %1540 = tosa.reshape %1539 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %1541 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1542 = tosa.transpose %arg129, %1541 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1543 = tosa.reshape %1540 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_275 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1544 = linalg.matmul {cast = #linalg.type_fn} ins(%1543, %1542 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_275 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1545 = tosa.reshape %1544 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1546 = tosa.add %1448, %1545 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1547 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_276 = arith.constant 2 : i32 + %1548 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1546 : tensor<1x40x4096xf32>) outs(%1547 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_276 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1549 = tosa.reduce_sum %1548 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1550 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1551 = tosa.reciprocal %1550 : (tensor<1xf32>) -> tensor<1xf32> + %1552 = tosa.mul %1551, %1549 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1553 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1554 = tosa.add %1552, %1553 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1555 = tosa.rsqrt %1554 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1556 = tosa.mul %1546, %1555 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1557 = tosa.reshape %arg130 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1558 = tosa.mul %1557, %1556 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1559 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1560 = tosa.transpose %arg131, %1559 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1561 = tosa.reshape %1558 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_277 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1562 = linalg.matmul {cast = #linalg.type_fn} ins(%1561, %1560 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_277 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1563 = tosa.reshape %1562 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1564 = tosa.sigmoid %1563 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1565 = tosa.mul %1563, %1564 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1566 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1567 = tosa.transpose %arg132, %1566 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1568 = tosa.reshape %1558 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_278 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1569 = linalg.matmul {cast = #linalg.type_fn} ins(%1568, %1567 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_278 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1570 = tosa.reshape %1569 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1571 = tosa.mul %1565, %1570 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1572 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1573 = tosa.transpose %arg133, %1572 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %1574 = tosa.reshape %1571 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_279 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1575 = linalg.matmul {cast = #linalg.type_fn} ins(%1574, %1573 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_279 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1576 = tosa.reshape %1575 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1577 = tosa.add %1546, %1576 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1578 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_280 = arith.constant 2 : i32 + %1579 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1577 : tensor<1x40x4096xf32>) outs(%1578 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_280 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1580 = tosa.reduce_sum %1579 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1581 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1582 = tosa.reciprocal %1581 : (tensor<1xf32>) -> tensor<1xf32> + %1583 = tosa.mul %1582, %1580 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1584 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1585 = tosa.add %1583, %1584 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1586 = tosa.rsqrt %1585 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1587 = tosa.mul %1577, %1586 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1588 = tosa.reshape %arg134 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1589 = tosa.mul %1588, %1587 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1590 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1591 = tosa.transpose %arg135, %1590 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1592 = tosa.reshape %1589 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_281 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1593 = linalg.matmul {cast = #linalg.type_fn} ins(%1592, %1591 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_281 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1594 = tosa.reshape %1593 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1595 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1596 = tosa.transpose %arg136, %1595 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1597 = tosa.reshape %1589 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_282 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1598 = linalg.matmul {cast = #linalg.type_fn} ins(%1597, %1596 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_282 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1599 = tosa.reshape %1598 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1600 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1601 = tosa.transpose %arg137, %1600 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1602 = tosa.reshape %1589 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_283 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1603 = linalg.matmul {cast = #linalg.type_fn} ins(%1602, %1601 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_283 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1604 = tosa.reshape %1603 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1605 = tosa.reshape %1594 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1606 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1607 = tosa.transpose %1605, %1606 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1608 = tosa.reshape %1599 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1609 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1610 = tosa.transpose %1608, %1609 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1611 = tosa.reshape %1604 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1612 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1613 = tosa.transpose %1611, %1612 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_284 = tensor.extract_slice %arg138[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_285 = tensor.extract_slice %extracted_slice_284[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_286 = tensor.extract_slice %extracted_slice_285[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_287 = tensor.extract_slice %arg139[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_288 = tensor.extract_slice %extracted_slice_287[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_289 = tensor.extract_slice %extracted_slice_288[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %1614 = tensor.empty() : tensor<1x40x128xf32> + %1615 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_286 : tensor<1x1x40x128xf32>) outs(%1614 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1616 = tensor.empty() : tensor<40x128xf32> + %1617 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1615 : tensor<1x40x128xf32>) outs(%1616 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1618 = tensor.empty() : tensor<1x40x128xf32> + %1619 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_289 : tensor<1x1x40x128xf32>) outs(%1618 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1620 = tensor.empty() : tensor<40x128xf32> + %1621 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1619 : tensor<1x40x128xf32>) outs(%1620 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1622 = tensor.empty() : tensor<1x40x128xf32> + %1623 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1622 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1617[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1624 = tosa.reshape %1623 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1625 = tensor.empty() : tensor<1x40x128xf32> + %1626 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1625 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1621[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1627 = tosa.reshape %1626 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1628 = tosa.mul %1607, %1624 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_290 = tensor.extract_slice %1607[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_291 = tensor.extract_slice %1607[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1629 = tosa.negate %extracted_slice_291 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1630 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_292 = tensor.insert_slice %1629 into %1630[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_293 = tensor.insert_slice %extracted_slice_290 into %inserted_slice_292[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1631 = tosa.mul %inserted_slice_293, %1627 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1632 = tosa.add %1628, %1631 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1633 = tosa.mul %1610, %1624 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_294 = tensor.extract_slice %1610[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_295 = tensor.extract_slice %1610[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1634 = tosa.negate %extracted_slice_295 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1635 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_296 = tensor.insert_slice %1634 into %1635[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_297 = tensor.insert_slice %extracted_slice_294 into %inserted_slice_296[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1636 = tosa.mul %inserted_slice_297, %1627 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1637 = tosa.add %1633, %1636 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1638 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1639 = tosa.transpose %1637, %1638 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %1640 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1641 = tosa.add %1632, %1640 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1642 = tosa.reshape %1641 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1643 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %1644 = tosa.add %1639, %1643 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %1645 = tosa.reshape %1644 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %1646 = tosa.matmul %1642, %1645 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %1647 = tosa.reshape %1646 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1648 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1649 = tosa.reciprocal %1648 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1650 = tosa.mul %1647, %1649 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1651 = tosa.add %1650, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %1652 = tosa.reduce_max %1651 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1653 = tosa.sub %1651, %1652 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1654 = tosa.exp %1653 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1655 = tosa.reduce_sum %1654 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1656 = tosa.reciprocal %1655 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %1657 = tosa.mul %1654, %1656 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1658 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1659 = tosa.add %1657, %1658 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1660 = tosa.reshape %1659 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %1661 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1662 = tosa.add %1613, %1661 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1663 = tosa.reshape %1662 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1664 = tosa.matmul %1660, %1663 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %1665 = tosa.reshape %1664 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1666 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1667 = tosa.transpose %1665, %1666 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %1668 = tosa.identity %1667 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %1669 = tosa.reshape %1668 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %1670 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1671 = tosa.transpose %arg140, %1670 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1672 = tosa.reshape %1669 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_298 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1673 = linalg.matmul {cast = #linalg.type_fn} ins(%1672, %1671 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_298 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1674 = tosa.reshape %1673 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1675 = tosa.add %1577, %1674 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1676 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_299 = arith.constant 2 : i32 + %1677 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1675 : tensor<1x40x4096xf32>) outs(%1676 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_299 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1678 = tosa.reduce_sum %1677 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1679 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1680 = tosa.reciprocal %1679 : (tensor<1xf32>) -> tensor<1xf32> + %1681 = tosa.mul %1680, %1678 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1682 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1683 = tosa.add %1681, %1682 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1684 = tosa.rsqrt %1683 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1685 = tosa.mul %1675, %1684 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1686 = tosa.reshape %arg141 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1687 = tosa.mul %1686, %1685 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1688 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1689 = tosa.transpose %arg142, %1688 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1690 = tosa.reshape %1687 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_300 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1691 = linalg.matmul {cast = #linalg.type_fn} ins(%1690, %1689 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_300 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1692 = tosa.reshape %1691 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1693 = tosa.sigmoid %1692 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1694 = tosa.mul %1692, %1693 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1695 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1696 = tosa.transpose %arg143, %1695 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1697 = tosa.reshape %1687 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_301 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1698 = linalg.matmul {cast = #linalg.type_fn} ins(%1697, %1696 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_301 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1699 = tosa.reshape %1698 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1700 = tosa.mul %1694, %1699 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1701 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1702 = tosa.transpose %arg144, %1701 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %1703 = tosa.reshape %1700 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_302 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1704 = linalg.matmul {cast = #linalg.type_fn} ins(%1703, %1702 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_302 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1705 = tosa.reshape %1704 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1706 = tosa.add %1675, %1705 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1707 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_303 = arith.constant 2 : i32 + %1708 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1706 : tensor<1x40x4096xf32>) outs(%1707 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_303 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1709 = tosa.reduce_sum %1708 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1710 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1711 = tosa.reciprocal %1710 : (tensor<1xf32>) -> tensor<1xf32> + %1712 = tosa.mul %1711, %1709 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1713 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1714 = tosa.add %1712, %1713 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1715 = tosa.rsqrt %1714 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1716 = tosa.mul %1706, %1715 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1717 = tosa.reshape %arg145 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1718 = tosa.mul %1717, %1716 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1719 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1720 = tosa.transpose %arg146, %1719 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1721 = tosa.reshape %1718 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_304 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1722 = linalg.matmul {cast = #linalg.type_fn} ins(%1721, %1720 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_304 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1723 = tosa.reshape %1722 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1724 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1725 = tosa.transpose %arg147, %1724 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1726 = tosa.reshape %1718 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_305 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1727 = linalg.matmul {cast = #linalg.type_fn} ins(%1726, %1725 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_305 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1728 = tosa.reshape %1727 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1729 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1730 = tosa.transpose %arg148, %1729 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1731 = tosa.reshape %1718 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_306 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1732 = linalg.matmul {cast = #linalg.type_fn} ins(%1731, %1730 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_306 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1733 = tosa.reshape %1732 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1734 = tosa.reshape %1723 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1735 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1736 = tosa.transpose %1734, %1735 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1737 = tosa.reshape %1728 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1738 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1739 = tosa.transpose %1737, %1738 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1740 = tosa.reshape %1733 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1741 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1742 = tosa.transpose %1740, %1741 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_307 = tensor.extract_slice %arg149[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_308 = tensor.extract_slice %extracted_slice_307[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_309 = tensor.extract_slice %extracted_slice_308[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_310 = tensor.extract_slice %arg150[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_311 = tensor.extract_slice %extracted_slice_310[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_312 = tensor.extract_slice %extracted_slice_311[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %1743 = tensor.empty() : tensor<1x40x128xf32> + %1744 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_309 : tensor<1x1x40x128xf32>) outs(%1743 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1745 = tensor.empty() : tensor<40x128xf32> + %1746 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1744 : tensor<1x40x128xf32>) outs(%1745 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1747 = tensor.empty() : tensor<1x40x128xf32> + %1748 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_312 : tensor<1x1x40x128xf32>) outs(%1747 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1749 = tensor.empty() : tensor<40x128xf32> + %1750 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1748 : tensor<1x40x128xf32>) outs(%1749 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1751 = tensor.empty() : tensor<1x40x128xf32> + %1752 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1751 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1746[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1753 = tosa.reshape %1752 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1754 = tensor.empty() : tensor<1x40x128xf32> + %1755 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1754 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1750[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1756 = tosa.reshape %1755 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1757 = tosa.mul %1736, %1753 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_313 = tensor.extract_slice %1736[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_314 = tensor.extract_slice %1736[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1758 = tosa.negate %extracted_slice_314 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1759 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_315 = tensor.insert_slice %1758 into %1759[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_316 = tensor.insert_slice %extracted_slice_313 into %inserted_slice_315[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1760 = tosa.mul %inserted_slice_316, %1756 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1761 = tosa.add %1757, %1760 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1762 = tosa.mul %1739, %1753 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_317 = tensor.extract_slice %1739[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_318 = tensor.extract_slice %1739[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1763 = tosa.negate %extracted_slice_318 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1764 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_319 = tensor.insert_slice %1763 into %1764[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_320 = tensor.insert_slice %extracted_slice_317 into %inserted_slice_319[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1765 = tosa.mul %inserted_slice_320, %1756 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1766 = tosa.add %1762, %1765 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1767 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1768 = tosa.transpose %1766, %1767 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %1769 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1770 = tosa.add %1761, %1769 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1771 = tosa.reshape %1770 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1772 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %1773 = tosa.add %1768, %1772 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %1774 = tosa.reshape %1773 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %1775 = tosa.matmul %1771, %1774 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %1776 = tosa.reshape %1775 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1777 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1778 = tosa.reciprocal %1777 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1779 = tosa.mul %1776, %1778 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1780 = tosa.add %1779, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %1781 = tosa.reduce_max %1780 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1782 = tosa.sub %1780, %1781 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1783 = tosa.exp %1782 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1784 = tosa.reduce_sum %1783 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1785 = tosa.reciprocal %1784 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %1786 = tosa.mul %1783, %1785 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1787 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1788 = tosa.add %1786, %1787 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1789 = tosa.reshape %1788 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %1790 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1791 = tosa.add %1742, %1790 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1792 = tosa.reshape %1791 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1793 = tosa.matmul %1789, %1792 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %1794 = tosa.reshape %1793 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1795 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1796 = tosa.transpose %1794, %1795 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %1797 = tosa.identity %1796 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %1798 = tosa.reshape %1797 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %1799 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1800 = tosa.transpose %arg151, %1799 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1801 = tosa.reshape %1798 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_321 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1802 = linalg.matmul {cast = #linalg.type_fn} ins(%1801, %1800 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_321 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1803 = tosa.reshape %1802 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1804 = tosa.add %1706, %1803 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1805 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_322 = arith.constant 2 : i32 + %1806 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1804 : tensor<1x40x4096xf32>) outs(%1805 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_322 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1807 = tosa.reduce_sum %1806 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1808 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1809 = tosa.reciprocal %1808 : (tensor<1xf32>) -> tensor<1xf32> + %1810 = tosa.mul %1809, %1807 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1811 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1812 = tosa.add %1810, %1811 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1813 = tosa.rsqrt %1812 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1814 = tosa.mul %1804, %1813 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1815 = tosa.reshape %arg152 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1816 = tosa.mul %1815, %1814 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1817 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1818 = tosa.transpose %arg153, %1817 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1819 = tosa.reshape %1816 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_323 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1820 = linalg.matmul {cast = #linalg.type_fn} ins(%1819, %1818 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_323 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1821 = tosa.reshape %1820 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1822 = tosa.sigmoid %1821 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1823 = tosa.mul %1821, %1822 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1824 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1825 = tosa.transpose %arg154, %1824 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1826 = tosa.reshape %1816 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_324 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1827 = linalg.matmul {cast = #linalg.type_fn} ins(%1826, %1825 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_324 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1828 = tosa.reshape %1827 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1829 = tosa.mul %1823, %1828 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1830 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1831 = tosa.transpose %arg155, %1830 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %1832 = tosa.reshape %1829 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_325 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1833 = linalg.matmul {cast = #linalg.type_fn} ins(%1832, %1831 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_325 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1834 = tosa.reshape %1833 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1835 = tosa.add %1804, %1834 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1836 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_326 = arith.constant 2 : i32 + %1837 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1835 : tensor<1x40x4096xf32>) outs(%1836 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_326 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1838 = tosa.reduce_sum %1837 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1839 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1840 = tosa.reciprocal %1839 : (tensor<1xf32>) -> tensor<1xf32> + %1841 = tosa.mul %1840, %1838 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1842 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1843 = tosa.add %1841, %1842 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1844 = tosa.rsqrt %1843 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1845 = tosa.mul %1835, %1844 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1846 = tosa.reshape %arg156 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1847 = tosa.mul %1846, %1845 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1848 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1849 = tosa.transpose %arg157, %1848 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1850 = tosa.reshape %1847 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_327 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1851 = linalg.matmul {cast = #linalg.type_fn} ins(%1850, %1849 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_327 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1852 = tosa.reshape %1851 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1853 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1854 = tosa.transpose %arg158, %1853 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1855 = tosa.reshape %1847 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_328 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1856 = linalg.matmul {cast = #linalg.type_fn} ins(%1855, %1854 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_328 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1857 = tosa.reshape %1856 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1858 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1859 = tosa.transpose %arg159, %1858 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1860 = tosa.reshape %1847 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_329 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1861 = linalg.matmul {cast = #linalg.type_fn} ins(%1860, %1859 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_329 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1862 = tosa.reshape %1861 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1863 = tosa.reshape %1852 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1864 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1865 = tosa.transpose %1863, %1864 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1866 = tosa.reshape %1857 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1867 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1868 = tosa.transpose %1866, %1867 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1869 = tosa.reshape %1862 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1870 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1871 = tosa.transpose %1869, %1870 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_330 = tensor.extract_slice %arg160[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_331 = tensor.extract_slice %extracted_slice_330[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_332 = tensor.extract_slice %extracted_slice_331[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_333 = tensor.extract_slice %arg161[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_334 = tensor.extract_slice %extracted_slice_333[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_335 = tensor.extract_slice %extracted_slice_334[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %1872 = tensor.empty() : tensor<1x40x128xf32> + %1873 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_332 : tensor<1x1x40x128xf32>) outs(%1872 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1874 = tensor.empty() : tensor<40x128xf32> + %1875 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1873 : tensor<1x40x128xf32>) outs(%1874 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1876 = tensor.empty() : tensor<1x40x128xf32> + %1877 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_335 : tensor<1x1x40x128xf32>) outs(%1876 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %1878 = tensor.empty() : tensor<40x128xf32> + %1879 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%1877 : tensor<1x40x128xf32>) outs(%1878 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %1880 = tensor.empty() : tensor<1x40x128xf32> + %1881 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1880 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1875[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1882 = tosa.reshape %1881 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1883 = tensor.empty() : tensor<1x40x128xf32> + %1884 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%1883 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %1879[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %1885 = tosa.reshape %1884 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %1886 = tosa.mul %1865, %1882 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_336 = tensor.extract_slice %1865[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_337 = tensor.extract_slice %1865[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1887 = tosa.negate %extracted_slice_337 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1888 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_338 = tensor.insert_slice %1887 into %1888[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_339 = tensor.insert_slice %extracted_slice_336 into %inserted_slice_338[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1889 = tosa.mul %inserted_slice_339, %1885 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1890 = tosa.add %1886, %1889 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1891 = tosa.mul %1868, %1882 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_340 = tensor.extract_slice %1868[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_341 = tensor.extract_slice %1868[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %1892 = tosa.negate %extracted_slice_341 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %1893 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_342 = tensor.insert_slice %1892 into %1893[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_343 = tensor.insert_slice %extracted_slice_340 into %inserted_slice_342[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %1894 = tosa.mul %inserted_slice_343, %1885 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %1895 = tosa.add %1891, %1894 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1896 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1897 = tosa.transpose %1895, %1896 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %1898 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1899 = tosa.add %1890, %1898 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1900 = tosa.reshape %1899 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1901 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %1902 = tosa.add %1897, %1901 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %1903 = tosa.reshape %1902 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %1904 = tosa.matmul %1900, %1903 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %1905 = tosa.reshape %1904 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1906 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1907 = tosa.reciprocal %1906 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1908 = tosa.mul %1905, %1907 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1909 = tosa.add %1908, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %1910 = tosa.reduce_max %1909 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1911 = tosa.sub %1909, %1910 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1912 = tosa.exp %1911 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1913 = tosa.reduce_sum %1912 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %1914 = tosa.reciprocal %1913 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %1915 = tosa.mul %1912, %1914 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %1916 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %1917 = tosa.add %1915, %1916 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %1918 = tosa.reshape %1917 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %1919 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %1920 = tosa.add %1871, %1919 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1921 = tosa.reshape %1920 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %1922 = tosa.matmul %1918, %1921 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %1923 = tosa.reshape %1922 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %1924 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1925 = tosa.transpose %1923, %1924 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %1926 = tosa.identity %1925 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %1927 = tosa.reshape %1926 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %1928 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1929 = tosa.transpose %arg162, %1928 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1930 = tosa.reshape %1927 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_344 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1931 = linalg.matmul {cast = #linalg.type_fn} ins(%1930, %1929 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_344 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1932 = tosa.reshape %1931 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1933 = tosa.add %1835, %1932 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1934 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_345 = arith.constant 2 : i32 + %1935 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1933 : tensor<1x40x4096xf32>) outs(%1934 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_345 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1936 = tosa.reduce_sum %1935 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1937 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1938 = tosa.reciprocal %1937 : (tensor<1xf32>) -> tensor<1xf32> + %1939 = tosa.mul %1938, %1936 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1940 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1941 = tosa.add %1939, %1940 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1942 = tosa.rsqrt %1941 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1943 = tosa.mul %1933, %1942 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1944 = tosa.reshape %arg163 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1945 = tosa.mul %1944, %1943 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1946 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1947 = tosa.transpose %arg164, %1946 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1948 = tosa.reshape %1945 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_346 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1949 = linalg.matmul {cast = #linalg.type_fn} ins(%1948, %1947 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_346 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1950 = tosa.reshape %1949 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1951 = tosa.sigmoid %1950 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1952 = tosa.mul %1950, %1951 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1953 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1954 = tosa.transpose %arg165, %1953 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %1955 = tosa.reshape %1945 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_347 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %1956 = linalg.matmul {cast = #linalg.type_fn} ins(%1955, %1954 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_347 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %1957 = tosa.reshape %1956 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %1958 = tosa.mul %1952, %1957 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %1959 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1960 = tosa.transpose %arg166, %1959 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %1961 = tosa.reshape %1958 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_348 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1962 = linalg.matmul {cast = #linalg.type_fn} ins(%1961, %1960 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_348 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1963 = tosa.reshape %1962 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1964 = tosa.add %1933, %1963 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1965 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_349 = arith.constant 2 : i32 + %1966 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%1964 : tensor<1x40x4096xf32>) outs(%1965 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_349 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %1967 = tosa.reduce_sum %1966 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %1968 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %1969 = tosa.reciprocal %1968 : (tensor<1xf32>) -> tensor<1xf32> + %1970 = tosa.mul %1969, %1967 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1971 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %1972 = tosa.add %1970, %1971 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1973 = tosa.rsqrt %1972 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %1974 = tosa.mul %1964, %1973 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %1975 = tosa.reshape %arg167 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %1976 = tosa.mul %1975, %1974 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %1977 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1978 = tosa.transpose %arg168, %1977 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1979 = tosa.reshape %1976 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_350 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1980 = linalg.matmul {cast = #linalg.type_fn} ins(%1979, %1978 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_350 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1981 = tosa.reshape %1980 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1982 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1983 = tosa.transpose %arg169, %1982 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1984 = tosa.reshape %1976 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_351 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1985 = linalg.matmul {cast = #linalg.type_fn} ins(%1984, %1983 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_351 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1986 = tosa.reshape %1985 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1987 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %1988 = tosa.transpose %arg170, %1987 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %1989 = tosa.reshape %1976 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_352 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %1990 = linalg.matmul {cast = #linalg.type_fn} ins(%1989, %1988 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_352 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %1991 = tosa.reshape %1990 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %1992 = tosa.reshape %1981 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1993 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1994 = tosa.transpose %1992, %1993 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1995 = tosa.reshape %1986 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1996 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %1997 = tosa.transpose %1995, %1996 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %1998 = tosa.reshape %1991 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %1999 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2000 = tosa.transpose %1998, %1999 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_353 = tensor.extract_slice %arg171[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_354 = tensor.extract_slice %extracted_slice_353[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_355 = tensor.extract_slice %extracted_slice_354[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_356 = tensor.extract_slice %arg172[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_357 = tensor.extract_slice %extracted_slice_356[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_358 = tensor.extract_slice %extracted_slice_357[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %2001 = tensor.empty() : tensor<1x40x128xf32> + %2002 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_355 : tensor<1x1x40x128xf32>) outs(%2001 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2003 = tensor.empty() : tensor<40x128xf32> + %2004 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2002 : tensor<1x40x128xf32>) outs(%2003 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2005 = tensor.empty() : tensor<1x40x128xf32> + %2006 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_358 : tensor<1x1x40x128xf32>) outs(%2005 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2007 = tensor.empty() : tensor<40x128xf32> + %2008 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2006 : tensor<1x40x128xf32>) outs(%2007 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2009 = tensor.empty() : tensor<1x40x128xf32> + %2010 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2009 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2004[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2011 = tosa.reshape %2010 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2012 = tensor.empty() : tensor<1x40x128xf32> + %2013 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2012 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2008[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2014 = tosa.reshape %2013 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2015 = tosa.mul %1994, %2011 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_359 = tensor.extract_slice %1994[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_360 = tensor.extract_slice %1994[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2016 = tosa.negate %extracted_slice_360 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2017 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_361 = tensor.insert_slice %2016 into %2017[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_362 = tensor.insert_slice %extracted_slice_359 into %inserted_slice_361[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2018 = tosa.mul %inserted_slice_362, %2014 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2019 = tosa.add %2015, %2018 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2020 = tosa.mul %1997, %2011 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_363 = tensor.extract_slice %1997[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_364 = tensor.extract_slice %1997[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2021 = tosa.negate %extracted_slice_364 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2022 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_365 = tensor.insert_slice %2021 into %2022[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_366 = tensor.insert_slice %extracted_slice_363 into %inserted_slice_365[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2023 = tosa.mul %inserted_slice_366, %2014 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2024 = tosa.add %2020, %2023 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2025 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2026 = tosa.transpose %2024, %2025 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %2027 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2028 = tosa.add %2019, %2027 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2029 = tosa.reshape %2028 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2030 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %2031 = tosa.add %2026, %2030 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %2032 = tosa.reshape %2031 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %2033 = tosa.matmul %2029, %2032 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %2034 = tosa.reshape %2033 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2035 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2036 = tosa.reciprocal %2035 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2037 = tosa.mul %2034, %2036 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2038 = tosa.add %2037, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %2039 = tosa.reduce_max %2038 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2040 = tosa.sub %2038, %2039 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2041 = tosa.exp %2040 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2042 = tosa.reduce_sum %2041 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2043 = tosa.reciprocal %2042 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %2044 = tosa.mul %2041, %2043 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2045 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2046 = tosa.add %2044, %2045 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2047 = tosa.reshape %2046 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %2048 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2049 = tosa.add %2000, %2048 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2050 = tosa.reshape %2049 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2051 = tosa.matmul %2047, %2050 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %2052 = tosa.reshape %2051 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2053 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2054 = tosa.transpose %2052, %2053 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %2055 = tosa.identity %2054 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %2056 = tosa.reshape %2055 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %2057 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2058 = tosa.transpose %arg173, %2057 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2059 = tosa.reshape %2056 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_367 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2060 = linalg.matmul {cast = #linalg.type_fn} ins(%2059, %2058 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_367 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2061 = tosa.reshape %2060 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2062 = tosa.add %1964, %2061 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2063 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_368 = arith.constant 2 : i32 + %2064 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2062 : tensor<1x40x4096xf32>) outs(%2063 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_368 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2065 = tosa.reduce_sum %2064 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2066 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2067 = tosa.reciprocal %2066 : (tensor<1xf32>) -> tensor<1xf32> + %2068 = tosa.mul %2067, %2065 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2069 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2070 = tosa.add %2068, %2069 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2071 = tosa.rsqrt %2070 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2072 = tosa.mul %2062, %2071 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2073 = tosa.reshape %arg174 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2074 = tosa.mul %2073, %2072 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2075 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2076 = tosa.transpose %arg175, %2075 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2077 = tosa.reshape %2074 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_369 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2078 = linalg.matmul {cast = #linalg.type_fn} ins(%2077, %2076 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_369 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2079 = tosa.reshape %2078 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2080 = tosa.sigmoid %2079 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2081 = tosa.mul %2079, %2080 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2082 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2083 = tosa.transpose %arg176, %2082 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2084 = tosa.reshape %2074 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_370 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2085 = linalg.matmul {cast = #linalg.type_fn} ins(%2084, %2083 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_370 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2086 = tosa.reshape %2085 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2087 = tosa.mul %2081, %2086 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2088 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2089 = tosa.transpose %arg177, %2088 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %2090 = tosa.reshape %2087 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_371 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2091 = linalg.matmul {cast = #linalg.type_fn} ins(%2090, %2089 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_371 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2092 = tosa.reshape %2091 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2093 = tosa.add %2062, %2092 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2094 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_372 = arith.constant 2 : i32 + %2095 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2093 : tensor<1x40x4096xf32>) outs(%2094 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_372 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2096 = tosa.reduce_sum %2095 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2097 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2098 = tosa.reciprocal %2097 : (tensor<1xf32>) -> tensor<1xf32> + %2099 = tosa.mul %2098, %2096 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2100 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2101 = tosa.add %2099, %2100 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2102 = tosa.rsqrt %2101 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2103 = tosa.mul %2093, %2102 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2104 = tosa.reshape %arg178 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2105 = tosa.mul %2104, %2103 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2106 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2107 = tosa.transpose %arg179, %2106 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2108 = tosa.reshape %2105 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_373 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2109 = linalg.matmul {cast = #linalg.type_fn} ins(%2108, %2107 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_373 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2110 = tosa.reshape %2109 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2111 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2112 = tosa.transpose %arg180, %2111 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2113 = tosa.reshape %2105 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_374 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2114 = linalg.matmul {cast = #linalg.type_fn} ins(%2113, %2112 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_374 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2115 = tosa.reshape %2114 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2116 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2117 = tosa.transpose %arg181, %2116 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2118 = tosa.reshape %2105 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_375 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2119 = linalg.matmul {cast = #linalg.type_fn} ins(%2118, %2117 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_375 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2120 = tosa.reshape %2119 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2121 = tosa.reshape %2110 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2122 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2123 = tosa.transpose %2121, %2122 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2124 = tosa.reshape %2115 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2125 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2126 = tosa.transpose %2124, %2125 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2127 = tosa.reshape %2120 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2128 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2129 = tosa.transpose %2127, %2128 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_376 = tensor.extract_slice %arg182[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_377 = tensor.extract_slice %extracted_slice_376[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_378 = tensor.extract_slice %extracted_slice_377[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_379 = tensor.extract_slice %arg183[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_380 = tensor.extract_slice %extracted_slice_379[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_381 = tensor.extract_slice %extracted_slice_380[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %2130 = tensor.empty() : tensor<1x40x128xf32> + %2131 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_378 : tensor<1x1x40x128xf32>) outs(%2130 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2132 = tensor.empty() : tensor<40x128xf32> + %2133 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2131 : tensor<1x40x128xf32>) outs(%2132 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2134 = tensor.empty() : tensor<1x40x128xf32> + %2135 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_381 : tensor<1x1x40x128xf32>) outs(%2134 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2136 = tensor.empty() : tensor<40x128xf32> + %2137 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2135 : tensor<1x40x128xf32>) outs(%2136 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2138 = tensor.empty() : tensor<1x40x128xf32> + %2139 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2138 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2133[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2140 = tosa.reshape %2139 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2141 = tensor.empty() : tensor<1x40x128xf32> + %2142 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2141 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2137[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2143 = tosa.reshape %2142 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2144 = tosa.mul %2123, %2140 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_382 = tensor.extract_slice %2123[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_383 = tensor.extract_slice %2123[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2145 = tosa.negate %extracted_slice_383 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2146 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_384 = tensor.insert_slice %2145 into %2146[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_385 = tensor.insert_slice %extracted_slice_382 into %inserted_slice_384[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2147 = tosa.mul %inserted_slice_385, %2143 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2148 = tosa.add %2144, %2147 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2149 = tosa.mul %2126, %2140 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_386 = tensor.extract_slice %2126[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_387 = tensor.extract_slice %2126[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2150 = tosa.negate %extracted_slice_387 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2151 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_388 = tensor.insert_slice %2150 into %2151[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_389 = tensor.insert_slice %extracted_slice_386 into %inserted_slice_388[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2152 = tosa.mul %inserted_slice_389, %2143 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2153 = tosa.add %2149, %2152 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2154 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2155 = tosa.transpose %2153, %2154 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %2156 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2157 = tosa.add %2148, %2156 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2158 = tosa.reshape %2157 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2159 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %2160 = tosa.add %2155, %2159 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %2161 = tosa.reshape %2160 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %2162 = tosa.matmul %2158, %2161 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %2163 = tosa.reshape %2162 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2164 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2165 = tosa.reciprocal %2164 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2166 = tosa.mul %2163, %2165 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2167 = tosa.add %2166, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %2168 = tosa.reduce_max %2167 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2169 = tosa.sub %2167, %2168 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2170 = tosa.exp %2169 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2171 = tosa.reduce_sum %2170 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2172 = tosa.reciprocal %2171 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %2173 = tosa.mul %2170, %2172 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2174 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2175 = tosa.add %2173, %2174 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2176 = tosa.reshape %2175 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %2177 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2178 = tosa.add %2129, %2177 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2179 = tosa.reshape %2178 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2180 = tosa.matmul %2176, %2179 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %2181 = tosa.reshape %2180 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2182 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2183 = tosa.transpose %2181, %2182 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %2184 = tosa.identity %2183 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %2185 = tosa.reshape %2184 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %2186 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2187 = tosa.transpose %arg184, %2186 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2188 = tosa.reshape %2185 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_390 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2189 = linalg.matmul {cast = #linalg.type_fn} ins(%2188, %2187 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_390 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2190 = tosa.reshape %2189 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2191 = tosa.add %2093, %2190 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2192 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_391 = arith.constant 2 : i32 + %2193 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2191 : tensor<1x40x4096xf32>) outs(%2192 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_391 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2194 = tosa.reduce_sum %2193 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2195 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2196 = tosa.reciprocal %2195 : (tensor<1xf32>) -> tensor<1xf32> + %2197 = tosa.mul %2196, %2194 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2198 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2199 = tosa.add %2197, %2198 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2200 = tosa.rsqrt %2199 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2201 = tosa.mul %2191, %2200 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2202 = tosa.reshape %arg185 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2203 = tosa.mul %2202, %2201 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2204 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2205 = tosa.transpose %arg186, %2204 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2206 = tosa.reshape %2203 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_392 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2207 = linalg.matmul {cast = #linalg.type_fn} ins(%2206, %2205 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_392 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2208 = tosa.reshape %2207 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2209 = tosa.sigmoid %2208 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2210 = tosa.mul %2208, %2209 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2211 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2212 = tosa.transpose %arg187, %2211 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2213 = tosa.reshape %2203 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_393 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2214 = linalg.matmul {cast = #linalg.type_fn} ins(%2213, %2212 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_393 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2215 = tosa.reshape %2214 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2216 = tosa.mul %2210, %2215 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2217 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2218 = tosa.transpose %arg188, %2217 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %2219 = tosa.reshape %2216 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_394 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2220 = linalg.matmul {cast = #linalg.type_fn} ins(%2219, %2218 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_394 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2221 = tosa.reshape %2220 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2222 = tosa.add %2191, %2221 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2223 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_395 = arith.constant 2 : i32 + %2224 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2222 : tensor<1x40x4096xf32>) outs(%2223 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_395 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2225 = tosa.reduce_sum %2224 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2226 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2227 = tosa.reciprocal %2226 : (tensor<1xf32>) -> tensor<1xf32> + %2228 = tosa.mul %2227, %2225 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2229 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2230 = tosa.add %2228, %2229 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2231 = tosa.rsqrt %2230 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2232 = tosa.mul %2222, %2231 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2233 = tosa.reshape %arg189 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2234 = tosa.mul %2233, %2232 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2235 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2236 = tosa.transpose %arg190, %2235 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2237 = tosa.reshape %2234 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_396 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2238 = linalg.matmul {cast = #linalg.type_fn} ins(%2237, %2236 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_396 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2239 = tosa.reshape %2238 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2240 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2241 = tosa.transpose %arg191, %2240 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2242 = tosa.reshape %2234 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_397 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2243 = linalg.matmul {cast = #linalg.type_fn} ins(%2242, %2241 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_397 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2244 = tosa.reshape %2243 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2245 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2246 = tosa.transpose %arg192, %2245 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2247 = tosa.reshape %2234 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_398 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2248 = linalg.matmul {cast = #linalg.type_fn} ins(%2247, %2246 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_398 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2249 = tosa.reshape %2248 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2250 = tosa.reshape %2239 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2251 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2252 = tosa.transpose %2250, %2251 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2253 = tosa.reshape %2244 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2254 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2255 = tosa.transpose %2253, %2254 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2256 = tosa.reshape %2249 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2257 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2258 = tosa.transpose %2256, %2257 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_399 = tensor.extract_slice %arg193[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_400 = tensor.extract_slice %extracted_slice_399[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_401 = tensor.extract_slice %extracted_slice_400[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_402 = tensor.extract_slice %arg194[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_403 = tensor.extract_slice %extracted_slice_402[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_404 = tensor.extract_slice %extracted_slice_403[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %2259 = tensor.empty() : tensor<1x40x128xf32> + %2260 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_401 : tensor<1x1x40x128xf32>) outs(%2259 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2261 = tensor.empty() : tensor<40x128xf32> + %2262 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2260 : tensor<1x40x128xf32>) outs(%2261 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2263 = tensor.empty() : tensor<1x40x128xf32> + %2264 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_404 : tensor<1x1x40x128xf32>) outs(%2263 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2265 = tensor.empty() : tensor<40x128xf32> + %2266 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2264 : tensor<1x40x128xf32>) outs(%2265 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2267 = tensor.empty() : tensor<1x40x128xf32> + %2268 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2267 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2262[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2269 = tosa.reshape %2268 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2270 = tensor.empty() : tensor<1x40x128xf32> + %2271 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2270 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2266[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2272 = tosa.reshape %2271 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2273 = tosa.mul %2252, %2269 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_405 = tensor.extract_slice %2252[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_406 = tensor.extract_slice %2252[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2274 = tosa.negate %extracted_slice_406 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2275 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_407 = tensor.insert_slice %2274 into %2275[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_408 = tensor.insert_slice %extracted_slice_405 into %inserted_slice_407[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2276 = tosa.mul %inserted_slice_408, %2272 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2277 = tosa.add %2273, %2276 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2278 = tosa.mul %2255, %2269 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_409 = tensor.extract_slice %2255[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_410 = tensor.extract_slice %2255[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2279 = tosa.negate %extracted_slice_410 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2280 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_411 = tensor.insert_slice %2279 into %2280[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_412 = tensor.insert_slice %extracted_slice_409 into %inserted_slice_411[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2281 = tosa.mul %inserted_slice_412, %2272 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2282 = tosa.add %2278, %2281 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2283 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2284 = tosa.transpose %2282, %2283 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %2285 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2286 = tosa.add %2277, %2285 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2287 = tosa.reshape %2286 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2288 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %2289 = tosa.add %2284, %2288 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %2290 = tosa.reshape %2289 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %2291 = tosa.matmul %2287, %2290 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %2292 = tosa.reshape %2291 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2293 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2294 = tosa.reciprocal %2293 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2295 = tosa.mul %2292, %2294 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2296 = tosa.add %2295, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %2297 = tosa.reduce_max %2296 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2298 = tosa.sub %2296, %2297 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2299 = tosa.exp %2298 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2300 = tosa.reduce_sum %2299 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2301 = tosa.reciprocal %2300 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %2302 = tosa.mul %2299, %2301 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2303 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2304 = tosa.add %2302, %2303 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2305 = tosa.reshape %2304 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %2306 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2307 = tosa.add %2258, %2306 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2308 = tosa.reshape %2307 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2309 = tosa.matmul %2305, %2308 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %2310 = tosa.reshape %2309 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2311 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2312 = tosa.transpose %2310, %2311 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %2313 = tosa.identity %2312 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %2314 = tosa.reshape %2313 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %2315 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2316 = tosa.transpose %arg195, %2315 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2317 = tosa.reshape %2314 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_413 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2318 = linalg.matmul {cast = #linalg.type_fn} ins(%2317, %2316 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_413 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2319 = tosa.reshape %2318 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2320 = tosa.add %2222, %2319 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2321 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_414 = arith.constant 2 : i32 + %2322 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2320 : tensor<1x40x4096xf32>) outs(%2321 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_414 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2323 = tosa.reduce_sum %2322 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2324 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2325 = tosa.reciprocal %2324 : (tensor<1xf32>) -> tensor<1xf32> + %2326 = tosa.mul %2325, %2323 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2327 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2328 = tosa.add %2326, %2327 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2329 = tosa.rsqrt %2328 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2330 = tosa.mul %2320, %2329 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2331 = tosa.reshape %arg196 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2332 = tosa.mul %2331, %2330 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2333 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2334 = tosa.transpose %arg197, %2333 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2335 = tosa.reshape %2332 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_415 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2336 = linalg.matmul {cast = #linalg.type_fn} ins(%2335, %2334 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_415 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2337 = tosa.reshape %2336 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2338 = tosa.sigmoid %2337 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2339 = tosa.mul %2337, %2338 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2340 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2341 = tosa.transpose %arg198, %2340 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2342 = tosa.reshape %2332 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_416 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2343 = linalg.matmul {cast = #linalg.type_fn} ins(%2342, %2341 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_416 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2344 = tosa.reshape %2343 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2345 = tosa.mul %2339, %2344 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2346 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2347 = tosa.transpose %arg199, %2346 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %2348 = tosa.reshape %2345 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_417 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2349 = linalg.matmul {cast = #linalg.type_fn} ins(%2348, %2347 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_417 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2350 = tosa.reshape %2349 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2351 = tosa.add %2320, %2350 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2352 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_418 = arith.constant 2 : i32 + %2353 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2351 : tensor<1x40x4096xf32>) outs(%2352 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_418 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2354 = tosa.reduce_sum %2353 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2355 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2356 = tosa.reciprocal %2355 : (tensor<1xf32>) -> tensor<1xf32> + %2357 = tosa.mul %2356, %2354 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2358 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2359 = tosa.add %2357, %2358 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2360 = tosa.rsqrt %2359 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2361 = tosa.mul %2351, %2360 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2362 = tosa.reshape %arg200 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2363 = tosa.mul %2362, %2361 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2364 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2365 = tosa.transpose %arg201, %2364 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2366 = tosa.reshape %2363 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_419 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2367 = linalg.matmul {cast = #linalg.type_fn} ins(%2366, %2365 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_419 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2368 = tosa.reshape %2367 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2369 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2370 = tosa.transpose %arg202, %2369 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2371 = tosa.reshape %2363 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_420 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2372 = linalg.matmul {cast = #linalg.type_fn} ins(%2371, %2370 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_420 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2373 = tosa.reshape %2372 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2374 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2375 = tosa.transpose %arg203, %2374 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2376 = tosa.reshape %2363 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_421 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2377 = linalg.matmul {cast = #linalg.type_fn} ins(%2376, %2375 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_421 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2378 = tosa.reshape %2377 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2379 = tosa.reshape %2368 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2380 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2381 = tosa.transpose %2379, %2380 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2382 = tosa.reshape %2373 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2383 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2384 = tosa.transpose %2382, %2383 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2385 = tosa.reshape %2378 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2386 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2387 = tosa.transpose %2385, %2386 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_422 = tensor.extract_slice %arg204[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_423 = tensor.extract_slice %extracted_slice_422[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_424 = tensor.extract_slice %extracted_slice_423[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_425 = tensor.extract_slice %arg205[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_426 = tensor.extract_slice %extracted_slice_425[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_427 = tensor.extract_slice %extracted_slice_426[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %2388 = tensor.empty() : tensor<1x40x128xf32> + %2389 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_424 : tensor<1x1x40x128xf32>) outs(%2388 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2390 = tensor.empty() : tensor<40x128xf32> + %2391 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2389 : tensor<1x40x128xf32>) outs(%2390 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2392 = tensor.empty() : tensor<1x40x128xf32> + %2393 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_427 : tensor<1x1x40x128xf32>) outs(%2392 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2394 = tensor.empty() : tensor<40x128xf32> + %2395 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2393 : tensor<1x40x128xf32>) outs(%2394 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2396 = tensor.empty() : tensor<1x40x128xf32> + %2397 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2396 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2391[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2398 = tosa.reshape %2397 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2399 = tensor.empty() : tensor<1x40x128xf32> + %2400 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2399 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2395[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2401 = tosa.reshape %2400 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2402 = tosa.mul %2381, %2398 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_428 = tensor.extract_slice %2381[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_429 = tensor.extract_slice %2381[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2403 = tosa.negate %extracted_slice_429 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2404 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_430 = tensor.insert_slice %2403 into %2404[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_431 = tensor.insert_slice %extracted_slice_428 into %inserted_slice_430[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2405 = tosa.mul %inserted_slice_431, %2401 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2406 = tosa.add %2402, %2405 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2407 = tosa.mul %2384, %2398 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_432 = tensor.extract_slice %2384[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_433 = tensor.extract_slice %2384[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2408 = tosa.negate %extracted_slice_433 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2409 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_434 = tensor.insert_slice %2408 into %2409[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_435 = tensor.insert_slice %extracted_slice_432 into %inserted_slice_434[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2410 = tosa.mul %inserted_slice_435, %2401 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2411 = tosa.add %2407, %2410 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2412 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2413 = tosa.transpose %2411, %2412 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %2414 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2415 = tosa.add %2406, %2414 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2416 = tosa.reshape %2415 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2417 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %2418 = tosa.add %2413, %2417 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %2419 = tosa.reshape %2418 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %2420 = tosa.matmul %2416, %2419 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %2421 = tosa.reshape %2420 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2422 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2423 = tosa.reciprocal %2422 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2424 = tosa.mul %2421, %2423 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2425 = tosa.add %2424, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %2426 = tosa.reduce_max %2425 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2427 = tosa.sub %2425, %2426 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2428 = tosa.exp %2427 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2429 = tosa.reduce_sum %2428 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2430 = tosa.reciprocal %2429 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %2431 = tosa.mul %2428, %2430 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2432 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2433 = tosa.add %2431, %2432 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2434 = tosa.reshape %2433 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %2435 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2436 = tosa.add %2387, %2435 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2437 = tosa.reshape %2436 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2438 = tosa.matmul %2434, %2437 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %2439 = tosa.reshape %2438 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2440 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2441 = tosa.transpose %2439, %2440 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %2442 = tosa.identity %2441 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %2443 = tosa.reshape %2442 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %2444 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2445 = tosa.transpose %arg206, %2444 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2446 = tosa.reshape %2443 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_436 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2447 = linalg.matmul {cast = #linalg.type_fn} ins(%2446, %2445 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_436 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2448 = tosa.reshape %2447 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2449 = tosa.add %2351, %2448 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2450 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_437 = arith.constant 2 : i32 + %2451 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2449 : tensor<1x40x4096xf32>) outs(%2450 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_437 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2452 = tosa.reduce_sum %2451 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2453 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2454 = tosa.reciprocal %2453 : (tensor<1xf32>) -> tensor<1xf32> + %2455 = tosa.mul %2454, %2452 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2456 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2457 = tosa.add %2455, %2456 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2458 = tosa.rsqrt %2457 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2459 = tosa.mul %2449, %2458 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2460 = tosa.reshape %arg207 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2461 = tosa.mul %2460, %2459 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2462 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2463 = tosa.transpose %arg208, %2462 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2464 = tosa.reshape %2461 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_438 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2465 = linalg.matmul {cast = #linalg.type_fn} ins(%2464, %2463 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_438 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2466 = tosa.reshape %2465 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2467 = tosa.sigmoid %2466 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2468 = tosa.mul %2466, %2467 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2469 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2470 = tosa.transpose %arg209, %2469 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2471 = tosa.reshape %2461 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_439 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2472 = linalg.matmul {cast = #linalg.type_fn} ins(%2471, %2470 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_439 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2473 = tosa.reshape %2472 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2474 = tosa.mul %2468, %2473 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2475 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2476 = tosa.transpose %arg210, %2475 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %2477 = tosa.reshape %2474 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_440 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2478 = linalg.matmul {cast = #linalg.type_fn} ins(%2477, %2476 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_440 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2479 = tosa.reshape %2478 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2480 = tosa.add %2449, %2479 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2481 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_441 = arith.constant 2 : i32 + %2482 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2480 : tensor<1x40x4096xf32>) outs(%2481 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_441 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2483 = tosa.reduce_sum %2482 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2484 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2485 = tosa.reciprocal %2484 : (tensor<1xf32>) -> tensor<1xf32> + %2486 = tosa.mul %2485, %2483 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2487 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2488 = tosa.add %2486, %2487 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2489 = tosa.rsqrt %2488 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2490 = tosa.mul %2480, %2489 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2491 = tosa.reshape %arg211 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2492 = tosa.mul %2491, %2490 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2493 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2494 = tosa.transpose %arg212, %2493 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2495 = tosa.reshape %2492 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_442 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2496 = linalg.matmul {cast = #linalg.type_fn} ins(%2495, %2494 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_442 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2497 = tosa.reshape %2496 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2498 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2499 = tosa.transpose %arg213, %2498 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2500 = tosa.reshape %2492 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_443 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2501 = linalg.matmul {cast = #linalg.type_fn} ins(%2500, %2499 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_443 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2502 = tosa.reshape %2501 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2503 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2504 = tosa.transpose %arg214, %2503 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2505 = tosa.reshape %2492 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_444 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2506 = linalg.matmul {cast = #linalg.type_fn} ins(%2505, %2504 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_444 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2507 = tosa.reshape %2506 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2508 = tosa.reshape %2497 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2509 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2510 = tosa.transpose %2508, %2509 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2511 = tosa.reshape %2502 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2512 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2513 = tosa.transpose %2511, %2512 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2514 = tosa.reshape %2507 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2515 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2516 = tosa.transpose %2514, %2515 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_445 = tensor.extract_slice %arg215[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_446 = tensor.extract_slice %extracted_slice_445[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_447 = tensor.extract_slice %extracted_slice_446[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_448 = tensor.extract_slice %arg216[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_449 = tensor.extract_slice %extracted_slice_448[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_450 = tensor.extract_slice %extracted_slice_449[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %2517 = tensor.empty() : tensor<1x40x128xf32> + %2518 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_447 : tensor<1x1x40x128xf32>) outs(%2517 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2519 = tensor.empty() : tensor<40x128xf32> + %2520 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2518 : tensor<1x40x128xf32>) outs(%2519 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2521 = tensor.empty() : tensor<1x40x128xf32> + %2522 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_450 : tensor<1x1x40x128xf32>) outs(%2521 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2523 = tensor.empty() : tensor<40x128xf32> + %2524 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2522 : tensor<1x40x128xf32>) outs(%2523 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2525 = tensor.empty() : tensor<1x40x128xf32> + %2526 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2525 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2520[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2527 = tosa.reshape %2526 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2528 = tensor.empty() : tensor<1x40x128xf32> + %2529 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2528 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2524[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2530 = tosa.reshape %2529 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2531 = tosa.mul %2510, %2527 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_451 = tensor.extract_slice %2510[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_452 = tensor.extract_slice %2510[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2532 = tosa.negate %extracted_slice_452 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2533 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_453 = tensor.insert_slice %2532 into %2533[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_454 = tensor.insert_slice %extracted_slice_451 into %inserted_slice_453[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2534 = tosa.mul %inserted_slice_454, %2530 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2535 = tosa.add %2531, %2534 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2536 = tosa.mul %2513, %2527 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_455 = tensor.extract_slice %2513[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_456 = tensor.extract_slice %2513[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2537 = tosa.negate %extracted_slice_456 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2538 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_457 = tensor.insert_slice %2537 into %2538[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_458 = tensor.insert_slice %extracted_slice_455 into %inserted_slice_457[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2539 = tosa.mul %inserted_slice_458, %2530 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2540 = tosa.add %2536, %2539 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2541 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2542 = tosa.transpose %2540, %2541 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %2543 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2544 = tosa.add %2535, %2543 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2545 = tosa.reshape %2544 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2546 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %2547 = tosa.add %2542, %2546 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %2548 = tosa.reshape %2547 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %2549 = tosa.matmul %2545, %2548 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %2550 = tosa.reshape %2549 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2551 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2552 = tosa.reciprocal %2551 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2553 = tosa.mul %2550, %2552 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2554 = tosa.add %2553, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %2555 = tosa.reduce_max %2554 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2556 = tosa.sub %2554, %2555 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2557 = tosa.exp %2556 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2558 = tosa.reduce_sum %2557 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2559 = tosa.reciprocal %2558 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %2560 = tosa.mul %2557, %2559 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2561 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2562 = tosa.add %2560, %2561 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2563 = tosa.reshape %2562 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %2564 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2565 = tosa.add %2516, %2564 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2566 = tosa.reshape %2565 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2567 = tosa.matmul %2563, %2566 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %2568 = tosa.reshape %2567 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2569 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2570 = tosa.transpose %2568, %2569 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %2571 = tosa.identity %2570 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %2572 = tosa.reshape %2571 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %2573 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2574 = tosa.transpose %arg217, %2573 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2575 = tosa.reshape %2572 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_459 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2576 = linalg.matmul {cast = #linalg.type_fn} ins(%2575, %2574 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_459 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2577 = tosa.reshape %2576 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2578 = tosa.add %2480, %2577 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2579 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_460 = arith.constant 2 : i32 + %2580 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2578 : tensor<1x40x4096xf32>) outs(%2579 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_460 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2581 = tosa.reduce_sum %2580 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2582 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2583 = tosa.reciprocal %2582 : (tensor<1xf32>) -> tensor<1xf32> + %2584 = tosa.mul %2583, %2581 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2585 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2586 = tosa.add %2584, %2585 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2587 = tosa.rsqrt %2586 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2588 = tosa.mul %2578, %2587 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2589 = tosa.reshape %arg218 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2590 = tosa.mul %2589, %2588 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2591 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2592 = tosa.transpose %arg219, %2591 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2593 = tosa.reshape %2590 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_461 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2594 = linalg.matmul {cast = #linalg.type_fn} ins(%2593, %2592 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_461 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2595 = tosa.reshape %2594 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2596 = tosa.sigmoid %2595 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2597 = tosa.mul %2595, %2596 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2598 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2599 = tosa.transpose %arg220, %2598 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2600 = tosa.reshape %2590 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_462 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2601 = linalg.matmul {cast = #linalg.type_fn} ins(%2600, %2599 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_462 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2602 = tosa.reshape %2601 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2603 = tosa.mul %2597, %2602 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2604 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2605 = tosa.transpose %arg221, %2604 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %2606 = tosa.reshape %2603 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_463 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2607 = linalg.matmul {cast = #linalg.type_fn} ins(%2606, %2605 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_463 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2608 = tosa.reshape %2607 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2609 = tosa.add %2578, %2608 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2610 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_464 = arith.constant 2 : i32 + %2611 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2609 : tensor<1x40x4096xf32>) outs(%2610 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_464 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2612 = tosa.reduce_sum %2611 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2613 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2614 = tosa.reciprocal %2613 : (tensor<1xf32>) -> tensor<1xf32> + %2615 = tosa.mul %2614, %2612 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2616 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2617 = tosa.add %2615, %2616 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2618 = tosa.rsqrt %2617 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2619 = tosa.mul %2609, %2618 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2620 = tosa.reshape %arg222 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2621 = tosa.mul %2620, %2619 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2622 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2623 = tosa.transpose %arg223, %2622 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2624 = tosa.reshape %2621 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_465 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2625 = linalg.matmul {cast = #linalg.type_fn} ins(%2624, %2623 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_465 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2626 = tosa.reshape %2625 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2627 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2628 = tosa.transpose %arg224, %2627 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2629 = tosa.reshape %2621 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_466 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2630 = linalg.matmul {cast = #linalg.type_fn} ins(%2629, %2628 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_466 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2631 = tosa.reshape %2630 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2632 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2633 = tosa.transpose %arg225, %2632 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2634 = tosa.reshape %2621 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_467 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2635 = linalg.matmul {cast = #linalg.type_fn} ins(%2634, %2633 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_467 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2636 = tosa.reshape %2635 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2637 = tosa.reshape %2626 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2638 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2639 = tosa.transpose %2637, %2638 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2640 = tosa.reshape %2631 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2641 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2642 = tosa.transpose %2640, %2641 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2643 = tosa.reshape %2636 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2644 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2645 = tosa.transpose %2643, %2644 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_468 = tensor.extract_slice %arg226[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_469 = tensor.extract_slice %extracted_slice_468[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_470 = tensor.extract_slice %extracted_slice_469[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_471 = tensor.extract_slice %arg227[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_472 = tensor.extract_slice %extracted_slice_471[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_473 = tensor.extract_slice %extracted_slice_472[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %2646 = tensor.empty() : tensor<1x40x128xf32> + %2647 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_470 : tensor<1x1x40x128xf32>) outs(%2646 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2648 = tensor.empty() : tensor<40x128xf32> + %2649 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2647 : tensor<1x40x128xf32>) outs(%2648 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2650 = tensor.empty() : tensor<1x40x128xf32> + %2651 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_473 : tensor<1x1x40x128xf32>) outs(%2650 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2652 = tensor.empty() : tensor<40x128xf32> + %2653 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2651 : tensor<1x40x128xf32>) outs(%2652 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2654 = tensor.empty() : tensor<1x40x128xf32> + %2655 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2654 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2649[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2656 = tosa.reshape %2655 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2657 = tensor.empty() : tensor<1x40x128xf32> + %2658 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2657 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2653[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2659 = tosa.reshape %2658 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2660 = tosa.mul %2639, %2656 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_474 = tensor.extract_slice %2639[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_475 = tensor.extract_slice %2639[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2661 = tosa.negate %extracted_slice_475 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2662 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_476 = tensor.insert_slice %2661 into %2662[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_477 = tensor.insert_slice %extracted_slice_474 into %inserted_slice_476[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2663 = tosa.mul %inserted_slice_477, %2659 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2664 = tosa.add %2660, %2663 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2665 = tosa.mul %2642, %2656 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_478 = tensor.extract_slice %2642[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_479 = tensor.extract_slice %2642[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2666 = tosa.negate %extracted_slice_479 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2667 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_480 = tensor.insert_slice %2666 into %2667[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_481 = tensor.insert_slice %extracted_slice_478 into %inserted_slice_480[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2668 = tosa.mul %inserted_slice_481, %2659 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2669 = tosa.add %2665, %2668 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2670 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2671 = tosa.transpose %2669, %2670 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %2672 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2673 = tosa.add %2664, %2672 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2674 = tosa.reshape %2673 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2675 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %2676 = tosa.add %2671, %2675 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %2677 = tosa.reshape %2676 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %2678 = tosa.matmul %2674, %2677 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %2679 = tosa.reshape %2678 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2680 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2681 = tosa.reciprocal %2680 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2682 = tosa.mul %2679, %2681 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2683 = tosa.add %2682, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %2684 = tosa.reduce_max %2683 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2685 = tosa.sub %2683, %2684 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2686 = tosa.exp %2685 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2687 = tosa.reduce_sum %2686 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2688 = tosa.reciprocal %2687 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %2689 = tosa.mul %2686, %2688 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2690 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2691 = tosa.add %2689, %2690 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2692 = tosa.reshape %2691 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %2693 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2694 = tosa.add %2645, %2693 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2695 = tosa.reshape %2694 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2696 = tosa.matmul %2692, %2695 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %2697 = tosa.reshape %2696 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2698 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2699 = tosa.transpose %2697, %2698 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %2700 = tosa.identity %2699 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %2701 = tosa.reshape %2700 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %2702 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2703 = tosa.transpose %arg228, %2702 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2704 = tosa.reshape %2701 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_482 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2705 = linalg.matmul {cast = #linalg.type_fn} ins(%2704, %2703 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_482 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2706 = tosa.reshape %2705 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2707 = tosa.add %2609, %2706 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2708 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_483 = arith.constant 2 : i32 + %2709 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2707 : tensor<1x40x4096xf32>) outs(%2708 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_483 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2710 = tosa.reduce_sum %2709 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2711 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2712 = tosa.reciprocal %2711 : (tensor<1xf32>) -> tensor<1xf32> + %2713 = tosa.mul %2712, %2710 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2714 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2715 = tosa.add %2713, %2714 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2716 = tosa.rsqrt %2715 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2717 = tosa.mul %2707, %2716 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2718 = tosa.reshape %arg229 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2719 = tosa.mul %2718, %2717 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2720 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2721 = tosa.transpose %arg230, %2720 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2722 = tosa.reshape %2719 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_484 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2723 = linalg.matmul {cast = #linalg.type_fn} ins(%2722, %2721 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_484 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2724 = tosa.reshape %2723 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2725 = tosa.sigmoid %2724 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2726 = tosa.mul %2724, %2725 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2727 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2728 = tosa.transpose %arg231, %2727 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2729 = tosa.reshape %2719 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_485 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2730 = linalg.matmul {cast = #linalg.type_fn} ins(%2729, %2728 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_485 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2731 = tosa.reshape %2730 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2732 = tosa.mul %2726, %2731 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2733 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2734 = tosa.transpose %arg232, %2733 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %2735 = tosa.reshape %2732 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_486 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2736 = linalg.matmul {cast = #linalg.type_fn} ins(%2735, %2734 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_486 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2737 = tosa.reshape %2736 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2738 = tosa.add %2707, %2737 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2739 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_487 = arith.constant 2 : i32 + %2740 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2738 : tensor<1x40x4096xf32>) outs(%2739 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_487 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2741 = tosa.reduce_sum %2740 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2742 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2743 = tosa.reciprocal %2742 : (tensor<1xf32>) -> tensor<1xf32> + %2744 = tosa.mul %2743, %2741 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2745 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2746 = tosa.add %2744, %2745 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2747 = tosa.rsqrt %2746 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2748 = tosa.mul %2738, %2747 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2749 = tosa.reshape %arg233 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2750 = tosa.mul %2749, %2748 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2751 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2752 = tosa.transpose %arg234, %2751 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2753 = tosa.reshape %2750 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_488 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2754 = linalg.matmul {cast = #linalg.type_fn} ins(%2753, %2752 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_488 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2755 = tosa.reshape %2754 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2756 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2757 = tosa.transpose %arg235, %2756 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2758 = tosa.reshape %2750 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_489 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2759 = linalg.matmul {cast = #linalg.type_fn} ins(%2758, %2757 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_489 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2760 = tosa.reshape %2759 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2761 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2762 = tosa.transpose %arg236, %2761 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2763 = tosa.reshape %2750 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_490 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2764 = linalg.matmul {cast = #linalg.type_fn} ins(%2763, %2762 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_490 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2765 = tosa.reshape %2764 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2766 = tosa.reshape %2755 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2767 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2768 = tosa.transpose %2766, %2767 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2769 = tosa.reshape %2760 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2770 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2771 = tosa.transpose %2769, %2770 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2772 = tosa.reshape %2765 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2773 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2774 = tosa.transpose %2772, %2773 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_491 = tensor.extract_slice %arg237[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_492 = tensor.extract_slice %extracted_slice_491[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_493 = tensor.extract_slice %extracted_slice_492[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_494 = tensor.extract_slice %arg238[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_495 = tensor.extract_slice %extracted_slice_494[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_496 = tensor.extract_slice %extracted_slice_495[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %2775 = tensor.empty() : tensor<1x40x128xf32> + %2776 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_493 : tensor<1x1x40x128xf32>) outs(%2775 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2777 = tensor.empty() : tensor<40x128xf32> + %2778 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2776 : tensor<1x40x128xf32>) outs(%2777 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2779 = tensor.empty() : tensor<1x40x128xf32> + %2780 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_496 : tensor<1x1x40x128xf32>) outs(%2779 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2781 = tensor.empty() : tensor<40x128xf32> + %2782 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2780 : tensor<1x40x128xf32>) outs(%2781 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2783 = tensor.empty() : tensor<1x40x128xf32> + %2784 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2783 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2778[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2785 = tosa.reshape %2784 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2786 = tensor.empty() : tensor<1x40x128xf32> + %2787 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2786 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2782[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2788 = tosa.reshape %2787 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2789 = tosa.mul %2768, %2785 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_497 = tensor.extract_slice %2768[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_498 = tensor.extract_slice %2768[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2790 = tosa.negate %extracted_slice_498 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2791 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_499 = tensor.insert_slice %2790 into %2791[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_500 = tensor.insert_slice %extracted_slice_497 into %inserted_slice_499[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2792 = tosa.mul %inserted_slice_500, %2788 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2793 = tosa.add %2789, %2792 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2794 = tosa.mul %2771, %2785 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_501 = tensor.extract_slice %2771[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_502 = tensor.extract_slice %2771[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2795 = tosa.negate %extracted_slice_502 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2796 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_503 = tensor.insert_slice %2795 into %2796[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_504 = tensor.insert_slice %extracted_slice_501 into %inserted_slice_503[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2797 = tosa.mul %inserted_slice_504, %2788 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2798 = tosa.add %2794, %2797 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2799 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2800 = tosa.transpose %2798, %2799 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %2801 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2802 = tosa.add %2793, %2801 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2803 = tosa.reshape %2802 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2804 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %2805 = tosa.add %2800, %2804 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %2806 = tosa.reshape %2805 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %2807 = tosa.matmul %2803, %2806 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %2808 = tosa.reshape %2807 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2809 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2810 = tosa.reciprocal %2809 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2811 = tosa.mul %2808, %2810 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2812 = tosa.add %2811, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %2813 = tosa.reduce_max %2812 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2814 = tosa.sub %2812, %2813 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2815 = tosa.exp %2814 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2816 = tosa.reduce_sum %2815 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2817 = tosa.reciprocal %2816 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %2818 = tosa.mul %2815, %2817 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2819 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2820 = tosa.add %2818, %2819 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2821 = tosa.reshape %2820 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %2822 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2823 = tosa.add %2774, %2822 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2824 = tosa.reshape %2823 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2825 = tosa.matmul %2821, %2824 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %2826 = tosa.reshape %2825 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2827 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2828 = tosa.transpose %2826, %2827 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %2829 = tosa.identity %2828 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %2830 = tosa.reshape %2829 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %2831 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2832 = tosa.transpose %arg239, %2831 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2833 = tosa.reshape %2830 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_505 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2834 = linalg.matmul {cast = #linalg.type_fn} ins(%2833, %2832 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_505 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2835 = tosa.reshape %2834 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2836 = tosa.add %2738, %2835 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2837 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_506 = arith.constant 2 : i32 + %2838 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2836 : tensor<1x40x4096xf32>) outs(%2837 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_506 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2839 = tosa.reduce_sum %2838 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2840 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2841 = tosa.reciprocal %2840 : (tensor<1xf32>) -> tensor<1xf32> + %2842 = tosa.mul %2841, %2839 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2843 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2844 = tosa.add %2842, %2843 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2845 = tosa.rsqrt %2844 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2846 = tosa.mul %2836, %2845 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2847 = tosa.reshape %arg240 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2848 = tosa.mul %2847, %2846 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2849 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2850 = tosa.transpose %arg241, %2849 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2851 = tosa.reshape %2848 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_507 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2852 = linalg.matmul {cast = #linalg.type_fn} ins(%2851, %2850 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_507 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2853 = tosa.reshape %2852 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2854 = tosa.sigmoid %2853 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2855 = tosa.mul %2853, %2854 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2856 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2857 = tosa.transpose %arg242, %2856 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2858 = tosa.reshape %2848 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_508 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2859 = linalg.matmul {cast = #linalg.type_fn} ins(%2858, %2857 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_508 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2860 = tosa.reshape %2859 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2861 = tosa.mul %2855, %2860 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2862 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2863 = tosa.transpose %arg243, %2862 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %2864 = tosa.reshape %2861 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_509 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2865 = linalg.matmul {cast = #linalg.type_fn} ins(%2864, %2863 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_509 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2866 = tosa.reshape %2865 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2867 = tosa.add %2836, %2866 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2868 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_510 = arith.constant 2 : i32 + %2869 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2867 : tensor<1x40x4096xf32>) outs(%2868 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_510 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2870 = tosa.reduce_sum %2869 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2871 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2872 = tosa.reciprocal %2871 : (tensor<1xf32>) -> tensor<1xf32> + %2873 = tosa.mul %2872, %2870 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2874 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2875 = tosa.add %2873, %2874 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2876 = tosa.rsqrt %2875 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2877 = tosa.mul %2867, %2876 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2878 = tosa.reshape %arg244 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2879 = tosa.mul %2878, %2877 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2880 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2881 = tosa.transpose %arg245, %2880 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2882 = tosa.reshape %2879 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_511 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2883 = linalg.matmul {cast = #linalg.type_fn} ins(%2882, %2881 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_511 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2884 = tosa.reshape %2883 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2885 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2886 = tosa.transpose %arg246, %2885 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2887 = tosa.reshape %2879 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_512 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2888 = linalg.matmul {cast = #linalg.type_fn} ins(%2887, %2886 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_512 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2889 = tosa.reshape %2888 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2890 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2891 = tosa.transpose %arg247, %2890 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2892 = tosa.reshape %2879 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_513 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2893 = linalg.matmul {cast = #linalg.type_fn} ins(%2892, %2891 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_513 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2894 = tosa.reshape %2893 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2895 = tosa.reshape %2884 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2896 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2897 = tosa.transpose %2895, %2896 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2898 = tosa.reshape %2889 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2899 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2900 = tosa.transpose %2898, %2899 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %2901 = tosa.reshape %2894 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %2902 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2903 = tosa.transpose %2901, %2902 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_514 = tensor.extract_slice %arg248[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_515 = tensor.extract_slice %extracted_slice_514[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_516 = tensor.extract_slice %extracted_slice_515[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_517 = tensor.extract_slice %arg249[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_518 = tensor.extract_slice %extracted_slice_517[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_519 = tensor.extract_slice %extracted_slice_518[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %2904 = tensor.empty() : tensor<1x40x128xf32> + %2905 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_516 : tensor<1x1x40x128xf32>) outs(%2904 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2906 = tensor.empty() : tensor<40x128xf32> + %2907 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2905 : tensor<1x40x128xf32>) outs(%2906 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2908 = tensor.empty() : tensor<1x40x128xf32> + %2909 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_519 : tensor<1x1x40x128xf32>) outs(%2908 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %2910 = tensor.empty() : tensor<40x128xf32> + %2911 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%2909 : tensor<1x40x128xf32>) outs(%2910 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %2912 = tensor.empty() : tensor<1x40x128xf32> + %2913 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2912 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2907[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2914 = tosa.reshape %2913 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2915 = tensor.empty() : tensor<1x40x128xf32> + %2916 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%2915 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %2911[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %2917 = tosa.reshape %2916 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %2918 = tosa.mul %2897, %2914 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_520 = tensor.extract_slice %2897[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_521 = tensor.extract_slice %2897[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2919 = tosa.negate %extracted_slice_521 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2920 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_522 = tensor.insert_slice %2919 into %2920[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_523 = tensor.insert_slice %extracted_slice_520 into %inserted_slice_522[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2921 = tosa.mul %inserted_slice_523, %2917 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2922 = tosa.add %2918, %2921 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2923 = tosa.mul %2900, %2914 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_524 = tensor.extract_slice %2900[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_525 = tensor.extract_slice %2900[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %2924 = tosa.negate %extracted_slice_525 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %2925 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_526 = tensor.insert_slice %2924 into %2925[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_527 = tensor.insert_slice %extracted_slice_524 into %inserted_slice_526[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %2926 = tosa.mul %inserted_slice_527, %2917 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %2927 = tosa.add %2923, %2926 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2928 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2929 = tosa.transpose %2927, %2928 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %2930 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2931 = tosa.add %2922, %2930 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2932 = tosa.reshape %2931 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2933 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %2934 = tosa.add %2929, %2933 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %2935 = tosa.reshape %2934 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %2936 = tosa.matmul %2932, %2935 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %2937 = tosa.reshape %2936 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2938 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2939 = tosa.reciprocal %2938 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2940 = tosa.mul %2937, %2939 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2941 = tosa.add %2940, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %2942 = tosa.reduce_max %2941 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2943 = tosa.sub %2941, %2942 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2944 = tosa.exp %2943 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2945 = tosa.reduce_sum %2944 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %2946 = tosa.reciprocal %2945 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %2947 = tosa.mul %2944, %2946 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %2948 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %2949 = tosa.add %2947, %2948 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2950 = tosa.reshape %2949 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %2951 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %2952 = tosa.add %2903, %2951 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2953 = tosa.reshape %2952 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %2954 = tosa.matmul %2950, %2953 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %2955 = tosa.reshape %2954 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %2956 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %2957 = tosa.transpose %2955, %2956 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %2958 = tosa.identity %2957 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %2959 = tosa.reshape %2958 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %2960 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2961 = tosa.transpose %arg250, %2960 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %2962 = tosa.reshape %2959 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_528 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2963 = linalg.matmul {cast = #linalg.type_fn} ins(%2962, %2961 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_528 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2964 = tosa.reshape %2963 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2965 = tosa.add %2867, %2964 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2966 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_529 = arith.constant 2 : i32 + %2967 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2965 : tensor<1x40x4096xf32>) outs(%2966 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_529 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2968 = tosa.reduce_sum %2967 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %2969 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %2970 = tosa.reciprocal %2969 : (tensor<1xf32>) -> tensor<1xf32> + %2971 = tosa.mul %2970, %2968 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2972 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %2973 = tosa.add %2971, %2972 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2974 = tosa.rsqrt %2973 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %2975 = tosa.mul %2965, %2974 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %2976 = tosa.reshape %arg251 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %2977 = tosa.mul %2976, %2975 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2978 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2979 = tosa.transpose %arg252, %2978 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2980 = tosa.reshape %2977 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_530 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2981 = linalg.matmul {cast = #linalg.type_fn} ins(%2980, %2979 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_530 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2982 = tosa.reshape %2981 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2983 = tosa.sigmoid %2982 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2984 = tosa.mul %2982, %2983 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2985 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2986 = tosa.transpose %arg253, %2985 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %2987 = tosa.reshape %2977 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_531 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %2988 = linalg.matmul {cast = #linalg.type_fn} ins(%2987, %2986 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_531 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %2989 = tosa.reshape %2988 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %2990 = tosa.mul %2984, %2989 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %2991 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %2992 = tosa.transpose %arg254, %2991 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %2993 = tosa.reshape %2990 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_532 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %2994 = linalg.matmul {cast = #linalg.type_fn} ins(%2993, %2992 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_532 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %2995 = tosa.reshape %2994 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %2996 = tosa.add %2965, %2995 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %2997 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_533 = arith.constant 2 : i32 + %2998 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2996 : tensor<1x40x4096xf32>) outs(%2997 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_533 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %2999 = tosa.reduce_sum %2998 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3000 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3001 = tosa.reciprocal %3000 : (tensor<1xf32>) -> tensor<1xf32> + %3002 = tosa.mul %3001, %2999 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3003 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3004 = tosa.add %3002, %3003 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3005 = tosa.rsqrt %3004 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3006 = tosa.mul %2996, %3005 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3007 = tosa.reshape %arg255 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3008 = tosa.mul %3007, %3006 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3009 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3010 = tosa.transpose %arg256, %3009 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3011 = tosa.reshape %3008 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_534 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3012 = linalg.matmul {cast = #linalg.type_fn} ins(%3011, %3010 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_534 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3013 = tosa.reshape %3012 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3014 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3015 = tosa.transpose %arg257, %3014 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3016 = tosa.reshape %3008 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_535 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3017 = linalg.matmul {cast = #linalg.type_fn} ins(%3016, %3015 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_535 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3018 = tosa.reshape %3017 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3019 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3020 = tosa.transpose %arg258, %3019 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3021 = tosa.reshape %3008 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_536 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3022 = linalg.matmul {cast = #linalg.type_fn} ins(%3021, %3020 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_536 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3023 = tosa.reshape %3022 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3024 = tosa.reshape %3013 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3025 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3026 = tosa.transpose %3024, %3025 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3027 = tosa.reshape %3018 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3028 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3029 = tosa.transpose %3027, %3028 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3030 = tosa.reshape %3023 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3031 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3032 = tosa.transpose %3030, %3031 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_537 = tensor.extract_slice %arg259[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_538 = tensor.extract_slice %extracted_slice_537[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_539 = tensor.extract_slice %extracted_slice_538[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_540 = tensor.extract_slice %arg260[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_541 = tensor.extract_slice %extracted_slice_540[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_542 = tensor.extract_slice %extracted_slice_541[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %3033 = tensor.empty() : tensor<1x40x128xf32> + %3034 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_539 : tensor<1x1x40x128xf32>) outs(%3033 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3035 = tensor.empty() : tensor<40x128xf32> + %3036 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3034 : tensor<1x40x128xf32>) outs(%3035 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3037 = tensor.empty() : tensor<1x40x128xf32> + %3038 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_542 : tensor<1x1x40x128xf32>) outs(%3037 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3039 = tensor.empty() : tensor<40x128xf32> + %3040 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3038 : tensor<1x40x128xf32>) outs(%3039 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3041 = tensor.empty() : tensor<1x40x128xf32> + %3042 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3041 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3036[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3043 = tosa.reshape %3042 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3044 = tensor.empty() : tensor<1x40x128xf32> + %3045 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3044 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3040[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3046 = tosa.reshape %3045 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3047 = tosa.mul %3026, %3043 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_543 = tensor.extract_slice %3026[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_544 = tensor.extract_slice %3026[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3048 = tosa.negate %extracted_slice_544 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3049 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_545 = tensor.insert_slice %3048 into %3049[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_546 = tensor.insert_slice %extracted_slice_543 into %inserted_slice_545[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3050 = tosa.mul %inserted_slice_546, %3046 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3051 = tosa.add %3047, %3050 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3052 = tosa.mul %3029, %3043 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_547 = tensor.extract_slice %3029[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_548 = tensor.extract_slice %3029[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3053 = tosa.negate %extracted_slice_548 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3054 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_549 = tensor.insert_slice %3053 into %3054[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_550 = tensor.insert_slice %extracted_slice_547 into %inserted_slice_549[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3055 = tosa.mul %inserted_slice_550, %3046 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3056 = tosa.add %3052, %3055 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3057 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3058 = tosa.transpose %3056, %3057 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %3059 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3060 = tosa.add %3051, %3059 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3061 = tosa.reshape %3060 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3062 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %3063 = tosa.add %3058, %3062 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %3064 = tosa.reshape %3063 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %3065 = tosa.matmul %3061, %3064 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %3066 = tosa.reshape %3065 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3067 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3068 = tosa.reciprocal %3067 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3069 = tosa.mul %3066, %3068 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3070 = tosa.add %3069, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %3071 = tosa.reduce_max %3070 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3072 = tosa.sub %3070, %3071 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3073 = tosa.exp %3072 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3074 = tosa.reduce_sum %3073 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3075 = tosa.reciprocal %3074 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %3076 = tosa.mul %3073, %3075 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3077 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3078 = tosa.add %3076, %3077 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3079 = tosa.reshape %3078 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %3080 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3081 = tosa.add %3032, %3080 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3082 = tosa.reshape %3081 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3083 = tosa.matmul %3079, %3082 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %3084 = tosa.reshape %3083 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3085 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3086 = tosa.transpose %3084, %3085 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %3087 = tosa.identity %3086 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %3088 = tosa.reshape %3087 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %3089 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3090 = tosa.transpose %arg261, %3089 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3091 = tosa.reshape %3088 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_551 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3092 = linalg.matmul {cast = #linalg.type_fn} ins(%3091, %3090 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_551 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3093 = tosa.reshape %3092 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3094 = tosa.add %2996, %3093 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3095 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_552 = arith.constant 2 : i32 + %3096 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3094 : tensor<1x40x4096xf32>) outs(%3095 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_552 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3097 = tosa.reduce_sum %3096 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3098 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3099 = tosa.reciprocal %3098 : (tensor<1xf32>) -> tensor<1xf32> + %3100 = tosa.mul %3099, %3097 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3101 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3102 = tosa.add %3100, %3101 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3103 = tosa.rsqrt %3102 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3104 = tosa.mul %3094, %3103 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3105 = tosa.reshape %arg262 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3106 = tosa.mul %3105, %3104 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3107 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3108 = tosa.transpose %arg263, %3107 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3109 = tosa.reshape %3106 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_553 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3110 = linalg.matmul {cast = #linalg.type_fn} ins(%3109, %3108 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_553 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3111 = tosa.reshape %3110 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3112 = tosa.sigmoid %3111 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3113 = tosa.mul %3111, %3112 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3114 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3115 = tosa.transpose %arg264, %3114 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3116 = tosa.reshape %3106 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_554 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3117 = linalg.matmul {cast = #linalg.type_fn} ins(%3116, %3115 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_554 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3118 = tosa.reshape %3117 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3119 = tosa.mul %3113, %3118 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3120 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3121 = tosa.transpose %arg265, %3120 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %3122 = tosa.reshape %3119 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_555 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3123 = linalg.matmul {cast = #linalg.type_fn} ins(%3122, %3121 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_555 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3124 = tosa.reshape %3123 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3125 = tosa.add %3094, %3124 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3126 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_556 = arith.constant 2 : i32 + %3127 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3125 : tensor<1x40x4096xf32>) outs(%3126 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_556 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3128 = tosa.reduce_sum %3127 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3129 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3130 = tosa.reciprocal %3129 : (tensor<1xf32>) -> tensor<1xf32> + %3131 = tosa.mul %3130, %3128 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3132 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3133 = tosa.add %3131, %3132 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3134 = tosa.rsqrt %3133 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3135 = tosa.mul %3125, %3134 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3136 = tosa.reshape %arg266 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3137 = tosa.mul %3136, %3135 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3138 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3139 = tosa.transpose %arg267, %3138 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3140 = tosa.reshape %3137 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_557 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3141 = linalg.matmul {cast = #linalg.type_fn} ins(%3140, %3139 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_557 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3142 = tosa.reshape %3141 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3143 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3144 = tosa.transpose %arg268, %3143 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3145 = tosa.reshape %3137 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_558 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3146 = linalg.matmul {cast = #linalg.type_fn} ins(%3145, %3144 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_558 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3147 = tosa.reshape %3146 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3148 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3149 = tosa.transpose %arg269, %3148 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3150 = tosa.reshape %3137 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_559 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3151 = linalg.matmul {cast = #linalg.type_fn} ins(%3150, %3149 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_559 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3152 = tosa.reshape %3151 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3153 = tosa.reshape %3142 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3154 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3155 = tosa.transpose %3153, %3154 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3156 = tosa.reshape %3147 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3157 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3158 = tosa.transpose %3156, %3157 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3159 = tosa.reshape %3152 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3160 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3161 = tosa.transpose %3159, %3160 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_560 = tensor.extract_slice %arg270[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_561 = tensor.extract_slice %extracted_slice_560[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_562 = tensor.extract_slice %extracted_slice_561[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_563 = tensor.extract_slice %arg271[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_564 = tensor.extract_slice %extracted_slice_563[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_565 = tensor.extract_slice %extracted_slice_564[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %3162 = tensor.empty() : tensor<1x40x128xf32> + %3163 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_562 : tensor<1x1x40x128xf32>) outs(%3162 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3164 = tensor.empty() : tensor<40x128xf32> + %3165 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3163 : tensor<1x40x128xf32>) outs(%3164 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3166 = tensor.empty() : tensor<1x40x128xf32> + %3167 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_565 : tensor<1x1x40x128xf32>) outs(%3166 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3168 = tensor.empty() : tensor<40x128xf32> + %3169 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3167 : tensor<1x40x128xf32>) outs(%3168 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3170 = tensor.empty() : tensor<1x40x128xf32> + %3171 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3170 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3165[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3172 = tosa.reshape %3171 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3173 = tensor.empty() : tensor<1x40x128xf32> + %3174 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3173 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3169[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3175 = tosa.reshape %3174 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3176 = tosa.mul %3155, %3172 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_566 = tensor.extract_slice %3155[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_567 = tensor.extract_slice %3155[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3177 = tosa.negate %extracted_slice_567 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3178 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_568 = tensor.insert_slice %3177 into %3178[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_569 = tensor.insert_slice %extracted_slice_566 into %inserted_slice_568[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3179 = tosa.mul %inserted_slice_569, %3175 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3180 = tosa.add %3176, %3179 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3181 = tosa.mul %3158, %3172 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_570 = tensor.extract_slice %3158[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_571 = tensor.extract_slice %3158[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3182 = tosa.negate %extracted_slice_571 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3183 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_572 = tensor.insert_slice %3182 into %3183[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_573 = tensor.insert_slice %extracted_slice_570 into %inserted_slice_572[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3184 = tosa.mul %inserted_slice_573, %3175 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3185 = tosa.add %3181, %3184 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3186 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3187 = tosa.transpose %3185, %3186 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %3188 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3189 = tosa.add %3180, %3188 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3190 = tosa.reshape %3189 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3191 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %3192 = tosa.add %3187, %3191 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %3193 = tosa.reshape %3192 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %3194 = tosa.matmul %3190, %3193 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %3195 = tosa.reshape %3194 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3196 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3197 = tosa.reciprocal %3196 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3198 = tosa.mul %3195, %3197 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3199 = tosa.add %3198, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %3200 = tosa.reduce_max %3199 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3201 = tosa.sub %3199, %3200 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3202 = tosa.exp %3201 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3203 = tosa.reduce_sum %3202 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3204 = tosa.reciprocal %3203 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %3205 = tosa.mul %3202, %3204 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3206 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3207 = tosa.add %3205, %3206 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3208 = tosa.reshape %3207 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %3209 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3210 = tosa.add %3161, %3209 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3211 = tosa.reshape %3210 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3212 = tosa.matmul %3208, %3211 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %3213 = tosa.reshape %3212 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3214 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3215 = tosa.transpose %3213, %3214 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %3216 = tosa.identity %3215 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %3217 = tosa.reshape %3216 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %3218 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3219 = tosa.transpose %arg272, %3218 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3220 = tosa.reshape %3217 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_574 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3221 = linalg.matmul {cast = #linalg.type_fn} ins(%3220, %3219 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_574 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3222 = tosa.reshape %3221 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3223 = tosa.add %3125, %3222 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3224 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_575 = arith.constant 2 : i32 + %3225 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3223 : tensor<1x40x4096xf32>) outs(%3224 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_575 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3226 = tosa.reduce_sum %3225 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3227 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3228 = tosa.reciprocal %3227 : (tensor<1xf32>) -> tensor<1xf32> + %3229 = tosa.mul %3228, %3226 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3230 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3231 = tosa.add %3229, %3230 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3232 = tosa.rsqrt %3231 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3233 = tosa.mul %3223, %3232 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3234 = tosa.reshape %arg273 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3235 = tosa.mul %3234, %3233 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3236 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3237 = tosa.transpose %arg274, %3236 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3238 = tosa.reshape %3235 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_576 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3239 = linalg.matmul {cast = #linalg.type_fn} ins(%3238, %3237 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_576 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3240 = tosa.reshape %3239 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3241 = tosa.sigmoid %3240 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3242 = tosa.mul %3240, %3241 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3243 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3244 = tosa.transpose %arg275, %3243 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3245 = tosa.reshape %3235 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_577 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3246 = linalg.matmul {cast = #linalg.type_fn} ins(%3245, %3244 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_577 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3247 = tosa.reshape %3246 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3248 = tosa.mul %3242, %3247 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3249 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3250 = tosa.transpose %arg276, %3249 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %3251 = tosa.reshape %3248 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_578 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3252 = linalg.matmul {cast = #linalg.type_fn} ins(%3251, %3250 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_578 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3253 = tosa.reshape %3252 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3254 = tosa.add %3223, %3253 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3255 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_579 = arith.constant 2 : i32 + %3256 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3254 : tensor<1x40x4096xf32>) outs(%3255 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_579 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3257 = tosa.reduce_sum %3256 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3258 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3259 = tosa.reciprocal %3258 : (tensor<1xf32>) -> tensor<1xf32> + %3260 = tosa.mul %3259, %3257 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3261 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3262 = tosa.add %3260, %3261 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3263 = tosa.rsqrt %3262 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3264 = tosa.mul %3254, %3263 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3265 = tosa.reshape %arg277 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3266 = tosa.mul %3265, %3264 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3267 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3268 = tosa.transpose %arg278, %3267 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3269 = tosa.reshape %3266 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_580 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3270 = linalg.matmul {cast = #linalg.type_fn} ins(%3269, %3268 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_580 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3271 = tosa.reshape %3270 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3272 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3273 = tosa.transpose %arg279, %3272 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3274 = tosa.reshape %3266 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_581 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3275 = linalg.matmul {cast = #linalg.type_fn} ins(%3274, %3273 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_581 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3276 = tosa.reshape %3275 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3277 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3278 = tosa.transpose %arg280, %3277 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3279 = tosa.reshape %3266 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_582 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3280 = linalg.matmul {cast = #linalg.type_fn} ins(%3279, %3278 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_582 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3281 = tosa.reshape %3280 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3282 = tosa.reshape %3271 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3283 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3284 = tosa.transpose %3282, %3283 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3285 = tosa.reshape %3276 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3286 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3287 = tosa.transpose %3285, %3286 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3288 = tosa.reshape %3281 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3289 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3290 = tosa.transpose %3288, %3289 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_583 = tensor.extract_slice %arg281[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_584 = tensor.extract_slice %extracted_slice_583[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_585 = tensor.extract_slice %extracted_slice_584[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_586 = tensor.extract_slice %arg282[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_587 = tensor.extract_slice %extracted_slice_586[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_588 = tensor.extract_slice %extracted_slice_587[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %3291 = tensor.empty() : tensor<1x40x128xf32> + %3292 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_585 : tensor<1x1x40x128xf32>) outs(%3291 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3293 = tensor.empty() : tensor<40x128xf32> + %3294 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3292 : tensor<1x40x128xf32>) outs(%3293 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3295 = tensor.empty() : tensor<1x40x128xf32> + %3296 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_588 : tensor<1x1x40x128xf32>) outs(%3295 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3297 = tensor.empty() : tensor<40x128xf32> + %3298 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3296 : tensor<1x40x128xf32>) outs(%3297 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3299 = tensor.empty() : tensor<1x40x128xf32> + %3300 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3299 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3294[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3301 = tosa.reshape %3300 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3302 = tensor.empty() : tensor<1x40x128xf32> + %3303 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3302 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3298[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3304 = tosa.reshape %3303 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3305 = tosa.mul %3284, %3301 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_589 = tensor.extract_slice %3284[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_590 = tensor.extract_slice %3284[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3306 = tosa.negate %extracted_slice_590 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3307 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_591 = tensor.insert_slice %3306 into %3307[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_592 = tensor.insert_slice %extracted_slice_589 into %inserted_slice_591[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3308 = tosa.mul %inserted_slice_592, %3304 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3309 = tosa.add %3305, %3308 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3310 = tosa.mul %3287, %3301 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_593 = tensor.extract_slice %3287[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_594 = tensor.extract_slice %3287[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3311 = tosa.negate %extracted_slice_594 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3312 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_595 = tensor.insert_slice %3311 into %3312[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_596 = tensor.insert_slice %extracted_slice_593 into %inserted_slice_595[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3313 = tosa.mul %inserted_slice_596, %3304 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3314 = tosa.add %3310, %3313 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3315 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3316 = tosa.transpose %3314, %3315 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %3317 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3318 = tosa.add %3309, %3317 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3319 = tosa.reshape %3318 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3320 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %3321 = tosa.add %3316, %3320 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %3322 = tosa.reshape %3321 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %3323 = tosa.matmul %3319, %3322 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %3324 = tosa.reshape %3323 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3325 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3326 = tosa.reciprocal %3325 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3327 = tosa.mul %3324, %3326 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3328 = tosa.add %3327, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %3329 = tosa.reduce_max %3328 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3330 = tosa.sub %3328, %3329 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3331 = tosa.exp %3330 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3332 = tosa.reduce_sum %3331 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3333 = tosa.reciprocal %3332 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %3334 = tosa.mul %3331, %3333 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3335 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3336 = tosa.add %3334, %3335 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3337 = tosa.reshape %3336 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %3338 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3339 = tosa.add %3290, %3338 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3340 = tosa.reshape %3339 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3341 = tosa.matmul %3337, %3340 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %3342 = tosa.reshape %3341 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3343 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3344 = tosa.transpose %3342, %3343 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %3345 = tosa.identity %3344 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %3346 = tosa.reshape %3345 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %3347 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3348 = tosa.transpose %arg283, %3347 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3349 = tosa.reshape %3346 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_597 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3350 = linalg.matmul {cast = #linalg.type_fn} ins(%3349, %3348 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_597 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3351 = tosa.reshape %3350 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3352 = tosa.add %3254, %3351 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3353 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_598 = arith.constant 2 : i32 + %3354 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3352 : tensor<1x40x4096xf32>) outs(%3353 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_598 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3355 = tosa.reduce_sum %3354 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3356 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3357 = tosa.reciprocal %3356 : (tensor<1xf32>) -> tensor<1xf32> + %3358 = tosa.mul %3357, %3355 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3359 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3360 = tosa.add %3358, %3359 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3361 = tosa.rsqrt %3360 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3362 = tosa.mul %3352, %3361 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3363 = tosa.reshape %arg284 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3364 = tosa.mul %3363, %3362 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3365 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3366 = tosa.transpose %arg285, %3365 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3367 = tosa.reshape %3364 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_599 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3368 = linalg.matmul {cast = #linalg.type_fn} ins(%3367, %3366 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_599 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3369 = tosa.reshape %3368 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3370 = tosa.sigmoid %3369 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3371 = tosa.mul %3369, %3370 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3372 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3373 = tosa.transpose %arg286, %3372 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3374 = tosa.reshape %3364 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_600 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3375 = linalg.matmul {cast = #linalg.type_fn} ins(%3374, %3373 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_600 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3376 = tosa.reshape %3375 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3377 = tosa.mul %3371, %3376 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3378 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3379 = tosa.transpose %arg287, %3378 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %3380 = tosa.reshape %3377 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_601 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3381 = linalg.matmul {cast = #linalg.type_fn} ins(%3380, %3379 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_601 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3382 = tosa.reshape %3381 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3383 = tosa.add %3352, %3382 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3384 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_602 = arith.constant 2 : i32 + %3385 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3383 : tensor<1x40x4096xf32>) outs(%3384 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_602 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3386 = tosa.reduce_sum %3385 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3387 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3388 = tosa.reciprocal %3387 : (tensor<1xf32>) -> tensor<1xf32> + %3389 = tosa.mul %3388, %3386 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3390 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3391 = tosa.add %3389, %3390 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3392 = tosa.rsqrt %3391 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3393 = tosa.mul %3383, %3392 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3394 = tosa.reshape %arg288 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3395 = tosa.mul %3394, %3393 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3396 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3397 = tosa.transpose %arg289, %3396 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3398 = tosa.reshape %3395 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_603 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3399 = linalg.matmul {cast = #linalg.type_fn} ins(%3398, %3397 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_603 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3400 = tosa.reshape %3399 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3401 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3402 = tosa.transpose %arg290, %3401 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3403 = tosa.reshape %3395 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_604 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3404 = linalg.matmul {cast = #linalg.type_fn} ins(%3403, %3402 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_604 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3405 = tosa.reshape %3404 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3406 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3407 = tosa.transpose %arg291, %3406 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3408 = tosa.reshape %3395 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_605 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3409 = linalg.matmul {cast = #linalg.type_fn} ins(%3408, %3407 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_605 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3410 = tosa.reshape %3409 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3411 = tosa.reshape %3400 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3412 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3413 = tosa.transpose %3411, %3412 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3414 = tosa.reshape %3405 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3415 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3416 = tosa.transpose %3414, %3415 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3417 = tosa.reshape %3410 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3418 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3419 = tosa.transpose %3417, %3418 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_606 = tensor.extract_slice %arg292[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_607 = tensor.extract_slice %extracted_slice_606[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_608 = tensor.extract_slice %extracted_slice_607[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_609 = tensor.extract_slice %arg293[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_610 = tensor.extract_slice %extracted_slice_609[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_611 = tensor.extract_slice %extracted_slice_610[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %3420 = tensor.empty() : tensor<1x40x128xf32> + %3421 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_608 : tensor<1x1x40x128xf32>) outs(%3420 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3422 = tensor.empty() : tensor<40x128xf32> + %3423 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3421 : tensor<1x40x128xf32>) outs(%3422 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3424 = tensor.empty() : tensor<1x40x128xf32> + %3425 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_611 : tensor<1x1x40x128xf32>) outs(%3424 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3426 = tensor.empty() : tensor<40x128xf32> + %3427 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3425 : tensor<1x40x128xf32>) outs(%3426 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3428 = tensor.empty() : tensor<1x40x128xf32> + %3429 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3428 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3423[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3430 = tosa.reshape %3429 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3431 = tensor.empty() : tensor<1x40x128xf32> + %3432 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3431 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3427[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3433 = tosa.reshape %3432 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3434 = tosa.mul %3413, %3430 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_612 = tensor.extract_slice %3413[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_613 = tensor.extract_slice %3413[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3435 = tosa.negate %extracted_slice_613 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3436 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_614 = tensor.insert_slice %3435 into %3436[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_615 = tensor.insert_slice %extracted_slice_612 into %inserted_slice_614[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3437 = tosa.mul %inserted_slice_615, %3433 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3438 = tosa.add %3434, %3437 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3439 = tosa.mul %3416, %3430 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_616 = tensor.extract_slice %3416[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_617 = tensor.extract_slice %3416[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3440 = tosa.negate %extracted_slice_617 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3441 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_618 = tensor.insert_slice %3440 into %3441[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_619 = tensor.insert_slice %extracted_slice_616 into %inserted_slice_618[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3442 = tosa.mul %inserted_slice_619, %3433 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3443 = tosa.add %3439, %3442 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3444 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3445 = tosa.transpose %3443, %3444 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %3446 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3447 = tosa.add %3438, %3446 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3448 = tosa.reshape %3447 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3449 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %3450 = tosa.add %3445, %3449 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %3451 = tosa.reshape %3450 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %3452 = tosa.matmul %3448, %3451 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %3453 = tosa.reshape %3452 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3454 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3455 = tosa.reciprocal %3454 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3456 = tosa.mul %3453, %3455 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3457 = tosa.add %3456, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %3458 = tosa.reduce_max %3457 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3459 = tosa.sub %3457, %3458 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3460 = tosa.exp %3459 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3461 = tosa.reduce_sum %3460 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3462 = tosa.reciprocal %3461 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %3463 = tosa.mul %3460, %3462 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3464 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3465 = tosa.add %3463, %3464 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3466 = tosa.reshape %3465 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %3467 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3468 = tosa.add %3419, %3467 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3469 = tosa.reshape %3468 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3470 = tosa.matmul %3466, %3469 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %3471 = tosa.reshape %3470 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3472 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3473 = tosa.transpose %3471, %3472 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %3474 = tosa.identity %3473 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %3475 = tosa.reshape %3474 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %3476 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3477 = tosa.transpose %arg294, %3476 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3478 = tosa.reshape %3475 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_620 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3479 = linalg.matmul {cast = #linalg.type_fn} ins(%3478, %3477 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_620 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3480 = tosa.reshape %3479 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3481 = tosa.add %3383, %3480 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3482 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_621 = arith.constant 2 : i32 + %3483 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3481 : tensor<1x40x4096xf32>) outs(%3482 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_621 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3484 = tosa.reduce_sum %3483 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3485 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3486 = tosa.reciprocal %3485 : (tensor<1xf32>) -> tensor<1xf32> + %3487 = tosa.mul %3486, %3484 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3488 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3489 = tosa.add %3487, %3488 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3490 = tosa.rsqrt %3489 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3491 = tosa.mul %3481, %3490 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3492 = tosa.reshape %arg295 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3493 = tosa.mul %3492, %3491 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3494 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3495 = tosa.transpose %arg296, %3494 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3496 = tosa.reshape %3493 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_622 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3497 = linalg.matmul {cast = #linalg.type_fn} ins(%3496, %3495 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_622 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3498 = tosa.reshape %3497 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3499 = tosa.sigmoid %3498 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3500 = tosa.mul %3498, %3499 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3501 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3502 = tosa.transpose %arg297, %3501 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3503 = tosa.reshape %3493 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_623 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3504 = linalg.matmul {cast = #linalg.type_fn} ins(%3503, %3502 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_623 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3505 = tosa.reshape %3504 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3506 = tosa.mul %3500, %3505 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3507 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3508 = tosa.transpose %arg298, %3507 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %3509 = tosa.reshape %3506 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_624 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3510 = linalg.matmul {cast = #linalg.type_fn} ins(%3509, %3508 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_624 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3511 = tosa.reshape %3510 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3512 = tosa.add %3481, %3511 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3513 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_625 = arith.constant 2 : i32 + %3514 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3512 : tensor<1x40x4096xf32>) outs(%3513 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_625 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3515 = tosa.reduce_sum %3514 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3516 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3517 = tosa.reciprocal %3516 : (tensor<1xf32>) -> tensor<1xf32> + %3518 = tosa.mul %3517, %3515 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3519 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3520 = tosa.add %3518, %3519 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3521 = tosa.rsqrt %3520 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3522 = tosa.mul %3512, %3521 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3523 = tosa.reshape %arg299 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3524 = tosa.mul %3523, %3522 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3525 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3526 = tosa.transpose %arg300, %3525 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3527 = tosa.reshape %3524 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_626 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3528 = linalg.matmul {cast = #linalg.type_fn} ins(%3527, %3526 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_626 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3529 = tosa.reshape %3528 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3530 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3531 = tosa.transpose %arg301, %3530 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3532 = tosa.reshape %3524 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_627 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3533 = linalg.matmul {cast = #linalg.type_fn} ins(%3532, %3531 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_627 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3534 = tosa.reshape %3533 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3535 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3536 = tosa.transpose %arg302, %3535 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3537 = tosa.reshape %3524 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_628 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3538 = linalg.matmul {cast = #linalg.type_fn} ins(%3537, %3536 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_628 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3539 = tosa.reshape %3538 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3540 = tosa.reshape %3529 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3541 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3542 = tosa.transpose %3540, %3541 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3543 = tosa.reshape %3534 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3544 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3545 = tosa.transpose %3543, %3544 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3546 = tosa.reshape %3539 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3547 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3548 = tosa.transpose %3546, %3547 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_629 = tensor.extract_slice %arg303[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_630 = tensor.extract_slice %extracted_slice_629[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_631 = tensor.extract_slice %extracted_slice_630[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_632 = tensor.extract_slice %arg304[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_633 = tensor.extract_slice %extracted_slice_632[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_634 = tensor.extract_slice %extracted_slice_633[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %3549 = tensor.empty() : tensor<1x40x128xf32> + %3550 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_631 : tensor<1x1x40x128xf32>) outs(%3549 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3551 = tensor.empty() : tensor<40x128xf32> + %3552 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3550 : tensor<1x40x128xf32>) outs(%3551 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3553 = tensor.empty() : tensor<1x40x128xf32> + %3554 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_634 : tensor<1x1x40x128xf32>) outs(%3553 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3555 = tensor.empty() : tensor<40x128xf32> + %3556 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3554 : tensor<1x40x128xf32>) outs(%3555 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3557 = tensor.empty() : tensor<1x40x128xf32> + %3558 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3557 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3552[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3559 = tosa.reshape %3558 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3560 = tensor.empty() : tensor<1x40x128xf32> + %3561 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3560 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3556[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3562 = tosa.reshape %3561 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3563 = tosa.mul %3542, %3559 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_635 = tensor.extract_slice %3542[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_636 = tensor.extract_slice %3542[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3564 = tosa.negate %extracted_slice_636 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3565 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_637 = tensor.insert_slice %3564 into %3565[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_638 = tensor.insert_slice %extracted_slice_635 into %inserted_slice_637[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3566 = tosa.mul %inserted_slice_638, %3562 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3567 = tosa.add %3563, %3566 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3568 = tosa.mul %3545, %3559 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_639 = tensor.extract_slice %3545[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_640 = tensor.extract_slice %3545[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3569 = tosa.negate %extracted_slice_640 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3570 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_641 = tensor.insert_slice %3569 into %3570[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_642 = tensor.insert_slice %extracted_slice_639 into %inserted_slice_641[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3571 = tosa.mul %inserted_slice_642, %3562 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3572 = tosa.add %3568, %3571 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3573 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3574 = tosa.transpose %3572, %3573 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %3575 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3576 = tosa.add %3567, %3575 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3577 = tosa.reshape %3576 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3578 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %3579 = tosa.add %3574, %3578 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %3580 = tosa.reshape %3579 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %3581 = tosa.matmul %3577, %3580 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %3582 = tosa.reshape %3581 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3583 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3584 = tosa.reciprocal %3583 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3585 = tosa.mul %3582, %3584 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3586 = tosa.add %3585, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %3587 = tosa.reduce_max %3586 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3588 = tosa.sub %3586, %3587 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3589 = tosa.exp %3588 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3590 = tosa.reduce_sum %3589 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3591 = tosa.reciprocal %3590 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %3592 = tosa.mul %3589, %3591 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3593 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3594 = tosa.add %3592, %3593 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3595 = tosa.reshape %3594 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %3596 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3597 = tosa.add %3548, %3596 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3598 = tosa.reshape %3597 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3599 = tosa.matmul %3595, %3598 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %3600 = tosa.reshape %3599 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3601 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3602 = tosa.transpose %3600, %3601 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %3603 = tosa.identity %3602 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %3604 = tosa.reshape %3603 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %3605 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3606 = tosa.transpose %arg305, %3605 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3607 = tosa.reshape %3604 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_643 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3608 = linalg.matmul {cast = #linalg.type_fn} ins(%3607, %3606 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_643 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3609 = tosa.reshape %3608 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3610 = tosa.add %3512, %3609 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3611 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_644 = arith.constant 2 : i32 + %3612 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3610 : tensor<1x40x4096xf32>) outs(%3611 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_644 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3613 = tosa.reduce_sum %3612 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3614 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3615 = tosa.reciprocal %3614 : (tensor<1xf32>) -> tensor<1xf32> + %3616 = tosa.mul %3615, %3613 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3617 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3618 = tosa.add %3616, %3617 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3619 = tosa.rsqrt %3618 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3620 = tosa.mul %3610, %3619 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3621 = tosa.reshape %arg306 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3622 = tosa.mul %3621, %3620 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3623 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3624 = tosa.transpose %arg307, %3623 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3625 = tosa.reshape %3622 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_645 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3626 = linalg.matmul {cast = #linalg.type_fn} ins(%3625, %3624 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_645 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3627 = tosa.reshape %3626 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3628 = tosa.sigmoid %3627 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3629 = tosa.mul %3627, %3628 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3630 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3631 = tosa.transpose %arg308, %3630 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3632 = tosa.reshape %3622 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_646 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3633 = linalg.matmul {cast = #linalg.type_fn} ins(%3632, %3631 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_646 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3634 = tosa.reshape %3633 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3635 = tosa.mul %3629, %3634 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3636 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3637 = tosa.transpose %arg309, %3636 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %3638 = tosa.reshape %3635 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_647 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3639 = linalg.matmul {cast = #linalg.type_fn} ins(%3638, %3637 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_647 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3640 = tosa.reshape %3639 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3641 = tosa.add %3610, %3640 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3642 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_648 = arith.constant 2 : i32 + %3643 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3641 : tensor<1x40x4096xf32>) outs(%3642 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_648 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3644 = tosa.reduce_sum %3643 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3645 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3646 = tosa.reciprocal %3645 : (tensor<1xf32>) -> tensor<1xf32> + %3647 = tosa.mul %3646, %3644 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3648 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3649 = tosa.add %3647, %3648 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3650 = tosa.rsqrt %3649 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3651 = tosa.mul %3641, %3650 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3652 = tosa.reshape %arg310 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3653 = tosa.mul %3652, %3651 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3654 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3655 = tosa.transpose %arg311, %3654 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3656 = tosa.reshape %3653 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_649 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3657 = linalg.matmul {cast = #linalg.type_fn} ins(%3656, %3655 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_649 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3658 = tosa.reshape %3657 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3659 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3660 = tosa.transpose %arg312, %3659 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3661 = tosa.reshape %3653 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_650 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3662 = linalg.matmul {cast = #linalg.type_fn} ins(%3661, %3660 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_650 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3663 = tosa.reshape %3662 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3664 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3665 = tosa.transpose %arg313, %3664 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3666 = tosa.reshape %3653 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_651 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3667 = linalg.matmul {cast = #linalg.type_fn} ins(%3666, %3665 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_651 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3668 = tosa.reshape %3667 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3669 = tosa.reshape %3658 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3670 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3671 = tosa.transpose %3669, %3670 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3672 = tosa.reshape %3663 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3673 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3674 = tosa.transpose %3672, %3673 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3675 = tosa.reshape %3668 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3676 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3677 = tosa.transpose %3675, %3676 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_652 = tensor.extract_slice %arg314[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_653 = tensor.extract_slice %extracted_slice_652[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_654 = tensor.extract_slice %extracted_slice_653[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_655 = tensor.extract_slice %arg315[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_656 = tensor.extract_slice %extracted_slice_655[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_657 = tensor.extract_slice %extracted_slice_656[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %3678 = tensor.empty() : tensor<1x40x128xf32> + %3679 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_654 : tensor<1x1x40x128xf32>) outs(%3678 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3680 = tensor.empty() : tensor<40x128xf32> + %3681 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3679 : tensor<1x40x128xf32>) outs(%3680 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3682 = tensor.empty() : tensor<1x40x128xf32> + %3683 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_657 : tensor<1x1x40x128xf32>) outs(%3682 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3684 = tensor.empty() : tensor<40x128xf32> + %3685 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3683 : tensor<1x40x128xf32>) outs(%3684 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3686 = tensor.empty() : tensor<1x40x128xf32> + %3687 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3686 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3681[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3688 = tosa.reshape %3687 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3689 = tensor.empty() : tensor<1x40x128xf32> + %3690 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3689 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3685[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3691 = tosa.reshape %3690 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3692 = tosa.mul %3671, %3688 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_658 = tensor.extract_slice %3671[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_659 = tensor.extract_slice %3671[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3693 = tosa.negate %extracted_slice_659 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3694 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_660 = tensor.insert_slice %3693 into %3694[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_661 = tensor.insert_slice %extracted_slice_658 into %inserted_slice_660[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3695 = tosa.mul %inserted_slice_661, %3691 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3696 = tosa.add %3692, %3695 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3697 = tosa.mul %3674, %3688 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_662 = tensor.extract_slice %3674[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_663 = tensor.extract_slice %3674[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3698 = tosa.negate %extracted_slice_663 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3699 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_664 = tensor.insert_slice %3698 into %3699[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_665 = tensor.insert_slice %extracted_slice_662 into %inserted_slice_664[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3700 = tosa.mul %inserted_slice_665, %3691 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3701 = tosa.add %3697, %3700 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3702 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3703 = tosa.transpose %3701, %3702 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %3704 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3705 = tosa.add %3696, %3704 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3706 = tosa.reshape %3705 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3707 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %3708 = tosa.add %3703, %3707 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %3709 = tosa.reshape %3708 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %3710 = tosa.matmul %3706, %3709 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %3711 = tosa.reshape %3710 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3712 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3713 = tosa.reciprocal %3712 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3714 = tosa.mul %3711, %3713 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3715 = tosa.add %3714, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %3716 = tosa.reduce_max %3715 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3717 = tosa.sub %3715, %3716 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3718 = tosa.exp %3717 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3719 = tosa.reduce_sum %3718 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3720 = tosa.reciprocal %3719 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %3721 = tosa.mul %3718, %3720 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3722 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3723 = tosa.add %3721, %3722 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3724 = tosa.reshape %3723 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %3725 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3726 = tosa.add %3677, %3725 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3727 = tosa.reshape %3726 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3728 = tosa.matmul %3724, %3727 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %3729 = tosa.reshape %3728 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3730 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3731 = tosa.transpose %3729, %3730 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %3732 = tosa.identity %3731 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %3733 = tosa.reshape %3732 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %3734 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3735 = tosa.transpose %arg316, %3734 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3736 = tosa.reshape %3733 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_666 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3737 = linalg.matmul {cast = #linalg.type_fn} ins(%3736, %3735 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_666 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3738 = tosa.reshape %3737 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3739 = tosa.add %3641, %3738 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3740 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_667 = arith.constant 2 : i32 + %3741 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3739 : tensor<1x40x4096xf32>) outs(%3740 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_667 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3742 = tosa.reduce_sum %3741 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3743 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3744 = tosa.reciprocal %3743 : (tensor<1xf32>) -> tensor<1xf32> + %3745 = tosa.mul %3744, %3742 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3746 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3747 = tosa.add %3745, %3746 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3748 = tosa.rsqrt %3747 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3749 = tosa.mul %3739, %3748 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3750 = tosa.reshape %arg317 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3751 = tosa.mul %3750, %3749 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3752 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3753 = tosa.transpose %arg318, %3752 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3754 = tosa.reshape %3751 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_668 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3755 = linalg.matmul {cast = #linalg.type_fn} ins(%3754, %3753 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_668 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3756 = tosa.reshape %3755 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3757 = tosa.sigmoid %3756 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3758 = tosa.mul %3756, %3757 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3759 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3760 = tosa.transpose %arg319, %3759 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3761 = tosa.reshape %3751 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_669 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3762 = linalg.matmul {cast = #linalg.type_fn} ins(%3761, %3760 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_669 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3763 = tosa.reshape %3762 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3764 = tosa.mul %3758, %3763 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3765 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3766 = tosa.transpose %arg320, %3765 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %3767 = tosa.reshape %3764 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_670 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3768 = linalg.matmul {cast = #linalg.type_fn} ins(%3767, %3766 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_670 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3769 = tosa.reshape %3768 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3770 = tosa.add %3739, %3769 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3771 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_671 = arith.constant 2 : i32 + %3772 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3770 : tensor<1x40x4096xf32>) outs(%3771 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_671 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3773 = tosa.reduce_sum %3772 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3774 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3775 = tosa.reciprocal %3774 : (tensor<1xf32>) -> tensor<1xf32> + %3776 = tosa.mul %3775, %3773 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3777 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3778 = tosa.add %3776, %3777 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3779 = tosa.rsqrt %3778 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3780 = tosa.mul %3770, %3779 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3781 = tosa.reshape %arg321 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3782 = tosa.mul %3781, %3780 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3783 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3784 = tosa.transpose %arg322, %3783 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3785 = tosa.reshape %3782 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_672 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3786 = linalg.matmul {cast = #linalg.type_fn} ins(%3785, %3784 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_672 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3787 = tosa.reshape %3786 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3788 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3789 = tosa.transpose %arg323, %3788 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3790 = tosa.reshape %3782 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_673 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3791 = linalg.matmul {cast = #linalg.type_fn} ins(%3790, %3789 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_673 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3792 = tosa.reshape %3791 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3793 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3794 = tosa.transpose %arg324, %3793 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3795 = tosa.reshape %3782 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_674 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3796 = linalg.matmul {cast = #linalg.type_fn} ins(%3795, %3794 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_674 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3797 = tosa.reshape %3796 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3798 = tosa.reshape %3787 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3799 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3800 = tosa.transpose %3798, %3799 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3801 = tosa.reshape %3792 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3802 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3803 = tosa.transpose %3801, %3802 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3804 = tosa.reshape %3797 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3805 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3806 = tosa.transpose %3804, %3805 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_675 = tensor.extract_slice %arg325[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_676 = tensor.extract_slice %extracted_slice_675[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_677 = tensor.extract_slice %extracted_slice_676[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_678 = tensor.extract_slice %arg326[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_679 = tensor.extract_slice %extracted_slice_678[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_680 = tensor.extract_slice %extracted_slice_679[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %3807 = tensor.empty() : tensor<1x40x128xf32> + %3808 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_677 : tensor<1x1x40x128xf32>) outs(%3807 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3809 = tensor.empty() : tensor<40x128xf32> + %3810 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3808 : tensor<1x40x128xf32>) outs(%3809 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3811 = tensor.empty() : tensor<1x40x128xf32> + %3812 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_680 : tensor<1x1x40x128xf32>) outs(%3811 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3813 = tensor.empty() : tensor<40x128xf32> + %3814 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3812 : tensor<1x40x128xf32>) outs(%3813 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3815 = tensor.empty() : tensor<1x40x128xf32> + %3816 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3815 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3810[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3817 = tosa.reshape %3816 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3818 = tensor.empty() : tensor<1x40x128xf32> + %3819 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3818 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3814[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3820 = tosa.reshape %3819 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3821 = tosa.mul %3800, %3817 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_681 = tensor.extract_slice %3800[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_682 = tensor.extract_slice %3800[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3822 = tosa.negate %extracted_slice_682 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3823 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_683 = tensor.insert_slice %3822 into %3823[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_684 = tensor.insert_slice %extracted_slice_681 into %inserted_slice_683[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3824 = tosa.mul %inserted_slice_684, %3820 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3825 = tosa.add %3821, %3824 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3826 = tosa.mul %3803, %3817 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_685 = tensor.extract_slice %3803[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_686 = tensor.extract_slice %3803[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3827 = tosa.negate %extracted_slice_686 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3828 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_687 = tensor.insert_slice %3827 into %3828[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_688 = tensor.insert_slice %extracted_slice_685 into %inserted_slice_687[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3829 = tosa.mul %inserted_slice_688, %3820 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3830 = tosa.add %3826, %3829 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3831 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3832 = tosa.transpose %3830, %3831 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %3833 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3834 = tosa.add %3825, %3833 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3835 = tosa.reshape %3834 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3836 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %3837 = tosa.add %3832, %3836 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %3838 = tosa.reshape %3837 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %3839 = tosa.matmul %3835, %3838 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %3840 = tosa.reshape %3839 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3841 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3842 = tosa.reciprocal %3841 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3843 = tosa.mul %3840, %3842 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3844 = tosa.add %3843, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %3845 = tosa.reduce_max %3844 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3846 = tosa.sub %3844, %3845 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3847 = tosa.exp %3846 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3848 = tosa.reduce_sum %3847 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3849 = tosa.reciprocal %3848 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %3850 = tosa.mul %3847, %3849 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3851 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3852 = tosa.add %3850, %3851 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3853 = tosa.reshape %3852 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %3854 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3855 = tosa.add %3806, %3854 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3856 = tosa.reshape %3855 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3857 = tosa.matmul %3853, %3856 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %3858 = tosa.reshape %3857 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3859 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3860 = tosa.transpose %3858, %3859 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %3861 = tosa.identity %3860 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %3862 = tosa.reshape %3861 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %3863 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3864 = tosa.transpose %arg327, %3863 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3865 = tosa.reshape %3862 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_689 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3866 = linalg.matmul {cast = #linalg.type_fn} ins(%3865, %3864 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_689 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3867 = tosa.reshape %3866 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3868 = tosa.add %3770, %3867 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3869 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_690 = arith.constant 2 : i32 + %3870 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3868 : tensor<1x40x4096xf32>) outs(%3869 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_690 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3871 = tosa.reduce_sum %3870 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3872 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3873 = tosa.reciprocal %3872 : (tensor<1xf32>) -> tensor<1xf32> + %3874 = tosa.mul %3873, %3871 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3875 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3876 = tosa.add %3874, %3875 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3877 = tosa.rsqrt %3876 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3878 = tosa.mul %3868, %3877 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3879 = tosa.reshape %arg328 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3880 = tosa.mul %3879, %3878 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3881 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3882 = tosa.transpose %arg329, %3881 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3883 = tosa.reshape %3880 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_691 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3884 = linalg.matmul {cast = #linalg.type_fn} ins(%3883, %3882 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_691 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3885 = tosa.reshape %3884 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3886 = tosa.sigmoid %3885 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3887 = tosa.mul %3885, %3886 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3888 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3889 = tosa.transpose %arg330, %3888 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %3890 = tosa.reshape %3880 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_692 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %3891 = linalg.matmul {cast = #linalg.type_fn} ins(%3890, %3889 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_692 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %3892 = tosa.reshape %3891 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %3893 = tosa.mul %3887, %3892 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %3894 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3895 = tosa.transpose %arg331, %3894 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %3896 = tosa.reshape %3893 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_693 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3897 = linalg.matmul {cast = #linalg.type_fn} ins(%3896, %3895 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_693 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3898 = tosa.reshape %3897 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3899 = tosa.add %3868, %3898 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3900 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_694 = arith.constant 2 : i32 + %3901 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3899 : tensor<1x40x4096xf32>) outs(%3900 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_694 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %3902 = tosa.reduce_sum %3901 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %3903 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %3904 = tosa.reciprocal %3903 : (tensor<1xf32>) -> tensor<1xf32> + %3905 = tosa.mul %3904, %3902 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3906 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %3907 = tosa.add %3905, %3906 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3908 = tosa.rsqrt %3907 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %3909 = tosa.mul %3899, %3908 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %3910 = tosa.reshape %arg332 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %3911 = tosa.mul %3910, %3909 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3912 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3913 = tosa.transpose %arg333, %3912 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3914 = tosa.reshape %3911 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_695 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3915 = linalg.matmul {cast = #linalg.type_fn} ins(%3914, %3913 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_695 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3916 = tosa.reshape %3915 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3917 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3918 = tosa.transpose %arg334, %3917 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3919 = tosa.reshape %3911 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_696 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3920 = linalg.matmul {cast = #linalg.type_fn} ins(%3919, %3918 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_696 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3921 = tosa.reshape %3920 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3922 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3923 = tosa.transpose %arg335, %3922 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3924 = tosa.reshape %3911 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_697 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3925 = linalg.matmul {cast = #linalg.type_fn} ins(%3924, %3923 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_697 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3926 = tosa.reshape %3925 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3927 = tosa.reshape %3916 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3928 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3929 = tosa.transpose %3927, %3928 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3930 = tosa.reshape %3921 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3931 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3932 = tosa.transpose %3930, %3931 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %3933 = tosa.reshape %3926 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %3934 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3935 = tosa.transpose %3933, %3934 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_698 = tensor.extract_slice %arg336[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_699 = tensor.extract_slice %extracted_slice_698[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_700 = tensor.extract_slice %extracted_slice_699[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_701 = tensor.extract_slice %arg337[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_702 = tensor.extract_slice %extracted_slice_701[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_703 = tensor.extract_slice %extracted_slice_702[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %3936 = tensor.empty() : tensor<1x40x128xf32> + %3937 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_700 : tensor<1x1x40x128xf32>) outs(%3936 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3938 = tensor.empty() : tensor<40x128xf32> + %3939 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3937 : tensor<1x40x128xf32>) outs(%3938 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3940 = tensor.empty() : tensor<1x40x128xf32> + %3941 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_703 : tensor<1x1x40x128xf32>) outs(%3940 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %3942 = tensor.empty() : tensor<40x128xf32> + %3943 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%3941 : tensor<1x40x128xf32>) outs(%3942 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %3944 = tensor.empty() : tensor<1x40x128xf32> + %3945 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3944 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3939[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3946 = tosa.reshape %3945 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3947 = tensor.empty() : tensor<1x40x128xf32> + %3948 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%3947 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %3943[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %3949 = tosa.reshape %3948 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %3950 = tosa.mul %3929, %3946 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_704 = tensor.extract_slice %3929[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_705 = tensor.extract_slice %3929[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3951 = tosa.negate %extracted_slice_705 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3952 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_706 = tensor.insert_slice %3951 into %3952[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_707 = tensor.insert_slice %extracted_slice_704 into %inserted_slice_706[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3953 = tosa.mul %inserted_slice_707, %3949 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3954 = tosa.add %3950, %3953 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3955 = tosa.mul %3932, %3946 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_708 = tensor.extract_slice %3932[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_709 = tensor.extract_slice %3932[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %3956 = tosa.negate %extracted_slice_709 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %3957 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_710 = tensor.insert_slice %3956 into %3957[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_711 = tensor.insert_slice %extracted_slice_708 into %inserted_slice_710[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %3958 = tosa.mul %inserted_slice_711, %3949 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %3959 = tosa.add %3955, %3958 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3960 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3961 = tosa.transpose %3959, %3960 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %3962 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3963 = tosa.add %3954, %3962 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3964 = tosa.reshape %3963 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3965 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %3966 = tosa.add %3961, %3965 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %3967 = tosa.reshape %3966 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %3968 = tosa.matmul %3964, %3967 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %3969 = tosa.reshape %3968 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3970 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3971 = tosa.reciprocal %3970 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3972 = tosa.mul %3969, %3971 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3973 = tosa.add %3972, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %3974 = tosa.reduce_max %3973 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3975 = tosa.sub %3973, %3974 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3976 = tosa.exp %3975 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3977 = tosa.reduce_sum %3976 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %3978 = tosa.reciprocal %3977 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %3979 = tosa.mul %3976, %3978 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %3980 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3981 = tosa.add %3979, %3980 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %3982 = tosa.reshape %3981 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %3983 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %3984 = tosa.add %3935, %3983 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3985 = tosa.reshape %3984 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %3986 = tosa.matmul %3982, %3985 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %3987 = tosa.reshape %3986 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %3988 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %3989 = tosa.transpose %3987, %3988 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %3990 = tosa.identity %3989 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %3991 = tosa.reshape %3990 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %3992 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %3993 = tosa.transpose %arg338, %3992 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %3994 = tosa.reshape %3991 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_712 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %3995 = linalg.matmul {cast = #linalg.type_fn} ins(%3994, %3993 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_712 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %3996 = tosa.reshape %3995 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %3997 = tosa.add %3899, %3996 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %3998 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_713 = arith.constant 2 : i32 + %3999 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%3997 : tensor<1x40x4096xf32>) outs(%3998 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_713 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %4000 = tosa.reduce_sum %3999 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %4001 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %4002 = tosa.reciprocal %4001 : (tensor<1xf32>) -> tensor<1xf32> + %4003 = tosa.mul %4002, %4000 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %4004 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %4005 = tosa.add %4003, %4004 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %4006 = tosa.rsqrt %4005 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %4007 = tosa.mul %3997, %4006 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %4008 = tosa.reshape %arg339 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %4009 = tosa.mul %4008, %4007 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %4010 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %4011 = tosa.transpose %arg340, %4010 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %4012 = tosa.reshape %4009 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_714 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %4013 = linalg.matmul {cast = #linalg.type_fn} ins(%4012, %4011 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_714 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %4014 = tosa.reshape %4013 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %4015 = tosa.sigmoid %4014 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %4016 = tosa.mul %4014, %4015 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %4017 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %4018 = tosa.transpose %arg341, %4017 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %4019 = tosa.reshape %4009 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_715 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %4020 = linalg.matmul {cast = #linalg.type_fn} ins(%4019, %4018 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_715 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %4021 = tosa.reshape %4020 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %4022 = tosa.mul %4016, %4021 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %4023 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %4024 = tosa.transpose %arg342, %4023 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %4025 = tosa.reshape %4022 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_716 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %4026 = linalg.matmul {cast = #linalg.type_fn} ins(%4025, %4024 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_716 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %4027 = tosa.reshape %4026 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %4028 = tosa.add %3997, %4027 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %4029 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_717 = arith.constant 2 : i32 + %4030 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%4028 : tensor<1x40x4096xf32>) outs(%4029 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_717 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %4031 = tosa.reduce_sum %4030 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %4032 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %4033 = tosa.reciprocal %4032 : (tensor<1xf32>) -> tensor<1xf32> + %4034 = tosa.mul %4033, %4031 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %4035 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %4036 = tosa.add %4034, %4035 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %4037 = tosa.rsqrt %4036 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %4038 = tosa.mul %4028, %4037 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %4039 = tosa.reshape %arg343 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %4040 = tosa.mul %4039, %4038 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %4041 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %4042 = tosa.transpose %arg344, %4041 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %4043 = tosa.reshape %4040 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_718 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %4044 = linalg.matmul {cast = #linalg.type_fn} ins(%4043, %4042 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_718 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %4045 = tosa.reshape %4044 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %4046 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %4047 = tosa.transpose %arg345, %4046 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %4048 = tosa.reshape %4040 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_719 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %4049 = linalg.matmul {cast = #linalg.type_fn} ins(%4048, %4047 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_719 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %4050 = tosa.reshape %4049 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %4051 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %4052 = tosa.transpose %arg346, %4051 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %4053 = tosa.reshape %4040 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_720 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %4054 = linalg.matmul {cast = #linalg.type_fn} ins(%4053, %4052 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_720 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %4055 = tosa.reshape %4054 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %4056 = tosa.reshape %4045 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %4057 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %4058 = tosa.transpose %4056, %4057 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %4059 = tosa.reshape %4050 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %4060 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %4061 = tosa.transpose %4059, %4060 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %4062 = tosa.reshape %4055 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %4063 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %4064 = tosa.transpose %4062, %4063 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + %extracted_slice_721 = tensor.extract_slice %arg347[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_722 = tensor.extract_slice %extracted_slice_721[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_723 = tensor.extract_slice %extracted_slice_722[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_724 = tensor.extract_slice %arg348[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_725 = tensor.extract_slice %extracted_slice_724[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_726 = tensor.extract_slice %extracted_slice_725[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %4065 = tensor.empty() : tensor<1x40x128xf32> + %4066 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_723 : tensor<1x1x40x128xf32>) outs(%4065 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %4067 = tensor.empty() : tensor<40x128xf32> + %4068 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%4066 : tensor<1x40x128xf32>) outs(%4067 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %4069 = tensor.empty() : tensor<1x40x128xf32> + %4070 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_726 : tensor<1x1x40x128xf32>) outs(%4069 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %4071 = tensor.empty() : tensor<40x128xf32> + %4072 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%4070 : tensor<1x40x128xf32>) outs(%4071 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %4073 = tensor.empty() : tensor<1x40x128xf32> + %4074 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%4073 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %4068[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %4075 = tosa.reshape %4074 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %4076 = tensor.empty() : tensor<1x40x128xf32> + %4077 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%2 : tensor<1x40xi64>) outs(%4076 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %4072[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %4078 = tosa.reshape %4077 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %4079 = tosa.mul %4058, %4075 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_727 = tensor.extract_slice %4058[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_728 = tensor.extract_slice %4058[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %4080 = tosa.negate %extracted_slice_728 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %4081 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_729 = tensor.insert_slice %4080 into %4081[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_730 = tensor.insert_slice %extracted_slice_727 into %inserted_slice_729[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %4082 = tosa.mul %inserted_slice_730, %4078 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %4083 = tosa.add %4079, %4082 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %4084 = tosa.mul %4061, %4075 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_731 = tensor.extract_slice %4061[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_732 = tensor.extract_slice %4061[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %4085 = tosa.negate %extracted_slice_732 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %4086 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_733 = tensor.insert_slice %4085 into %4086[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_734 = tensor.insert_slice %extracted_slice_731 into %inserted_slice_733[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %4087 = tosa.mul %inserted_slice_734, %4078 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %4088 = tosa.add %4084, %4087 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %4089 = "tosa.const"() <{value = dense<[0, 1, 3, 2]> : tensor<4xi32>}> : () -> tensor<4xi32> + %4090 = tosa.transpose %4088, %4089 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x32x128x40xf32> + %4091 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %4092 = tosa.add %4083, %4091 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %4093 = tosa.reshape %4092 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %4094 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x128x40xf32>}> : () -> tensor<1x32x128x40xf32> + %4095 = tosa.add %4090, %4094 : (tensor<1x32x128x40xf32>, tensor<1x32x128x40xf32>) -> tensor<1x32x128x40xf32> + %4096 = tosa.reshape %4095 {new_shape = array} : (tensor<1x32x128x40xf32>) -> tensor<32x128x40xf32> + %4097 = tosa.matmul %4093, %4096 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %4098 = tosa.reshape %4097 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %4099 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %4100 = tosa.reciprocal %4099 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %4101 = tosa.mul %4098, %4100 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %4102 = tosa.add %4101, %29 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %4103 = tosa.reduce_max %4102 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %4104 = tosa.sub %4102, %4103 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %4105 = tosa.exp %4104 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %4106 = tosa.reduce_sum %4105 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %4107 = tosa.reciprocal %4106 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %4108 = tosa.mul %4105, %4107 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %4109 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %4110 = tosa.add %4108, %4109 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %4111 = tosa.reshape %4110 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %4112 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %4113 = tosa.add %4064, %4112 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %4114 = tosa.reshape %4113 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %4115 = tosa.matmul %4111, %4114 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %4116 = tosa.reshape %4115 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + %4117 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %4118 = tosa.transpose %4116, %4117 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> + %4119 = tosa.identity %4118 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> + %4120 = tosa.reshape %4119 {new_shape = array} : (tensor<1x40x32x128xf32>) -> tensor<1x40x4096xf32> + %4121 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %4122 = tosa.transpose %arg349, %4121 : (tensor<4096x4096xf32>, tensor<2xi32>) -> tensor<4096x4096xf32> + %4123 = tosa.reshape %4120 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_735 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %4124 = linalg.matmul {cast = #linalg.type_fn} ins(%4123, %4122 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_735 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %4125 = tosa.reshape %4124 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %4126 = tosa.add %4028, %4125 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %4127 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_736 = arith.constant 2 : i32 + %4128 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%4126 : tensor<1x40x4096xf32>) outs(%4127 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_736 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %4129 = tosa.reduce_sum %4128 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %4130 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %4131 = tosa.reciprocal %4130 : (tensor<1xf32>) -> tensor<1xf32> + %4132 = tosa.mul %4131, %4129 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %4133 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %4134 = tosa.add %4132, %4133 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %4135 = tosa.rsqrt %4134 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %4136 = tosa.mul %4126, %4135 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %4137 = tosa.reshape %arg350 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %4138 = tosa.mul %4137, %4136 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %4139 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %4140 = tosa.transpose %arg351, %4139 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %4141 = tosa.reshape %4138 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_737 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %4142 = linalg.matmul {cast = #linalg.type_fn} ins(%4141, %4140 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_737 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %4143 = tosa.reshape %4142 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %4144 = tosa.sigmoid %4143 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %4145 = tosa.mul %4143, %4144 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %4146 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %4147 = tosa.transpose %arg352, %4146 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %4148 = tosa.reshape %4138 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_738 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %4149 = linalg.matmul {cast = #linalg.type_fn} ins(%4148, %4147 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_738 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %4150 = tosa.reshape %4149 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %4151 = tosa.mul %4145, %4150 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %4152 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %4153 = tosa.transpose %arg353, %4152 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %4154 = tosa.reshape %4151 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_739 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %4155 = linalg.matmul {cast = #linalg.type_fn} ins(%4154, %4153 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_739 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %4156 = tosa.reshape %4155 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %4157 = tosa.add %4126, %4156 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %4158 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_740 = arith.constant 2 : i32 + %4159 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%4157 : tensor<1x40x4096xf32>) outs(%4158 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_740 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %4160 = tosa.reduce_sum %4159 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %4161 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %4162 = tosa.reciprocal %4161 : (tensor<1xf32>) -> tensor<1xf32> + %4163 = tosa.mul %4162, %4160 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %4164 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %4165 = tosa.add %4163, %4164 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %4166 = tosa.rsqrt %4165 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %4167 = tosa.mul %4157, %4166 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %4168 = tosa.reshape %arg354 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %4169 = tosa.mul %4168, %4167 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %4170 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %4171 = tosa.transpose %arg355, %4170 : (tensor<32000x4096xf32>, tensor<2xi32>) -> tensor<4096x32000xf32> + %4172 = tosa.reshape %4169 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_741 = arith.constant dense<0.000000e+00> : tensor<40x32000xf32> + %4173 = linalg.matmul {cast = #linalg.type_fn} ins(%4172, %4171 : tensor<40x4096xf32>, tensor<4096x32000xf32>) outs(%cst_741 : tensor<40x32000xf32>) -> tensor<40x32000xf32> + %4174 = tosa.reshape %4173 {new_shape = array} : (tensor<40x32000xf32>) -> tensor<1x40x32000xf32> + return %4169, %4174 : tensor<1x40x4096xf32>, tensor<1x40x32000xf32> + } +} + diff --git a/examples/BuddyMatmul/.gitignore b/examples/BuddyMatmul/.gitignore new file mode 100644 index 000000000..80a243fa8 --- /dev/null +++ b/examples/BuddyMatmul/.gitignore @@ -0,0 +1 @@ +log.* diff --git a/examples/BuddyMatmul/linalg-batchmatmul-f32.mlir b/examples/BuddyMatmul/linalg-batchmatmul-f32.mlir new file mode 100644 index 000000000..58c914239 --- /dev/null +++ b/examples/BuddyMatmul/linalg-batchmatmul-f32.mlir @@ -0,0 +1,82 @@ +// RUN: buddy-opt %s \ +// RUN: -batchmatmul-optimize \ +// RUN: -convert-linalg-to-affine-loops \ +// RUN: -lower-affine \ +// RUN: -convert-vector-to-scf \ +// RUN: -convert-scf-to-cf \ +// RUN: -convert-vector-to-llvm \ +// RUN: -convert-math-to-llvm \ +// RUN: -convert-math-to-libm \ +// RUN: -convert-arith-to-llvm \ +// RUN: -convert-func-to-llvm \ +// RUN: -expand-strided-metadata \ +// RUN: -finalize-memref-to-llvm \ +// RUN: -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +func.func private @printMemrefF32(memref<*xf32>) + +func.func @batch_matmul(%arg0: memref, %arg1: memref, %arg2: memref) { + linalg.batch_matmul + ins(%arg0, %arg1 : memref, memref) + outs(%arg2 : memref) + return +} + +func.func @alloc_f32(%arg0: index, %arg1: index, %arg2: index, %arg4: f32) -> memref { + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %0 = memref.alloc(%arg0, %arg1, %arg2) : memref + scf.for %idx0 = %c0 to %arg0 step %c1 { + scf.for %idx1 = %c0 to %arg1 step %c1 { + scf.for %idx2 = %c0 to %arg2 step %c1 { + memref.store %arg4, %0[%idx0, %idx1, %idx2] : memref + } + } + } + return %0 : memref +} + +func.func @main(){ + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %c576 = arith.constant 576 : index + %c1024 = arith.constant 1024 : index + %c1000 = arith.constant 1000 : index + %f0 = arith.constant 0.0 : f32 + %f2 = arith.constant 2.0 : f32 + %f3 = arith.constant 3.0 : f32 + + %m0 = call @alloc_f32(%c1, %c1, %c576, %f2) : (index, index, index, f32) -> memref + %m1 = call @alloc_f32(%c1, %c576, %c1024, %f3) : (index, index, index, f32) -> memref + %m2 = call @alloc_f32(%c1, %c1, %c1024, %f0) : (index, index, index, f32) -> memref + + call @batch_matmul(%m0, %m1, %m2) : (memref, memref, memref) -> () + + %printed_m2 = memref.cast %m2 : memref to memref<*xf32> + + // CHECK: Unranked Memref base@ = {{.*}} rank = 3 offset = 0 sizes = [1, 1, 1024] strides = [1024, 1024, 1] data = + // CHECK-NEXT: [ + // CHECK: [ + // CHECK: [3456{{(, 3456)*}}] + call @printMemrefF32(%printed_m2) : (memref<*xf32>) -> () + + %m3 = call @alloc_f32(%c1, %c1, %c1024, %f2) : (index, index, index, f32) -> memref + %m4 = call @alloc_f32(%c1, %c1024, %c1000, %f3) : (index, index, index, f32) -> memref + %m5 = call @alloc_f32(%c1, %c1, %c1000, %f0) : (index, index, index, f32) -> memref + + call @batch_matmul(%m3, %m4, %m5) : (memref, memref, memref) -> () + + %printed_m5 = memref.cast %m5 : memref to memref<*xf32> + + // CHECK: Unranked Memref base@ = {{.*}} rank = 3 offset = 0 sizes = [1, 1, 1000] strides = [1000, 1000, 1] data = + // CHECK-NEXT: [ + // CHECK: [ + // CHECK: [6144{{(, 6144)*}}] + call @printMemrefF32(%printed_m5) : (memref<*xf32>) -> () + + return +} diff --git a/examples/BuddyMatmul/makefile b/examples/BuddyMatmul/makefile new file mode 100644 index 000000000..812e68b15 --- /dev/null +++ b/examples/BuddyMatmul/makefile @@ -0,0 +1,37 @@ +#!/bin/bash +BUDDY_BUILD_DIR := ../../build/ +LLVM_BUILD_DIR := ../../llvm/build/ +BUDDY_OPT := ${BUDDY_BUILD_DIR}/bin/buddy-opt +MLIR_OPT := ${LLVM_BUILD_DIR}/bin/mlir-opt +MLIR_TRANSLATE := ${LLVM_BUILD_DIR}/bin/mlir-translate +MLIR_CPU_RUNNER := ${LLVM_BUILD_DIR}/bin/mlir-cpu-runner +LLC := ${LLVM_BUILD_DIR}/bin/llc +OPT_FLAG := -O0 + +ifeq ($(shell uname),Linux) +MLIR_RUNNER_UTILS := ${LLVM_BUILD_DIR}/lib/libmlir_runner_utils.so +MLIR_C_RUNNER_UTILS := ${LLVM_BUILD_DIR}/lib/libmlir_c_runner_utils.so +MTRIPLE := x86_64-unknown-linux-gnu +else ifeq ($(shell uname),Darwin) +MLIR_RUNNER_UTILS := ${LLVM_BUILD_DIR}/lib/libmlir_runner_utils.dylib +MLIR_C_RUNNER_UTILS := ${LLVM_BUILD_DIR}/lib/libmlir_c_runner_utils.dylib +MTRIPLE := x86_64-apple-darwin +endif + +linalg-batchmatmul-f32-run: + @${BUDDY_OPT} ./linalg-batchmatmul-f32.mlir \ + -batchmatmul-optimize \ + -convert-linalg-to-affine-loops \ + -lower-affine \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ + -convert-vector-to-llvm \ + -convert-math-to-llvm \ + -convert-math-to-libm \ + -convert-arith-to-llvm \ + -convert-func-to-llvm \ + -expand-strided-metadata \ + -finalize-memref-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ + -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} diff --git a/examples/BuddyMobileNetV3/.gitignore b/examples/BuddyMobileNetV3/.gitignore new file mode 100644 index 000000000..9eb1b1736 --- /dev/null +++ b/examples/BuddyMobileNetV3/.gitignore @@ -0,0 +1,7 @@ +# model params file +arg0.data +arg1.data + +# model mlir file +forward.mlir +subgraph0.mlir diff --git a/examples/BuddyMobileNetV3/CMakeLists.txt b/examples/BuddyMobileNetV3/CMakeLists.txt new file mode 100644 index 000000000..8557058a6 --- /dev/null +++ b/examples/BuddyMobileNetV3/CMakeLists.txt @@ -0,0 +1,75 @@ +add_custom_command( + OUTPUT ${BUDDY_EXAMPLES_DIR}/BuddyMobileNetV3/arg0.data + ${BUDDY_EXAMPLES_DIR}/BuddyMobileNetV3/arg1.data + ${BUDDY_EXAMPLES_DIR}/BuddyMobileNetV3/forward.mlir + ${BUDDY_EXAMPLES_DIR}/BuddyMobileNetV3/subgraph0.mlir + COMMAND python3 ${BUDDY_EXAMPLES_DIR}/BuddyMobileNetV3/buddy-mobilenetv3-import.py + COMMENT "Generating forward.mlir, subgraph0.mlir and parameter files" +) + + +add_custom_command( + OUTPUT forward.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyMobileNetV3/forward.mlir + -pass-pipeline + "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith), \ + empty-tensor-to-alloc-tensor, convert-elementwise-to-linalg, arith-bufferize, \ + func.func(linalg-bufferize, tensor-bufferize), func-bufferize)" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt + -pass-pipeline + "builtin.module(func.func(buffer-deallocation-simplification, convert-linalg-to-loops), \ + eliminate-empty-tensors, func.func(llvm-request-c-wrappers), \ + convert-math-to-llvm, convert-math-to-libm, convert-scf-to-cf, \ + convert-arith-to-llvm, expand-strided-metadata, finalize-memref-to-llvm, \ + convert-func-to-llvm, reconcile-unrealized-casts)" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O3 + -o ${BUDDY_BINARY_DIR}/../examples/BuddyMobileNetV3/forward.o + DEPENDS ${BUDDY_EXAMPLES_DIR}/BuddyMobileNetV3/forward.mlir + COMMENT "Building forward.o" + VERBATIM) + + +add_custom_command( + OUTPUT subgraph0.o + COMMAND ${BUDDY_BINARY_DIR}/buddy-opt ${BUDDY_EXAMPLES_DIR}/BuddyMobileNetV3/subgraph0.mlir + -pass-pipeline + "builtin.module(func.func(tosa-to-linalg-named, tosa-to-arith, tosa-to-linalg, tosa-to-tensor))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -convert-elementwise-to-linalg + -func-bufferize-dynamic-offset + -arith-bufferize + -func-bufferize + -tensor-bufferize + -linalg-bufferize + -finalizing-bufferize + -convert-linalg-to-loops + -lower-affine + -convert-scf-to-cf + -llvm-request-c-wrappers + -convert-math-to-llvm + -convert-math-to-libm + -convert-arith-to-llvm + -convert-func-to-llvm + -expand-strided-metadata + -finalize-memref-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O3 + -o ${BUDDY_BINARY_DIR}/../examples/BuddyMobileNetV3/subgraph0.o + DEPENDS ${BUDDY_EXAMPLES_DIR}/BuddyMobileNetV3/subgraph0.mlir + buddy-opt + COMMENT "Building subgraph0.o" + VERBATIM) + +add_library(MOBILENETV3 STATIC subgraph0.o forward.o) + +SET_TARGET_PROPERTIES(MOBILENETV3 PROPERTIES LINKER_LANGUAGE C) + +add_executable(buddy-mobilenetv3-run buddy-mobilenetv3-main.cpp) +target_link_directories(buddy-mobilenetv3-run PRIVATE ${LLVM_LIBRARY_DIR}) + +set(BUDDY_MOBILENETV3_LIBS MOBILENETV3 mlir_c_runner_utils ${OpenCV_LIBS}) +target_link_libraries(buddy-mobilenetv3-run ${BUDDY_MOBILENETV3_LIBS}) diff --git a/examples/BuddyMobileNetV3/Labels.txt b/examples/BuddyMobileNetV3/Labels.txt new file mode 100644 index 000000000..fe811239d --- /dev/null +++ b/examples/BuddyMobileNetV3/Labels.txt @@ -0,0 +1,1001 @@ +background +tench +goldfish +great white shark +tiger shark +hammerhead +electric ray +stingray +cock +hen +ostrich +brambling +goldfinch +house finch +junco +indigo bunting +robin +bulbul +jay +magpie +chickadee +water ouzel +kite +bald eagle +vulture +great grey owl +European fire salamander +common newt +eft +spotted salamander +axolotl +bullfrog +tree frog +tailed frog +loggerhead +leatherback turtle +mud turtle +terrapin +box turtle +banded gecko +common iguana +American chameleon +whiptail +agama +frilled lizard +alligator lizard +Gila monster +green lizard +African chameleon +Komodo dragon +African crocodile +American alligator +triceratops +thunder snake +ringneck snake +hognose snake +green snake +king snake +garter snake +water snake +vine snake +night snake +boa constrictor +rock python +Indian cobra +green mamba +sea snake +horned viper +diamondback +sidewinder +trilobite +harvestman +scorpion +black and gold garden spider +barn spider +garden spider +black widow +tarantula +wolf spider +tick +centipede +black grouse +ptarmigan +ruffed grouse +prairie chicken +peacock +quail +partridge +African grey +macaw +sulphur-crested cockatoo +lorikeet +coucal +bee eater +hornbill +hummingbird +jacamar +toucan +drake +red-breasted merganser +goose +black swan +tusker +echidna +platypus +wallaby +koala +wombat +jellyfish +sea anemone +brain coral +flatworm +nematode +conch +snail +slug +sea slug +chiton +chambered nautilus +Dungeness crab +rock crab +fiddler crab +king crab +American lobster +spiny lobster +crayfish +hermit crab +isopod +white stork +black stork +spoonbill +flamingo +little blue heron +American egret +bittern +crane +limpkin +European gallinule +American coot +bustard +ruddy turnstone +red-backed sandpiper +redshank +dowitcher +oystercatcher +pelican +king penguin +albatross +grey whale +killer whale +dugong +sea lion +Chihuahua +Japanese spaniel +Maltese dog +Pekinese +Shih-Tzu +Blenheim spaniel +papillon +toy terrier +Rhodesian ridgeback +Afghan hound +basset +beagle +bloodhound +bluetick +black-and-tan coonhound +Walker hound +English foxhound +redbone +borzoi +Irish wolfhound +Italian greyhound +whippet +Ibizan hound +Norwegian elkhound +otterhound +Saluki +Scottish deerhound +Weimaraner +Staffordshire bullterrier +American Staffordshire terrier +Bedlington terrier +Border terrier +Kerry blue terrier +Irish terrier +Norfolk terrier +Norwich terrier +Yorkshire terrier +wire-haired fox terrier +Lakeland terrier +Sealyham terrier +Airedale +cairn +Australian terrier +Dandie Dinmont +Boston bull +miniature schnauzer +giant schnauzer +standard schnauzer +Scotch terrier +Tibetan terrier +silky terrier +soft-coated wheaten terrier +West Highland white terrier +Lhasa +flat-coated retriever +curly-coated retriever +golden retriever +Labrador retriever +Chesapeake Bay retriever +German short-haired pointer +vizsla +English setter +Irish setter +Gordon setter +Brittany spaniel +clumber +English springer +Welsh springer spaniel +cocker spaniel +Sussex spaniel +Irish water spaniel +kuvasz +schipperke +groenendael +malinois +briard +kelpie +komondor +Old English sheepdog +Shetland sheepdog +collie +Border collie +Bouvier des Flandres +Rottweiler +German shepherd +Doberman +miniature pinscher +Greater Swiss Mountain dog +Bernese mountain dog +Appenzeller +EntleBucher +boxer +bull mastiff +Tibetan mastiff +French bulldog +Great Dane +Saint Bernard +Eskimo dog +malamute +Siberian husky +dalmatian +affenpinscher +basenji +pug +Leonberg +Newfoundland +Great Pyrenees +Samoyed +Pomeranian +chow +keeshond +Brabancon griffon +Pembroke +Cardigan +toy poodle +miniature poodle +standard poodle +Mexican hairless +timber wolf +white wolf +red wolf +coyote +dingo +dhole +African hunting dog +hyena +red fox +kit fox +Arctic fox +grey fox +tabby +tiger cat +Persian cat +Siamese cat +Egyptian cat +cougar +lynx +leopard +snow leopard +jaguar +lion +tiger +cheetah +brown bear +American black bear +ice bear +sloth bear +mongoose +meerkat +tiger beetle +ladybug +ground beetle +long-horned beetle +leaf beetle +dung beetle +rhinoceros beetle +weevil +fly +bee +ant +grasshopper +cricket +walking stick +cockroach +mantis +cicada +leafhopper +lacewing +dragonfly +damselfly +admiral +ringlet +monarch +cabbage butterfly +sulphur butterfly +lycaenid +starfish +sea urchin +sea cucumber +wood rabbit +hare +Angora +hamster +porcupine +fox squirrel +marmot +beaver +guinea pig +sorrel +zebra +hog +wild boar +warthog +hippopotamus +ox +water buffalo +bison +ram +bighorn +ibex +hartebeest +impala +gazelle +Arabian camel +llama +weasel +mink +polecat +black-footed ferret +otter +skunk +badger +armadillo +three-toed sloth +orangutan +gorilla +chimpanzee +gibbon +siamang +guenon +patas +baboon +macaque +langur +colobus +proboscis monkey +marmoset +capuchin +howler monkey +titi +spider monkey +squirrel monkey +Madagascar cat +indri +Indian elephant +African elephant +lesser panda +giant panda +barracouta +eel +coho +rock beauty +anemone fish +sturgeon +gar +lionfish +puffer +abacus +abaya +academic gown +accordion +acoustic guitar +aircraft carrier +airliner +airship +altar +ambulance +amphibian +analog clock +apiary +apron +ashcan +assault rifle +backpack +bakery +balance beam +balloon +ballpoint +Band Aid +banjo +bannister +barbell +barber chair +barbershop +barn +barometer +barrel +barrow +baseball +basketball +bassinet +bassoon +bathing cap +bath towel +bathtub +beach wagon +beacon +beaker +bearskin +beer bottle +beer glass +bell cote +bib +bicycle-built-for-two +bikini +binder +binoculars +birdhouse +boathouse +bobsled +bolo tie +bonnet +bookcase +bookshop +bottlecap +bow +bow tie +brass +brassiere +breakwater +breastplate +broom +bucket +buckle +bulletproof vest +bullet train +butcher shop +cab +caldron +candle +cannon +canoe +can opener +cardigan +car mirror +carousel +carpenter's kit +carton +car wheel +cash machine +cassette +cassette player +castle +catamaran +CD player +cello +cellular telephone +chain +chainlink fence +chain mail +chain saw +chest +chiffonier +chime +china cabinet +Christmas stocking +church +cinema +cleaver +cliff dwelling +cloak +clog +cocktail shaker +coffee mug +coffeepot +coil +combination lock +computer keyboard +confectionery +container ship +convertible +corkscrew +cornet +cowboy boot +cowboy hat +cradle +crane +crash helmet +crate +crib +Crock Pot +croquet ball +crutch +cuirass +dam +desk +desktop computer +dial telephone +diaper +digital clock +digital watch +dining table +dishrag +dishwasher +disk brake +dock +dogsled +dome +doormat +drilling platform +drum +drumstick +dumbbell +Dutch oven +electric fan +electric guitar +electric locomotive +entertainment center +envelope +espresso maker +face powder +feather boa +file +fireboat +fire engine +fire screen +flagpole +flute +folding chair +football helmet +forklift +fountain +fountain pen +four-poster +freight car +French horn +frying pan +fur coat +garbage truck +gasmask +gas pump +goblet +go-kart +golf ball +golfcart +gondola +gong +gown +grand piano +greenhouse +grille +grocery store +guillotine +hair slide +hair spray +half track +hammer +hamper +hand blower +hand-held computer +handkerchief +hard disc +harmonica +harp +harvester +hatchet +holster +home theater +honeycomb +hook +hoopskirt +horizontal bar +horse cart +hourglass +iPod +iron +jack-o'-lantern +jean +jeep +jersey +jigsaw puzzle +jinrikisha +joystick +kimono +knee pad +knot +lab coat +ladle +lampshade +laptop +lawn mower +lens cap +letter opener +library +lifeboat +lighter +limousine +liner +lipstick +Loafer +lotion +loudspeaker +loupe +lumbermill +magnetic compass +mailbag +mailbox +maillot +maillot +manhole cover +maraca +marimba +mask +matchstick +maypole +maze +measuring cup +medicine chest +megalith +microphone +microwave +military uniform +milk can +minibus +miniskirt +minivan +missile +mitten +mixing bowl +mobile home +Model T +modem +monastery +monitor +moped +mortar +mortarboard +mosque +mosquito net +motor scooter +mountain bike +mountain tent +mouse +mousetrap +moving van +muzzle +nail +neck brace +necklace +nipple +notebook +obelisk +oboe +ocarina +odometer +oil filter +organ +oscilloscope +overskirt +oxcart +oxygen mask +packet +paddle +paddlewheel +padlock +paintbrush +pajama +palace +panpipe +paper towel +parachute +parallel bars +park bench +parking meter +passenger car +patio +pay-phone +pedestal +pencil box +pencil sharpener +perfume +Petri dish +photocopier +pick +pickelhaube +picket fence +pickup +pier +piggy bank +pill bottle +pillow +ping-pong ball +pinwheel +pirate +pitcher +plane +planetarium +plastic bag +plate rack +plow +plunger +Polaroid camera +pole +police van +poncho +pool table +pop bottle +pot +potter's wheel +power drill +prayer rug +printer +prison +projectile +projector +puck +punching bag +purse +quill +quilt +racer +racket +radiator +radio +radio telescope +rain barrel +recreational vehicle +reel +reflex camera +refrigerator +remote control +restaurant +revolver +rifle +rocking chair +rotisserie +rubber eraser +rugby ball +rule +running shoe +safe +safety pin +saltshaker +sandal +sarong +sax +scabbard +scale +school bus +schooner +scoreboard +screen +screw +screwdriver +seat belt +sewing machine +shield +shoe shop +shoji +shopping basket +shopping cart +shovel +shower cap +shower curtain +ski +ski mask +sleeping bag +slide rule +sliding door +slot +snorkel +snowmobile +snowplow +soap dispenser +soccer ball +sock +solar dish +sombrero +soup bowl +space bar +space heater +space shuttle +spatula +speedboat +spider web +spindle +sports car +spotlight +stage +steam locomotive +steel arch bridge +steel drum +stethoscope +stole +stone wall +stopwatch +stove +strainer +streetcar +stretcher +studio couch +stupa +submarine +suit +sundial +sunglass +sunglasses +sunscreen +suspension bridge +swab +sweatshirt +swimming trunks +swing +switch +syringe +table lamp +tank +tape player +teapot +teddy +television +tennis ball +thatch +theater curtain +thimble +thresher +throne +tile roof +toaster +tobacco shop +toilet seat +torch +totem pole +tow truck +toyshop +tractor +trailer truck +tray +trench coat +tricycle +trimaran +tripod +triumphal arch +trolleybus +trombone +tub +turnstile +typewriter keyboard +umbrella +unicycle +upright +vacuum +vase +vault +velvet +vending machine +vestment +viaduct +violin +volleyball +waffle iron +wall clock +wallet +wardrobe +warplane +washbasin +washer +water bottle +water jug +water tower +whiskey jug +whistle +wig +window screen +window shade +Windsor tie +wine bottle +wing +wok +wooden spoon +wool +worm fence +wreck +yawl +yurt +web site +comic book +crossword puzzle +street sign +traffic light +book jacket +menu +plate +guacamole +consomme +hot pot +trifle +ice cream +ice lolly +French loaf +bagel +pretzel +cheeseburger +hotdog +mashed potato +head cabbage +broccoli +cauliflower +zucchini +spaghetti squash +acorn squash +butternut squash +cucumber +artichoke +bell pepper +cardoon +mushroom +Granny Smith +strawberry +orange +lemon +fig +pineapple +banana +jackfruit +custard apple +pomegranate +hay +carbonara +chocolate sauce +dough +meat loaf +pizza +potpie +burrito +red wine +espresso +cup +eggnog +alp +bubble +cliff +coral reef +geyser +lakeside +promontory +sandbar +seashore +valley +volcano +ballplayer +groom +scuba diver +rapeseed +daisy +yellow lady's slipper +corn +acorn +hip +buckeye +coral fungus +agaric +gyromitra +stinkhorn +earthstar +hen-of-the-woods +bolete +ear +toilet tissue diff --git a/examples/BuddyMobileNetV3/README.md b/examples/BuddyMobileNetV3/README.md new file mode 100644 index 000000000..1146addb6 --- /dev/null +++ b/examples/BuddyMobileNetV3/README.md @@ -0,0 +1,49 @@ +# Buddy Compiler MobileNetV3 Example + +## MobileNetV3 Model Inference + +0. Activate your python environment. + +1. Build buddy-mlir + +```bash +$ cd buddy-mlir +$ mkdir build && cd build +$ cmake -G Ninja .. \ + -DMLIR_DIR=$PWD/../llvm/build/lib/cmake/mlir \ + -DLLVM_DIR=$PWD/../llvm/build/lib/cmake/llvm \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DBUDDY_MLIR_ENABLE_PYTHON_PACKAGES=ON \ + -DPython3_EXECUTABLE=$(which python3) \ + -DBUDDY_ENABLE_OPENCV=ON \ + -DOpenCV_DIR= +$ ninja +$ ninja check-buddy +``` + +2. Set the `PYTHONPATH` environment variable. + +Make sure you are in the build directory. + +```bash +$ export BUDDY_MLIR_BUILD_DIR=$PWD +$ export LLVM_MLIR_BUILD_DIR=$PWD/../llvm/build +$ export PYTHONPATH=${LLVM_MLIR_BUILD_DIR}/tools/mlir/python_packages/mlir_core:${BUDDY_MLIR_BUILD_DIR}/python_packages:${PYTHONPATH} +``` + +3. Set the `MOBILENETV3_EXAMPLE_PATH` environment variable. + +```bash +$ export MOBILENETV3_EXAMPLE_PATH=${BUDDY_MLIR_BUILD_DIR}/../examples/BuddyMobileNetV3/ +``` + +4. Build and run the MobileNetV3 example + +```bash +$ cmake -G Ninja .. -DBUDDY_MOBILENETV3_EXAMPLES=ON +$ ninja buddy-mobilenetv3-run +$ cd bin +$ ./buddy-mobilenetv3-run +``` + diff --git a/examples/BuddyMobileNetV3/buddy-mobilenetv3-import.py b/examples/BuddyMobileNetV3/buddy-mobilenetv3-import.py new file mode 100644 index 000000000..2403800bf --- /dev/null +++ b/examples/BuddyMobileNetV3/buddy-mobilenetv3-import.py @@ -0,0 +1,78 @@ +# ===- buddy-mobilenetv3-import.py --------------------------------------------- +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ===--------------------------------------------------------------------------- +# +# This is the MobileNet V3 model AOT importer. +# +# ===--------------------------------------------------------------------------- + +import os + +from pathlib import Path +import numpy as np +import torch +import torchvision.models as models +from torch._inductor.decomposition import decompositions as inductor_decomp + +from buddy.compiler.frontend import DynamoCompiler +from buddy.compiler.graph import GraphDriver +from buddy.compiler.graph.transform import simply_fuse +from buddy.compiler.ops import tosa + +# Retrieve the MobileNet V3 model path from environment variables. +model_path = os.environ.get("MOBILENETV3_EXAMPLE_PATH") +if model_path is None: + raise EnvironmentError( + "The environment variable 'MOBILENETV3_MODEL_PATH' is not set or is invalid." + ) + +model = models.mobilenet_v3_small(weights=models.MobileNet_V3_Small_Weights.IMAGENET1K_V1, pretrained=True) +model = model.eval() + +# Initialize Dynamo Compiler with specific configurations as an importer. +dynamo_compiler = DynamoCompiler( + primary_registry=tosa.ops_registry, + aot_autograd_decomposition=inductor_decomp, +) +data = torch.randn([1, 3, 224, 224]) +# Import the model into MLIR module and parameters. +with torch.no_grad(): + graphs = dynamo_compiler.importer(model, data) +assert len(graphs) == 1 +graph = graphs[0] +params = dynamo_compiler.imported_params[graph] +pattern_list = [simply_fuse] +graphs[0].fuse_ops(pattern_list) +driver = GraphDriver(graphs[0]) +driver.subgraphs[0].lower_to_top_level_ir() +path_prefix = os.path.dirname(os.path.abspath(__file__)) +with open(os.path.join(path_prefix, "subgraph0.mlir"), "w") as module_file: + print(driver.subgraphs[0]._imported_module, file=module_file) +with open(os.path.join(path_prefix, "forward.mlir"), "w") as module_file: + print(driver.construct_main_graph(True), file=module_file) + +params = dynamo_compiler.imported_params[graph] +current_path = os.path.dirname(os.path.abspath(__file__)) + + +float32_param = np.concatenate( + [param.detach().numpy().reshape([-1]) for param in params if param.dtype == torch.float32] +) +float32_param.tofile(Path(current_path) / "arg0.data") + +int64_param = np.concatenate( + [param.detach().numpy().reshape([-1]) for param in params if param.dtype == torch.int64] +) +int64_param.tofile(Path(current_path) / "arg1.data") diff --git a/examples/BuddyMobileNetV3/buddy-mobilenetv3-main.cpp b/examples/BuddyMobileNetV3/buddy-mobilenetv3-main.cpp new file mode 100644 index 000000000..0c5318b37 --- /dev/null +++ b/examples/BuddyMobileNetV3/buddy-mobilenetv3-main.cpp @@ -0,0 +1,166 @@ +//===- buddy-mobilenetv3-main.cpp -----------------------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +constexpr size_t ParamsSize = 2554968; +const std::string ImgName = "dog.png"; + +// Declare the mobilenet C interface. +extern "C" void _mlir_ciface_forward(MemRef *output, + MemRef *arg0, + MemRef *arg1, + Img *input); + +const cv::Mat imagePreprocessing() { + // Get the directory of the LeNet example and construct the image path. + std::string mobilenetDir = getenv("MOBILENETV3_EXAMPLE_PATH"); + std::string imgPath = mobilenetDir + "/images/" + ImgName; + // Read the image in grayscale mode. + cv::Mat inputImage = cv::imread(imgPath, cv::IMREAD_GRAYSCALE); + assert(!inputImage.empty() && "Could not read the image."); + cv::Mat resizedImage; + int imageWidth = 224; + int imageHeight = 224; + // Resize the image to 224x224 pixels. + cv::resize(inputImage, resizedImage, cv::Size(imageWidth, imageHeight), + cv::INTER_LINEAR); + return resizedImage; +} + +/// Print [Log] label in bold blue format. +void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } + +void loadParameters(const std::string &floatParamPath, + const std::string &int64ParamPath, + MemRef &floatParam, + MemRef &int64Param) { + std::ifstream floatParamFile(floatParamPath, std::ios::in | std::ios::binary); + if (!floatParamFile.is_open()) { + std::string errMsg = "Failed to open float param file: " + + std::filesystem::canonical(floatParamPath).string(); + throw std::runtime_error(errMsg); + } + floatParamFile.read(reinterpret_cast(floatParam.getData()), + floatParam.getSize() * sizeof(float)); + if (floatParamFile.fail()) { + throw std::runtime_error("Failed to read float param file"); + } + floatParamFile.close(); + + + std::ifstream int64ParamFile(int64ParamPath, std::ios::in | std::ios::binary); + if (!int64ParamFile.is_open()) { + std::string errMsg = "Failed to open int64 param file: " + + std::filesystem::canonical(int64ParamPath).string(); + throw std::runtime_error(errMsg); + } + int64ParamFile.read(reinterpret_cast(int64Param.getData()), + int64Param.getSize() * sizeof(long long)); + if (int64ParamFile.fail()) { + throw std::runtime_error("Failed to read int64 param file"); + } + int64ParamFile.close(); +} + +// Softmax function. +void softmax(float *input, size_t size) { + size_t i; + float max_value = -INFINITY; + double sum = 0.0; + // Find the maximum value in the input array for numerical stability. + for (i = 0; i < size; ++i) { + if (max_value < input[i]) { + max_value = input[i]; + } + } + // Calculate the sum of the exponentials of the input elements, normalized by + // the max value. + for (i = 0; i < size; ++i) { + sum += exp(input[i] - max_value); + } + // Normalize the input array with the softmax calculation. + for (i = 0; i < size; ++i) { + input[i] = exp(input[i] - max_value) / sum; + } +} + +std::string getLabel(int idx) { + std::string mobilenetDir = getenv("MOBILENETV3_EXAMPLE_PATH"); + std::ifstream in( + mobilenetDir + "Labels.txt"); + assert(in.is_open() && "Could not read the label file."); + std::string label; + for (int i = 0; i < idx; ++i) + std::getline(in, label); + std::getline(in, label); + in.close(); + return label; +} + +int main() { + // Print the title of this example. + const std::string title = "MobileNetV3 Inference Powered by Buddy Compiler"; + std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; + + // Preprocess the image to match the input requirements of the model. + cv::Mat image = imagePreprocessing(); + + // Define the sizes of the input and output tensors. + intptr_t sizesInput[4] = {1, 3, 224, 224}; + intptr_t sizesOutput[2] = {1, 1000}; + + // Create input and output containers for the image and model output. + Img input(image, sizesInput, true); + MemRef output(sizesOutput); + + // Load model parameters from the specified file. + std::string mobilenetDir = getenv("MOBILENETV3_EXAMPLE_PATH"); + std::string paramsDir = mobilenetDir + "/arg0.data"; + std::string intDir = mobilenetDir + "/arg1.data"; + MemRef paramsContainerf32({ParamsSize}); + MemRef ParamsContainerInt64({34}); + loadParameters(paramsDir, intDir, paramsContainerf32, ParamsContainerInt64); + // Call the forward function of the model. + _mlir_ciface_forward(&output, ¶msContainerf32, &ParamsContainerInt64, &input); + + auto out = output.getData(); + softmax(out, 1000); + // Find the classification and print the result. + float maxVal = 0; + float maxIdx = 0; + for (int i = 0; i < 1001; ++i) { + if (out[i] > maxVal) { + maxVal = out[i]; + maxIdx = i; + } + } + std::cout << "Classification Index: " << maxIdx << std::endl; + std::cout << "Classification: " << getLabel(maxIdx) << std::endl; + std::cout << "Probability: " << maxVal << std::endl; + + return 0; +} diff --git a/examples/BuddyMobileNetV3/images/curtain.png b/examples/BuddyMobileNetV3/images/curtain.png new file mode 100644 index 0000000000000000000000000000000000000000..1ae383d3597c0c6e7cc1bc5e26c54aa4f78a7e84 GIT binary patch literal 3948 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 EA9yjnwg3PC literal 0 HcmV?d00001 diff --git a/examples/BuddyMobileNetV3/images/dog.png b/examples/BuddyMobileNetV3/images/dog.png new file mode 100644 index 0000000000000000000000000000000000000000..12f0e0dd1162b94a5b0919ce8b91821450965985 GIT binary patch literal 661378 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%0DIl;?P8x1+5?OG2N%Tz3^+1u@j1o-FNfEuG2* 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:H*YTY>jdo=$5$RN&= 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

20l~qI+P;yYUbi~YI)_U2D*pg_%4>rl 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�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šSHS@Z87m)v|WCGO;6?!%S)qm{2ZC_(D7{41Ax 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 =?! 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�P-QKgJsf;HSoR9cP>E6 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

f26@hF{zB<7xpe%Jt>x{Dw|Slz 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 TYDJFh@n@Z3g|f%qA0GTKqPg?S literal 0 HcmV?d00001 diff --git a/examples/BuddyMobileNetV3/images/kite.png b/examples/BuddyMobileNetV3/images/kite.png new file mode 100644 index 0000000000000000000000000000000000000000..23ffe9613dd96dcc5bee8c2bbe0467e6b845a117 GIT binary patch literal 47857 zcmcG#1z1(h*EqWA?vm~2N&|M-W4FUqv-3?MIQX+BaP6+|&j{gDQ z_x;89-RIu>+~>}D_ROr9HEY(MHM92YeeS02mH=FN8ITMB2L}hp!G6HqF5&S@YbS`4 zi?x$8%@eN2fS?3O36T-FPq+{Hzhw_Jp?d_JIxM@V!`(vwhBMg45u)M>adw5kK$Lr& zq&-;O!qL^?@A`eICMzL%Un)D$&}c~OXuztdfFu9{qyZX04Uh#S?x_F(a)em?-S)nI zkAum3kfr1-VQ=c>WPgvtdFWT&#^at{!Upm;{*OKuU}X~ri@*9I0}Nn46TlU)0C)j& zz!GqQ!Qy}>tZz<017-|WSm_Kv05D(=JO$hVp8FpD>f$BX$;ndP0^;hdVrpv!Lt_Fj zVT?|&pCwFnb(l~HOtkYu6LjZ)xMA>vg(U1Dj(-gZ)6~_*9%AG8AQDDLd*GH-(pC6l zd*OQ-@SL#hU-rfSH~XqMLu{NJU0`&QdrnDbh~wYGhS|sz{12dJ<)ZWtAPIJq{1@N| z`4^yQYVYz7McE4C_75QKU@!F#0J{zU5-nk7XZ4pM{!D+Il}&WK$;Gnd@IaRPj$nH=Y&whW zKh*ztF5yG{ehUBb)O!v90}RXVZTt~-dBCbm0I&?JVrT)60JyuUyIlZN+}z33!dOxX z2JZpb4-jA;0Aqr?n*~AuOjJ}BB0Tho2Z#Y3XcCEx z7#8156PZJ@8F@moaQAZ zS4zD0*mXD>3L6@4NUG|WZf@gg2&x)%4lgXC)}kEo+F5m=VQ$w9B~QyCg)aVucfg~b z+S}y$tmC8vKS6@+IvjixG(1Yit&WA`sti(w1cL$c_C}Ptc!V^`kl^~6#xuiR6*N69 z#Y}vVf`kQKDnrNJ@aVmQp;fEZA=%Fv;@^LM3DZyxrlALjkrOQ�#=Hu^dvV?fWiv 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 C;fqZG literal 0 HcmV?d00001 diff --git a/examples/BuddyMobileNetV3/images/traffic-light.png b/examples/BuddyMobileNetV3/images/traffic-light.png new file mode 100644 index 0000000000000000000000000000000000000000..fa1a1e3f6170a08168a3bd58125ee278f302ede9 GIT binary patch literal 57382 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%0ACRshAw#RJvCnAyyiZH3&i;W-%jJW*FSNhiqre zTxP=Fo%3)y2Yk+X#uvDzwxr^y-P{FQj50!QJ*s(&{b{eQ;db9(_V&h1|4il4=q$;3 zpAKe7Y}EpxeL$b@LW_9-?`XlU3VKNtA?omm`|Q9m^7*CdS%NFhJx+uI2tQR&P+ z;?W}GdM_Y44bcvg9Izi+Fo{jLbi@Dn5KC_4gps-9V$xbp((`*$r|Js0nmk>ZFF(SR z3{}P9uu;9AbB(3(iFDcNarTyj9aP^~ z)TOtn>c)g)3XrQxP1g^UWmGCHJ{_)G$|qMBcGS(rA3~`N1iP3Efr=j0>QwqL!ROGM znf2vwSa;>vIPRHh>P7RS-`3e)iSx{aRbT4d@H0Y&9U%uGfO;?HVhis_1MA8fDl&^Z zi93D@K^H!>>`bf8Nx;}E=jkw;ho0xFXkXi!yfC=f4G$D=n8`Ki7ULV-#=xzQ88VX= zIAdS48?ySgYbU5^Pdk=KzpcBA=hm^u2daoi=Y_)1i^R@KmFy53q6mN~xv{ z<^-sN+B_2NiX81m`8B~_J;2P~diHIc=fC<#bOq*~ggDoUq4SO>if$D_@F-F;u-6k(( zhH>N?gypl5+)y`|NV3P5Lg%RRY&HK0fQIcB{N_0yd=hL&N0g4r`qVX(%G%oKlbHFF z+K&*XyW2TrtUbU7_QTS~jnYpRqf^Gq4OS6t{Wh+4bE3_KA^)&;oS6(gksp<5bm=5H zUR^qc;_)-sNO?+euv%Asy}ap@%)r9gXuX`tdrZAkhJj2{M#D*Ie3Sw=KA5DE;+Cpi zAT=5rPuy-9OFZASv%3W$aG>)D(zKKb&s6C_eT19{%g!lp%aNwoI3XXqh(}4rZ|Z9&Tl;QX2fqk-={2g0KGD(-SU`>y;3$J$S*gJyN zO)_>uvy7eb*;bs|ZAQE@T3brhKkjGT&PQ!ik)f|K8r&UcACb06G^N-@la@xrnZ76s zSWpy8kQ??89|86F8xe2u$D!it1(e|h3ATy$sjb!LG4aj)uf2k@HGURJ@%Ig6XP4a^ z%SDY;2&{cWCapram9Q;`=!CKXnct^7;V$ ziu&R`P<%iBVaDYgs}Ba4wV5%Y#YMkt0!Z%n-|&~JXl-B}pinru+eNUjW5A89)d30qaF%p+6X z%gyz^A>Vq{D#P2l^I0NQ3!;$;SHn;DgpM=%yKF5^8tnJLjqelAQlqB0$-S=^%PP6}jj9>^Jf z^0v&9xGjDXQ4O8mFO(Gt_qIkO??S>uah*4QtT)aGSy}*t4RGb*nw?CtP>3Re42=Yk z``WnX!IS<0o0+1#t5?~ zqS5LGp$*2oh(*ll8wg=b%#}_3_e_*qH>9yOtyHnxS&YaxnC}i zBWt3K%Vc%~2RfD$rU^h+ijQy?mD6kZ_t6c7Kn&;S9=7%+y`7qtb(k=^^d^Zz1jj1I z3T6Ry@t5J&Jl|G^m9ZcPtY39Y{hy^ssXsAF%;TxzgDCeafd#RCp^GOYBxJ6RVu)OK z-XlP~^gO~YBdB&ytdB-Us|-UBR+xA#x;uYK(Bq^SGkUW2dr&+sKOs})+w94DCXmny z!dP7#RmmiNLZoiSZN3o`nXdb$RPE4JzG9V_7G5-rxBxtDFq-P2Ms<5il)+H+!8~QT z3^NUZioYK6*x#;w=1!Z*jora|p#wVo_8DleYGTFQS|MBHDMY45uH53PXsl_n0xM&a zGG7F*dRDCd?AdQOU~egG+UkepfaW>z&<0sFV~k8XP)+14nywgshGe*jgqpUZqlc@y z`djl5jeE(WO~xlO1;!&4RAFGJ3^u3a$a?zkq>;_n7O{6hnFM^?C{fpD6<6^K7d|wZ za~BvDs+CbggE1NV^HnOUBOpDkbj@U(A^KjvF$h=iJ1hV-~2xI8^hMn#Vj9Q)PyvM2K=NUetB5=ZhPA zrWKTUAfseYtFjsZ)xDY7!Xh1;)s$xibx4KjnCVQ6?1WeehjY~f_g3H{D)iN?+Cfsz zOjd5W_zV9$@*_SY^9#w)`B{oOw5r4EWl09}-oiZBQd9|-CEy8LTpEe?49uA0%(;9Q zdKD~Oe$eVV&ivgLt_IOrqWhG)vo$4!($^Q*RYC8Oc>?&G5_s>YEVS71tZ7+QY1nV; zvN)wu%`3JySeU~f*UmYWJ9;kFRGM?zisn=5$oxUhLVm)oxm9Q2^`p0 zhUB^Vx!A%zzLtHu?J2L4CMoTiYrSlK#o%2rs~Qyxg~gyC>}aaA5Qi&*6+W`(8L@io z@XV{}c~6$fY4c)j_6kyJPfT7}Mm|mBFMGcxYK&{_ZnL^VE^{t)#*Yb(b@v&QZ7sl~ zi!|rhNl)YpD*0DB)K3TeEXy}{4Eld|-qxXk4Tkp+@$#>ApCXglhKsO7QtUVhiK=2g z@x}g>C2$-HfE_&pO{06+0&T}7S)cqrQHQW1bzib3yR>;#m6O3lkU(}7qZNO34 z`aNR!b{g$Lb}ZunJ6cIQ1mk-(^h$?*Wf|c|ofRWRG0%LK!J=uAUuN+|MA^}KE5;70 zzmj7Ls$wftBnb>r!Bo*Rr(;>!mq4}x5E*yc8eERdIsbYt`{U9YPkU?h-j(DX{;|<; z<;DeI7V9frv}D}<#jwOUL+RxO%4VE^hqNiG&x`?gTXranz|R6Jyw zqDE)e6?sk;FD{=-rfrtp%q;Voix$IZvAZVg?Syti%mT3ts7l3sg3Qb@t51Dn;LZI$ z9@!Pox7(jeVRn)y;s%E>rS8&($5PI=rHIKX*@?Bi9bkdMmw(NN0tC(4oU!)< z^Y;VMzx$kjj{^QL@=6sDV7>WPOe*zU{cz2mC_wzv;!;67EN@1;i zPSqZu=RgCp`?GRECC*HqP*hbu@tNoPd~!s zB^5;1$OlNFL$lumcSgmNaT@&(Ergl4t@cSzUno!9{%xJ93ld5f8x^mV5z9RRf?3en>6w>TdABeLDLObQ{x7<`#-HQF|klhRSy4&xh##|YPbqxQ61{q`Z{QCEt5ZRP_ zpA~#{IkG!XXl4(c5;m#HcWP_J`oXjzIu4h=o8^>D(bZT6^%==5t-2pRIaK~Ih9*NS zliFEfRc@a=syZZFx# z?^eszP-DbQM8A8X*uLJfuUz=KysLH#s^?v-kyC(51-gnI7^$`rfSvPGch&dAwZxWV zgF@r;7c4O`-FrLlo}b|z>YJ}THM3J-%CDGu)LrqYS6P_pv1>d3vUpUeTBQd}sH$7H z-)0#JYI6oaaFGkKe%Gr^t^J-V@d$F_QelU(<+*^-`zW1w>%L$od)$@)`oVrAKP{pH_7f~X#)wh-0Z>Qr2@(% zUSJ%^{f@Yo*f3SgplZJ*=v~^h$ZtSy3B}N&JE?OoD;&S7-_E#WW<{v+F`j`M1F zRtb>~6(<~z#udx9?b2hHTD>IE_v#MCC#EDdN04i-K+js?I}GN2)tf3^gj%!D8JP4p zSQVE9^IkoOvdUh?+--Do`yB0DWRiN7^H?@kQG}+UBVKS>IGXc9xt9F4pQQ4Au-Xm3j)$p8Zy)8oo$M zJ1g1ZEksa0?~tii?F3xrMcAxD-&J)J_APOvq_gmLg5g}YNs6USut%9_LB=0O?=H+V zb##UD(R5QXUBH}jEk{>1pL>WJo4PgOXL~`ibON$!<$Zbl6DP2N`ZOm^SIYuq73o$l3|pu zS|PUN6RyS0(kP99nDImg|YwKw;%aZ6yrXZrSCLjQxNKvs*iaa5lUn8MZm(a}sS;SoJm$38XfF4w9_7XHq70#HPyUl@ z7>y>K8j2zOUg}h<)q;IHpr+^C?D0IY&O5qI4}QFXT%+Jf#7kUVnO%S1`G6Mj3#A@%_o-Iwc+$$Ik?y{1J`X`UdDiQfWxqX&`~I1NY>SyXfAxgt z^lf-33E30}BAw)iaW#k$p-piW`p0oCpiGRc>JLO_5qo!Nn1aRe*lBy zKcI~F=`Meu9x!VdG~GbM?msz{-$zfb#Y?U+DSu{79{p3owiZP4KmPGUzwLh2?=d86 z1M1w1O5cN?-)D8bpIrtn@y{_`?*lA9a5eun$@!B|5OVpyCZL0^+!`X=#JJcPyHSLY zJRKOtKW#jICV6!e5kc1Gy=A-tWI-%{a@oy}@g{{#T`mwl;k0GWF=f(vj~lHks+T&^ zo|TT(!{_au`#UKF0zN2`4y(I426Q!yc>GDfy?`%I7?AnEC=oBzDY_kvQmYQOCt4)q zTqRWHp>k4N$_~K^;|CWbNoAb+%bjJsVZK0ha{#g(Ip_Tj@TyS_MRZwD2(c`!T1Au1 znYFQZWG^>+W_M+rC>Pv$_w2W0dxd?~@-L>t)Y61;> z*NsPBjYyAmFTAruAf^#wC`HkWV6#;gx8C;ESnC94cpERNYaiLueiC) z0+=TPg45F6+7O#5!68gQC5^M2BG(=}WMrGt5=W!hmY1;@=Z$PEA#$p|e48OzCGp{T zQj6!}wzqcXWcv!ZKz16e5=t33l2G=nlTp)PuaTD6@NI$5FrSpKW0G0k1@CA5wr;%$ z5)N0~7mI3Q3?O%m36g>05z4!Iv zyBa6&N0Upv?v;ovY5<-hOb<8XkQFhXG~M7PIU-}FrRA_axU92^Gs8HwZZu{Bq8Ue? zmGjR^LS@~9!3>^lX6^GE0d-qvzB(6xE4e|~^_*iTrcMJ4ky9cFUMhPd))BgEU%5`*OM6Gqk@VR`OR|A(=}kUpOk(0A6?#@uI9F!oKK6=MLxIFKy*Bul-oslJounpNx1FVehjahp=(J3MOR)XD`*e~B56#tFRC>Pr z7v{VUIfoMAfyOk^26K&l_4N%I=K)6hwL1}T993dUya+GVUFb91QnM;cEXz-)ahKGA z7BY39%Y5qI2a=fw=L6TLm5-TQII5cpB^ZB~-nATs{6l&Nb`{RSx}@4DhsK0Fw(sYE_Y^&ANHb$0kXl9g`!Pm#maCS7M#yV<;!18q*#0+bV2IQ**olEZ~}aHMD6rX z`f8}U9fFBic0?*n6jM=Y{p{3Qv_xNEEbvC~4}5i9D6HLg zGC!@B<;4K-eps;YY@`s?~Zs3(rp2EJrj zr*nbafBI~1`8=-SN64v!wP1WA9Y&srR(Qbq1iqh+$D^%AUz(a@;MJQc%p;j}|68gI+Ea zHb7Ej;TsVgEsh3D6ZCVbzd%vXk3uw*`Q zj=uH@a|!Q|nV#nYNBBDI`(2J6W1^!TPZp&qv0Df9&ik4$E74s(^EkG9y%I!X>{ic- ziJXYW^Xm)s&fHGWzOLQ*J=E6!L5J?w)COWWKVYTbxv_PB_=!JYL@*%zeQY(rhJU4p z`~KxL2B2^aXZ=T?>%)Qn;HLf^41O3V_8uJqv+d5`fB*Zrw%{86Z26ggfS|xhD*(1D zz>odc-w%wsVeRYIvI?dDf6Uu^>(*ZY5@d1z$4&X6Eq{&gfd|ug*b^#R!}pWU zle2!`a8jak3ap7BqCuok^`|=}kUH2i6)p?2 zmBzs5?lC00naYnm2WiV4)6g7dW9YPPVKGq8GG)30J=|DQlv(GY&JJ-bnoS6dhB`fV zS+CGj>3&|x4c)Mk8&&}ZN2A-Oe3Ohk(KHSyaq47nc^WkPsJAeFcbV^|-SNKnag+YW z3U8z13U3qy%?d;%GwcJE40Suzh4P$lk>8?@BkR6QQ(}O=>m!$Gv85Qla`5>tiR8?K z=4nd(1RMy8ij^QAbhEX4!r1%xe!=`7Dj~-cEPp0cRH|+h0$jDO>@Cro9>eG#-ye9c zX4zlSy#a)I4|CUM*{r9-Y8$G8`*rVe4WcWPe%cQ_g8*{)#2qU%5AWRYkx301j4B5- znowVjXM@#<6tEKX>-TA~i+Ad9d#M3h_CL+(w0UO|1xZV+dBxn87JGO3&Dl9;%9(Rj z$#WvtB~ePd>j+A@WerX>EW0MT2WEf1SD5*A`P`+fOTpvE8lp4xPy#TX6J*Rc&Bq$Q z{IYdGvW1kpz_Yls3{2j|9I{I0y*R`zGa16&&mH$%%KRFiGg2XU{)!_xQ1LMAv2&Qv zj(c~qG(o?Cax`frc*3=d)C*OB@?e^DF27@O=g*VuOskt;F>^Q(cUzWPw{WE_irFHHR0IuI=1imw9nHkN~7f zs5+R3P(7jogK=~#9!;r@T>3Xx?V%7}Fc&;bvL`30&lQGpw>i(LAai4ZMY}53c(_~D zSxW)YG@87_7k`lY`faADVd!X<5jck|#D@8Oad*tcCYdlm)$;iKaF}}VnqemI3aTyyILJ)IErsR$}m>^`%_@kt+`BB?}HA3VVFaP-}R&bweC( zI9?4QbU?HGSrLF1KR#R>=N&hGhm4zB_H8L&GFfzhOFUnP-+uS6N$sB){RU0OwC71v z6vFDHP{vjT$*rE9jREBJXPm-d>CrQQyCoeP3ec*mNq5OG<#1*878izv>X}hA8)0f@ z0%hK>p00S_(jvpB!D~F}5`LSm1DkI9v-BH~w?Fta`;un`0~j`0ScDZ6Z-DZ+Oe$YS zU4Sf<-x}%>FN8nziAg)T*f;xk`i3iqp}9V=t)=52zLC&U04mKFO8xtBn(LH^MQ#%( z(cmMA{dFa|EaqYx+v3|`A5~)mkF=2U(1+Jvc}UQAjVBJ?wUG))$#UG1dWA}$3a~s` zA}7dPp4Rfskn%gpizQk!K#-BOoa)6_)lnO>fvlKNpS(Az3l*3R2}zvxrtL-v_uW#x zuOLRgj~)KHL%URU``us-k~cA)dw;z+xv%yokA{3qW|UbZlw49OgJ0c_MS|?H_@Yy6 z-DK|5IFZulJTe?sx79Ziipt5_lO${haT7@}s6g;SCR5UE)h`Xc0pH3^<#CIFX57bs zf(h|FFrz+Y$Hotx_4WrzOX@GscaoM7P`+S!04H%Dw{MAwLZrY`vIw$O2GtyMp{6cZ z2<hsG?%*V%YldYYdE z@>mkOwqhJixOD~=)EwPu1;LJ2d}Vyc!zX;K)*ei2U9{)T$_cX8Ty%Dg_8di)F)PxQ zrVRVJ2t$_G)6``pAAX%ID5(#-9-38&wvOd0PXb-!biniIUC~K6g55nz2A@QA4IVOL z376|d3fM7T2Zt=%Nsa_Fg*?kifhYSLaCt{J)aP~@SU4+FVPME}!d!@pSm_HR(FDtw zg@w4Mz4Seto^qp0ciWknoKf5o>KCG8Z;htLteyuq#eX0y)QxF*_tBsNFt4P^K&NvA z^^{a$xIipZej5=XBmJ5_PhLk3(A@6DD|iq)aZ+iYCot{YUYN+~5(BzcwqO@_4oa(@ z23wQm$}xJG(tZrLyJ^+Q=W4BA(}+@!We#2eOPV2 zH}^u}tFp(w!%oQ(Q&vG|@&c_1y(z6cA@f?Zd%nw;g)cpe_j5;f1NH}Kf6RKmzx8kU z;=Q2f|L`$VtAI`i2!z)9X7tI|TI@JgDLgm_JNn6kF}V#%)1_Yx%8#IWU+ObNTJ^)w zsHIF88oXDQQm9Hvv-k(?Qy|fR@H>dEuGX!30fje+wlTmE+%}at`a}^;%0s_pyDLGM zAeRyW`qQ@I2>m15N%smOpJ{l8Pr-g&nsG{4858P}gH_gJqMjKa{lmrB=%xAkWeTYQ z6CZ~MK@s|azyarXW0BlOfNx9q@~!%7cJih$F;VaW$MT=gyesDn=jA$NhAcHdo4Bg= zVBhiV;}3Ibiw{EcKOxcwar|085df$Eu7$^Z@TK0<(f<$!yy;KIkNp7xuEm-F zB(&B81#sy9+n)M@Uc1e_@KLT23b2#NoArY;VBJ>QaQgR`(|UsNJnu9Wl2#z z>?#}LNIldWF!iNN{a{Sn1v>G_fN`Jlc*zJ>?>e~yTSo{*FYw)9;{`HuI?SVjJRd;w zw_H`2`yGe@ulqk%iFW$46161bYoXXv8yPEH7&v-itau?I5MAo)$=hSsMdU7%KaQ;` zijK%0`R;z$Cz)nWX{P7v6&&dcpwymhAdJGdVf8NQ-OT-eMZI}ERQn%4-o4%GQ{8e) zxN+k~QntA%+-y^~P`MI9h^Zv&m|K>y%*?s1lH^jjOw5h!%Ve1u3^Nr{n3R2Hn8`9^ znHe)Oi&^@;`~J3ndh}>9obz5@ujlKz^d?>U$IQCe<{fSp@UzmDN>X7t<~;t5IM5%# z>e5<5!^0o4GbgN){>0lfhM@a{B$TO>gP8Rd_4&nH!+SL?m*1Jy4Y43j&H2d7Rex;c zEKMb5l-)#^S6lO+j0kR)G0o3r)_V&fs&uh++2aoP4b7l=XfO2^`z>n!fl^;N9wnkL zmyd%PKV50ECXN`@-sGD*JMhWsMKjy%w@?=MFs3(aKFBvsNnGnwavs{oYku^5iNQp4mR~r|4q$#z`tq51 zrB>4ZlE3ou;Gak4#Wjd-stS1c3W|qD#DVGQcxopt+srt>a5(AqY-iO+%tN}_ij*!a zu8wkTBb+%uxD*=Y$Y0sdRc%{*UsJ2+tR0`g!VzYA_s_cB%ZoKqG3elWg9Ls$Q}o^B z+R78HcQa zUJxXlz8V@NY>XLl1w~ZF#YCG|nA6v*BOi?>W46-lll*w;bMn2AFupcrs{${h4gSF2 zau@>=(>IHitIVUu8rL7>=ZD2cV1Ia#BpPS;Dy;`EM7%g1h1xi5rw{kpz8}W!~n3nG~N$8nS>Vav>w#$YY?>th=i*!a|NX*;OtDZ3| zPB5^V1?8U=*LH#@#rB{&g_|xcun+|BB7?icEV-w>y$Oe<@Bq>c2X+69)+ z6Pt_()ze;`i559cGNRy`f~s0;ID*dP=q*3L9!O^{eUVL!MBQ@clh9|0W!g^O!}0v8Jjt8hVVLqGI$nG&R9DW80039Ib3AY2@Au1w&%l zt*JnATR2j^;MCt9Tv(ix{;Ar+>7ef{=Yj#_DuMt>t0NnqTsby@egl}^HtAO$^=+8^!3Sy zY*zE!&o_+1vl-QHR>(A*kkP*QPHk#*v9y*QczP?QrvU)eAHJ^Zmo5(3vf4a&Cr7RL zY;~7=*yV;zAU)vUazxR=Vy@?AvB$re59Qa8Tr~PEH<=1gHQ3@ewPzv=f06t#nl}Cd z;jz!-aKK9*1o2=T1BfTb&G8zi`tR7?@e?~`Y%b_}(E5kCssSs^n^o@u6B_!1_N|lM zw;sP*vlTf#i@QG>h!@yOy;Y3Wg?`N~aq_7HgN|emnX%7sZmNak<}}viO>8h5*%)+| z6J+=9he~mf{DlMGvQwVp)(X{CC@sD%<%hd5cZtNog|jEW>&%Asc%C?0{m zCG*1xAJ1|no4Qb%oJ74z=%IsK$S+o$&n(B;XWx&TIk=nq3QbY$MxNYk{)JDtZz;bx z@n=%7)lAm1P`PvEwS-cT`oMZN8zPTg=nCCw1j~MR-MkJUyWk#n2FZqt_L7&f?q`@& zqV4s?O*h6C^nV#0^hlTCnBO~__DDCc2ow&V)!ssn+*LJ*9qv}{l%8oJf561r2c986 zYK?aLON8U`PBx=YLPC=QJgAU7griK_zGYnMwEYkDqfJ5ZiwzGD)<}|@PoWk~z|T-3 z>_I~spJQj$IcfCs+p1N^-2GlzvaUI|q`%ZCWy5%F<181D!qpQI5obpa?dN9iLjhbE zcmFfuMOX**_co`sYR&>h7n#Yl%-U^nWe5>hBksvE!P7Bx6CrNN6UJzqC50)rC@sj# z!<;O0-S(LVp_sIpq~n&3U8Ky2$tT%>J@7t5%~=!C8=~GWt?`XkCd^km&$l)vwh;>p z{7|cB2==rd3H%OXJ?4Zc(l5|4)&l@)=?uT2P(XE5C~QDiT@Mz!G4{LVO%f}@q@c1A zgmWTw?zZ`q)h(u+$J+NR&IeMSH$1OyIEXt5$fk7cC?xW0Pt=$+xa0Kmanz=}Uw%K* zM0s$*XEF>OpWuQOFldNEryzwyHC$2hc&OSkxzp!O_maLA_=HQt7=vn)2iAf4U)&=? z#i5kDlq6A%tDJK%AsX$`qVB>vHk1Mh8iw9&z1r+xY`!ZgLf<%`q1H0uCji|5Msp79 z$~P5UJ*dzA|M~@HS?_=(!f&_f)h+f$=4Fi+V|1C(MY*e??81zOfxmXBtq&v8&B+q9zmoxq-ld43p#djI={*EFO&{W zx!rH8Zo0L=IRNw?F<-8t)0l7;s$FU$m$hB|OQe=FUALJIIFV&~3g1MJY235xC0##o z^hLY2YO7%9i?*#amQYoBQK&-i9xT5e7nDJ6CEhpKgW0{@-I;3#yT7{G+)_}B8zM^l zL!I3fnz&)8Pz@<2rAxp}`GU-?>+~m-u74Ek+OycO$}yZ|M6d@xDzl+WX&yPFGWw%d zWNcUKXr}diJOgnqNnD%c-5|>GvIu z*1A?+JVuLtA@}N3z}xGyY$1i#m>jqIiO}fLLDUGhx9 zUMb8WCpA=+)G>tOXqRyUB#Zj20jtIC-&q_%6;9SKd zsa|)Aa1uZD+}p3~%wX>cDeCnrC`2x8MD+v{F>R1ODke$q&ybhFN-Cy^Yif|lPveXh zFN<`Ywc0dTuX?t>MU2sqjL?~q3k9O}7&UsCC|wj}{!Jhu3jdQquaf<4o3jIRRpvF( zafKf)uvvgI8E8hqo7p)@zU91-*H-@ek@)Ap*iP;^v?9$Kl?69S>SuX#+fVC&S-eliljz!)z`5`VJAKh@ z^U|}HmV2zgces8eaII((^CJ?7QhfATHoTRnVv!meXTSe{%Km`=Pd2LsfYWcjs{co% z`u|EE{vX<+JJZ(&z^eb>5AuIoBz_BhIl5YM4ZHYC?Vui|Y01t|bbWKogAGN&Odlkl zsn6;0!Qw6VAb1d6@mx;xz+d|kDfjkKk!WTM0nbN&i}Gdpw9ymZbf2XpUXjCZGh9## z{^C1g{<)6cC&JQO)xHkh^V|Cdl5neX=s)#G9Q>njlA8V|V0?53wzH)zX;LkGpDl2y z6P{ExI_iRsF6?+b|WVfaN~Gq97SgT80=PeQLMrgr+ie*nWfFhD05uP4`Xcv(}V`LiCOJ z6%M|@*fI=c&m9N(;}(GW%15fo@2PJ%Rf5k*21`Wbt|@sVLsv~W_*qniiwuPd_tm;D zkOUql0Md#JBS64IzqjU--H)sYT8!aSmLxXObp$?68VSmmo5Lz-TQ7ruYK;WVI0D$* z>?J|MUN(nTHiL=tvbKiW{!fUV@)Fz-zh&-#t6Bjb+#LyT`ib;&vf6CU!`QWqDJ?qsAiV_xPAW)w9b32?25h#N*K0uL31w2B$3@xZu#+o7>u2 za%Tle0sf&m6o)!+`GM*`t(sB!v|Al?Y^gLC6md+#F-)|I)aEfgR(FKBr3-ea39?l? zO@cbVDfC-zbZ)h}(qM*@wt^vGKQ7K5w7@QmvM{r9r!)1)Eg`du!P}BoqudHAm%Ph$ z5Ao7`_ZaV2a1DL$lAivg8l!)T-(~10$KUWJKAwZLVq^6lQOMxfg*{%uu+bkS1d}kS zcE&@geiY_@PJUQnBIShp)~P$_ETX{rJ4xN?0}b|=MXHS64&ZpL5k^u1XWOvle@zdr z)<2Hw`iq*KD5)eM6fbjG1=N#h~)RV>C-b9f|rJ zXO_hO$3LLkwEwSa^67mML3t_A&Z;G4LA%lEWlE~B?U44f%f%L7)NZ}u6t5d%u@1wO zjS~~!0b6Feb>jc@9&Gq!wB&3gX;`gUbdKlf{Yn>;;8&pZeTxvbrqe1)CJQAVTy|+~jk8UN%ruvJ{Nzqw20LJY`n!N%^Tcsb>z4KSOUyz}*ZteE zL$r`a_bc1Zia8(4nOlhh!<7VwIy#PQUUz8_$y30%SbX)HCI*h%5e3x+{n70;w0`SW z&x5~b-dGBow)eZlo&Yt`_ZQtV({ytfePK6VMNzE+U(=0n+Y0h8mBRim3K>v_O@&`= zZD{f+d=Aj~@H91v&aObVc^qg9FKs-PfFYQ?3l9A+QfgQJkZ&0zamc>=O7RS$ej&y* zF7KmcyIFT}AIJ4lLQ2k717-F&_yyxteP-9C5~B;QPw(}6HLW1xH1@B`>ug6FqDGR> z?{G60zs?52d9#%zwJLT8D>!_uU65DhirRN>L+;V3A9tQ&LUOfvca(K zQdr(mO%;R=b-(iamLTnaPc6Ze$kN2SUhmB!I1{$e^NZweKvfA-iTqiGw-(kO9>!Ov zM4A2Q_CwVE6(cL&?#C(u{xUc-(0|0vwfYi&8tMDwBFQCKH(Z4IC#Zz74MC|F!V4YJ zaD&(57Qj&QWNnT?*z(W0PKJ>m!i%)j-Hj?~!IVi}LluTA9ggGtWNU-dY{;n#Rh(cF z0g3xh0o#nQJbSHl zW$Z9Tyie%QA7@MrcH~zc4=Lletqu1kHTJGVEC1jZbHLocJ8q=EH#KbJHqLEriF|1o&351QG3kXH4K~R=JsS-P&IiZqC-hI&g;eCv zUX>R{mB@g^YeL}nRUjny)^*_6v0UnKTuknlowl@r zng~~$h*gp};#=XJqN5^>4m4@R!Lg#hG*T}VVXb9wgNhw>k?(ez1{md%HFnb^j9v1E z1!rCvJ)*Mh%oW9~%(5kcEjUSkArwb-@{os0{nQ%}?spgwe>nA2PF=aN)(Bk0s5T+( zCsN`!5~3^^eIj-sySmrBf!yirK@+U5Xrw}@evOOR5=HFmQDE%DiV{SKtLUPFwSn6^RwwP1mCAk5P`)Oj9 z3JbkBa0h3QIQVqRBtg8VHO_eabq$S3t^^ba_E234p z9f)AS_$Z+zYDjXv^Z?#F)1k$q5FX*dvgZ@D)xU=C>?)OUUl!!PZAxiD%UMC)0NUa7 zOyWX4oc5s+`JqfPRC^7|doH`Voml>^Y@xos{T5=v8P=nK+UbH3NJ1#A?xCEfUz7MH zcZnRXJ5*`!L&qaP?o_1Q?(v1RSRbeC!UG)>Y0tH>XXkfAu{Ohzt8TFSoV`O1#?KO? zydS?GJYv%v_;b-dM5CP83c8#W4CsxCIs>@^q}PPFKZdF`0jCDnBd06BcMgef6>}yW zDt7u#fNjF4hqqEE*s8hYSt4V3k3;!<>e8!ES7k>5lB3hL_3|@We{gHj`KE%kgE5x5 z`xKQFp`l5Cy?zjNf>Nfc6tE8q5xH%W{!jMAx zBVN6R?Q{;J>V&<;+fTSjN<|}S%a4SU^!vfRfuc=Wl7p*nQHHHa(HvN_fI5{MlnH!r z)YASHKhg=SXD&{?a*vI5J8O7-xchQQUA02bgmziOZzFz;hiOL?{X`Qzm*@d?_SkT^P*vYc9kzJ5cR%Wc|siEU2NXx+$di z!FZ#{-m$uqU?>PhO;^(PE;tz&{1ne!sy!AZ$&CN)w)ed*i%TtOFW!n?Q?)Hiq$$7A zZ+0QKx~HM5j84psGKSTnFV|uI9kJWrB%zh`*mx|M;{C9&>@KOEnh5ElBqS%#OSGZT z+bJe2?Iiy|#!1COk=Gf#+MO*a18I3-y>>`arsPj=W(}hKq`x0FL0?1UM4B|Cv<1-pbDY*tc{~;Ycxacdh#$O}Vuq z@zLNJ@`%%``f^GOJrFhly;vf)(B|F&V#LalpDcYEuv8BhE5X;f&EmJ+51Eo=^g9ODN?+R_( zThD+-!AQLjBr=4)2c8T<8QpC}ctk#nI4t!56~OdpPG;xulkzk0&GVOk`^cNk`oewV z@h|~*RK`b71(|sd?fm#_W7MwvLj8BZxtRd*uI54Gax~^0$YB_zH}Hh1ph!q9=#ms_ zk;wU%VL4dhMUNGZ+pbdsJ&G($bsSfWQXAxF8DMc2nW}Ox0>eu6FP$Ow8#UNK4`-@% zFy^Ci#^FuuJ8bK^XWE4pLj%3$_0HzRR-g3bKvmaR727)&>JR?WIQ(O$BC>3(z@U|v z_Qiy6p*TGsyl&Z>ornm&sq}<)x`o7+x3>=*!x!hpRe;-bUp>56Y_lM@{{$YV`&7o^ zDM3z^jNaMWKAS!I=jcc_$4wINk1nA;>!289W7(zV!u2+ufD)#w8><^#2^O!gE>7V*p(3DHYUn|F_ zR56R^ZpWGjWUNdWDQoCa$XNmbgq?u zU3Ymj8L*Lyno2TqcLqz_zc-sS3UHcSWAa3 zNO;QeDXpoiw=WsD5en&Vi%@-dL?{L&x-H2CqxmYUnxWsWP$R>6x!zd zw=g$AT>jKY@tflTUK4Go{{sM`WCv{je)gg{xBr-E*JzYx(@*1FsGauE_xAEy5}Y-* z%2Zmah&X+v^Ps2D`gf&q<-Wl3rjgK7k7ekkX2nB1m#4@OgIuh>#jJ+mgV9cjWbovw zbB~e|dx4zZ=}9I_1GXoeiFnM}EaOdc?>)#$OzG0STbNzlrIk)$Sxot2`x_3TO#vNh zib)j$IG`O5+Hnf~Q4{>dE8;u|TCkYn&h?V`F#=l@bA>3#3wsBc%CrUOWi_+(>AAcv z!7l*N=$Ld;i08kV#!iPRuo&AGI^|XnywfJayjt_3dzkiHIvd;2hy(;%ecJ71dfE}< z&*3%!Bk5TE(z0OZ*;m(f#v!#a5Z9oVM=RYl&r)6;zE!)WiFQDn>?Oxm=h9`bK5f$% zPrX-k>+3aAZ}~k4OvwnC&^Pg*)jb4Y+vrW)M~JLW{nWdaukq6FP!!JSsaNpTP!Hxf|LTyVaGaqzAkpn2q)4Co&eIpuvKXap}7@V*4ZJPy^tJN9v} z10?qvkSilNC24a7Jf<4t+qPvk2aG-rPUJFlL`fXt}a23 zP*mfZq?#>xvb}hZTMCA;GIGa`)6JsNxpiK8e;3lwm0mKFi5hHH`5|Umdu9$ZveOQ@ zf+LEW2~7rO#Qu}E8e5d*bCH?Xe(6q90o?;qKF?*-GmLRPFRF$B z!2vEDk5T_n`@f*JAvIi;-8i8>Sxrtku>KELsG^3uyd~^uf80W~*avDB3}3d9BW#x~ zVsBo#8c`@wbyXIHsrOgeMNtYAG+uDa-C$(3l=I(aoKeY%$;Ek`M^-U%UJ11a94WMO zJhz~ocfC95>Ojd6ueupETy0o|Ii7zHAF+vhT4Ays)+(m3=-3FH}wBAQZlFd2huuG!n#?1`c%gJnETxa3|F(lgnze+<*Fg2l0M1} zCo?zZhgbCg7tXg_8=i;M9}*Hulg)SZn%Nyj#jCe;@AmTgYt~YKa&GNW=Ke;}M)~u$ zth8I3L(~<-#ps-ip z%CKt*;8d&rP)qXRd^5fqjBL#@-k^~;^GkW^80OIEWb;b=?>S4wLEI##%D%_rC?_&9RBVQC^|e0qNIuzurmOhG$r#igPz7$i1qoOEA>jdhSbI z^Fbq3>KtM%avr>@k--v%G{zPvkH5_9d`Y)X`tbC>@UU>&?ib6iPZeOFBou|jWWD1o z!MWA68-OFnea4A{+NcLs+WOm?+*@)F37~dOJMWLmt}+a_Yb4d3kP!6bCwRF+Yi@0& zwm*~NywYC#h>1f0=`r{eouJV|*u=FnpR5mrl0}lTTCs6gft8YrO@OKUG6Dw{HlfP| zsb`xW_{ay0{lJhVGOi_{dfOV~2QNN08z?o-D*n_Ek6>N~Mo<7vp*R~7TKusCAt3iS z5Z0oOX`2gqgF>Xxd@lFBV6$&{ogp?;vwS=*UO^1LImu<|Orh=xbr<@(b^G3nk^-%F zt66wxoRAzNcTy!0m0L3NH8|CG{ZCBhKP}mo%_M%YGL|sP*cljLbC-(n=4_bXoK_Huo;6M(9=yWumDucHm_Jd3R^%pABtl{VJ z^Ef8M+<3FK4$%Wx_%!zz;NuB7w)>ZL{iyK?*6(?MP>jLmB+s zGe#foAK-@D)lVRhK z@C)1D@MiHqt%Dr>R^hFpHXQ&s>3XzbOQT#(wRQKZ;9m|{7FEucaR|f^l zAA3a23e#_xZb*9^OCADak3cCmynn2K!skvJ>`rv~y6&XN_3zcwHP+6}FNT(CP&rcO z>Gftv)C6voJ;N09{U&AwK_q#XDCJYJ%&*JtX_4m8Gf~)`yG(7rk$w}_z@`X?f9LL9 zD2_FB)p;*EdBrzAh#4Bd-f_SDex~^~U%ema;mLOY7T|+u`(7AMSrAj7hK3rPiGP^O z`E@XKGt%69Do-HYJkZ>`KB@eo z;ds-{Q9-%-XmIqUQq4ho#HP=A0Xf2~A0R`Z7z6fmdlCi{jr#11v)aaTSlB8tu<15b zva7Q`T3;~#SQ~wXaJ4}#iO5sM^sKr$hAe6CIF8&$?e~g zBI+>W*z$}Y`5zBk0_j(3c$O!6{}*J&3Z)lt<5e3gln$c1(o~XL?H>yFCee=e#@u0q zHy4)GZj)5GQZDoatDuLTa&6|!xG1K!G|IP9YpPFymIsE0%JDKXcI4aSW?u?Ye?qtG z63}XgrlP>0lKgdDm*?3tI|kNaHz@48r?=^y5Yf9}KL)Wb1SYzj07DU)VInH{00o*>ke zPynf(X6uc167^A|I%cD>dV#ro6r+((i zSx+g^D19JCng7#|M!+2BFTye`5|}Iq%*^2ABymZNyCNs=hOL|%3`eO+PNW63)~J3* zhi#OKpv@rGPvGLvh)>0B?o((x$Eo5A{Pej{57qari@o^YujDaq)&+Ac=!QaYumGs^ z=BUNw*Z@Nx4U!mkxizBRf;`;_#*|(dDR<+96yoJ^iQAuJryi{N%%#=EA8p#BjXjQB zZMotfhd=G_HJ<~nN8(P^+=LR&A=c0%57JE33_`=3%*k!*y%iTn^I*onU7MZTfIms` zzXVxY)HGPRT{qj?d_!k$hZQQUN&CdJ3?ApsO%Ylod8P`r7|)Xg`01?`$l5D~&s)>-+sc{| zlXcxbEdwMAln-stf^cTg(y}zS|LjVzA1RG6lb(X%*MB4Nc3sp>y#D3g{-#F@2aD6= zXg6#H1Xa&GPzuu;ce(ANI}N*V1BZBu4JQRox`|-+v#eiV0ap}2)kn^y+yxTf$v&- z_#$!c4dtA9Ktf(QZh`a4_*7{^?v#%_lqI0Iy0YtsxnRC{SR_o<9Z{{O*q^G6W4CNo zWdw7sBX=-5DPg4gfX3et%m-i3M8MsUSDOGxCs! z=4*wMi$Vd*6pufk%+XHk_4@itnZbQEgkTOoV zQ--dHi59h%1^Ze(2s1f4LK7gs0hvSRvvlV|OdCPLl`{+mXDMTW@~kAQwo|n$NOnCg zq1?3X-i@?53VycW8Q_^valEJ~O}69E0JE+a%l0wTkI1p5NX^0@mf!$>6B@>_S<4k8 z=UW@f@VvTz^S3EH`o7GlSAFi4qE~clZvUat?gg?i7oKN|eeTF578~*|e6}c=AqhkWkgrm(u?wGf!s9rrPz6QBaA+J_wE8-pIDi(EEpe-IqD;58_T<54;hSCJj>reEj9#1 zx6eMerz46`n{dFA9{ z9RjZ~%RSz1TLU|MBnv5bc&^A{4PNk38zvWU;sO)uW|D2|5@-t{Y*PUHI$F71O~Rpy zn$tDxL)44$1`%P3-Uhs_AasIy#k;L=zL~EW{^bp(W00ZNE_1h)j@%)q!FjZvz40#C zRZNHOV?T|l-SnwX{xIoM0`xh4+&xxPS*=phjjyZsyBC=*E3E2NVnF(sR_k(}v@hEQ zS=&UA(Xc04>C`%4Gdz~7aq*SpH)^YiL~rR1Y``wj!85<1jM%zzoPE$205ksZJr z?TCrO2h(v#fU#+ezEB?SEu#euy~P->zvGsN%BO|7)C%(y?0NhFiP*{!{mJ$<{m$bk zr#)oR9_f8jP>5eEB`uEcbfCEDX2IlOXlIRrot)&ZsKxux)Zl1NQ$#64mq${o6IVV# z58Aes2eT7>59qyI>rVZ^ycjXizssuOVtxU_`p+Aa66A`m1>0xB_;$Z1(`7hv#URaK zyS2v-L|IA1b&2G{2+Z)BPpG`r?62ltTXR=jn_uJ2H!iU3fL|I)B4YIqMT%$Q7DmV#*K${CdmMuO7%?J9yAzy` zG?iCtTm2w1*kiA94lH0Z`~cJPVsh#_=)ZBCn?=C~Wd@T5X={hbql}q*TN(QqI|NrW-@gc`0<#PBsUE6k zl$jePjLYQyQB%76+{3f}e;mpqJ;{7b@G0`xfyJMr1i5OiGm1YTRK21LVVt^0fLra> zc2B^X!ZLu9kNUO7eD6DOGf~Ym!hRC~uq3*(PN6O=FD_lCH8MMIXVYN?> zE=8vxy8+B=Of4FCf8^E=5$-uPo-yJ<8OYTHr1MSG%tbo{xOGb>Fmn!`T7=#d0x)@3qlz2gG$35yAc$#|mA@{@v?ys*gXUHZrx z{qw}_!Y`>Dev9-lI9#3jA74>|aRgJT;aso&klK68d)piS_+brRFrg%-ZNO69*XVv- zQI=zi5z|088$_X%XztmX#!T$@9JE}D-*Yarg}9oqdy~bXldkV zN%nwOf^k>l3sc*JF^50Hb5fjn?WuV3#F3Atrak<2r`5}8w`Y%}QA!b{ zyEWC=U3vz>=sclMP!df4LS6YyeyxOmQxA+2+JJCb7E!RR>73l}AxN3PA*9kl>x|1J zvs5{ylWt0vF5b@L967`%?39x(8+;2zvWY$)dBsUmd#oL)@wjnT!SJ1RKIP=AHm&&l zPJ8;#d?w#pt@y8jqgn+0@diIG%_NAu1Gh3bIk7FZSGs754S3t__%yln4%(UASgCieQHhXv0orTak~ z6Zwl`wfaAf4Zaf2kl<61?1gfJxNX}ApI7macz;(dac9zL3wjpGI0qN*t@ih`Pr5;i zVIBPLaXeKpY*sg%FpK1$FSP9qN~^{d(0lHiFY8WAZH5pFfU0%V^RP-%z9jcn$-n#|>$>3IpwF-%eL$nrUsS8k!erTp^E!`5uaww<2rb@) z{9yyBC)nz;wLuW2&YOp3jjdw~^!=B`lZ5VIi`y~h7IxCOvR$Nwgb&Y6KeGv8z>fEz z42->ujk*Y{3Ya?8BKbAA35L6pe;!r{n|lnt>terhly+_dX?usGB!LIW5E@kgg73BB zUyN7j`1-hlAAeD^gD!T6;;zbd)Y-=29suh;?U}~WPZv9Pd@?S4+WCNBRC4|w`TVB7 zw<7QTU)Ke2h39(#h|K!*&&5x;-|oXgmev3AX(_cXj@1;syd0Ejvl+F~<)qlAtdr;{ z12wG?@g{r`0ECgw!I?;PYrq#Xi0ZxH*z6rX+2Tz0kwfr;ULPTRdh*~XccG}+|=iT@VF(vB42I!6m4gs@c1z5_}X*fNkaDTT7oFNxpq5p8%64I69#Y7#_ANV_l^$Mv_ax zBIElS&cNo3n%u?S&kh;cx#{%#e94rFBkSQxT>B3{yrt57lcme4UefZ<^58t<0 zX4Yq?I)CeBgQ4y&uNMCCE5#^9AAQ*_w%7=X$}UdM^ZdFFac;vl?>`1tE3&M&o)RRe zM%30|^!iP};+LODoh)6=Qk>1rsHh3lg~?^$#t zZS;9g^-8%)8lXGc393e!pH9cubvq{5<+qH642O&!NL>9Wg}&!}O~wgE!UU#@H=$Cg zLCg6AsFt&Hl0bjKRSz{1bDaPkwzH=eScb^ST*hUmb5dHTJ6&PECA-V4s`K!Q=IkLh0S{N@+*r$~D>t6Z z^n4U??V;8L%vVltS6(Cpw1{-nF1t2PoIFH{8YHwA z&#B=6x=3it1M?H*LvLu5pdNP(zNg`QbobjujN`QE$jU$oMCnW_EqXt+pT20L|mDsbO1S0RVcy@4!2%UFS!hn4|i% ztK%wGH&8f{*<9Iy?`x-Us|VA>#_maKQlzGI!#XRE=KIx3pCgBa*jnkq+d`rO+_A|u zn;f;@QX%%U&t%1y@67t%wdV=E5kf(vf!Z-3J(GG&tE@%rH&f$&!gq&~N@ f64 + memref.global "private" constant @__constant_1x32x40x128xf32 : memref<1x32x40x128xf32> = dense<8.000000e+00> {alignment = 64 : i64} + memref.global "private" constant @__constant_1x1x40x40xf32 : memref<1x1x40x40xf32> = dense<4.000000e+00> {alignment = 64 : i64} + memref.global "private" constant @__constant_32x128x40xf32 : memref<32x128x40xf32> = dense<2.000000e+00> {alignment = 64 : i64} + memref.global "private" constant @__constant_32x40x128xf32 : memref<32x40x128xf32> = dense<3.000000e+00> {alignment = 64 : i64} + memref.global "private" constant @__constant_1x32x40x40xf32 : memref<1x32x40x40xf32> = dense<11.3137083> {alignment = 64 : i64} + func.func @kenerl(%arg0: tensor<32x40x128xf32>, %arg1: tensor<32x128x40xf32>, %arg2: tensor<1x1x40x40xf32>, %arg3: tensor<1x32x40x128xf32>) { + %t_start = call @rtclock() : () -> f64 + %cst = arith.constant 0.0883883461 : f32 + %c0 = arith.constant 0 : index + %cst_0 = arith.constant 0.000000e+00 : f32 + %cst_1 = arith.constant 1.000000e+00 : f32 + %cst_2 = arith.constant -3.40282347E+38 : f32 + %0 = bufferization.to_memref %arg3 : memref<1x32x40x128xf32, strided<[?, ?, ?, ?], offset: ?>> + %1 = bufferization.to_memref %arg2 : memref<1x1x40x40xf32, strided<[?, ?, ?, ?], offset: ?>> + %2 = bufferization.to_memref %arg1 : memref<32x128x40xf32, strided<[?, ?, ?], offset: ?>> + %3 = bufferization.to_memref %arg0 : memref<32x40x128xf32, strided<[?, ?, ?], offset: ?>> + + // MatMul + // %0 = tosa.matmul %t0, %t1 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + // Initialize MatMul Output. + %alloc = memref.alloc() {alignment = 64 : i64} : memref<32x40x40xf32> + affine.for %arg4 = 0 to 32 { + affine.for %arg5 = 0 to 40 { + affine.for %arg6 = 0 to 40 { + affine.store %cst_0, %alloc[%arg4, %arg5, %arg6] : memref<32x40x40xf32> + } + } + } + // Perform MatMul core operations: multiplication and addition. + affine.for %arg4 = 0 to 32 { + affine.for %arg5 = 0 to 40 { + affine.for %arg6 = 0 to 40 { + affine.for %arg7 = 0 to 128 { + %5 = affine.load %3[%arg4, %arg5, %arg7] : memref<32x40x128xf32, strided<[?, ?, ?], offset: ?>> + %6 = affine.load %2[%arg4, %arg7, %arg6] : memref<32x128x40xf32, strided<[?, ?, ?], offset: ?>> + %7 = affine.load %alloc[%arg4, %arg5, %arg6] : memref<32x40x40xf32> + %8 = arith.mulf %5, %6 : f32 + %9 = arith.addf %7, %8 : f32 + affine.store %9, %alloc[%arg4, %arg5, %arg6] : memref<32x40x40xf32> + } + } + } + } + + // Fusion: Reshape + Constant + Reciprocal + Multiplication + Addition + Reduce Max + // %1 = tosa.reshape %0 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + // %2 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + // %3 = tosa.reciprocal %2 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + // %4 = tosa.mul %1, %3 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + // %5 = tosa.add %4, %t2 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + // %6 = tosa.reduce_max %5 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %expand_shape = memref.expand_shape %alloc [[0, 1], [2], [3]] : memref<32x40x40xf32> into memref<1x32x40x40xf32> + %alloc_5 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40x40xf32> + %alloc_6 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40xf32> + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.store %cst_2, %alloc_6[%arg4, %arg5, %arg6] : memref<1x32x40xf32> + } + } + } + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.for %arg7 = 0 to 40 { + %5 = affine.load %expand_shape[%c0, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + // Fusion point: reshape + constant + reciprocal -> %cst + %6 = arith.mulf %5, %cst : f32 + // Fusion point: addition + %7 = affine.load %1[%c0, %c0, %arg6, %arg7] : memref<1x1x40x40xf32, strided<[?, ?, ?, ?], offset: ?>> + %8 = arith.addf %6, %7 : f32 + // Fusion point: reduce max + %9 = affine.load %alloc_6[%arg4, %arg5, %arg6] : memref<1x32x40xf32> + %10 = arith.cmpf ugt, %8, %9 : f32 + %11 = arith.select %10, %8, %9 : f32 + affine.store %11, %alloc_6[%arg4, %arg5, %arg6] : memref<1x32x40xf32> + affine.store %8, %alloc_5[%arg4, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + } + } + } + } + + // Fusion: Subtraction + Exponentiation + Reduce Sum + // %7 = tosa.sub %5, %6 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + // %8 = tosa.exp %7 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + // %9 = tosa.reduce_sum %8 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %expand_shape_7 = memref.expand_shape %alloc_6 [[0], [1], [2, 3]] : memref<1x32x40xf32> into memref<1x32x40x1xf32> + %alloc_9 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40x40xf32> + %alloc_10 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40xf32> + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.store %cst_0, %alloc_10[%arg4, %arg5, %arg6] : memref<1x32x40xf32> + } + } + } + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.for %arg7 = 0 to 40 { + %5 = affine.load %alloc_5[%c0, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + %6 = affine.load %expand_shape_7[%c0, %arg5, %arg6, %c0] : memref<1x32x40x1xf32> + // Fusion point: subtraction + %7 = arith.subf %5, %6 : f32 + // Fusion point: exponentiation + %8 = math.exp %7 : f32 + // Fusion point: reduce sum + %9 = affine.load %alloc_10[%arg4, %arg5, %arg6] : memref<1x32x40xf32> + %10 = arith.addf %8, %9 : f32 + affine.store %10, %alloc_10[%arg4, %arg5, %arg6] : memref<1x32x40xf32> + affine.store %8, %alloc_9[%arg4, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + } + } + } + } + + // Fusion: Reciprocal + Multiplication + // %10 = tosa.reciprocal %9 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + // %11 = tosa.mul %8, %10 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %expand_shape_11 = memref.expand_shape %alloc_10 [[0], [1], [2, 3]] : memref<1x32x40xf32> into memref<1x32x40x1xf32> + %alloc_13 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40x40xf32> + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + // Fusion point: reciprocal + %5 = affine.load %expand_shape_11[%c0, %arg5, %arg6, %c0] : memref<1x32x40x1xf32> + %6 = arith.divf %cst_1, %5 : f32 + affine.for %arg7 = 0 to 40 { + // Fusion point: multiplication + %7 = affine.load %alloc_9[%c0, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + %8 = arith.mulf %6, %7 : f32 + affine.store %8, %alloc_13[%arg4, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + } + } + } + } + + // Prepare MatMul input memref. + // %12 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + // %13 = tosa.add %11, %12 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + // %14 = tosa.reshape %13 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + // %15 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + // %16 = tosa.add %t3, %15 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + // %17 = tosa.reshape %16 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %collapse_shape = memref.collapse_shape %alloc_13 [[0, 1], [2], [3]] : memref<1x32x40x40xf32> into memref<32x40x40xf32> + %alloc_14 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40x128xf32> + // SSA value %0 is from %arg3 + memref.copy %0, %alloc_14 : memref<1x32x40x128xf32, strided<[?, ?, ?, ?], offset: ?>> to memref<1x32x40x128xf32> + %collapse_shape_15 = memref.collapse_shape %alloc_14 [[0, 1], [2], [3]] : memref<1x32x40x128xf32> into memref<32x40x128xf32> + + // MatMul + // %18 = tosa.matmul %14, %17 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + // Allocate space and initialize output. + %alloc_16 = memref.alloc() {alignment = 64 : i64} : memref<32x40x128xf32> + affine.for %arg4 = 0 to 32 { + affine.for %arg5 = 0 to 40 { + affine.for %arg6 = 0 to 128 { + affine.store %cst_0, %alloc_16[%arg4, %arg5, %arg6] : memref<32x40x128xf32> + } + } + } + // Perform MatMul core operations: multiplication and addition. + affine.for %arg4 = 0 to 32 { + affine.for %arg5 = 0 to 40 { + affine.for %arg6 = 0 to 128 { + affine.for %arg7 = 0 to 40 { + %5 = affine.load %collapse_shape[%arg4, %arg5, %arg7] : memref<32x40x40xf32> + %6 = affine.load %collapse_shape_15[%arg4, %arg7, %arg6] : memref<32x40x128xf32> + %7 = affine.load %alloc_16[%arg4, %arg5, %arg6] : memref<32x40x128xf32> + %8 = arith.mulf %5, %6 : f32 + %9 = arith.addf %7, %8 : f32 + affine.store %9, %alloc_16[%arg4, %arg5, %arg6] : memref<32x40x128xf32> + } + } + } + } + + %t_end = call @rtclock() : () -> f64 + %time = arith.subf %t_end, %t_start : f64 + + %cast = memref.cast %alloc_16 : memref<32x40x128xf32> to memref<*xf32> + %4 = bufferization.to_tensor %cast : memref<*xf32> + + // All the elements of the MemRef are the same, + // only check the first line to verify the correctness. + // CHECK: Unranked Memref base@ = {{.*}} rank = 3 offset = 0 sizes = [32, 40, 128] strides = [5120, 128, 1] data = + // CHECK-NEXT: [ + // CHECK-SAME: [ + // CHECK-SAME: [8{{(, 8)*}}], + + // Print results. + call @printMemrefF32(%4) : (tensor<*xf32>) -> () + // Print timings. + vector.print %time : f64 + + return + } + func.func @main() { + %0 = memref.get_global @__constant_32x40x128xf32 : memref<32x40x128xf32> + %1 = bufferization.to_tensor %0 : memref<32x40x128xf32> + %2 = memref.get_global @__constant_32x128x40xf32 : memref<32x128x40xf32> + %3 = bufferization.to_tensor %2 : memref<32x128x40xf32> + %4 = memref.get_global @__constant_1x1x40x40xf32 : memref<1x1x40x40xf32> + %5 = bufferization.to_tensor %4 : memref<1x1x40x40xf32> + %6 = memref.get_global @__constant_1x32x40x128xf32 : memref<1x32x40x128xf32> + %7 = bufferization.to_tensor %6 : memref<1x32x40x128xf32> + call @kenerl(%1, %3, %5, %7) : (tensor<32x40x128xf32>, tensor<32x128x40xf32>, tensor<1x1x40x40xf32>, tensor<1x32x40x128xf32>) -> () + return + } + func.func private @printMemrefF32(tensor<*xf32>) +} diff --git a/examples/BuddyNext/next-attention-loop.mlir b/examples/BuddyNext/next-attention-loop.mlir new file mode 100644 index 000000000..e47f275d5 --- /dev/null +++ b/examples/BuddyNext/next-attention-loop.mlir @@ -0,0 +1,314 @@ +// RUN: buddy-opt %s \ +// RUN: -affine-loop-fusion \ +// RUN: -lower-affine \ +// RUN: -func-bufferize \ +// RUN: -arith-bufferize \ +// RUN: -tensor-bufferize \ +// RUN: -buffer-deallocation \ +// RUN: -finalizing-bufferize \ +// RUN: -convert-vector-to-scf \ +// RUN: -expand-strided-metadata \ +// RUN: -convert-vector-to-llvm \ +// RUN: -memref-expand \ +// RUN: -arith-expand \ +// RUN: -convert-arith-to-llvm \ +// RUN: -finalize-memref-to-llvm \ +// RUN: -convert-scf-to-cf \ +// RUN: -convert-openmp-to-llvm \ +// RUN: -convert-arith-to-llvm \ +// RUN: -convert-math-to-llvm \ +// RUN: -convert-math-to-libm \ +// RUN: -convert-func-to-llvm \ +// RUN: -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +module { + func.func private @rtclock() -> f64 + memref.global "private" constant @__constant_1x32x40x128xf32 : memref<1x32x40x128xf32> = dense<8.000000e+00> {alignment = 64 : i64} + memref.global "private" constant @__constant_1x1x40x40xf32 : memref<1x1x40x40xf32> = dense<4.000000e+00> {alignment = 64 : i64} + memref.global "private" constant @__constant_32x128x40xf32 : memref<32x128x40xf32> = dense<2.000000e+00> {alignment = 64 : i64} + memref.global "private" constant @__constant_32x40x128xf32 : memref<32x40x128xf32> = dense<3.000000e+00> {alignment = 64 : i64} + memref.global "private" constant @__constant_1x32x40x40xf32 : memref<1x32x40x40xf32> = dense<11.3137083> {alignment = 64 : i64} + func.func @kenerl(%arg0: tensor<32x40x128xf32>, %arg1: tensor<32x128x40xf32>, %arg2: tensor<1x1x40x40xf32>, %arg3: tensor<1x32x40x128xf32>) { + %t_start = call @rtclock() : () -> f64 + %cst = arith.constant 0.0883883461 : f32 + %c0 = arith.constant 0 : index + %cst_0 = arith.constant 0.000000e+00 : f32 + %cst_1 = arith.constant 1.000000e+00 : f32 + %cst_2 = arith.constant -3.40282347E+38 : f32 + %0 = bufferization.to_memref %arg3 : memref<1x32x40x128xf32, strided<[?, ?, ?, ?], offset: ?>> + %1 = bufferization.to_memref %arg2 : memref<1x1x40x40xf32, strided<[?, ?, ?, ?], offset: ?>> + %2 = bufferization.to_memref %arg1 : memref<32x128x40xf32, strided<[?, ?, ?], offset: ?>> + %3 = bufferization.to_memref %arg0 : memref<32x40x128xf32, strided<[?, ?, ?], offset: ?>> + + // MatMul + // %0 = tosa.matmul %t0, %t1 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + // Initialize MatMul Output. + %alloc = memref.alloc() {alignment = 64 : i64} : memref<32x40x40xf32> + affine.for %arg4 = 0 to 32 { + affine.for %arg5 = 0 to 40 { + affine.for %arg6 = 0 to 40 { + affine.store %cst_0, %alloc[%arg4, %arg5, %arg6] : memref<32x40x40xf32> + } + } + } + // Perform MatMul core operations: multiplication and addition. + affine.for %arg4 = 0 to 32 { + affine.for %arg5 = 0 to 40 { + affine.for %arg6 = 0 to 40 { + affine.for %arg7 = 0 to 128 { + %5 = affine.load %3[%arg4, %arg5, %arg7] : memref<32x40x128xf32, strided<[?, ?, ?], offset: ?>> + %6 = affine.load %2[%arg4, %arg7, %arg6] : memref<32x128x40xf32, strided<[?, ?, ?], offset: ?>> + %7 = affine.load %alloc[%arg4, %arg5, %arg6] : memref<32x40x40xf32> + %8 = arith.mulf %5, %6 : f32 + %9 = arith.addf %7, %8 : f32 + affine.store %9, %alloc[%arg4, %arg5, %arg6] : memref<32x40x40xf32> + } + } + } + } + + // Reshape + Constant + Reciprocal + // %1 = tosa.reshape %0 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + // %2 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + // %3 = tosa.reciprocal %2 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %expand_shape = memref.expand_shape %alloc [[0, 1], [2], [3]] : memref<32x40x40xf32> into memref<1x32x40x40xf32> + %alloc_3 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40x40xf32> + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.for %arg7 = 0 to 40 { + affine.store %cst, %alloc_3[%arg4, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + } + } + } + } + + // Multiplication + // %4 = tosa.mul %1, %3 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %alloc_4 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40x40xf32> + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.for %arg7 = 0 to 40 { + %5 = affine.load %expand_shape[%c0, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + %6 = affine.load %alloc_3[%c0, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + %7 = arith.mulf %5, %6 : f32 + affine.store %7, %alloc_4[%arg4, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + } + } + } + } + + // Addition + // %5 = tosa.add %4, %t2 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %alloc_5 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40x40xf32> + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.for %arg7 = 0 to 40 { + %5 = affine.load %alloc_4[%c0, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + %6 = affine.load %1[%c0, %c0, %arg6, %arg7] : memref<1x1x40x40xf32, strided<[?, ?, ?, ?], offset: ?>> + %7 = arith.addf %5, %6 : f32 + affine.store %7, %alloc_5[%arg4, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + } + } + } + } + + // Reduce Max + // %6 = tosa.reduce_max %5 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + // Initialize reduce max operation output. + %alloc_6 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40xf32> + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.store %cst_2, %alloc_6[%arg4, %arg5, %arg6] : memref<1x32x40xf32> + } + } + } + // Perform reduce max operation. + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.for %arg7 = 0 to 40 { + %5 = affine.load %alloc_5[%arg4, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + %6 = affine.load %alloc_6[%arg4, %arg5, %arg6] : memref<1x32x40xf32> + %7 = arith.cmpf ugt, %5, %6 : f32 + %8 = arith.select %7, %5, %6 : f32 + %9 = arith.cmpf uno, %6, %6 : f32 + %10 = arith.select %9, %6, %8 : f32 + affine.store %10, %alloc_6[%arg4, %arg5, %arg6] : memref<1x32x40xf32> + } + } + } + } + + // Subtraction + // %7 = tosa.sub %5, %6 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + // Allocate space and perform subtraction. + %expand_shape_7 = memref.expand_shape %alloc_6 [[0], [1], [2, 3]] : memref<1x32x40xf32> into memref<1x32x40x1xf32> + %alloc_8 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40x40xf32> + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.for %arg7 = 0 to 40 { + %5 = affine.load %alloc_5[%c0, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + %6 = affine.load %expand_shape_7[%c0, %arg5, %arg6, %c0] : memref<1x32x40x1xf32> + %7 = arith.subf %5, %6 : f32 + affine.store %7, %alloc_8[%arg4, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + } + } + } + } + + // Exponentiation + // %8 = tosa.exp %7 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + // Allocate space and perform exponentiation. + %alloc_9 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40x40xf32> + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.for %arg7 = 0 to 40 { + %5 = affine.load %alloc_8[%c0, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + %6 = math.exp %5 : f32 + affine.store %6, %alloc_9[%arg4, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + } + } + } + } + + // Reduce Sum + // %9 = tosa.reduce_sum %8 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + // Allocate space and initialize the output. + %alloc_10 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40xf32> + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.store %cst_0, %alloc_10[%arg4, %arg5, %arg6] : memref<1x32x40xf32> + } + } + } + // Perform reduce sum operation. + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.for %arg7 = 0 to 40 { + %5 = affine.load %alloc_9[%arg4, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + %6 = affine.load %alloc_10[%arg4, %arg5, %arg6] : memref<1x32x40xf32> + %7 = arith.addf %5, %6 : f32 + affine.store %7, %alloc_10[%arg4, %arg5, %arg6] : memref<1x32x40xf32> + } + } + } + } + + // Reciprocal + // %10 = tosa.reciprocal %9 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %expand_shape_11 = memref.expand_shape %alloc_10 [[0], [1], [2, 3]] : memref<1x32x40xf32> into memref<1x32x40x1xf32> + %alloc_12 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40x1xf32> + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.for %arg7 = 0 to 1 { + %5 = affine.load %expand_shape_11[%c0, %arg5, %arg6, %c0] : memref<1x32x40x1xf32> + %6 = arith.divf %cst_1, %5 : f32 + affine.store %6, %alloc_12[%arg4, %arg5, %arg6, %arg7] : memref<1x32x40x1xf32> + } + } + } + } + + // Multiplication + // %11 = tosa.mul %8, %10 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %alloc_13 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40x40xf32> + affine.for %arg4 = 0 to 1 { + affine.for %arg5 = 0 to 32 { + affine.for %arg6 = 0 to 40 { + affine.for %arg7 = 0 to 40 { + %5 = affine.load %alloc_9[%c0, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + %6 = affine.load %alloc_12[%c0, %arg5, %arg6, %c0] : memref<1x32x40x1xf32> + %7 = arith.mulf %5, %6 : f32 + affine.store %7, %alloc_13[%arg4, %arg5, %arg6, %arg7] : memref<1x32x40x40xf32> + } + } + } + } + + // Prepare MatMul input memref. + // %12 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + // %13 = tosa.add %11, %12 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + // %14 = tosa.reshape %13 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + // %15 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + // %16 = tosa.add %t3, %15 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + // %17 = tosa.reshape %16 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %collapse_shape = memref.collapse_shape %alloc_13 [[0, 1], [2], [3]] : memref<1x32x40x40xf32> into memref<32x40x40xf32> + %alloc_14 = memref.alloc() {alignment = 64 : i64} : memref<1x32x40x128xf32> + // SSA value %0 is from %arg3 + memref.copy %0, %alloc_14 : memref<1x32x40x128xf32, strided<[?, ?, ?, ?], offset: ?>> to memref<1x32x40x128xf32> + %collapse_shape_15 = memref.collapse_shape %alloc_14 [[0, 1], [2], [3]] : memref<1x32x40x128xf32> into memref<32x40x128xf32> + + // MatMul + // %18 = tosa.matmul %14, %17 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + // Allocate space and initialize output. + %alloc_16 = memref.alloc() {alignment = 64 : i64} : memref<32x40x128xf32> + affine.for %arg4 = 0 to 32 { + affine.for %arg5 = 0 to 40 { + affine.for %arg6 = 0 to 128 { + affine.store %cst_0, %alloc_16[%arg4, %arg5, %arg6] : memref<32x40x128xf32> + } + } + } + // Perform MatMul core operations: multiplication and addition. + affine.for %arg4 = 0 to 32 { + affine.for %arg5 = 0 to 40 { + affine.for %arg6 = 0 to 128 { + affine.for %arg7 = 0 to 40 { + %5 = affine.load %collapse_shape[%arg4, %arg5, %arg7] : memref<32x40x40xf32> + %6 = affine.load %collapse_shape_15[%arg4, %arg7, %arg6] : memref<32x40x128xf32> + %7 = affine.load %alloc_16[%arg4, %arg5, %arg6] : memref<32x40x128xf32> + %8 = arith.mulf %5, %6 : f32 + %9 = arith.addf %7, %8 : f32 + affine.store %9, %alloc_16[%arg4, %arg5, %arg6] : memref<32x40x128xf32> + } + } + } + } + + %t_end = call @rtclock() : () -> f64 + %time = arith.subf %t_end, %t_start : f64 + + %cast = memref.cast %alloc_16 : memref<32x40x128xf32> to memref<*xf32> + %4 = bufferization.to_tensor %cast : memref<*xf32> + + // All the elements of the MemRef are the same, + // only check the first line to verify the correctness. + // CHECK: Unranked Memref base@ = {{.*}} rank = 3 offset = 0 sizes = [32, 40, 128] strides = [5120, 128, 1] data = + // CHECK-NEXT: [ + // CHECK-SAME: [ + // CHECK-SAME: [8{{(, 8)*}}], + + // Print results. + call @printMemrefF32(%4) : (tensor<*xf32>) -> () + // Print timings. + vector.print %time : f64 + + return + } + func.func @main() { + %0 = memref.get_global @__constant_32x40x128xf32 : memref<32x40x128xf32> + %1 = bufferization.to_tensor %0 : memref<32x40x128xf32> + %2 = memref.get_global @__constant_32x128x40xf32 : memref<32x128x40xf32> + %3 = bufferization.to_tensor %2 : memref<32x128x40xf32> + %4 = memref.get_global @__constant_1x1x40x40xf32 : memref<1x1x40x40xf32> + %5 = bufferization.to_tensor %4 : memref<1x1x40x40xf32> + %6 = memref.get_global @__constant_1x32x40x128xf32 : memref<1x32x40x128xf32> + %7 = bufferization.to_tensor %6 : memref<1x32x40x128xf32> + call @kenerl(%1, %3, %5, %7) : (tensor<32x40x128xf32>, tensor<32x128x40xf32>, tensor<1x1x40x40xf32>, tensor<1x32x40x128xf32>) -> () + return + } + func.func private @printMemrefF32(tensor<*xf32>) +} diff --git a/examples/BuddyNext/next-attention.mlir b/examples/BuddyNext/next-attention.mlir new file mode 100644 index 000000000..36339be09 --- /dev/null +++ b/examples/BuddyNext/next-attention.mlir @@ -0,0 +1,91 @@ +// RUN: buddy-opt %s \ +// RUN: -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" \ +// RUN: | buddy-opt \ +// RUN: -arith-expand \ +// RUN: -eliminate-empty-tensors \ +// RUN: -empty-tensor-to-alloc-tensor \ +// RUN: -one-shot-bufferize \ +// RUN: -convert-linalg-to-affine-loops \ +// RUN: -affine-loop-fusion \ +// RUN: -lower-affine \ +// RUN: -func-bufferize \ +// RUN: -arith-bufferize \ +// RUN: -tensor-bufferize \ +// RUN: -buffer-deallocation \ +// RUN: -finalizing-bufferize \ +// RUN: -convert-vector-to-scf \ +// RUN: -expand-strided-metadata \ +// RUN: -convert-vector-to-llvm \ +// RUN: -memref-expand \ +// RUN: -arith-expand \ +// RUN: -convert-arith-to-llvm \ +// RUN: -finalize-memref-to-llvm \ +// RUN: -convert-scf-to-cf \ +// RUN: -convert-openmp-to-llvm \ +// RUN: -convert-arith-to-llvm \ +// RUN: -convert-math-to-llvm \ +// RUN: -convert-math-to-libm \ +// RUN: -convert-func-to-llvm \ +// RUN: -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +func.func private @rtclock() -> f64 + +func.func @kenerl(%t0 : tensor<32x40x128xf32>, %t1 : tensor<32x128x40xf32>, %t2 : tensor<1x1x40x40xf32>, %t3 : tensor<1x32x40x128xf32>) { + %t_start = call @rtclock() : () -> f64 + + %0 = tosa.matmul %t0, %t1 : (tensor<32x40x128xf32>, tensor<32x128x40xf32>) -> tensor<32x40x40xf32> + %1 = tosa.reshape %0 {new_shape = array} : (tensor<32x40x40xf32>) -> tensor<1x32x40x40xf32> + %2 = "tosa.const"() <{value = dense<11.3137083> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %3 = tosa.reciprocal %2 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %4 = tosa.mul %1, %3 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %5 = tosa.add %4, %t2 : (tensor<1x32x40x40xf32>, tensor<1x1x40x40xf32>) -> tensor<1x32x40x40xf32> + %6 = tosa.reduce_max %5 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %7 = tosa.sub %5, %6 : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %8 = tosa.exp %7 : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %9 = tosa.reduce_sum %8 {axis = 3 : i32} : (tensor<1x32x40x40xf32>) -> tensor<1x32x40x1xf32> + %10 = tosa.reciprocal %9 : (tensor<1x32x40x1xf32>) -> tensor<1x32x40x1xf32> + %11 = tosa.mul %8, %10 {shift = 0 : i8} : (tensor<1x32x40x40xf32>, tensor<1x32x40x1xf32>) -> tensor<1x32x40x40xf32> + %12 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x40xf32>}> : () -> tensor<1x32x40x40xf32> + %13 = tosa.add %11, %12 : (tensor<1x32x40x40xf32>, tensor<1x32x40x40xf32>) -> tensor<1x32x40x40xf32> + %14 = tosa.reshape %13 {new_shape = array} : (tensor<1x32x40x40xf32>) -> tensor<32x40x40xf32> + %15 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> + %16 = tosa.add %t3, %15 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %17 = tosa.reshape %16 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> + %18 = tosa.matmul %14, %17 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + + %t_end = call @rtclock() : () -> f64 + %time = arith.subf %t_end, %t_start : f64 + + %tensor_unranked = tensor.cast %18 : tensor<32x40x128xf32> to tensor<*xf32> + + // All the elements of the MemRef are the same, + // only check the first line to verify the correctness. + // CHECK: Unranked Memref base@ = {{.*}} rank = 3 offset = 0 sizes = [32, 40, 128] strides = [5120, 128, 1] data = + // CHECK-NEXT: [ + // CHECK-SAME: [ + // CHECK-SAME: [8{{(, 8)*}}], + + // Print results. + call @printMemrefF32(%tensor_unranked) : (tensor<*xf32>) -> () + // Print timings. + vector.print %time : f64 + + return +} + +func.func @main() { + + %c0 = arith.constant dense<3.0> : tensor<32x40x128xf32> + %c1 = arith.constant dense <2.0> : tensor<32x128x40xf32> + %c2 = arith.constant dense <4.0> : tensor<1x1x40x40xf32> + %c3 = arith.constant dense <8.0> : tensor<1x32x40x128xf32> + + call @kenerl(%c0, %c1, %c2, %c3) : (tensor<32x40x128xf32>, tensor<32x128x40xf32>, tensor<1x1x40x40xf32>, tensor<1x32x40x128xf32>) -> () + + return +} +func.func private @printMemrefF32(%ptr : tensor<*xf32>) diff --git a/examples/BuddyNext/next-rope.mlir b/examples/BuddyNext/next-rope.mlir new file mode 100644 index 000000000..091b2c220 --- /dev/null +++ b/examples/BuddyNext/next-rope.mlir @@ -0,0 +1,157 @@ +// RUN: buddy-opt %s \ +// RUN: -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" \ +// RUN: | buddy-opt \ +// RUN: -arith-expand \ +// RUN: -eliminate-empty-tensors \ +// RUN: -empty-tensor-to-alloc-tensor \ +// RUN: -one-shot-bufferize \ +// RUN: -convert-linalg-to-affine-loops \ +// RUN: -affine-loop-fusion \ +// RUN: -lower-affine \ +// RUN: -func-bufferize \ +// RUN: -arith-bufferize \ +// RUN: -tensor-bufferize \ +// RUN: -buffer-deallocation \ +// RUN: -finalizing-bufferize \ +// RUN: -convert-vector-to-scf \ +// RUN: -expand-strided-metadata \ +// RUN: -convert-vector-to-llvm \ +// RUN: -memref-expand \ +// RUN: -arith-expand \ +// RUN: -convert-arith-to-llvm \ +// RUN: -finalize-memref-to-llvm \ +// RUN: -convert-scf-to-cf \ +// RUN: -convert-openmp-to-llvm \ +// RUN: -convert-arith-to-llvm \ +// RUN: -convert-math-to-llvm \ +// RUN: -convert-math-to-libm \ +// RUN: -convert-func-to-llvm \ +// RUN: -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +func.func private @rtclock() -> f64 + +#map = affine_map<(d0, d1, d2) -> (d1)> +#map1 = affine_map<(d0, d1, d2) -> (d0, d2)> +#map2 = affine_map<(d0, d1, d2) -> (d0, d1)> +#map3 = affine_map<(d0, d1) -> (d0, d1)> +#map4 = affine_map<(d0, d1, d2, d3) -> (d0, d1, d2, d3)> +#map5 = affine_map<(d0, d1, d2) -> (d0, d1, d2)> +#map6 = affine_map<(d0, d1, d2) -> (d0, 0, d1, d2)> +#map7 = affine_map<(d0, d1) -> (0, d0, d1)> + +func.func @kenerl(%arg0 : tensor<1x40x4096xf32>, %arg1 : tensor<1x40x4096xf32>, %arg2 : tensor<1x40x4096xf32>, %arg3 : tensor<1x1x2048x128xf32>, %arg4 : tensor<1x1x2048x128xf32>, %arg5 : tensor<1x40xi64>) { + %t_start = call @rtclock() : () -> f64 + + %57 = tosa.reshape %arg0 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %58 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %59 = tosa.transpose %57, %58 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + + %60 = tosa.reshape %arg1 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %61 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %62 = tosa.transpose %60, %61 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + + %63 = tosa.reshape %arg2 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<1x40x32x128xf32> + %64 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> + %65 = tosa.transpose %63, %64 : (tensor<1x40x32x128xf32>, tensor<4xi32>) -> tensor<1x32x40x128xf32> + + %extracted_slice_9 = tensor.extract_slice %arg3[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_10 = tensor.extract_slice %extracted_slice_9[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_11 = tensor.extract_slice %extracted_slice_10[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %extracted_slice_12 = tensor.extract_slice %arg4[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_13 = tensor.extract_slice %extracted_slice_12[0, 0, 0, 0] [1, 1, 2048, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x2048x128xf32> + %extracted_slice_14 = tensor.extract_slice %extracted_slice_13[0, 0, 0, 0] [1, 1, 40, 128] [1, 1, 1, 1] : tensor<1x1x2048x128xf32> to tensor<1x1x40x128xf32> + %66 = tensor.empty() : tensor<1x40x128xf32> + %67 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_11 : tensor<1x1x40x128xf32>) outs(%66 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %68 = tensor.empty() : tensor<40x128xf32> + %69 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%67 : tensor<1x40x128xf32>) outs(%68 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + %70 = tensor.empty() : tensor<1x40x128xf32> + %71 = linalg.generic {indexing_maps = [#map6, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%extracted_slice_14 : tensor<1x1x40x128xf32>) outs(%70 : tensor<1x40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<1x40x128xf32> + %72 = tensor.empty() : tensor<40x128xf32> + %73 = linalg.generic {indexing_maps = [#map7, #map3], iterator_types = ["parallel", "parallel"]} ins(%71 : tensor<1x40x128xf32>) outs(%72 : tensor<40x128xf32>) { + ^bb0(%in: f32, %out: f32): + linalg.yield %in : f32 + } -> tensor<40x128xf32> + // precompute_theta_pos_frequencies function, which is used to calculating special values ​​of RoPE according to: https://hyper.ai/wiki/29220 + %74 = tensor.empty() : tensor<1x40x128xf32> + %75 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%arg5 : tensor<1x40xi64>) outs(%74 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %69[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %76 = tosa.reshape %75 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %77 = tensor.empty() : tensor<1x40x128xf32> + %78 = linalg.generic {indexing_maps = [#map2, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%arg5 : tensor<1x40xi64>) outs(%77 : tensor<1x40x128xf32>) { + ^bb0(%in: i64, %out: f32): + %4175 = arith.index_cast %in : i64 to index + %4176 = linalg.index 2 : index + %extracted = tensor.extract %73[%4175, %4176] : tensor<40x128xf32> + linalg.yield %extracted : f32 + } -> tensor<1x40x128xf32> + %79 = tosa.reshape %78 {new_shape = array} : (tensor<1x40x128xf32>) -> tensor<1x1x40x128xf32> + %80 = tosa.mul %59, %76 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_15 = tensor.extract_slice %59[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_16 = tensor.extract_slice %59[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %81 = tosa.negate %extracted_slice_16 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %82 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice = tensor.insert_slice %81 into %82[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_17 = tensor.insert_slice %extracted_slice_15 into %inserted_slice[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %83 = tosa.mul %inserted_slice_17, %79 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %84 = tosa.add %80, %83 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> + %85 = tosa.mul %62, %76 {shift = 0 : i8} : (tensor<1x32x40x128xf32>, tensor<1x1x40x128xf32>) -> tensor<1x32x40x128xf32> + %extracted_slice_18 = tensor.extract_slice %62[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %extracted_slice_19 = tensor.extract_slice %62[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x128xf32> to tensor<1x32x40x64xf32> + %86 = tosa.negate %extracted_slice_19 : (tensor<1x32x40x64xf32>) -> tensor<1x32x40x64xf32> + %87 = tensor.empty() : tensor<1x32x40x128xf32> + %inserted_slice_20 = tensor.insert_slice %86 into %87[0, 0, 0, 0] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + %inserted_slice_21 = tensor.insert_slice %extracted_slice_18 into %inserted_slice_20[0, 0, 0, 64] [1, 32, 40, 64] [1, 1, 1, 1] : tensor<1x32x40x64xf32> into tensor<1x32x40x128xf32> + + %t_end = call @rtclock() : () -> f64 + %time = arith.subf %t_end, %t_start : f64 + + %tensor_unranked = tensor.cast %inserted_slice_21 : tensor<1x32x40x128xf32> to tensor<*xf32> + + // All the elements of the MemRef are the same, + // only check the first line to verify the correctness. + // CHECK: Unranked Memref base@ = {{.*}} rank = 4 offset = 0 sizes = [1, 32, 40, 128] strides = [163840, 5120, 128, 1] data = + // CHECK-NEXT: [ + // CHECK-SAME: [ + // CHECK-SAME: [ + // CHECK-SAME: [-3{{(, [-]?3)*}}], + + // Print results. + call @printMemrefF32(%tensor_unranked) : (tensor<*xf32>) -> () + // Print timings. + vector.print %time : f64 + + return +} + +func.func @main() { + + %c2 = arith.constant dense<2.0> : tensor<1x40x4096xf32> + %c3 = arith.constant dense<3.0> : tensor<1x40x4096xf32> + %c4 = arith.constant dense<4.0> : tensor<1x40x4096xf32> + %c5 = arith.constant dense<5.0> : tensor<1x1x2048x128xf32> + %c6 = arith.constant dense<6.0> : tensor<1x1x2048x128xf32> + %c7 = arith.constant dense<7> : tensor<1x40xi64> + + call @kenerl(%c2, %c3, %c4, %c5, %c6, %c7) : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>, tensor<1x40x4096xf32>, tensor<1x1x2048x128xf32>, tensor<1x1x2048x128xf32>, tensor<1x40xi64>) -> () + + return +} +func.func private @printMemrefF32(%ptr : tensor<*xf32>) diff --git a/examples/BuddyNext/next-sigmoid.mlir b/examples/BuddyNext/next-sigmoid.mlir new file mode 100644 index 000000000..f49f2d794 --- /dev/null +++ b/examples/BuddyNext/next-sigmoid.mlir @@ -0,0 +1,70 @@ +// RUN: buddy-opt %s \ +// RUN: -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" \ +// RUN: | buddy-opt \ +// RUN: -arith-expand \ +// RUN: -eliminate-empty-tensors \ +// RUN: -empty-tensor-to-alloc-tensor \ +// RUN: -one-shot-bufferize \ +// RUN: -convert-linalg-to-affine-loops \ +// RUN: -affine-loop-fusion \ +// RUN: -lower-affine \ +// RUN: -func-bufferize \ +// RUN: -arith-bufferize \ +// RUN: -tensor-bufferize \ +// RUN: -buffer-deallocation \ +// RUN: -finalizing-bufferize \ +// RUN: -convert-vector-to-scf \ +// RUN: -expand-strided-metadata \ +// RUN: -convert-vector-to-llvm \ +// RUN: -memref-expand \ +// RUN: -arith-expand \ +// RUN: -convert-arith-to-llvm \ +// RUN: -finalize-memref-to-llvm \ +// RUN: -convert-scf-to-cf \ +// RUN: -convert-openmp-to-llvm \ +// RUN: -convert-arith-to-llvm \ +// RUN: -convert-math-to-llvm \ +// RUN: -convert-math-to-libm \ +// RUN: -convert-func-to-llvm \ +// RUN: -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +func.func private @rtclock() -> f64 + +func.func @kenerl(%arg0 : tensor<1x40x11008xf32>) { + %t_start = call @rtclock() : () -> f64 + + %sigmoid = tosa.sigmoid %arg0 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + + %t_end = call @rtclock() : () -> f64 + %time = arith.subf %t_end, %t_start : f64 + + %tensor_unranked = tensor.cast %sigmoid : tensor<1x40x11008xf32> to tensor<*xf32> + + // All the elements of the MemRef are the same, + // only check the first line to verify the correctness. + // CHECK: Unranked Memref base@ = {{.*}} rank = 3 offset = 0 sizes = [1, 40, 11008] strides = [440320, 11008, 1] data = + // CHECK-NEXT: [ + // CHECK-SAME: [ + // CHECK-SAME: [0.952574{{(, 0.952574)*}}], + + // Print results. + call @printMemrefF32(%tensor_unranked) : (tensor<*xf32>) -> () + // Print timings. + vector.print %time : f64 + + return +} + +func.func @main() { + + %c3 = arith.constant dense<3.0> : tensor<1x40x11008xf32> + + call @kenerl(%c3) : (tensor<1x40x11008xf32>) -> () + + return +} +func.func private @printMemrefF32(%ptr : tensor<*xf32>) diff --git a/examples/BuddyPython/module_gen.py b/examples/BuddyPython/module_gen.py index e2c722ceb..1f657d260 100644 --- a/examples/BuddyPython/module_gen.py +++ b/examples/BuddyPython/module_gen.py @@ -43,12 +43,11 @@ def foo(x, y): aot_autograd_decomposition=inductor_decomp, ) -# Pass the function and input data to the dynamo compiler's importer, the -# importer will first build a graph. Then, lower the graph to top-level IR. +# Pass the function and input data to the dynamo compiler's importer, the +# importer will first build a graph. Then, lower the graph to top-level IR. # (tosa, linalg, etc.). Finally, accepts the generated module and weight parameters. -graphs = dynamo_compiler.importer(foo, *(float32_in1, float32_in2)) +graphs = dynamo_compiler.importer(foo, float32_in1, float32_in2) graph = graphs[0] -graph.lower_to_top_level_ir(do_params_pack=True) +graph.lower_to_top_level_ir() print(graph._imported_module) -print(dynamo_compiler.imported_params[graph]) diff --git a/examples/BuddyWhisper/.gitignore b/examples/BuddyWhisper/.gitignore new file mode 100644 index 000000000..9dadf6451 --- /dev/null +++ b/examples/BuddyWhisper/.gitignore @@ -0,0 +1,6 @@ +# model params file +arg0.data + +# model mlir file +forward.mlir +subgraph0.mlir diff --git a/examples/BuddyWhisper/CMakeLists.txt b/examples/BuddyWhisper/CMakeLists.txt new file mode 100644 index 000000000..756d6db08 --- /dev/null +++ b/examples/BuddyWhisper/CMakeLists.txt @@ -0,0 +1,95 @@ +add_custom_command( + OUTPUT ${BUDDY_EXAMPLES_DIR}/BuddyWhisper/forward.mlir ${BUDDY_EXAMPLES_DIR}/BuddyWhisper/subgraph0.mlir ${BUDDY_EXAMPLES_DIR}/BuddyWhisper/arg0.data + COMMAND ${Python3_EXECUTABLE} ${BUDDY_EXAMPLES_DIR}/BuddyWhisper/import-whisper.py + COMMENT "Generating forward.mlir, subgraph0.mlir and arg0.data..." +) +set(PATTERN_ARG "test-generalize-pad-tensor") +add_custom_command( + OUTPUT forward.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyWhisper/forward.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith), empty-tensor-to-alloc-tensor, convert-elementwise-to-linalg, arith-bufferize, func.func(linalg-bufferize, tensor-bufferize), func-bufferize)" | + ${BUDDY_BINARY_DIR}/buddy-opt + -pass-pipeline "builtin.module( func.func(buffer-deallocation-simplification, convert-linalg-to-loops),matmul-parallel-vectorization-optimize, batchmatmul-optimize, eliminate-empty-tensors,func-bufferize-dynamic-offset, func.func(llvm-request-c-wrappers),convert-scf-to-openmp, convert-openmp-to-llvm, convert-math-to-llvm, convert-math-to-libm, convert-scf-to-cf, convert-arith-to-llvm, expand-strided-metadata, finalize-memref-to-llvm, convert-func-to-llvm, reconcile-unrealized-casts)" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${BUDDY_BINARY_DIR}/../examples/BuddyWhisper/forward.o + DEPENDS ${BUDDY_EXAMPLES_DIR}/BuddyWhisper/forward.mlir + COMMENT "Building forward.o" + VERBATIM) + +add_custom_command( + OUTPUT subgraph0.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyWhisper/subgraph0.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt + -test-linalg-transform-patterns=${PATTERN_ARG} | + ${BUDDY_BINARY_DIR}/buddy-opt + -arith-expand + -eliminate-empty-tensors + -convert-elementwise-to-linalg + -empty-tensor-to-alloc-tensor + -one-shot-bufferize + -matmul-parallel-vectorization-optimize + -batchmatmul-optimize + -convert-linalg-to-affine-loops + -affine-loop-fusion + -affine-parallelize + -lower-affine + -convert-scf-to-openmp + -func-bufferize-dynamic-offset + -tensor-bufferize + -convert-linalg-to-loops + -finalizing-bufferize + -convert-vector-to-scf + -expand-strided-metadata + -cse + -convert-vector-to-llvm + -memref-expand + -convert-arith-to-llvm + -finalize-memref-to-llvm + -convert-scf-to-cf + -llvm-request-c-wrappers + -convert-openmp-to-llvm + -convert-arith-to-llvm + -convert-math-to-llvm + -convert-math-to-libm + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O3 -o ${BUDDY_BINARY_DIR}/../examples/BuddyWhisper/subgraph0.o + DEPENDS ${BUDDY_EXAMPLES_DIR}/BuddyWhisper/subgraph0.mlir + COMMENT "Building subgraph0.o " + VERBATIM) + +add_library(WHISPER STATIC forward.o subgraph0.o) + +SET_SOURCE_FILES_PROPERTIES( + template.o + PROPERTIES + EXTERNAL_OBJECT true + GENERATED true) + +SET_TARGET_PROPERTIES( + WHISPER + PROPERTIES + LINKER_LANGUAGE C) + +set(BUDDY_WHISPER_FILES + whisper-main.cpp +) + +add_executable(buddy-whisper-run ${BUDDY_WHISPER_FILES}) +target_link_directories(buddy-whisper-run PRIVATE ${LLVM_LIBRARY_DIR}) + +set(BUDDY_WHISPER_LIBS + WHISPER + BuddyLibDAP + mlir_c_runner_utils + omp +) +if(BUDDY_MLIR_USE_MIMALLOC) + list(APPEND BUDDY_WHISPER_LIBS mimalloc) +endif() + +target_link_libraries(buddy-whisper-run ${BUDDY_WHISPER_LIBS}) diff --git a/examples/BuddyWhisper/README.md b/examples/BuddyWhisper/README.md new file mode 100644 index 000000000..644a42c23 --- /dev/null +++ b/examples/BuddyWhisper/README.md @@ -0,0 +1,84 @@ +# Buddy Compiler WHISPER Example + +## Introduction +This example shows how to use Buddy Compiler to compile a WHISPER model to MLIR code then run it. The [model](openai/whisper-base) is a pre-trained model for automatic speech recognition (ASR) and speech translation (ST). + + +## How to run + +0. Enter Python virtual environment. + +We recommend you to use anaconda3 to create python virtual environment. You should install python packages as buddy-mlir/requirements. + +``` +$ conda activate +$ cd buddy-mlir +$ pip install -r requirements.txt +``` + +1. Build and check LLVM/MLIR + +``` +$ cd buddy-mlir +$ mkdir llvm/build +$ cd llvm/build +$ cmake -G Ninja ../llvm \ + -DLLVM_ENABLE_PROJECTS="mlir;clang;openmp" \ + -DLLVM_TARGETS_TO_BUILD="host;RISCV" \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DOPENMP_ENABLE_LIBOMPTARGET=OFF \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DMLIR_ENABLE_BINDINGS_PYTHON=ON \ + -DPython3_EXECUTABLE=$(which python3) +$ ninja check-clang check-mlir omp +``` + +2. Build and check buddy-mlir + +``` +$ cd buddy-mlir +$ mkdir build +$ cd build +$ cmake -G Ninja .. \ + -DMLIR_DIR=$PWD/../llvm/build/lib/cmake/mlir \ + -DLLVM_DIR=$PWD/../llvm/build/lib/cmake/llvm \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DBUDDY_MLIR_ENABLE_PYTHON_PACKAGES=ON \ + -DPython3_EXECUTABLE=$(which python3) +$ ninja +$ ninja check-buddy +``` + +Set the `PYTHONPATH` environment variable. Make sure that the `PYTHONPATH` variable includes the directory of LLVM/MLIR python bindings and the directory of Buddy MLIR python packages. + +```bash +$ export PYTHONPATH=/path-to-buddy-mlir/llvm/build/tools/mlir/python_packages/mlir_core:/path-to-buddy-mlir/build/python_packages:${PYTHONPATH} + +// For example: +// Navigate to your buddy-mlir/build directory +$ cd buddy-mlir/build +$ export BUDDY_MLIR_BUILD_DIR=$PWD +$ export LLVM_MLIR_BUILD_DIR=$PWD/../llvm/build +$ export PYTHONPATH=${LLVM_MLIR_BUILD_DIR}/tools/mlir/python_packages/mlir_core:${BUDDY_MLIR_BUILD_DIR}/python_packages:${PYTHONPATH} +``` + +3. Set model environment variable. + +```bash +$ export WHISPER_MODEL_PATH=/path-to-whisper-model/ + +// For example: +$ export WHISPER_MODEL_PATH=/home/xxx/whisper-base +``` + +4. Build and run the WHISPER example + +```bash +$ cmake -G Ninja .. -DBUDDY_WHISPER_EXAMPLES=ON +$ ninja buddy-whisper-run +$ cd bin +$ ./buddy-whisper-run +``` + +5. Enjoy it! diff --git a/examples/BuddyWhisper/audio.wav b/examples/BuddyWhisper/audio.wav new file mode 100644 index 0000000000000000000000000000000000000000..069c2329ef65ab9cb3337578b9c48aefedc36a51 GIT binary patch literal 154124 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≥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%0AHZ$ya93P*)UKqogPSPfa-R|5wFO9JtMYyN>? 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 +? +@ +A +B +C +D +E +F +G +H +I +J +K +L +M +N +O +P +Q +R +S +T +U +V +W +X +Y +Z +[ +\\ +] +^ +_ +` +a +b +c +d +e +f +g +h +i +j +k +l +m +n +o +p +q +r +s +t +u +v +w +x +y +z +{ +| +} +~ +¡ +¢ +£ +¤ +¥ +¦ +§ +¨ +© +ª +« +¬ +® +¯ +° +± +² +³ +´ +µ +¶ +· +¸ +¹ +º +» +¼ +½ +¾ +¿ +À +Á + +à +Ä +Å +Æ +Ç +È +É +Ê +Ë +Ì +Í +Î +Ï +Ð +Ñ +Ò +Ó +Ô +Õ +Ö +× +Ø +Ù +Ú +Û +Ü +Ý +Þ +ß +à +á +â +ã +ä +å +æ +ç +è +é +ê +ë +ì +í +î +ï +ð +ñ +ò +ó +ô +õ +ö +÷ +ø +ù +ú +û +ü +ý +þ +ÿ +Ā +ā +Ă +ă +Ą +ą +Ć +ć +Ĉ +ĉ +Ċ +ċ +Č +č +Ď +ď +Đ +đ +Ē +ē +Ĕ +ĕ +Ė +ė +Ę +ę +Ě +ě +Ĝ +ĝ +Ğ +ğ +Ġ +ġ +Ģ +ģ +Ĥ +ĥ +Ħ +ħ +Ĩ +ĩ +Ī +ī +Ĭ +ĭ +Į +į +İ +ı +IJ +ij +Ĵ +ĵ +Ķ +ķ +ĸ +Ĺ +ĺ +Ļ +ļ +Ľ +ľ +Ŀ +ŀ +Ł +ł +Ń +Ġt +Ġa +Ġth +in +er +Ġw +Ġs +ou +Ġthe +re +on +at +en +Ġc +it +is +Ġb +nd +Ġd +Ġm +Ġh +Ġo +ing +es +Ġp +Ġto +an +Ġf +or +ll +ĠI +Ġl +Ġy +ar +Ġg +Ġyou +ed +Ġand +Ġin +Ġof +as +Ġn +om +ic +Ġthat +us +et +ve +al +ow +le +Ġis +Ġe +Ġit +ot +'s +Ġbe +ion +ĠT +Ġwh +ĠA +ent +ĠS +Ġre +ay +Ġwe +Ġon +ere +Ġha +ut +ac +id +ig +os +ke +ver +im +ĠÐ +ĠTh +am +all +Ġfor +el +ch +ro +Ġthis +Ġst +ĠW +Ġu +ad +out +ir +ld +ct +Ġk +if +Ġgo +.. +о +ith +ly +ht +qu +Ġ- +Ġdo +Ġj +Ġhave +ĠB +Ġan +Ġwith +Ġare +Ġr +Ġde +Ġse +Ġso +Ġv +st +ill +ur +Ġli +ĠM +est +od +ally +'t +ust +Ġas +ĠC +ce +Ġme +а +е +il +ĠH +Ġwas +ter +th +Ġcan +ant +Ġcom +our +ight +ĠY +ation +ĠAnd +ol +Ġsh +ÑĤ +op +se +Ġnot +ĠSo +Ġne +un +Ġab +Ġlike +Ġat +ĠD +ie +Ġhe +Ġcon +Ġch +ore +Ġal +Ġor +Ġqu +ĠO +ome +ra +ul +ĠN +pp +Ġyour +ould +ĠP +Ġfr +ge +ers +'re +и +Ġthey +Ġwhat +use +Ġall +ĠThe +ĠL +ess +em +Ġkn +Ġjust +art +Ġpro +very +um +Ġlo +Ġì +Ġmy +ok +Ġex +ab +Ġthere +Ġbut +Ġknow +Ġsu +ĠG +Ñģ +ĠE +Ġma +оР+Ġen +Ġabout +ĠIt +ist +Ġwor +ri +ind +Ġone +ate +and +ink +Ġle +ort +'m +ĠF +ich +ÑĢ +ide +Ġget +Ġout +... +Ġwill +ãģ +ive +н +Ġfrom +ain +ĠWe +Ġup +pe +res +ca +ĠR +Ġif +Ġpl +Ġdon +ack +Ġ1 +Ġ\" +Ġtr +Ġus +ĠWh +ity +ĠJ +ĠYou +Ġhere +her +Ġsome +oug +ak +ard +Ġgoing +Ġun +ment +Ġthink +Ġpe +end +Ġ( +cause +Ġtim +ast +é +Ġour +Ġwant +ame +ies +Ġë +ud +ine +Ġreally +Ġte +Ġsee +ci +Ġby +so +ure +ose +Ġ[ +are +Ġmore +ah +one +ck +ople +аР+Ġthen +Ġthing +Ġthem +ven +ound +ost +ong +ect +Ġright +ag +Ġint +Ġpeople +Ġwhen +ous +pl +Ġtime +Ġim +Ġwho +Ġ2 +ap +Ġbecause +hing +Ġno +ice +Ġlook +Ġhas +Ġwould +Ġhow +act +Ġfe +nt +ough +Ġpr +ĠBut +Ġsay +Ñĥ +Ġnow +Ġman +Ġvery +Ġwork +iz +ĠK +iv +itt +Ġar +ep +Ġcl +Ġwhich +Ġco +ans +'ve +Ġsa +ff +'ll +Ġany +Ġact +Ġye +ber +ach +age +per +Ġalso +fer +Ġthese +Ġad +еР+ther +ace +ick +ake +reat +ire +ue +Ġag +ĠU +uch +ions +ry +00 +na +Ġdid +Ġque +Ġhad +Ġevery +ĠHe +Ġla +Ġway +Ġsp +ble +ĠThis +ass +Ġtheir +ite +Ġneed +Ġpart +Ġwere +Ġback +ip +own +omet +be +ase +Ġmake +irst +ia +ence +ang +ank +Ġgot +Ġpre +Ġcont +Ġother +pt +ĠThat +og +Ġgood +Ġinto +alk +Ġbeen +Ġam +Ġover +ually +Ġâ +ìĿ +Ġund +he +way +Ġgr +ÑĮ +Ġdif +Ġper +Ñı +ĠIn +Ġtw +ond +ars +int +orm +Ġlot +Ġwhere +Ġà +ĠV +Ġsomet +л +ens +Ġgu +Ġac +ug +Ñĭ +ı +Ġfirst +ree +Ġhis +ittle +Ġimp +Ġmo +av +Ġlittle +ĠWhat +Ġmuch +Ġz +Ġê +able +Ġп +Ġpo +Ġcomp +ne +Ġdis +Ġlet +ance +Ġher +Ġthings +Ġstart +ult +Ġapp +Ġres +Ġfo +Ġcould +Ġinter +Ġthose +Ġdes +Ġwell +Ġtwo +Ġkind +xt +ress +ely +ä +Ġbr +Ġthr +Ġв +Ġi +ish +Ġdiffer +Ġro +ĠSt +Ġsomething +Ġtake +Ġbo +ys +Ġshe +Ġtalk +lo +Ñĩ +Ġeven +к +ãĢ +Ġн +Ġbu +ĠIf +Ġdown +ĠCh +ade +ations +Ġuse +ord +Ġoff +Ġactually +Ġspe +du +ated +ater +oss +ning +ü +Ġdoes +ĠÑģ +Ġnew +Ġbet +vel +cess +ple +Ġhapp +ting +onna +Ġes +Ġday +Ġonly +ign +kay +sel +ents +ount +ild +ile +Ġsc +Ġhim +Ġagain +ving +Ġgonna +Ġcomm +Ġhel +other +Ġke +ical +Ġ3 +Ġel +Ġthrough +Ġcome +ark +day +ier +ó +Ġthan +ĠThey +Ġmay +Ġser +íķ +Ġcall +Ġdifferent +Ġshould +ĠThere +ary +ĠNow +ãĤ +thing +we +ory +fter +Ġput +ors +ial +ëĭ +Ġunder +Ġinc +ĠYe +ub +form +Ġvide +ภ+vers +Ġfeel +á +ody +ft +fore +Ġem +get +Ġsaid +ition +Ġrec +ious +atch +Ġtry +Ġhelp +Ġshow +д +Ġbit +ull +в +ÑĤо +gr +Ġplay +ife +ail +ĠYeah +Ġquest +Ġmany +Ġpers +Ġgreat +ÃŃ +Ġest +ng +ĠâĻ +ty +la +ĠOh +Ġ× +à® +ĠBe +ady +Ġmost +ction +ĠNo +Ġdoing +Ġbeing +Ġtoo +ces +Ġbl +.\" +Ġrem +iss +ons +>> +ru +wn +ont +ib +ell +Ġsm +oth +ual +Ġ>> +Ġph +les +oc +ful +Ġsec +ise +Ġadd +igh +ert +Ġsame +âĢ +Ġmean +Ġfind +ek +Ġend +-- +м +Ġstill +az +Ġ' +Ġmin +Ġyears +urn +Ġaround +self +Ġwr +bs +ought +ĠâĻª +Ġfl +ange +Ġafter +Ġpoint +mer +ved +Ġlong +oy +ä¸ +Ġcr +ways +Ġsy +Ġtra +Ġ20 +ave +Ġche +Ġent +Ġbefore +ph +Ġatt +ian +ily +Ġperson +Ġbig +Ġsch +Ġreal +Ġnext +Ġlove +Ġvideo +ĠLet +Ġfin +Ġmak +ible +Ġtoday +erm +ĠAl +ower +ann +ix +Ġpar +Ġstud +ö +Ġimport +te +Ġgive +ves +Ġdie +Ġdec +Ġtell +Ġк +ÑģÑĤ +Ġwhy +ically +ict +red +Ġbas +Ġsure +Ġbel +ating +Ġtak +Ġset +Ġlife +Ġdidn +ا +ob +und +ath +Ġop +Ġо +ait +Ġworld +Ġsupp +io +Ġcour +Ġи +ward +ен +Ġalways +up +Ġhand +ĠHow +cial +Ġcons +ĠÑ +Ġind +Ġ4 +ĠAs +Ġfun +ject +Ġimportant +Ġsur +ew +ates +Ġ5 +Ġdi +Ġmade +Ġins +Ġask +Ġet +Ġnum +Ġcar +ĠOkay +Ġsim +ik +Ġlast +ĠGo +Ġmus +Ġrel +ular +´ì +ĠWell +pect +ĠThank +Ġthree +ã +ãĥ +Ġinv +Ġgen +lic +Ġhappen +ëĬ +ien +ever +ов +Ġstr +ĠAll +Ġinst +ĠâĢ +Ġdef +Ġsl +Ġmight +ung +Ġyear +Ġown +Ġkeep +body +der +ĠÑĤ +Ġд +Ġanother +Ġmod +Ġev +Ġguys +Ġable +ão +que +ident +ĠYes +Ġits +Ġplace +Ġprodu +arn +Ġм +Ġrep +Ġexper +Ġfam +ities +ific +Ġhigh +ied +ool +iew +еÑĤ +ren +Ġdone +Ġ... +ëĬĶ +stem +ĠSe +Ġbetter +come +Ġdel +Ġty +Ġum +Ġho +ĠAn +Ġmon +ings +Ġsk +Ġob +com +blem +ope +stand +'d +ments +Ġele +ĠIs +Ġda +Ġreg +lease +ike +als +ize +ê° +Ġcare +Ġnever +ìĿ´ +ese +Ġmet +olog +ĠWhen +uck +еÑĢ +Ġé +Ġdat +ç +Ġexam +ility +Ġdet +cri +Ġused +ĠDo +Ġtrans +eg +ten +Ñİ +cus +Ġsecond +Ġbest +Ġhard +Ġide +Ġproblem +ê³ +ĠUn +Ñħ +ĠÎ +Ġwatch +ĠSh +atter +Ġpret +Ġder +Ġcourse +ÅŁ +ative +ics +Ġquestion +ute +ìĹ +ĠFor +ather +Ġcol +iend +Ġí +ĠZ +Ġdoesn +arch +Ġinterest +Ġpol +Ġcor +ience +Ġpres +Ġeach +Ġsystem +Ġfact +iel +ably +Ġer +Ġrun +ĠìĿ +Ġtop +ner +Ġthought +Ġeas +ient +Ġcre +ÑĪ +Ġcommun +ye +ready +llow +Ġeverything +omm +Ġmed +ļĶ +Ġcount +its +Ġcompl +hip +ÙĦ +ook +Ġtoget +Ġtogether +amp +Ġgame +Ġalready +ал +Ġcalled +ale +ÅĤ +ĠMy +Ġunderstand +Ġdr +Ġmom +ited +ол +Ġusing +zy +Ġnumber +ãĢģ +ced +Ġcle +но +ëĭ¤ +ince +Ġlooking +Ġpretty +Ġprob +ĠShe +Ġve +Ġgetting +Ġweek +Ġeff +uff +air +ues +ern +ĠQ +oup +ention +Ġside +ом +Ġform +Ġbus +Ġass +Ġed +ason +ween +âĢ¦ +Ġturn +Ġcur +Ġcoll +Ġdire +ĠGod +Ġ10 +Ġequ +Ġб +Ġopen +Ġsuch +ird +ак +Ġear +ÄĻ +gan +Ġpartic +Ġfriend +Ġexp +Ġext +Ġhome +Ġwater +ĠOn +ÑĤÑĮ +ork +ĠпÑĢ +Ġmove +ness +ense +ho +Ġchar +co +ins +Ġboth +Ġ19 +Ġgra +Ġbetween +á» +Ġìķ +ash +ĠRe +ai +alth +ures +ember +Ġav +Ġver +ê +oney +Ġthank +Ġmaybe +uc +ime +ê³ł +Ġaway +Ġname +ouse +Ġacc +Ġmusic +Ġchange +Ġpass +ger +Ġbuild +Ġval +iness +any +Ġfew +´ë +ta +Ġlist +Ã¥ +Ġold +Ġìŀ +Ġsort +Ġmem +Ġca +cept +Ġgener +Ġyeah +Ġwhile +Ġanything +ric +gram +Ġein +cy +uring +ĠDe +Ġpower +Ġcoming +Ġword +Ġ-- +Ġbelie +Ġfound +to +п +Ġmeans +Ġinform +ĠØ +ĠÑĩ +Ġsmall +000 +Ġcame +Ġíķ +wh +Ġworking +Ġexample +Ġpos +Ġdep +ê² +äº +ote +Ġdem +ì§ +ts +Ġvar +aut +Ġtri +chn +Ġhead +Ġwhole +×Ļ +ze +Ġtrying +Ġtem +Ġcou +ets +Ġ6 +Ġfil +velop +Ġcase +௠+Ġprobably +Ġokay +Ġplan +Ġsit +Ġschool +ĠThen +¸ë +me +Ġprocess +Ġfar +Ġread +Ġposs +Ġbre +Ġsol +icht +Ġsupport +ĠTo +ertain +Ġstarted +Ġcap +Ġleft +Ġdata +Ġtimes +ел +Ġwanted +ан +Ġtalking +Ġist +Ġhaving +ump +Ġcontin +Ġsub +Ġз +pr +ëĭĪ +ina +ż +Ġcreat +ode +×ķ +æĺ +!! +Ġterm +ism +од +ĠBecause +Ġwent +ider +Ġprov +Ġchild +Ġden +Ġlight +br +³Ð¾ +oh +Ġbook +ĠÙ +ution +ĠJust +ene +Ġfour +Ġvis +ê°Ģ +Ġhope +Ġmaking +ĠLe +ìķ +Ġopp +au +Ġmoney +Ġprogram +è +Ġstand +IN +Ġsign +Ġlearn +Ãł +ĠDon +Ġteam +Ġна +lud +Ġrest +ices +æľ +ĠÑĢ +Ġaut +Ġlead +ational +de +gy +Ġnice +Ġdas +Ġdist +Ġhum +ĠOne +æĪ +Ġcomes +Ġjo +Ġcent +Ġexpl +Ġmark +reen +led +gin +ìļĶ +Ġlevel +Ġconf +ush +Ġdevelop +Ġtest +eng +vious +ature +ем +ret +Ġje +Ġstuff +Ġclass +ows +Ġê· +Ġsi +Ġles +rop +çļ +Ġpor +Ġwar +ìĹIJ +Ġeveryone +Ġge +Ġcheck +ott +Ġsing +Ġart +Ġfollow +Ġ201 +ĠFr +ais +ìĸ +α +å° +ĠÃł +imes +Ġret +Ġchang +Ġpub +Ġinf +Ġtechn +ada +ives +Ġbeh +æĺ¯ +Ġlooks +ãĢĤ +з +ĠWhy +çļĦ +Ġenough +Ġbra +itch +ä» +Ġadv +б +Ġwithout +wer +meric +den +Ġcomplet +Ġidea +ters +ock +Ġdefin +Ġever +Ġgl +Ġonce +Ġbring +Ġsaying +Ġans +Ġhear +nect +Ġless +go +ream +ado +ìŀ +Ġmind +ente +Ġfull +Ġbad +Ġwom +Ġsomeone +Ġdu +Ġwon +Ġcontro +ortun +Ġhealth +Ġcho +ĠAr +Ġconc +Ġinformation +Ġstop +att +ately +ä½ +Ġgroup +ĠÑĥ +Ġquite +Ġresp +ER +ught +ê¸ +man +ized +ĠBr +Ġremember +Ġfamily +Ġbusiness +aw +Ġspec +Ġau +ĠOr +Äħ +Ġseen +Ġlar +Ġ7 +gg +bers +Ġdra +Ġmonth +Ġsays +Ġiss +Ġlive +Ġline +Ġmoment +Ġexc +els +Ġsound +Ġcool +Ġloc +Ġcertain +Ġdri +оÑĤ +ames +Ġmust +ny +иÑĤ +Ġkid +Ġinclud +ìĿĦ +ator +ÄŁ +ha +ared +Ġseem +й +ìĦ +Ġelse +Ġìł +irl +Ġ8 +Ġvo +Ġquestions +ines +ee +æĪij +ür +ĠAmeric +Ġstory +Ġserv +vern +ages +land +ĠâĢĵ +era +ĠCan +Ġpop +ether +Ġna +Ġorder +Ġmakes +Ġsince +con +ctor +Ġthough +Ġproduct +ли +Ġleg +Ġmeet +alf +ÑģÑı +unch +iter +ove +×ķ× +iet +ам +ital +Ġsuper +ling +Ġpay +Ġpara +Ġjob +ĠHere +Ġsw +ks +ption +ma +Ġbelieve +¬ë +Ġwait +ой +Ġunt +Ġquick +hr +ĠÑį +ĠPro +Ġmen +๠+Ġdays +Ġgoes +Ġspeak +ĠAt +ement +Ġmiss +Ġaw +Ġdesign +Ġproject +оÑĢ +ij +ants +ats +ĠChr +Ġ9 +Ġcut +Ġrequ +Ġне +ĠNot +aster +Ġmill +Ġparticular +Ġpie +Ġstudents +Ġfive +oun +ĠNe +Ġgi +Ġpas +Ġfree +ĠSp +lich +Ġprof +Ġeng +Ġprot +ĠLike +osed +Ġconnect +app +Ġë§ +iting +Ġblo +Ġlos +ists +Ġexperience +rent +Ġstay +Ġfood +ton +ruct +Ġhist +view +ining +most +ivers +bo +ãģĦ +ĠTr +gen +Ġplease +Ġcommunity +Ġce +AN +no +Ġbody +Ġhour +Ġvers +Ạ+cer +Ġê° +Ġreason +ĠRight +Ġlater +ÏĦ +Ġhouse +ĠX +он +Ġstate +fic +å¤ +ÅĽ +ield +Ġpri +Ġpast +Ġwalk +ology +ering +anna +Ġter +Ġhold +Ġorgan +ben +ο +ón +Ġeffect +Ġyourself +Ġplus +aj +ando +ural +Ġroom +lect +ê²Į +?\" +side +Ġbecome +ÑĨ +Ġ +ood +Ġconst +Ġnight +utes +ж +Ġbreak +Ġpain +Ġstep +ired +Ġnothing +Ġuntil +Ñĸ +ав +ÙĬ +Ġduring +ì§Ģ +less +oll +нÑĭ +ι +fect +iver +ıĦ +ither +ying +Ġbegin +×Ļ× +ivid +Ġç +Ġsal +Ġta +Ġpot +Ġ$ +Ġmar +Ġclear +Ġface +Ġgrow +Ġ* +Ġinside +Ġfriends +Ġleave +enn +Ġeasy +Ġarea +ality +oud +Ġeat +ÙĨ +Ġpur +orn +Ġsaw +Ġanswer +Ġfront +Ġbeaut +¼ë +Ġmatter +Ġson +ĠNew +Ġresult +ides +che +Ġfut +ps +Ġfocus +Ġinteresting +å¥ +Ġap +\". +Ġcreate +оÑģ +Ġpress +ross +Ġpick +line +Ġtook +ĠMay +row +Ġich +ĺë +Ġref +Ġmor +ract +arent +AR +Ġexact +Ġspace +work +ни +Ġbir +Ġdev +г +Ġtold +Ġpublic +cially +Ġview +ĠHey +med +llo +cc +Ġfac +Ġcouple +Ġheart +ler +Ġready +Ġalmost +aring +Ġhalf +ĠMe +avor +ique +Ġcharac +Ġpract +ON +ane +Ġil +на +Ġvi +lish +head +Ġleast +Ġbasically +ased +right +Ġyet +Ġtaking +Ġcountry +Ġwin +Ġisn +Ġpossible +Ġcam +Ġincre +Ġpat +Ġwanna +Ġconsider +Ġabs +Ġwithin +Ġhuman +Ġthinking +Ġoh +¡ľ +Ġqui +ases +Ġ0 +itely +ä¸į +Ġkill +Ġmil +Ġinvest +ister +Ġsuc +ional +elf +Ġwhether +Ġcontrol +Ġagainst +ots +ëĭĪëĭ¤ +ior +Ġpresent +Ġا +Ġwatching +ube +erv +Ġnicht +Ġgovern +ĠThese +Ġ: +uit +ugh +Ġworks +oo +Ġwir +Ġair +ĠTe +аз +ision +where +Ġtot +joy +ìĭ +Ġvol +Ġе +Ġclose +ĠAd +Ñī +ined +Ġuna +Ġê·¸ë +°ë +orry +Ġbro +Ġfilm +ift +20 +Ġtype +Ġhappened +ĠAm +Ġgirl +ĠAre +wards +Ġpour +Ġcolor +elt +аÑģ +Ġsense +lex +ĠWith +uss +rib +Ġrese +Ġnorm +Ġfuture +Ġdeal +ending +ey +Ġx +ero +ĠCl +uk +Ġwhatever +selves +Ġyoung +ìĬ +ĠMar +ĠChrist +Ġguess +Ġperform +Ġener +ron +Ġhit +Ġwond +Ġdirect +ĠEvery +Ġoften +Ġfa +Ġalong +Ġclick +ĠLook +Ġsitu +Ġhappy +ead +Ġago +Ġenc +Ġmyself +Ġcover +об +Ġmid +Ġcost +Ġten +ĠSch +Ġexpect +Ġwasn +Ġstrong +iful +Ġopportun +inal +yle +Ġshare +Ġtrue +Ġappro +Ġchall +Ġminutes +Ġchann +ĠëĤ +ε +li +Ġmess +ories +pecially +Ġwrong +Ġyes +ĠìĹ +iron +Ġallow +Ġsubs +Ġfore +Ġfight +Ġsocial +Ġcra +ana +Ġaff +Ġess +Ġways +Ġshort +Ġfall +Ġlaw +ĠWho +Ġenjoy +Ġcal +Ġaccess +fe +Ġnon +Ġacross +ery +viously +ĠEx +ided +Ġlink +ĠPr +Ġterms +aces +Ġland +azing +Ġ15 +Ġmult +Ġspecial +åĢ +iving +ìĿĢ +Ġtyp +Ġste +ĠÄ +Ġforward +åı +Ġfre +好 +Ġresearch +à¯į +аÑĤ +Ġmain +Ġrecord +Ġhu +Ġdefinitely +Ġeither +Ġlisten +Ġkey +Ġmarket +ĠÑĩÑĤо +ization +Ġvideos +Ġguy +Ġfig +Ġstra +ĠPl +ully +amos +Ġmention +Ġsong +Ġintern +ral +urs +Ġhon +Ġvalue +Ġbar +cle +ож +Äĩ +ľë +Ġzu +им +ä½ł +Ġsingle +Ġauch +cuss +Ġgets +Ġsometimes +å¾ +amb +mm +cing +Ġperfect +ĠBl +outh +ìł +Ġsci +par +Ġred +Ġpost +Ġmot +Ġelect +ĠEu +itive +ĠSome +Ġdescri +Ġcurrent +és +Ġtre +ĠEn +Ġmit +EN +Īë +ium +Ġheard +Ġsimple +lar +Ġeverybody +ilar +Ġneeds +Ġdiffic +ĠGood +ument +cent +Ġoper +аÑĤÑĮ +ety +Ġblack +Ġgiven +ones +Ġwel +éĢ +ĠìķĦ +Ġ30 +AT +Ġstat +ouch +ĠMr +аÑĢ +Ġsho +Ġcond +×Ķ +my +Ġchildren +Ġeu +ед +ìķĦ +tern +Ġuh +Ġhar +Ġprom +Ġpull +rew +Ġcompany +Ġbeautiful +ustom +íķĺ +ки +Ġstre +Ġamazing +ries +Ġsuccess +Ġmach +not +Ġdiscuss +Ġnat +¦¬ +Ġune +Ġdifficult +Ġris +ν +Ġcamp +Ġbuy +ä¸Ģ +Ġmag +po +ĠYour +Ġbehind +ica +ın +ĠOK +Ġlang +Ġwomen +Ġenv +Ġrece +Ġchannel +ially +ule +Ġ12 +thers +Ġbott +Ġreport +ently +fully +The +Ġsent +Ġevent +Ġenergy +lt +Ġwords +arr +dle +Ġahead +ards +ر +äºĨ +Ġtool +conom +еÑģ +Ġexactly +Ġfavor +Ġlow +Ġproper +ĠìŀĪ +Ġ! +Ġrelations +Ġmas +Ġkids +Ġentire +ude +Ùħ +ĠWhere +Ġones +Ġcity +olut +Ġsix +ability +ör +ili +ĠEs +Ġhappens +ains +Ġmodel +Ġpict +Ġespecially +Ġ100 +kt +Ġsoon +by +rodu +Ġann +Ġsubscri +ĠQu +Ġavail +iment +Ġvoc +ka +Ġ200 +aper +ĠInd +Ġì§ +hor +į° +jor +ил +Ġsqu +AU +arning +Ġг +IS +Ġл +ей +yes +åħ +ĠÐĴ +Ġorig +ого +Ġasked +ilt +ог +Ġcontinue +Ġìĺ +ram +Ġothers +ES +ohn +Ġlay +Ġbased +Ġpu +Ġappe +Ġlim +Ġprop +Ģë +min +Ġhot +ĠLa +Ġfast +Ġprotect +Ġamount +Ġaqu +Ġfund +Ġcustom +Ġcult +Ġhands +Ġhaven +Ġaud +Ġoutside +ĠAfter +aps +Ġanim +ploy +Ġhat +ĠFirst +Ġtreat +Ġep +Ġmater +Ġbuilding +Ġë° +åIJ +ìĦľ +za +ughter +ĠPe +ney +eter +atic +Ġeduc +기 +Ġmov +ĵ¤ +ama +ration +Ġsn +ÙĪ +Ġsum +Ġphot +ĠÐĿ +Ġ. +æľī +Ġfinish +itting +å® +Ġlarge +Ġìĸ +Ġwhite +ara +Ġmais +ĠHi +Ġdam +ĠاÙĦ +Ġbox +ĠHello +Ġsle +Ġopt +ried +¥¼ +Ġactiv +Ġnão +ĠCom +Ġplaying +Th +Ġavailable +Ġport +åĪ +ĠAh +Ġlas +Ġearly +Ġwonder +±° +Ġ18 +cul +Ġfunction +Ġmorning +lle +ients +ux +Ġcir +itions +Ġdeep +Ġpolit +yor +mp +aking +Įë +ĠMan +Ġmillion +Ġ/ +Ġindivid +Ġpan +Ġgovernment +Ġwrite +ĠTod +ament +ĠÏ +Ġwind +ĠEng +chen +Wh +ìľ +Ġident +ãģ§ +vent +urch +Ġhy +Ġya +Ġtrad +Ġrelationship +ú +Ġdou +OR +Ġswe +Ġneg +ination +Ġtext +ipp +Ġfine +ás +ĠDr +ĠCome +Ġmonths +,\" +ени +Ġhours +Ġpod +irt +Ġinvol +Ġcollect +Ġauf +Ġpa +Ġhistory +mb +ify +Ġ? +Ġbelow +asure +aby +Ġlangu +Ġant +Ġcomb +ato +Ġexist +Ġëĭ +Ġtakes +Ġcharacter +aff +Ġfield +Ġeconom +ief +Ġpiece +åľ +Ġreach +Ġê² +ony +Ġmaterial +Ġdig +Ġphys +Ġimpro +Ġsimilar +IC +Ġnet +yn +Ġposition +ÃŁ +Ġbene +read +Ġlearning +ume +Ġclean +ÑĤоÑĢ +Ġcook +Ġseems +Ġol +ĠUS +ĠJes +Ġà® +ential +iversity +acy +ĠÑı +olutely +rect +ĠPlease +Ġrepres +Ġtouch +men +Ġа +ión +ĠThanks +Ġang +Ġmajor +Ġitself +ills +\", +ians +Ġscreen +Ġhor +Ġknown +Ġenviron +Ġfinal +Ġfigure +ĠTw +Ġeyes +Ġimag +Ġseeing +Ġhair +rem +Ġapplic +ends +put +Ġnews +Ġcompletely +ughs +Ġknew +ified +ĠJe +ĠDid +Ġsituation +Ġflo +ms +Ġphone +Ġball +do +Ġparent +Ġsorry +ury +ин +ips +ад +Ġinstead +Ġhuge +Ġtu +Ġãģ +ĠGr +Ġdetail +ĠÐŁ +Ġindividual +Ġfire +Ġclos +Ġwer +une +Ġrunning +Ġconvers +Ġrecomm +Ġcomo +Ġsomebody +ĠJohn +ĠìĿ´ +ĠOur +ples +ĠPh +Ġanal +Ġ50 +Ġoffer +Ġ< +itional +gest +Ġvous +let +icy +Ġfeeling +LE +ros +Ġthird +ок +Ġseries +ĠAny +ised +old +Ġdraw +Ġservice +Ġcannot +bal +ãģĨ +Ġliving +ım +Ġdifference +Ġopportunity +Ġnear +orth +ken +Ġlocal +ت +ĠCon +Ġobject +Ġdass +ãģĻ +IJ× +Ġquickly +raph +Ġissues +éĢĻ +ĠAmerican +Ġprep +ences +Ġprofess +lling +of +Ġfoot +bre +Ġusually +Ġgeneral +da +ances +Ġdest +Ġocc +Ġmembers +Ġdans +Ġequal +zt +Ġbecom +Ġmoving +Ġspecific +ÃŃa +Ġfur +Ġnecess +Ġcommon +Ġattack +ĠÑįÑĤо +ĠToday +Ġuns +ĠGu +iod +Ġaccount +Ġgrand +Ġself +ĠEl +Ġtast +Ġcontent +Ġcu +Ħë +ĠMaybe +ĠJesus +ores +port +©´ +Ġgives +Ġnormal +ÑĢÑĥ +Ġimpact +är +Ġdies +Ġlab +sh +ios +ĠPres +ĠUnd +ĠOf +Ġfinally +Ġdoll +Ġvocê +ply +ĠAg +Ġtaken +Ġground +fort +Ġgave +ĠInst +Ġlost +Ġworked +Ġliter +Ġissue +Ġindust +Ġreturn +Ġhappening +Ġwants +ив +Ġproblems +ĠCar +Ŀ¼ +ĠAlso +Ġsize +Ġobviously +ĠSu +ĠSc +Ġrecommend +ources +astic +.... +Ġmi +lier +ĠEven +cia +Ġhur +va +Ġmass +Ġwouldn +unt +cks +Ġfelt +osp +light +олÑĮ +nie +Ġbottom +ĠбÑĭ +ored +ison +Ġgrad +Ġuma +Ġva +ĠìĤ +ression +ulation +ID +idence +Ġbur +Ġgone +lu +ìĸ´ì +Ġredu +Ġja +ìĿĺ +ita +Ġsoft +Ġça +ico +eral +ñ +af +Ġpoints +gu +Ġdé +apt +ax +ĠAlright +Ġcamera +Ġach +Ġпо +Ġsever +50 +Ġsie +Ïģ +Ġmal +Ġcomput +Ġmiddle +Ġcouldn +ming +Ġìĭ +ĠHis +Ġgames +Ġintrodu +Ġcell +por +Ġsleep +Ġë³ +iding +Ġou +Ġdeg +Ġdrink +Ġenvironment +ĠUnited +Ġtalked +Ġchoose +Ġjour +ege +ĠMin +Ġinte +Ġrather +Ġoffic +ка +aching +Ġmentioned +Ġfill +Ġtrack +Ġnie +Ġut +ĠвÑĭ +ibility +Ġvac +Ġrad +Ġpack +Ġsend +ĠDas +ĠAb +Ġengine +ãģĹ +Ġcompet +ô +ĠвÑģ +Ġdoor +Ġlonger +å°į +Ġlanguage +Ġextra +play +Ġwebs +umb +room +çľ +Ġbeginning +Ġrefer +AM +nen +igher +face +erc +Ġforget +Ġcomment +ек +лÑı +ror +że +ĠGe +Ġdark +Ġanyone +ante +ges +ìĬµ +Ñij +bed +je +ructure +Ġprim +ida +è¦ +ãģ¾ +Ġmix +Ġstarting +ĠìĿ´ë +Ġprovide +action +Ġmother +Ġperiod +Ġstick +ĠYouT +Ġtechnology +ê¹ +Ġbed +Ġgiving +Ġexplain +zen +imate +Ġrepresent +load +ĠHowever +Ġlives +uth +irit +ogn +Ġlik +Ġrespons +Ġpriv +Ġtom +ção +iam +Ġexcited +Ġcard +ground +Ġ×Ķ +Ġsens +Ġteach +ido +hod +Ġepis +Ġwelcome +Ġwall +ä¹ +Ġchance +hen +ĠС +ĠÄij +Ġsimply +ĠÑĤак +ring +ja +book +Ġseveral +ste +Ġcreated +ĠоÑĤ +Ġpush +== +Ġhigher +uf +ource +oke +Ġonline +Ġrele +Ġton +ensive +Ġfavorite +Ñĥд +Ġlooked +Ġvon +âĢĶ +Ġfür +Ġbutton +Ġbill +Ġchanges +!\" +Ġslow +ables +Ġdeath +ands +ateg +Ġthemselves +ãģ£ +Ġcop +ãģ® +Ġpersonal +ughing +Ġ11 +gar +ades +Ġneeded +Ġstudy +aged +ÑģÑĤв +ino +Ġdisc +ki +Ġaddress +ר +itten +esome +Ġж +¤ë +ura +Ġmu +Ġcontinu +for +Ġmatch +ãģ¦ +Ġstraight +IJë +ners +Ġdog +Ġdeb +ĠCO +Ġos +ged +came +Ġcorrect +ette +ĠSee +Ġincluding +ĠEuro +ester +Ġjump +ĠWhich +Ġкак +son +ya +ING +Ġeine +osh +ency +Ġmedia +Ġsubscribe +éĤ +Ġprin +Ġhab +ĠPer +ĠWas +Ġpage +itor +Ġtowards +Ġtried +enge +artment +Ġvari +Ġpaper +Ġpicture +Ġversion +Ġbrought +ware +ĠStates +Ġsich +ledge +Ġpercent +Ġgod +ec +ĠComm +Ġdecided +Ġselect +íķľ +). +urity +Ġfurther +Ġcomments +lement +Ġdream +Ġcenter +mi +Ġcas +Ġwoman +Ġroad +Ġfail +Ġbecame +lus +ilities +ãģ¯ +ĠCo +Ġmanage +Ġrecogn +Ġaction +Ġbenef +Ġearlier +׾ +Ġspeed +Ġment +Ġsoci +Ġshoot +ui +Ġä +Ġapply +vo +xim +Ġcause +Ġsurpr +Ġhaben +DI +Ġfather +ĠNext +ĠYouTube +Ġcode +Ġrole +gress +Ġgreen +ett +Ġbuilt +Ġflow +Ġbase +Ġtraining +Ġround +ĠWill +Ġpath +ĠRo +Ġinterested +ìĸ´ +Ġrespect +Ġchanged +ission +Ġstudent +ograph +Ġapproach +Ġshows +å°± +Ġtar +Ġcrit +Ġglo +ìĬµëĭĪëĭ¤ +Ġdead +ĠPresident +Ġthous +Ġbal +ster +ex +Ġabsolutely +Ġmic +Ġpractice +Ġquality +Ġlower +ogle +Ġsepar +ball +medi +Ġreview +ĠApp +Ġok +âĢĭ +Ġexperien +Ġconcern +entially +more +ĠJo +apan +ĠIch +istic +Ġfair +Ġwebsite +ires +ĠBy +Ġtravel +Ġrisk +Ġmir +Ġboard +Ġsen +Ġparents +ĠWow +Ġfeed +Ġsave +Ġserious +Ġinit +EL +undred +AS +Ġvan +orrow +Ġworth +Ġsearch +Ġ16 +Ġparts +ÑģÑĤÑĮ +Ġcompan +Ġmovie +Ġmethod +Ġill +Ġwish +dy +Ġitem +Ġminus +anger +Ġvoice +Ġskin +Ġareas +Ġeight +Ġobs +Ġ, +ай +Ġoil +Ġcy +Ġbaby +sy +Ġemploy +ĠKe +Ġplaces +Ġfix +Ġestá +ãģ¨ +ived +Ġlots +Ġseason +unk +alt +Ġtable +ĠТ +â +Ġattention +ãģª +ĠHer +Ġage +Ġpra +back +cil +Ġnetwork +rit +Ġdoc +Ġaren +igen +ĠëĦ +د +ender +Ġtotal +Ġprice +Ġcrazy +ìļ +iqu +though +You +Ùĩ +ãĤĵ +Ïħ +Ġsat +Ġbi +ĠDie +Ġsha +Ġthanks +uh +Ġstage +аж +ĠFl +Ġleav +Ġboy +Ġaf +ön +ĠGet +Ġaccept +Ġenter +Ġtur +ĠsiÄĻ +Ġhonest +ãĢĮ +Ġsam +Ġrepl +ging +Ġdevelopment +ĠAct +ora +ãĢį +ä¾ +Ġknows +Ġimage +ĠLord +иÑĤÑĮ +Ġweeks +Ġsex +Ķë +Ġhundred +Ġsounds +Ġlearned +Ġbud +ĠÑģÑĤ +Ġincred +âĻ +Ġnos +Ġdrop +Ġben +ĠÐĺ +Ġsafe +ata +Ġfuck +soci +Ġdan +Ġcross +10 +mo +vert +Ġ17 +zie +åķ +Ġdom +ĠBo +Ġsetting +Ġinvolved +arily +Ġsind +Ġsus +Ġworry +eth +ê¹Į +Ġsun +Ġhier +Ġcertainly +oul +orts +ĠEr +ĠUm +Ġcaus +Ġnatural +Ġü +Ġcry +ĠSec +Ġsom +æ² +Ġeducation +аеÑĤ +Ġmultip +Ġalone +Ġeye +Ġrate +ĠEurope +è¿ +mon +Ġfit +izing +pped +Ġpressure +the +иÑģ +ites +ĠAf +reci +attle +Ġservices +ĠGoogle +éģ +Ġcases +Ġdrive +Ġchalleng +uz +ĠMo +ìľ¼ë +val +åĢĭ +Ġfol +Ġì¢ +ffic +Ġra +Ġsin +Ġblue +Ġaffect +Ġmis +Ġshot +Ġоб +asing +Ġsignific +ĠChe +Ġê³ +Ġpositive +ì£ +Ġwie +Ġ40 +ording +ĠFrom +êµ +Ġbrand +Ġtrust +Ġple +Ġcommunic +Ġweight +Ġasking +Ġtax +ĠJapan +ãģŁ +Ġíķĺ +ops +ÏĤ +Ġputting +Ġroll +ĠAmerica +reg +ŀ× +atures +ension +ĠSomet +Ġoriginal +ping +ĠÅŁ +Ġproducts +ãĥ¼ +Ġcontact +olution +Ġgoal +Ġpow +Ġperformance +Ġblood +ators +ĠMich +Ġtemper +ĠDan +Ġsugg +ÑĤи +Ġimm +Ġoffice +Ġarri +Ġcomfort +ĠÐĶ +Ġsuggest +Ġplat +Ĥĺ +19 +Ġom +Ġseven +ĠCent +ille +Ġconcept +Ġbag +ün +ively +Ġdiv +mos +æī +Ġfeels +Ġir +akes +ley +Ġparticip +ĠÐļ +fl +just +Ġsil +ĠPa +AL +Ġgotta +Ġfan +Ġchallenge +Ġcompanies +ĠPeople + +Ġheroes +ĠBoston +Ġdependent +Ġmotivation +flix +Ġseam +кие +Ġdrain +oded +Ġguilty +ĠJenn +ingen +Ġgranted +ĠKelly +ĠSav +ĠUncle +ĠHonestly +ELI +Ġnavigate +Ġblessed +core +Ġearning +Ġsignals +Ġdisk +ials +Ġages +æħ +Ġparticle +ĠÑĩеÑĢ +Ġcann +Ġtier +Ġstatements +ê³łìļĶ +ĠëķĮ문ìĹIJ +ĠCho +Ġpolar +anç +ĠKenn +ĠNi +ĠFight +organ +éķ +ĠCha +ĠSÃŃ +ãĥª +Ġslic +Ġcertific +Ġtemplate +ĠFederal +Ġconsideration +Ġexplo +ĠMain +ĠNE +Ġalongside +Ġdressed +ĠPoint +Ġenvironments +Ġpróxim +Ġdaar +Ġprompt +Ġpursue +Ġentertainment +Ġthroat +Ġproblema +Ġmart +ì¼ +Ġprovider +ØĮ +Ġ×Ĺ +inte +making +Ġstroke +Ġtissue +Un +Ġprecious +ĠArts +inking +ĠÐŀн +ĠиÑģ +nah +ĠÐķÑģли +Ġcorners +Ġtricky +inch +lijk +Ġpressing +level +ANG +Ġradiation +ìĦł +Ġconfront +Ġvet +Ġrepresentative +Ġpropag +Ġcrap +ĠDec +Ġramp +епеÑĢÑĮ +ués +essen +cription +Ġbills +ĠMatthew +Ġanime +ất +Ġlowest +has +screen +ograp +ало +inton +ĠJah +èĢħ +itÃł +Ġkay +Ġrotation +ĠWere +abei +Ġtrials +Ġlever +ighty +Ġspoon +Ġhunt +cling +Ġdism +ĠболÑĮÑĪ +Ġassault +Ġíĺķ +Ġweekly +Ġmismo +Ġgenetic +ulpt +ĠStudent +Ġrealistic +Ġauthentic +æīĵ +asta +Ġarrested +Ġguidelines +Ġ׾×IJ +Ġдав +ĠComing +für +Ġrequests +ĥIJ +Ġanalyze +Ġinteress +Ġhalt +ĠOper +onom +Ġduck +Ġwithd +ser +ĠÏĮ +ĠHistory +Ġyoutube +ãĤį +Ġsaber +walk +font +Ġoverview +39 +üy +etti +Ġfrozen +Ġflesh +ÄŁi +ĠPM +ĠìĻĢ +é¢ +ÑĨии +Ġ기ë +íģ¬ +Ġprose +oooo +rates +WS +Ġautomatic +Ġcollecting +Åij +Ġneighbors +». +ĠExpl +Ġcircul +cover +weg +Ġsticks +Ġeller +Ġwww +Ġdorm +ĠExper +Ġstatistics +Ġemails +Ġgrave +imiz +HS +Ġuit +,' +Ġlaser +èī +ĠÑĤем +ÑĭÑĪ +ÑīÑij +Ġgenau +Ġtienen +Ġmeditation +ĠOrgan +Ġestimate +Ġ무ì +lets +ĠnÃły +Ġmindset +Ġreson +Ġmés +Ġnumerous +Ġvielleicht +ĠThird +uous +ĠDead +анд +HN +Ġracing +Ġagents +ĠUt +Ġtear +ĠHP +Ġchemistry +Ġsurvival +æĸ° +Ġconvinced +Ġ; +Ġregulations +ĠES +åĴĮ +300 +Ġense +Ġìµ +Ġdict +GA +ĠahÃŃ +åĭķ +Ġtej +ĠоÑģÑĤ +ĠElect +Ġintellectual +Ġbias +Ġburden +çĤ¹ +Ġìĸ´ëĸ» +Ġcheer +Ġsoph +Ġportfolio +uba +Ġestos +TV +For +Ġash +Ġkommer +Ġcollective +Ġwrest +ĠJetzt +ĠWat +reich +Ġprimer +active +Ġmie +icked +Ġhunting +Ġtestim +Ġcompassion +Ġر +Ġbrut +Ġsalad +обÑīе +Ġsolving +Ġfloating +ç· +Ġattractive +ÙĪÙĦ +Ġperd +iffer +Ġsculpt +hhh +ĠWeek +Ġenthus +Ġnad +Ġmerch +ĠíĻķ +Ġmile +好äºĨ +Ġθ +ĠëĤĺë +éĩį +38 +Ġchains +ĠAlmost +Ġtickets +rin +ĠCC +Ġdistributed +abetes +Ġtemperatures +Ġgained +Ġflexibility +Ġscreaming +Ġabroad +uno +Ġentrepreneurs +ĠNetwork +ĠCanadian +Ġprev +Ġsö +ĠÑĤебÑı +ĠPoke +ĠPod +ĠTurkey +çı¾åľ¨ +Ġabstract +Ġsnake +ĠAmy +ĠëĬIJëĤĮ +Ġbrave +ĠìŀĪìĸ´ìļĶ +ĠKal +Ġ2007 +ário +Ġmarked +gines +Ġalloc +ONG +Ġscientist +Ġesca +Ġracism +×ij× +ĠSams +ĠPenn +Ġloads +Ġந +über +Me +ixò +Ġperò +anne +Ġexpressed +меÑĢ +Ġmoet +Ġreturning +nia +Ġexpon +Pro +Ġloyal +ML +Ġlamp +Ġshy +Ġcomposition +ĠLy +Ġmagnetic +Ġpremier +Ġmeasured +Ġsummary +Ġattacked +Ġfinishing +ÐĹ +ç¥ +Ġsits +Ġhydrogen +Ġmai +ĠDeutsch +ası +Ġobtain +vie +Ġsoit +Ġë°Ķ +Ġlane +Ġconsegu +во +Ġease +akin +ĠFa +Ġuntuk +Ġburst +Ġcum +alım +úblic +idi +ĠRoyal +ĠKon +Ġcommonly +Ġremoving +Ġjur +ilib +Ġanch +íĸī +ượ +ĠÐľÑĭ +ĠAnth +ĠSÃ¥ +Ġinterrupt +Ġstere +ĠOS +onym +tery +ĠMaria +ê²ĥ +Ġexploring +Ġtransparent +Ġfate +ĠJung +Ġgrup +Ġdarker +ĠDoug +Ġmane +æĶ¾ +ại +dri +look +ĠDesign +Ġtutaj +Ġhorizontal +reon +orte +ĠCorrect +ĠSteven +Ġvine +02 +iÄĩ +Ġsiempre +ĠKey +åĥı +ĠGames +Ġnaar +Ġshocked +elve +ĠRose +ìĭ¬ +Ġstopping +ohl +ĠMix +Ġsuffered +Ġsigma +Ġweakness +ĠOw +ีà¹Ī +IF +Ġà®ħ +aded +ĠNetflix +anes +Ġremained +iry +Ġrip +ellt +Ġsilent +Ġproven +Ġtoxic +Ġalumin +Ġmultipl +aland +Ġ34 +06 +ĠBru +Ġìłķë§IJ +Just +boy +Ġshoe +Ġcreature +Ġheaded +ĠоÑĤк +æ± +Ġessence +Ġremarkable +Ġnúmer +Ġdrew +Ġpuzzle +ĠLibrary +ĠFu +ashes +kk +ĠIst +¦° +ĠBry +Ġceremony +Ġà®İ +Ġcri +equ +ãĤ¢ +Ġprize +Ġdimensions +ogram +Ġleather +Ġpopulations +uum +Ġvegan +Ñıд +Ġcómo +åĦ +Ġstrip +å£ +Ġvacation +ħķ +Ġmeals +ilipp +Ġents +aram +richt +Ġgrain +ĠSpain +Ġcheek +ĠAff +ION +ĠBring +Ġ38 +ielen +ulu +ĠболÑĮÑĪе +Ġannouncement +ĠÑĤÑĥÑĤ +ĠProphet +ardo +37 +Ġwoke +Ġtranslation +ĠNOT +ĠCL +ĠdÃ¼ÅŁ +ÑĨÑĸ +acer +ĠLoc +Ġperception +NO +Ġdiesen +Look +heart +aved +Ġboundary +Ġflows +Ñijм +Ġarguments +Ġelections +ıs +Ġheck +Ġsuitable +Ġfiber +ĠStra +xy +ĠHum +Ġmonthly +uper +Ġgolf +Ġlately +ĠGard +ĠRen +ĠAst +ĠFant +аÑģÑģ +Ġobser +ë¡ľ +Ġeasiest +įĶë +Ġwebsites +pol +Ġcocon +Ġà®ĩ +ĠVeg +Ġwalks +Ġintro +Ġdirected +ĠAnna +Ġëĵ¤ìĸ´ +ĠEastern +ĠSaint +ĠBow +Ġroast +ĠURL +Ġjeden +uras +aja +Ġsemi +Ġrapidly +Ġtargets +ĠControl +Ġbah +Ġreflection +Ġcreativity +holders +Ġìĺ¬ë +Ġamongst +Ġfeeding +ÑįÑĤомÑĥ +Ġвиде +Ġë§Įëĵ¤ +ĠSmart +Ġreliable +Ġvezes +Ġר +chuckles +azione +ĠWilliams +Ġaç +Ġslee +еÑī +Ġtimeline +Ġthorough +á»į +ĠOt +ạn +Ġimagination +Ġmechanics +rist +Ġclaimed +ÏĦη +ête +ĠHurry +ĠiPad +Ġconstru +ĠCla +ĠAls +ä¼ļ +utz +Ġcultures +Ġìĸ´ëĸ»ê²Į +Ġbelongs +Ġyer +ĠDoesn +Ġgeomet +Ġbid +Ġfoam +Ġhob +ĠBritain +Ġsubstance +Ġanniversary +ĠëĦĪ +Ġnoted +Ġgovernor +Ġstocks +31 +Ġdiye +ìĬ¤ë +Ġreb +zel +Ġmultiply +Ġoperator +Ħ¤ìļĶ +Ġwaters +Ġdär +Ġunser +ĠElizabeth +é«ĺ +Ġincreasingly +ĠGro +Ġengines +irs +Ø« +Ġtreasure +PC +inction +iri +Ġaccum +Ġvariation +Ġpom +Ġtitles +ĠFest +ós +Ġelder +nym +run +Ñıв +Ġinnovative +Ġnombre +Ġcoinc +Ġfranch +Ġentonces +Ġnichts +Ġexclusive +ĠCheers +ĠBi +uje +æŃ¡ +Ġpok +ĠPrem +Ġrocket +ELIPE +Ġhospitals +rium +Ġjuste +Ġhammer +Ġquantum +Ġresponses +lly +endi +Ġactively +Ġfridge +iate +long +Ġquem +Ġdeaths +Ġsuperior +cken +ìĿ´ìĹIJ +ktop +Ġgathered +£¨ +Ġdazu +Ġrecipes +Ġbuzz +cen +Ġanytime +onsense +Ġcircles +Ġsolved +Ġìĭł +Ġcoronavirus +ĠLuke +Ġbubb +Ġcontempor +rzy +ĠJane +Ġдом +Ġscrews +Ġhybrid +Ġcasual +Ġselbst +being +ĠÄIJ +ĠColumb +ĠÑħоÑĩ +Ġbucket +Ġevaluate +Ġidol +Ġreputation +ĠìĨĮë +ÙĪر +Ġhecho +Ġpoem +Ġsubjects +plant +ĠBeh +ĠSpeaking +Ġbatteries +Ġfollowers +öl +Ġgently +Ġsixt +Ġparameter +Ġikke +ĠTour +ĠDJ +otte +ĠJahren +Ġpreparation +ĠдÑĥм +Ġ800 +cop +iking +Ġ문 +ĠнÑĥ +ĠлеÑĤ +åIJĮ +ĠIde +Ġì¡°ê¸Ī +Ġlaughter +Ġmolecules +ĠRest +Ġobserved +dzie +Ġadvertising +erto +Ġmoins +ĠMIT +Ġexcit +Ġtum +Ġtyl +Ġinvested +Ġpharm +Ġunexpected +Ġphi +otype +weise +Ġgeç +jourd +Ġhorses +nÄħ +=\" +ĠSM +Ġfib +Ġclips +çķ¶ +å¦Ĥæŀľ +Ġregime +Ġrotate +rou +nik +Ġarmor +ðŁĺ +еÑĢа +度 +ĠOch +Ġrichtig +üzel +aneously +mek +éĮ¯ +ĠXiao +Ġexisted +worth +ãģ£ãģ¨ +Ġnaught +ĠheiÃŁt +ĠBal +Ġresid +ivot +omatic +Ġhired +Ġgradually +Ġonions +Ġcompat +Ġintim +Ġjew +Ġcontribution +ĠIre +acji +Ġslice +Ġimmun +ĠRus +Ġgrows +ĠSimilarly +Ġhardest +Ġstruck +Ġmeasurement +...] +they +ĠìłĢë +Ġsneak +Ġapplies +Ġнем +æĵ +×ijר +ĠЧÑĤо +Ġoutro +Ġinnocent +Ġmog +ĠSamsung +Ġmercy +Ġhandling +Ġintervention +idays +got +Ġcurric +Ġboundaries +Ġconfusing +Ŀ¼ëĬĶ +æĩ +Ġstitches +ÃŃvel +Ġtunnel +itä +Ġgost +imy +Ġczas +Ġmé +Ġcatal +ĠSimon +ĠLIAM +mic +ĠФ +Ġeyel +isas +ĠCPU +ĠDou +Ġnäch +Ġinfinity +Ġrif +ĠPeace +ĠCu +Ġminimal +Ġlistened +Ġpole +halb +Ġloaded +Ġsteady +ĠBesides +êm +Ġlap +Ġcoop +Ġfriendship +world +Ġgeh +Ġtylko +ĠLaura +Ġsurrounded +ĠEvent +Ġchap +ĠWonder +break +Ġdrove +Ġbroader +Ġchi +Fi +Ġgehen +Ġwestern +Ġintelligent +Ġpersist +Ġfounded +ãģĵãģ¨ +Ġhistoric +ĠfrÃ¥ +cksÃ¥ +Ġhandy +Ġsymp +Ġrows +Ġnutri +bur +ĠLeon +Ġsistema +Ġextensive +ĠÑĥв +íı +Ġnights +Ġcác +Ġcounting +ĠMust +allow +еÑģÑģ +Mom +Ġнадо +Ġbarrel +ãĥŀ +ARD +Ġinstallation +Ġinsect +Ġëħ¸ë +ujÄħ +ĠÄiji +Ġpacked +Ġfiction +Now +ĠYay +Ġpert +rons +unde +aches +Ġstyles +Ġaprès +oku +ĠVice +ınız +comm +Ġassigned +Ġinteractions +Ġacab +FELIPE +Ġrescue +Ġindustries +ĠAndy +Ġpraise +Ġflame +Ġsnack +íĤ +çģ +Ġswo +render +Ġboards +ĠÑĤом +enne +Ġpasta +Ġdevil +ĠFel +Ġhatte +Ġcolleg +eh +ì» +ãģĵãģ® +Ġproductive +forward +ип +Ġsmartphone +Ġinvis +Ġbum +Ġwhoa +ìŀĦ +ĠocksÃ¥ +ĠLang +ĠSyria +Ġsesi +ία +Ġapproval +48 +Ġодин +Ġëĸ +ĠHarr +ĠAdminist +Ġפ +ĠDean +fi +Ġcitizen +Ġshark +05 +Ġboil +Ġindicate +å¡ +Are +Ġlayout +Ġrefr +ĠPacific +AAAA +ĠAustralian +gression +Voice +алÑģÑı +Ġshelter +To +aupt +Ġevaluation +apor +Ġcurrency +Ġмного +igos +ãģ° +Ġoct +Ġroyal +è³ +asil +ĠChildren +Ġrien +Ġëĵľë +Ġbarrier +Ġejemplo +Ġek +ND +esp +ена +Ġpic +Ġkiller +Ġintegrate +Ġfewer +Ġdisabilities +Ġ.... +Ġtriangle +Ġfees +Ġwidely +emi +Ġoverwhelming +Ġzomb +Ġbere +Ġhood +ĠAye +ĠHarvard +ev +ĠÏĦοÏħ +Ġcups +ĠAuch +zona +Ġ1990 +ĠweiÃŁ +Ġcrunch +æ¥ +Ġзав +Ġmeasuring +Ġstations +ĠStephen +Ġshortly +Ġsigning +Ġcomedy +omo +Ġsuggestions +Ġsignature +ĠпÑĢив +Ġdisorder +aska +Ġworlds +Ġprecisely +norm +rav +ĠCivil +Inter +ĠCertain +Ġinjured +Ġsuggests +ĠGolden +Ġcyber +ĠØ´ +Ġtemporary +Ġcooper +Ġvoted +Ġought +ấy +xual +Ġpanels +Ġ95 +Ġhandsome +ĠпÑĢов +Ġpermit +Ġkein +Ġbadly +Ġnotifications +iza +ĠNotice +Ġinclusive +Ġanswering +ĠíĹ +uld +íħĮ +Ġnowadays +Ġ37 +Ġbolt +Ġstatic +ĠHop +Ġavant +ajo +Ġ맼ìŀĪ +Ġfifty +ĠFinal +Ġscores +ĠTap +Ġcyl +Ġconvince +Ġanyways +oda +Ġìķ¼ +Ġserves +ĠÑĤакой +ĠZoom +Ġsavings +ulo +Ġsouthern +viewer +Ġhoje +Ġseja +Ġrepresenting +Īëįĺ +lik +ĠSomebody +Ġbeast +Ġsticking +Ġinsist +Ġtalented +Ġexplaining +Ġattorney +éĥ¨ +Ġstairs +ĠDog +íĭ +Ġcig +Ġshaped +Ġsons +Ïģι +utt +ĠìĶ +Ġparad +ìĿ¸ëį° +Ġhorn +ĠJour +anno +Ġworldwide +åĬĽ +Ġparticipation +¦Ħ +Ġmów +Ġburned +Ġwriters +allah +ĠFund +Ġclever +ĠLeute +bin +Ġbeating +foot +ĠìĽIJ +ĠStudio +Ġvag +bey +rze +Ġopposition +Ġжиз +who +Ġê±´ +Ġtrace +ĠденÑĮ +Ġepid +Ġgesch +ĠNar +ĠBE +Ñĥй +ĠSign +edly +Ġclay +Ġinstantly +Ġgathering +ĠGalaxy +Ġbored +ĠBuddh +cé +Ġmam +Ġslope +Ġëĭ¤ìĿĮ +Ġschön +Ġpir +gef +amer +Ġhö +Ġcolleague +Ġpresents +adium +Ġவ +Ġfalar +beep +Ġdried +isms +Ġrope +Ġworkshop +Ġestud +Ġbands +Ġthemes +åħ¬ +ÙĬر +åIJİ +Ġreminder +ÑĤÑĥ +ĠBh +Ġcoconut +ĠÑģÑĤо +ĠChannel +Ġimmigration +äs +..... +主 +çĻ½ +stop +ĠкаÑĢ +Ġcoins +ĠÑĩаÑģ +Ġdestruction +lined +Ġbarriers +antine +Ġprinted +Ġcongratulations +ĠHeart +Ġinqu +tha +Ġhardly +ĠAven +Ġtinha +ĠSony +ĠNF +Ġgraduates +Ġsqueeze +eremy +ÏĦι +Ġepic +ĠJu +Ġolm +ĠLaughter +Ġbeliefs +ĠCru +ĠTrue +ĠSoul +oween +Ġromantic +Ġзв +Ġanos +ĠYup +éĺ¿ +dim +Ġinfer +Ġзам +Ġsoc +uka +Ġprecise +Ġdropping +Ġclue +Ġerrors +charge +ĠPu +ometer +Ġlambda +acional +ĠDong +Ġchamber +Ġthankful +ĠNu +ĠHawai +Ġinfo +Ġactivate +ĠQual +Ġqued +ÑĥлÑĮ +Ġcloth +åĸľ +Ġwichtig +55 +Ġotra +ographer +Ġcurios +Ġ1980 +Ġempres +dess +eur +Ġcluster +arter +obile +ĠYan +ĠAdv +Ġdiscipline +ĠìłķëıĦ +ĠPlace +ĠSelect +TE +ĠбÑĭла +Ġwhis +Ġbay +ĠDor +encing +Ġrepet +Ġficar +pad +Ġfog +uyor +Ġsnap +ibt +Ġsobie +Ġappointment +ĠRy +Ġceiling +ourse +Ġwrites +ĠAfghanistan +Ġmos +aze +Ġpenal +Ġcrystal +ICE +ê°IJ +éŁ +ĠTesla +Ġtheories +Ġappeal +Ġnewspaper +Ġcookies +æ© +ĠاÙĦÙĦ +Ġmaj +ĠGetting +kommen +ĠHeaven +ells +Ġdivine +Ä« +Ġakt +Ġhopes +ĠChen +wegen +*** +ĠFrage +Ġни +ู +minister +nesota +which +Ġexplicit +Ġverdad +Ġgraduated +ĠPhilipp +QL +ĠMI +Ġdevot +Ġcure +Ġclosest +ĠÃĦ +Ġsexy +ãģĽ +ĠDeath +oko +ugu +ĠAnne +itarian +esa +егод +ĠDur +Ġ000 +zeit +Ġtournament +Ġmelhor +ส +Ġindu +Ġflaw +Ġwars +ĠMind +ĠIron +ÑĤак +ĠVR +Ġsiz +ĠSouthern +Ġê·¸ëŁ¬ë +Ġawak +Ġìķŀ +Ġcube +believable +ifall +dis +Ġabandoned +mind +Ġparl +Ġclassical +èĭ +á»Ļt +ĠAuto +ĠBor +ç© +400 +ĠSociety +Ġsubtle +Ġmissions +Ġremembered +ĠEither +Ġdafür +ORD +Ġintensity +ESIN +ĠCup +Ġrarely +Ġtoys +ĠCharlie +ợ +Ġglaube +Ġrounds +TIN +Ġcapability +Ġderivative +Ġreferring +ĠdÃ¥ +ĠTALI +Ġcotton +Ġconfer +Ġcolumns +Ġliberal +Ġnunca +Ġμε +Ġindo +iben +ĠBeispiel +Ġê·¸ëłĩ +ĠÑĥÑĩ +Ġhoy +Ġfry +ĠScottish +èĬ +Ġciv +Ġconservative +Ġairpl +Ġsar +rus +Ġinvestments +Ġinfinite +Ġà®ķ +ĠTALIESIN +ĠGary +uell +Ġак +ĠCir +Ġritual +Ġ>>> +Ġtempt +ĠTech +ĠPokemon +Ġimprovements +Ġspare +Ġtranslate +Ġsonra +ĠFilm +wort +Ġми +Ġperiods +Ġjealous +ãģĦãģĦ +Ġtir +MI +Ġconducted +ĠìķĪëħķ +09 +ĠPolit +ĠWhereas +Ġmoisture +Ġsins +Ġkap +ĠÑįк +Ġbenim +Ġeliminate +Ġathletes +ĠManager +Ġfeatured +apore +äºĽ +Ġë°ľ +Ġperf +ĠThus +Ġdebut +обÑĢ +Ġseñ +Ġmysterious +words +Ķê°Ģ +Ġchecks +Ġvolunteer +Ġwashing +ĠMarvel +ĠAB +issors +!' +ĠFull +yeon +Ġweigh +ĠJOHN +Ġvos +Ġprocedures +Ġaddressed +ĠBerlin +puter +ĠBan +Ġmedication +Ġdrone +ĠÑĥб +ĠJean +Ġcaps +Ġdisappointed +Ġwore +ĠêµŃ +Ġorganize +ĠHalloween +Ġfantasy +yard +Ġnosotros +Ġjumped +Ġphotography +ĠName +rec +AB +Ġblessing +ĠShut +Ġbitter +pop +ãģĿãĤĮ +Ġdei +Ġfulfill +çIJĨ +Ġdengan +Ġbelo +ĠMeanwhile +Ġdepois +Ġdiabetes +Ġbund +ĠZealand +Ġdigest +Ġtires +Ġdod +agne +ết +Ġpeel +Ġзаб +Ġnodes +Ġtrends +ĠSwitch +ĠAward +ĠOrig +ĠHal +Ġestas +Ġ360 +Ġsimult +Ġcomic +ĠmÃł +Ġbalanced +ĠPrincess +Ġkilometers +ứ +Ġpartir +ì¤ij +soft +ĠView +Ġbiological +inst +44 +Ġmanera +Ġcomprehensive +ĠSab +Ġcrimes +yers +ĠCompany +ĠPhot +Ġpouco +iac +Ġbeim +inate +Ġsubsequ +ĠMayor +Ġcenturies +ères +ìŀĸìķĦìļĶ +Ġê·¸ëŁ¼ +ĠFrau +ĠOH +ĠëģĿ +ĠNah +ĠSeries +Ġovernight +íĴĪ +ĠâĢ¢ +Ġtrave +attered +Ġwarri +ĠGrund +ĠIndones +Ġscra +oby +ĠBrook +Ġcurs +Ġë¸ +Ġexplains +ramatic +Ġparticipating +Ġminut +Ġcontracts +Ġgegen +Ġdisappeared +ĠSN +Ġrobust +aph +Ġshrim +Ġdevast +cope +Ġmeets +Ġpeaceful +mate +Ġweld +Ġת +don +ÑĥÑĤÑĮ +Ġregistered +ĠNik +jin +Ġcav +Ġecht +iox +Ġflowing +ноÑģÑĤи +Ġtoe +Ġentity +ова +fits +ĠPatrick +ÑĤÑĢ +Ġleverage +Ġcorrel +iah +Ġstrings +istinct +Ġgue +archy +Ġtengo +ımız +Ġorbit +为 +ĠеÑīÑij +cake +Ġ׾×Ķ +ĠMinnesota +Ġbrake +owie +Ġcraw +기를 +Ġprogramme +ĠÑģлÑĥÑĩ +åıª +iences +ĠOui +ĠPers +imiento +ĠInvest +Ġslower +æĻĤåĢĻ +ĠBeth +Ġnurse +ĠSpring +Sp +Ġunemploy +ди +Ġgenius +ĠAaron +Ġê·¸ëŁ¬ +Ġei +ãģĹãĤĩ +Ġtanks +Ġaujourd +Ġcomplexity +ĠÑĢеÑĪ +Ġoldest +Ġletz +åħ¥ +Ġphenomenon +print +ĠBundes +itat +ê»ĺ +Ġ42 +ĠWi +Ġincom +Ġgek +Ġembrace +Ġties +oute +Ġdose +ĠFriends +ÑĭÑĤ +егоднÑı +Ġorg +Ħë¡ľ +óg +Ġexceed +Ġgods +Ġê±°ìĺĪìļĶ +Ġsociet +ĠUnivers +ität +Ġworden +Ġsmoking +Ġintens +abul +emia +èij +47 +fly +Ġ2006 +ĠSeriously +Ġprzez +æ¼ +cre +Ġnan +Ġmodes +оваÑĤÑĮ +ĠHang +emen +Ġbeneficial +Ġvoters +ĠBroad +Ġbent +Wow +Ġmul +åĵ¥ +ĠUC +Ġdamaged +ĠUkraine +Ġwipe +Ġstones +Ġmanagers +Ġrab +ÑģÑĤÑĢо +lat +Ġdece +Ġgraphic +Ġfoss +Ġdisagree +ĠAmen +Ġsecrets +hole +inkle +Ġfortunate +Ġì± +ìľĦ +èIJ¬ +Ġhabits +Ġburied +Ġhin +Ġvirtually +olas +ĠRP +ĠTab +low +Ġsacrific +Ġestimated +oln +Ùĭ +cur +ĠFeel +Ġcastle +Ġuseless +Ġdisg +ĠJacob +Ġgaan +Ġupside +Ġparece +ãĥ³ãĥ +Ġshipping +ĠCR +Ġdisrupt +acter +UND +fu +å®Į +ĠPick +ĠCharl +ĠBull +Ġenterprise +Ġpunishment +acking +Ġfraction +Ġtablet +Ġchord +Ġsimilarly +åħ¶å¯¦ +ĠToronto +Ġcourts +ÄŁl +eszcze +Ġpronoun +ĠSister +ĠMP +Ġgreatly +ĠDank +icop +Ġgarbage +Ġresolve +ĠSaf +ĠGun +Ġcompound +Ġë°° +ĠMusik +âĻ« +Ġchaos +ĠWhenever +Ġeuros +Ġorchest +Ġrefriger +alan +ื +ĠAmazing +Ġpud +agan +Ġjeszcze +isy +Ġaccuracy +ĠAma +isode +ëĮĢ +Ġinterpretation +ĠLiber +æ· +cam +Ġevolved +ĠKay +ÑĨÑĭ +Ġcreator +itas +Ġalarm +Ġcelebration +zent +Ġfuncion +Ġov +umbling +Ġ% +à¸Ī +Ġrestrictions +Ġнав +ĠKinder +Ġbanana +ÑĮÑı +Ġdiameter +Ġnorthern +urers +ĠPas +æĪijçļĦ +Ġworkforce +Ġjung +Ġguarante +Ġequilib +Ġsuite +Ġeuro +Ġdeliber +Ste +Ġdowntown +Ġchin +Ġcodes +edia +Ġsheep +reshold +wnie +ób +Ġunderlying +lia +jer +ÏĢÏĮ +çĿ +throp +Ġzap +Ġvacuum +ĠHab +Ġwrapped +ì¢ +Ġinventory +ма +Ġcoord +Ġplates +Ġsymm +Te +ĠwÅĤaÅĽnie +Ġreaches +Ġlonely +Script +lee +esser +Ġ걸 +ĠGesch +ĠMoving +Ġrép +ĠVill +åIJĪ +ĠRachel +Ġtemos +ONE +Ġstrain +Ġangel +ĠfÃ¥ +Tr +Ġacho +Ġhighlights +ĠWer +ĠCarl +Ġblur +Ġregards +· +илÑģÑı +Ġrecre +ĠYani +UCK +ł¸ +Ġelectrons +ĠSpiel +Ġved +Ú¾ +Ġbeam +Ġidiot +ëĵ¤ +наÑĩ +idd +Ġski +itative +Ġhypothes +ãģ§ãģĻãģŃ +enter +ĠìķĦëĭĪë +Ġihre +Ġpreview +angel +Ġdemon +Ġdus +Ġdic +ĠKom +LEY +...! +Ġsieht +ĠSonic +Ġtenho +anas +Ġdigit +ĠMaar +Ġundergrad +ouncer +uffy +Ġconversion +Ġdisconnect +Ġecho +omer +Ġcurriculum +Ġperché +Ġwand +..? +Ġrolled +Ġentrepreneur +Ġtheoret +ĠÑīо +Ġinsights +Ġzusammen +oin +rett +produ +Ġvisitors +eous +Ġgrandmother +Ġhumor +ĠниÑħ +zenia +inson +Ġreset +Ġbaseball +Ġmatching +ëĭ¤ê°Ģ +Ġpunto +ì¡ +Ġrede +Ġaddressing +Ġforecast +ĠBol +Ġcolored +Ġdocumentation +Ġexpectation +ĠNorthern +Ġcreo +Ġà®ļ +fon +Ġunsere +UM +Ġcopies +Ġexpanded +Ġveterans +ĠAlm +ĠвообÑīе +Ġpsychological +Ġnosso +Ġpayments +imeters +Ġ--> +ĠJennifer +Ġvolunteers +osse +orious +ĠбÑĭли +èĤ +ĠEss +ws +ĠBC +ĠIC +Woman +Ġvont +Ġethnic +ENN +имо +Ġlob +Ġoui +cs +Ġrehe +Ġìłģ +Ġchick +úsica +Ġkont +ĠDistrict +Ġpile +Ġав +ейÑģÑĤв +Ġ£ +Ġissued +Ġкомп +Ġprosper +Ġprofound +ĠDear +Ġãģĵ +Ġfunded +Ġbisa +ŀĺë +ף +ĠìĿĺ +Ġtwelve +ĠChampions +éĿŀ常 +Ñģл +Ġ2005 +pm +Ġonde +Ġdiffé +ĠChall +Ġdifficulties +Ġgarage +Ġdá +ünk +Ġ물 +Ġtran +Ġsubmitted +zw +ÙĪا +Ġark +ĠìĦ± +Ġgrocery +она +iere +Ġaest +Ġexhibition +Ġrés +Ġconsistency +Ġcookie +ней +Ġreplacement +æ²¹ +ĠSem +ĠìĤ¬ìļ© +800 +Ġgenes +Ġtransaction +ĠEL +Ġdurante +ibles +ĠEat +tail +issance +Ġtoss +Ġsurvived +Ġoffices +Ġsupportive +Where +Ġtoutes +Ġë§ī +Ġjokes +ieron +apers +Ġmature +ĠMarsh +Ġsido +kind +Ġrealmente +ĠChef +Ġquelque +Ġjudges +eft +ERS +Ġjet +Ġpersons +è» +izations +rik +Ġshops +ĠWy +Ġeleg +què +quoi +Ġjuga +Ġíķľë²Ī +ĠQuestion +ĠGlobal +Ġìķ½ê°Ħ +ĠStation +æİ¥ +ĠOhio +Ġsticky +Ġstressed +Ġgün +ĠíĿ +ÑģÑĤÑĥп +é¡Į +ĠPhD +immer +Ġmentor +Ġinvented +Ġreun +Ġinevit +ĠpolÃŃt +Ġexecute +ĠStory +Ġoutstanding +Ġguer +ĠRain +Ġchoses +ĠTit +ĠÑģеÑĢ +ĠSingapore +ĠNone +Ġchronic +°ëį° +Ġego +æł· +EST +ãģĤãĤĬ +ĠWang +ĠNAT +Ġaug +Ġdesktop +Ġeternal +ĠìĤ¬ìĭ¤ +ĠConstitution +ìĤ¬ë +×Ļ׾ +pres +ĠТÑĭ +Ġinterf +Ġlists +Ġfights +ften +ĠIowa +Ġmotivated +ĠHosp +Ġelsewhere +Ġpaths +Ġinstances +Bl +range +á»± +ĠSit +mana +Ġìĭľìŀij +Ġmình +ansas +Ġsna +Ġphilosoph +Ġpasse +Æ°á»Ŀi +akh +ental +Ġihn +ructor +ĠваÑĪ +Ġgenerous +Ġpivot +пол +Ġjamais +Ġcoment +ĠLew +odzi +ĠXbox +Ġвод +Ġconsent +īìŀ¥ +Ġdispar +lass +ĠGovernor +Beifall +Ġê°ľ +Ġbeloved +׳×ķ +sell +Ġhonored +leh +Ġwäre +unting +Ġfraud +ĠRAM +걸 +Ġkills +Ġeconomics +04 +пеÑĢ +Ġcoisas +ĠигÑĢ +ÃŃm +Ġmöchte +Ġìµľ +Ġstimul +Ġfastest +lv +Ġgén +ĠSounds +Ġ1970 +Ġhomework +speaking +Ġencouraging +Ġquery +Ġrevers +profit +Ġdy +Ġìŀij +ëĬĶëį°ìļĶ +Ġsoap +ĠGall +ĠCN +ĠAns +Ġfic +anks +Ġdessert +ĠìłĢíĿ¬ +ĠMaking +Ġcomeç +ê³Ħ +Ġassociation +Dad +hee +Ġhogy +Ġapro +Ġinvisible +American +íİ +Ġvibe +Ġemissions +Ġadvocate +Ġkicked +Ġvel +Ġsummar +Ġfreaking +chron +Ġpinch +Ġwszystk +iscal +Ġproved +Ġmindful +Ġtä +Ġnoises +Ġisolated +Ġcrossed +Ġê°ķ +ĠvoilÃł +Ġchore +ĠRA +Com +Ġrelaxed +atro +Ġprevention +Voiceover +OD +ĠCovid +Ġseparation +Ġ-[ +иÑĩего +çĻ¼ +ĠSD +bleep +Ġindependence +Ġpartial +Ġalgorithms +ĠAnyone +Ġassociate +hum +icular +Ġbạn +Ġbattles +Good +Applause +Ġbastante +Ġadvant +ĠSweet +Ġrefused +ãĤ¸ +ĠÑĤебе +plet +Ġencouraged +åĵ¦ +Ġmiracle +ĠBun +ĠVar +rimination +elect +ĠMult +Ġdelivering +eing +Ġcm +nehmen +ĠLine +Ġë§Į +enced +ĠSound +ĠContin +ijd +UNG +kle +Ġthreshold +Ġcompact +adt +Ġtoes +ĠPur +owned +mented +Ġdesigning +Ġvaccinated +Ġexhaust +Ġbasics +Ġconsists +ĠGuy +aczy +ĠmÃŃ +won +害 +Ġ85 +æĤ +Ġmum +Ġignor +Ġprinting +acular +pow +Ġexpanding +Ġgir +ĠCab +íĺ¸ +ÑĤÑĮÑģÑı +ĠìŬ룬ë¶Ħ +Ġangles +Ġterminal +ĠWon +ĠInteresting +Ġcrossing +Ġbonds +Ġpueden +Ġorb +ların +Ġcreepy +Ġnutrition +Ġallies +Ġwireless +Ġdesired +Ġcompute +ĠArizona +ĠBeautiful +Ġproduces +Ġnuestro +ted +Ġeligible +ĠÑģоз +icial +ĠHero +Ġconsume +Ġrobots +Ġpurchased +cción +Ġiz +ược +ίναι +ĠØ£ÙĨ +Ġshadows +ĠMedia +Ġprincess +Ġklar +Ġwooden +Ġusar +Ġgüzel +Ġslot +rade +ĠëĴ +Ġharmon +Ġingredient +orship +eki +Ġgrandfather +Ġexcitement +Ġpoliticians +..! +Ġouts +Ġseparately +ĠÑıк +ĠWelt +ĠPow +jan +Ġorientation +åıĭ +LC +agem +ÛĮÚº +åIJĹ +Ġbranches +aden +rente +ĠIhr +asm +Ġestão +ĠNic +Ġslave +Ġcompress +crowd +Ġclimbing +ĠManagement +ĠBah +Ġpanic +Ġkor +Ġcooling +Ġbind +Ġзад +Ġrack +Ġentit +Ġsends +Ġyourselves +des +ĠMuslims +Ġíļ +isma +cycle +unkt +ĠCore +Ġinjuries +Ġidentical +каÑı +ĠDeutschland +Ġее +isan +Ġtruc +leton +Ġbackup +Ġultra +Ġabund +illeurs +ĠbyÅĤo +åħĥ +orted +Ġearthqu +Ġкл +Ġobservation +Ġmaintenant +elen +Ġsettled +Ġpela +ĠEconom +ĠÕ +Ġsteering +ĠALL +ĠCher +Ġpatience +ĠSnow +Ġbor +Ġworthy +Ġcái +Ġק +Ġκα +dog +ĠKaren +illes +β +Ġagriculture +×ķף +ĠSean +Ġsensors +íķ´ë +agh +Ġpublicly +Ġpeux +ĠAlexander +Ġpriorit +Ġlazy +ardon +attering +Ġcostume +ست +è¿ĺ +Ġunw +ÐĽ +Ġthickness +quito +gunt +istas +neys +ĠëIJĺê²Į +ĠBrasil +Ġtoken +Ġaffili +lon +ĠfÃ¥r +ĠBeach +Ġwitch +ĠSeven +Ġpant +λλ +Ġcaptain +åĿ +Ġveut +Ġpouvoir +acz +ĠBarb +Ġutility +Ġcontemporary +Ġobtained +Ġpaintings +ear +Ġpean +ĠOg +Ġcust +лем +Ĥĺë +ĠIsso +Ġaconte +ĠTele +ĠAssistant +Ãī +íĸĪìĬµëĭĪëĭ¤ +Ġcounts +Ġbuck +ĠDeep +Ġtackle +Ġharsh +Ġdecides +éĹľ +.âĢĭ +éĤĬ +ĠAngel +Ġlaying +Ġcalories +Ġcontrolling +Ġadvantages +ĠÑįÑĤой +Ġapproaching +Ġthreats +akan +ematic +mann +ê³µ +mumbles +ació +Ġmaintaining +Ġfounder +lah +fight +Ġadmitted +âĢ¦. +ķĮ +abol +Ġusage +Ġnonsense +ĠPalest +Ġcontre +ĠDemocratic +ĠER +jekt +Ġarbit +Ġгол +ĠMichelle +icher +esh +ĠPho +ком +49 +ĠEnergy +οÏį +Ġcents +Ġrefers +Ġgospel +ĠSha +ĠShare +×Ļ׳ +Ġclinic +ĠëĦ£ +Ġequality +ugs +Ġshed +Ġplanes +Ġtoute +reck +Ġstrand +Ġbiology +Ġleague +ĠPok +Ġnúmero +ĠCoast +Ġconsistently +Ġnucle +OOOO +Ġobjet +Ġchor +Ġginger +Ġdabei +Ġcooperation +à¯į. +nten +ç¤ +lÃł +ìĸij +rado +Ġpassive +Ġgloves +Ġunderground +Ġlogical +Ġket +Ġfunctionality +¸ë¦¬ +Ġportal +eller +×Ļר +ĠTed +ĠGre +IJľ +Ġpersonnel +Ġemerging +ĠFür +Ġmeantime +usalem +ĠClear +Ġtrapped +Ġìļ° +Ġdispl +Ġmettre +Ġmunicip +Ġwithdraw +Ġspat +unes +Ġaccessibility +æĪij们 +Ġapare +Ġprospect +Ġназ +Ġcopper +ĠPRO +ÏħÏĦ +Ġattacking +ĠVin +ĠStone +Ġinvestigate +style +Ġλ +ë¡Ŀ +ë§Ī +Ġinspect +Ġliver +алиÑģÑĮ +Ġsera +halten +eman +Ġministry +'' +Ġdots +ãħĭãħĭãħĭãħĭ +ÑĥÑģÑĤ +ĠJak +AKE +Ġgaps +ucker +ĠинÑĤеÑĢеÑģ +ĠEmily +Ġinterval +Ġtender +ĠTechnology +game +Ġtrib +ÙĦا +ĠDevelopment +Ùħا +Ġwrist +Ġfires +Ġtargeted +ìłIJ +Ġsod +íļĮ +ĠolduÄŁ +Ġseasons +ventions +Ġнего +Ġsometime +лив +né +Ġtú +ĠDeus +Ġexecution +áp +ĠChange +ĠIndeed +Ġregulation +ĠHung +éis +Ġwishes +Ġjazz +Ġstructural +Ġblowing +ĠbyÄĩ +Ġthermal +phant +ÑĢÑĥз +анÑĤ +ĠPull +Ġconfusion +нÑĭми +Ġscenarios +ìłģìľ¼ë¡ľ +ĠдеÑĤ +Ġtattoo +Ġautre +Ġheating +Ġtreating +Ġпоним +Ġexclus +ĠLOL +wear +agle +Ġzurück +Ġrational +su +Ġdeter +ĠNative +à®ķள +ached +Ġãĥ +ĠEntonces +Ġhora +ìĿ´ìĹIJìļĶ +Ġlite +ë +Ġsixth +Ġболее +actor +Ġpsychology +缸 +Ġdemands +Ġpeer +Ġnewly +ĠWWE +Donald +ĠBox +Ġpine +Ġloading +ĠNico +ĠsÅĤ +omme +ART +Ġrecruit +Ġbugs +arents +ĠпÑĢоб +ĠInside +ipper +dramatic +Ġplanets +orde +Ġyoga +child +ĠMarie +ĠãģĤ +ĠBL +Ġfilmed +Ġrefresh +Ġtomatoes +Ġfet +Qué +Ġ!! +ĠëĤ´ë +rine +Ġinteractive +sal +annah +pez +ç¶ĵ +Ġunderstands +ĠTokyo +Ġlibraries +Ġreader +ijIJ +oz +ĠEnde +ĠFlo +Ġmild +Ġpoetry +Ġжив +æĦĽ +Ġbehave +Ġdoen +ĠSusan +page +raham +Ġcommunications +Ġtuning +Ġpac +Ġanxious +IO +Mark +Ġhiç +books +Ġpiss +Ġenabled +achelor +ĠFOR +Ġéc +ĠTR +ilst +hat +ĠìĿĮ +Ġtych +Ġjar +Ġbuilds +ĠArgent +Ġintermedi +Ġlou +Ġara +Ġassignment +Ġcabinet +Ġretirement +ãģ» +Ġdisabled +rica +Ġawards +Ġboots +Ġacknowled +Ġthy +Ġ구 +Ġsynd +ний +ilton +Ġprobl +ĠFal +Ġverdade +Ġ700 +ĠLearning +ocus +Ġpalace +Not +tain +cm +Ġmagnet +incoln +Ġfiguring +ĠLyn +ĠBoss +ĠVO +Ġdiagnosis +Ġequipped +watch +inos +aders +Ġshelf +Ġorganis +Ġnod +Ġkız +ppers +Ġrestore +Ġartic +ĠVoice +ıyorum +격 +Ġspreading +Ġhips +Ġward +ureau +Ġintersection +66 +Ġ39 +ç³ +Ġwaited +ì´ +hhhh +Ġdys +ĠEN +Ġbatch +Ġcaf +Ġmarker +大家好 +orable +ória +Ġstepped +Ġcelebrating +ана +Ġworn +ĠFol +Ġpla +Ġattempts +Ġtweet +Ġrust +gence +íĨµ +Ġrevel +Ġrecept +eness +Ġ(( +ãĥ¼ãĥ +!âĢĭ +ĠìĨIJ +Ġinfluenced +иж +ĠконеÑĩно +Ġcolleges +ioni +Ġsag +Ann +olar +Ġexpressions +Ġsuits +Ġownership +eland +piece +æĢİä¹Ī +Ġdespués +Ġtel +Ġinsult +Ġêµīìŀ¥ +ĠSmall +ĠFR +oka +berries +ĠAnton +елÑı +ÑıÑģ +Ġvalve +acts +Ġwoods +ண +Ġcultiv +Ġfá +ãģ¨ãģĦãģĨ +Ġcheers +Ġassumption +Ġfitness +ÃŃcul +Ġpodr +Ġweit +ĠHind +Ġdign +Ġзн +Ġsquad +Ġdestro +cere +shirt +immt +engers +Ġsä +kÅĤad +ĠÈĻ +Ġoccas +Ġì¤Ħ +Ġprocessor +ĠDM +ĠDaddy +Ġsooner +Ġstraightforward +Ġdepartments +ĠChrome +Ġworkplace +ĠPython +Ġmeng +ĠDAN +ĠIce +ĠëĪĪ +ĠGi +Ġhiring +Ġlanded +Ġdemocratic +iedz +ãģĺãĤĥ +Ġsev +icia +Ġespecial +ĠNous +Ġhät +Ġbou +pert +iesz +åijĢ +Ġvil +ÅĽli +Ġîn +Ġlosses +éķ· +Ġtoast +Ġrealm +ĠAustin +ĠInformation +Ġresume +Ġchase +Ġsalary +Ġë¶Ħ +лиÑĩ +ĠÑģлед +ĠFurther +Ġcaring +Ġvig +Ġvalor +è¿Ļ个 +ĠÑĩа +Ġanalytics +Ġglobe +ĠMAN +Ġnel +ìĿ´ìķ¼ +Ł¼ +Ġoy +íķĺìĦ¸ìļĶ +jen +Ġtroubles +ahaha +Ġchurches +uet +Ġmeasurements +bil +ì½ +ifully +инÑĥ +ĠWilson +¦´ +ĠíĮĮ +Ġì°¨ +Ġpúblic +ĠJerusalem +Ġnails +Ġspine +Ġhemos +Ġzn +quis +ĠLeben +Ġreferences +ITH +iper +ĠÑģебÑı +ìģ +ĠWa +state +§Ŀ +åħ± +ĠGener +Ġactress +ĠEnjoy +à¹ĥ +Ġ×Ĵ +Ġinfected +Ġshaking +Ġnick +ุ +Ġfot +Ġaccomplished +uke +Ġsheets +Ġfence +Ġnursing +Ġintroducing +Ġfeat +One +TO +Ġclubs +ĠBruce +onge +change +ĠBatman +åı° +ĠOfficer +Ġhydro +Ġsupplement +Ġcela +Ġlongest +Ġcompeting +Ġconhe +giving +Ġbrains +Ġloans +Ġwage +ĠClinton +ĠsÄĥ +aneous +Ġlord +ÑĢÑĥж +Ġquiz +Ġstiff +ĠLGB +sz +ME +mare +there +Ġnär +ĠMand +last +Ġdag +Ġhalfway +ĠBand +Ġëĭ¤ìĭľ +ĠAren +Ġile +PN +ento +Ġalgum +Ġsoccer +Ġblocked +ĠJonathan +Ġsew +ĠTestament +Ġvale +Ġbehavi +å§ĭ +Ġconna +ICH +Ġaudiences +ml +ammad +ĠìĤ´ì +IGH +Ġraces +emed +Ġmá»Ļt +ï +Ġovers +Ġdeclared +Ġsana +ĠUna +ĠÑĢе +ucks +Ġpairs +Ġange +Ne +Ġups +avy +ør +reek +Ġbehaviors +Ġreflected +Ġpriorities +Ġcondu +Ġretreat +Ġexpenses +Ġë´IJ +Ġtriple +Ġêµīìŀ¥íŀĪ +ält +Ġindigenous +Ġmining +Ġacceptable +Ġruin +CA +uine +Ġpipeline +ctic +êt +ĠвÑģего +Ġboun +ĠDigital +ĠBoom +ÑĨе +ĠлÑĥÑĩ +Ġasc +ĮĢë¡ľ +ĠGoodbye +Ġrender +enez +arre +ĠTHAT +bour +ición +ãĤŃ +Every +Ġwires +ĠParliament +nung +ateur +ĠSave +ĠPhys +Ġamor +ĠEve +Ġfright +Ġgamma +Ġmicros +mitt +ĠCode +ĠBey +pled +ĠиÑģполÑĮз +çĹ +ìĥī +她 +Ġmonet +ĠJahre +Ġluxury +Ġdeaf +Ġbetray +Ġê²° +ики +Ġdefeated +Ġundert +Ġweg +Ġcooler +ãģķãĤĵ +iami +éĤĦæľī +ĠJessica +ĠJoy +Ġsophistic +ении +ðĿĺ +Ġchili +ĠType +Ġproteins +Ġpresenting +alia +ìļ¸ +ĠMajor +Ġmolecule +umer +Ġcollapse +ĠAnyways +ĠMountain +anted +ãĢIJ +Ġвидео +æ°´ +Aud +Ġconqu +Ġvoll +Ġknit +Ġmembr +ĠMarket +Ġdari +Ġcalculated +ги +Ġshrimp +ĠMu +ĠпÑĢоÑĤ +Ġìĺģìĥģ +Ġproductivity +Ġcognitive +ĠHeb +ictions +ê²½ +Ġcré +för +Ġpraying +ashi +ĠTik +ór +wen +ÑĮÑİ +ixo +Ġ(\" +ĠÑĤел +Ġìĸ´ëĸ¤ +ĠпеÑĢед +ĠDrive +ãĢij +ĠEqu +Ġequilibrium +Ġdescribes +нее +42 +ĠCurrent +yy +Ġabsorb +Ġsoldier +ders +Ġtestimony +Ġdecline +ľë¡ľ +gage +Ġinspire +lapping +Ġspinning +Ġslavery +Ġfacial +Ġtraditions +ários +ĠHospital +Ġnest +ĠëĪĦ +Ġtoi +Ġfears +ìħ¨ +ĠMuh +Ġgraduation +Ġimpacted +Ġaunt +ĠLets +Ġaluminum +Ġdominant +ĠDavis +ĠNavy +Ġcompt +oples +Ġestava +è¥ +Ġscal +Ġpreserve +ĠOpp +Ġpractically +Ġmagnitude +Ġfitting +Ġcoordinate +Ġfurniture +ĠFamil +Ġexplosion +Ġdocumentary +ĠScript +Ġportray +mat +Ġscheduled +Ġdynamics +phy +aky +ĠUI +Che +Ġcontinuously +ĠProv +å°ij +Ñĥз +rah +Ġgerne +proof +Ġsecretary +ĠPatreon +scream +ĠKids +á»ĵi +Ġkg +Ġuncertainty +Ġкажд +Ġmitig +Ġreads +å·² +ĠRu +Ġpriest +Ġнед +Ġlimitations +Ġfloat +600 +ĠToy +ĠJimmy +Ġoffensive +eni +ĠXi +Ġeyebr +ĠTurk +Ġaccidentally +Ġohne +ĠSaud +95 +ĠDutch +анÑģ +ĠSeattle +Ġëĵ± +check +kÄĻ +Ġcontributions +Ġbeside +Ġquindi +Ġflew +æŶ +ذا +ĠLO +Ġwaist +ĠEV +Ġholidays +jon +Ġmisunder +Ñıн +Ġbout +Ġdimin +ẽ +ól +ĠGrace +Ġinputs +Ġdeny +Ġforming +ĠBild +Ġadequ +Ġfolk +Ġrejected +semb +Ġfrustrated +open +ĠBetter +ilon +Ġtowel +Ġdifferential +Ġsacred +Ġsail +éĩĮ +entimes +Ġgentleman +Ġiconic +Ġcomparing +Ġsagt +Ġtexts +Ġgrandma +Ġrolls +Ġcontents +ä¸į好 +оÑģÑģ +Ġsuspension +roit +¦¼ +Ġassez +Ġdort +ĠMath +ĠVictor +ĠJavaScript +ä¸įå°į +Ġenhan +ÅĻ +ĠBush +Ġpromotion +Ġkin +Ġmonsters +ĠColorado +Ġβ +íķ´ìļĶ +æŃ£ +ifferent +Ġnaked +Ġprod +etics +ĠWoman +Ġtreatments +Ġestoy +vé +Ġlifting +Ġyapt +ĠRober +Ġì¹ľ +Ġsubstitute +aku +ridge +Ġê±°ë +Ġresponded +Ġbé +ĠEngineer +Ġtransferred +ë² +Ġhaber +oop +ĠWE +Ġvest +Ġforty +ĠDS +Ġ2004 +Ġcoaching +nom +ĠBab +Ġnossa +ĠJake +Ġgy +Ġdeleg +Ġìŀł +ĠкÑĢаÑģ +Ġstandpoint +Ġdisad +Ġartwork +Ad +illo +ĠÄijược +ĠProm +ĠLib +Ġcriticism +Ġcontacts +ÑĢам +Ġachievement +ÐĶа +Ġdissol +ĠVegas +Ġstreams +ĠKent +ĠعÙĦÙī +Ġradius +Ġsucks +ĠAch +Ġfi +oust +ĠлÑİди +Ġpalette +ĠHaz +ĠAnthony +Ġtema +ĠCos +Ġsafer +αÏĤ +Ġcontrad +Ġmaior +Ġinflation +ĠSilver +Ġattending +íķľíħĮ +arto +Ġapplauding +Ġcomputing +ĠHat +æ» +know +makers +Ġconoc +Ġeducated +Ġmodified +Ġinclusion +mental +ŀIJ +isia +ĠÏĢοÏħ +Ġaun +ĠIreland +Ġkö +Ġcompliance +Ġinspiring +иÑĤелÑĮно +Ġdispos +ì°¨ +Ġwip +rical +rawd +Ġtres +Ġmobil +olutions +BO +Ġbounce +Ġassumed +ĠMedical +Ġfiscal +ĠngÆ°á»Ŀi +itionally +Ġstolen +ĠBM +Ġmechanisms +εί +Ġqualified +ĠìŀIJë +ughters +ĠHIV +ĠLots +Ġservers +Ġcarr +ĠTogether +Ġattracted +Ġkr +æĪijæĺ¯ +thur +inin +ĠHalf +ÈĽ +ĠPap +Ġreminded +ALL +Ġhelmet +Ġbottles +Ġprofessors +Ġseine +ÅĤÄħ +ãĥı +Ġê±°ìķ¼ +Ġ×¢×ľ +fun +ĠBird +Ġfighter +ĠëĶ°ë +ĠTool +Ġtin +inois +ë¶Ħ +×Ļף +ĠCAR +åIJį +irsty +Ġoutdoor +ĠNS +ãħİ +ffen +Ġlud +Hello +Ġroller +iele +ĠPoland +Ġapa +exp +Ġcertificate +ĠTown +аÑİÑĤÑģÑı +ilde +Ġdetermin +PR +Ġfreeze +Ġmainstream +Ġobjectives +blo +Ġtakie +åĵĪåĵĪ +Ġë°Ķë¡ľ +elet +ĠIV +ĠFast +Ġdere +emp +ĠDra +ĠìŀĪìĹĪ +Ġdiscrimination +Ġείναι +necess +æ® +ıģı +Ġposting +wiÅĽcie +Ġlub +Ġolive +Ġrim +Ġmodeling +Ġaño +ĠPakistan +Ġoverl +Ġinflam +NE +ìĹIJê²Į +Ġattended +Ġdealt +ĠAlt +ĠLincoln +Ġawake +Ġfilters +ĠWithin +czywiÅĽcie +Ġsû +ĠJohnny +Ġintegrity +Ġisolation +ĠEasy +ĠпÑĢин +ĠAlice +Ġsmiling +enix +,... +ζ +Ġbegun +Ġjewel +Ġconventional +Ġstatist +Ġhanded +Ġirre +Ġprohib +Ġsatellite +é¦Ļ +ĠIndust +Ġtraged +Ġtrava +Ġihm +Ġcruel +ĠAgora +ĠDoc +Ġzones +Ġmall +Ġtray +×ķ׳ +Ġirrit +Ġkans +ĠBeat +udge +ielle +Ġtrusted +Ġbikes +ĠÑĥп +ĠMember +wick +Ġcreators +Ġheritage +indistinct +Ġresur +ennen +Come +Ġfiring +ĠBueno +ĠТо +ikan +ettes +Ġkes +Ġtrips +Ġdivorce +ĠKl +Ġconsol +keep +기ê°Ģ +ĠReport +Ġhosting +Ġdiamond +Ġcomplic +Ġhelicop +Ġdepuis +ds +ĠChan +Ñıл +Ġscissors +ilation +Ġproportion +ERE +ĠÙĪاÙĦ +inta +Ġmuchas +uation +itis +æĬĬ +ÑıÑī +Ġniin +Ġemphasize +uela +Ġproducers +Ġrze +änder +ETH +æº +Ġconstitu +åĽ½ +Ġperformances +istle +gov +ĠLiter +Ġincorporate +Ġeducate +ĠNin +쪽 +ÙĩÙħ +eleration +×ķ×ij +ĠyaÅŁ +orous +ĠCas +Ġgrants +ëĬ¥ +amel +Ġê·¸ëłĩê²Į +ĠEste +ÑħодиÑĤ +ĠпоÑģле +Ġgent +Ġfocuses +alities +ĠRh +ë³´ +æ°ij +ĠDance +rr +Ġamer +Ġutilize +ĠlÃŃ +ĠAmong +Ġpregnancy +Ġloops +алоÑģÑĮ +ĠMoh +Ġcatching +Ġglob +Ġajud +Ġ[? +ĠAnal +looking +Ġsurfaces +Ġprogressive +Ġviral +08 +ξ +KA +Ġży +Ġpicks +annon +Ġbulk +ĠRoss +Ġdescribing +ĠGel +Ġlocally +Ġendless +Ġmassage +Ġcleaned +Ġtraveled +енÑĭ +Ġsentiment +igma +ĠNas +Ġchemicals +Ġrighteous +ĠMagic +Ġrelates +Ġtrucks +Ġ1960 +åĪ¥ +Ġappet +Ġsnacks +ĠSummer +Ġyüz +Ġpris +ĠMexican +Ġtransparen +Ġminority +Ġverte +Ġlassen +46 +лек +ép +ĠÑĦилÑĮ +Ġiyi +Ġspan +íķĺì§Ģ +Ġindicated +quar +Ġscholarship +ĠLGBT +Ġhistorically +óÅĤ +Ġminist +Ġpenet +ĠRap +Ġconservation +缴 +ĠHoney +ĠBei +idel +Ġresponsibilities +Ġmessy +ĠExcept +ORE +Ġinitiatives +Ġjunior +Ġdesigners +Ġexploration +Ġsponsor +Ġmobility +Ġinteg +lando +Ġbark +Ġindicates +ච+Ġemployer +å®ī +Ġcousin +Ġboiling +Ġchrom +Ġçal +Ġperpet +Ġcontained +Ġparks +Ы +ĠEngineering +Please +ĠStarting +hero +Ġlawyers +西 +Ġzd +Ġfranchise +rage +Ġintuit +ĠGL +reach +ĠElle +ĠnhÆ° +ĠNord +Ġbean +07 +Ġpleasant +å½ĵ +viron +Ġgradient +zus +ĠEM +Ġessay +ìĹIJìļĶ +ến +nu +ừ +ĠÃīs +Ġdenomin +ĠGirls +Ġpersonnes +ĠاÙĦØ£ +bild +ĠStat +Ġcompliment +ĠKate +Ġoptimal +Ġhid +دÙĬ +Ġquicker +wall +En +INE +??? +ì²´ +ĠAction +åŁ +Ġpenalty +ĠKaz +'? +Ġcried +Ġcanvas +fte +Ġexclud +¸ë¡ľ +Ġemphasis +Ġenzy +ĠHou +Ġoverseas +ÃŃamos +師 +öglich +Ġheadphones +cn +ĠAge +Ġakan +Ġcharacteristic +íķĺë©´ +gets +Ġë¶Ī +Ġrival +Ġborders +emente +emás +Ġyol +Ġcompe +enders +ından +Ġmöglich +Ġbubbles +natural +Ġarmed +Ġelabor +ĠìĿ´ë²Ī +Ġwashed +οÏħμε +è«ĭ +Ġflavors +Ġexiste +Ġprest +ĠThema +опÑĢоÑģ +eron +UE +eri +Ġconcer +Ġaixò +åħ© +Ġprotective +ĠзнаÑİ +ĠëĤł +ĠIII +Ġmeer +ĠShop +lli +ĠOrder +ĠMY +ĠGhost +ãĤĤãģĨ +adel +Ġstole +Ġreleasing +ĠComment +Ġtrains +ëªħ +Ġwissen +ensed +Ġdescend +Ġfier +Ġradi +Ġpersu +ç¢ +Ġмн +ĠDest +Ġworries +itet +bas +Ġstab +name +oric +ĠClose +Ġalumni +ĠSelf +ffe +itating +atherine +ĠRights +Ġellos +Ġwarrant +Ġnerve +Ġvegetable +ĠTeil +Ġê°ĻìĿ´ +RY +Ġsustainability +Ġsteht +Ġbrid +adaÅŁ +Ġtv +Ġduration +Ġpessoa +Ġmetrics +Ġadam +cas +аÑĢи +Ġevident +Ġdisplayed +ائ +Ġreck +ĠBuddha +Ġdele +ĠDiego +osph +Ġbla +ĠMik +ulator +Ġ2001 +Ġpromoting +ych +ĠEX +Ġlastly +Ġoutline +Ġspirits +Ġveux +Ġsubtract +ĠÅŁimdi +Ġpins +Ġburger +Ġmolto +ĠhabÃŃa +Ġë°ĺ +igu +erst +Ġnen +Ġbacon +itious +Ġcarries +Ġpromises +nde +ĠLeft +ĠLim +æ£ +Ġ44 +Ġcareers +Ġ주ë +Ġspeeds +qué +mad +market +isme +Ġ2003 +Ġrecess +ĠJUD +Ġracist +ĠSchl +Ġparler +Ġotros +ishes +Ġconverted +aaaa +ании +ĠArk +ĠChance +Ġelementary +εν +inks +Interviewer +Ġfreely +alah +Ġëĭ¤ë¥¸ +Ġrequested +Ġtorque +noÅĽci +oured +ĠStaff +Ġstain +ĠAlan +Ġvere +ĠWinter +Ġdefect +iedy +Ġbeats +Ġhá +umn +oons +itudes +Ġseit +oly +Ġreserv +Ġextr +Ġphysician +visor +Ġhandful +ĠNations +Ġì¢ĭìĿĢ +uccess +Ġupstairs +ĠSquare +Ġhein +ĠSeason +olis +Ġprince +Ġdefensive +ç½ +ĠмеÑģÑĤ +Ñĸй +ĠاÙĨ +umble +ê¹ĮìļĶ +Ġassass +Ġcircular +Ġqualities +Ġhmm +Ġblown +ĠLiz +ĠKur +ĠSA +Ġfindings +Ġcolours +Ġdelle +ĠIR +ĠAth +ĠDub +ĠOx +ĠØ® +Ġpockets +Ġgrill +Ġswitching +Ġpreferred +ĠWales +Ġexemplo +Ġchopped +Ġvaccination +Ġneuro +Ġspecify +ivos +Ġserá +Ġzie +Ġà®® +Ġresulting +ĠUgh +Ġmessed +CD +Ġpaar +Ġcomer +Ġcouch +ĠFestival +Ġ49 +vous +zens +種 +ĠKennedy +ĠTs +Ġë³´ìĹ +Ġdemonstration +Ġunto +Ġfrustrating +Ġlaboratory +Ġegy +Ġbeautifully +Ġìŀ¬ë +Ġalgu +Ġöyle +ä½łçľĭ +ĠPH +Ġfortune +Ġcleaner +ĠRobin +Ġsaus +ĠGeld +Ġkat +obs +Ġolur +Ġmatt +Ġquesta +Ġsuggestion +encer +оÑģÑĤ +Ġradar +Ġìŀ¡ +isha +ந +ãĤĵãģª +jes +Ġveel +ìĤ° +Ġauthors +ãĢİ +plan +Ġcollaborative +Ġinstinct +Ġfarming +auge +Edu +Ġmembership +Ġsimultaneously +Ġbake +Ġkä +Ġlectures +ÑĩеÑģ +Ġprendre +Ġcollaps +ĠSaya +ĠFut +Ġyog +ĠRather +رÙĬ +Ġcamps +олод +Ġsimulation +ĠMak +Laughs +Ġgrey +Ġsentences +yen +ĠUnless +Je +ĠSatan +ĠÑĤакже +ĠNA +Ġbron +Ġ?] +Ġsouls +Ġlightning +Ġimagined +Ġczyli +psilon +etta +Ġbelieving +Ġstrongest +ĠCON +Ġquelques +Ġimmigrants +Ġwallet +éĢĻæĺ¯ +ĠJersey +Ġimplications +Ġforb +ãĢı +Ġunbelievable +اء +Ġoperational +üs +ĠGM +Ġê·¸ëŁ°ëį° +Ġgracias +Ġentend +ĠRegard +rob +ĠÑĤеÑħ +èı +ĠRevolution +Ġwaar +ĠBiz +theless +Ġsponsored +quier +ĠìĿ¼ë +Ġtek +ĠëIJł +igkeit +ĠLuck +ĠCertainly +Ġtoll +ĠниÑĩего +ĠMoney +ĠÑģÑĤоÑĢ +ĠDouble +ĠWolf +Ġchunk +άν +ités +oning +Mar +Ġgrandes +Ġcollections +ĠEuropa +ĠаÑĢ +ĠâĢĭâĢĭâĢĭ +Ġê·¸ëŁ¬ë©´ +ĠобÑĬ +Ġãģª +Ġìĭľê°Ħ +ĠCustom +Ġì²ĺ +ÑĸлÑĮ +Ġindividually +íĹ +Ġdozen +Ġowe +ĠVictoria +åı¯èĥ½ +Ġbeet +urb +Ġanalog +ição +Ĥľ +soever +Ġmodo +Ġsubscribed +ìŀ¬ +Ġentities +çīĩ +Ġcloset +Ġresponding +Ġprinter +ĠStephan +ĠbyÅĤ +ĠDom +ĠFern +ĠPier +ĠwiÄĻc +Ġhence +Ġmodules +ãĥ¬ +ĠëĶ± +ĠDanny +ĠÑģебе +Ġvad +ĠìĹĦ +Ġsous +Ġsphere +BY +ĠPed +igned +Ġwheat +Ġunders +Ġevolve +Ġdeclar +Ġlightly +Ġidentifying +æĦıæĢĿ +Ġlegendary +Ġgenuine +Ġgrind +ĠUne +geben +Ġbicy +Ġjumps +Ġprovince +ziÄĻ +Ġ×IJ׳×Ļ +Ġhoc +Ġбл +ĠGrad +Ġrevenge +ĠاÙĦت +ooh +æĭľ +аÑĨии +å¹³ +Ġelectro +ĠëIJIJ +ãģ§ãģ¯ +Ġfals +riel +oker +ĠExcellent +ĠMorgan +Ġbrick +Ġsubstantial +Ġpollution +ĠTür +ĠEvet +Ġlung +ãģĸ +×Ļש +ommes +Ġrealizing +Ġhumble +ĠLock +Ġbod +Ġìĸ¸ +Ġpeers +uzz +Ġembedded +Ġclaro +Ġaggreg +Ġemployers +ĠRaj +Ġãģ¨ +ĠYi +Ġjeu +aters +Ġstrikes +nos +autres +dr +opher +ĠApparently +íĺĦ +Ġinfant +اب +ÑĤÑĭ +íĽ +Ú¯ +Ġredes +acaģım +ĠDAVID +ĠChicken +Ġperspectives +Ġviewer +Ġshar +ĠпÑĢоиз +ligt +eros +itable +илоÑģÑĮ +ĠdifÃŃ +´ëį° +Ġretired +Ġthats +zenie +beiten +Ġmycket +ĠRab +Ġinflamm +ì°® +Ġdum +Ġdaddy +æľŁ +Ġimmers +Ġplaylist +à¯Ĩ +Ġtraum +Ġrefuse +step +à®ļ +cup +Ġpops +rimin +ayım +Ġald +Ġunnecess +Ġdah +ĠIrish +Ġcompr +laÅŁ +TP +Ġtranslated +Sc +ceÄŁim +´IJ +Ġdrei +ĠлÑİдей +Ġquiero +Ġhele +zlich +Ġapples +Ġdistricts +Ġcredits +Ġasp +Ġëĭ¨ +oral +å½± +Ġstepping +ĠVa +Ġgains +65 +Ġnuestra +eday +assador +ĠLind +Ġcrops +ciendo +igue +Ġbana +Am +Ġpent +Ġaddiction +Ġpackaging +äd +ª¨ +Ġperquè +Ġcampaigns +Ġsteep +Ġneue +Ġembarrassed +Ġdistinction +itzer +åijĬ +Ġregistration +Ġllam +ĠAlmighty +liest +Ġuz +nak +çº +Ġteraz +iamente +Ġtransactions +Ġcôt +Ġswitched +Ġcombo +Ġprayers +Ġinternship +Ġaddresses +Ġcharity +ĠWOO +Ġbait +è¿ĩ +Ġ� +Ġfica +ĠTyler +aru +Ġatoms +ĠLevel +ĠпоÑĤом +Ġfame +ulk +Ġteaches +Ġrebuild +едÑĮ +ĠIndonesia +ushi +ĠShort +Ġensuring +fs +ele +Ġmarginal +Ġconclude +amt +Ġverify +ĠMcDonald +Ġskal +Ġreconst +ĠMann +Ġbasement +Ġtransformed +Ġoccasionally +zone +ĠDans +Ġкакой +Ġdiagnosed +ĠÏĦα +Ġcommands +Ġpresidential +Ġabb +Ġbracket +ĠLem +Ã¥ng +Ġfavorites +Ġrevol +ĠíĬ¹ +Ġharass +éħ +Ġcleans +ständ +Ġknocked +Ġpeoples +Ġmusicians +Ġmutual +ĠCold +88 +zej +atie +ĠHonor +Ġobsessed +ĠMUSIC +ĠBreak +úng +Ġmodify +Ġsöyle +Ġ×ŀ×Ķ +ĠOnline +fo +ĠMiller +Ġliking +Ġinhab +Ġgratitude +ĠJournal +arness +John +ĠGit +åīĽ +Ġsincere +ĠSci +ĠEli +Ġsymbols +Ġmanually +εÏĤ +ĠвÑĸд +ĠFat +Ġlabels +Ġsophisticated +umps +Ġreleases +Ġ47 +ĠOM +ê°Ģë +ĠBien +ĠRef +è¨ĺ +ĠSta +ĠEgg +Ġindicator +pson +Ġnasıl +Right +Ġconvey +Ġknot +Ġconnects +ulas +Ġpreced +Ġinequality +amiento +Ġreply +OY +Ġdismiss +ĠëIJľ +çĦ¡ +ĠÑħоÑĢоÑĪо +Ġméd +Ġrandomly +ĠOnt +uard +Ġpulls +ĠÑĤепеÑĢÑĮ +ĠNeed +ĠSoft +Ġstrengths +Ġgoed +umen +æŃ» +Ġíݸ +Ġдоб +Ġclarity +ĠAi +Ġballoon +ĠPand +ĠìķĦëĭ +Ġshiny +Ġsmallest +onia +hill +oting +Ġeing +Ġmerely +Ġseus +Ġнеп +ĠíĨµ +Ġguides +Ġspecialist +Ġsteak +ãĤĪãģĨ +Ġmigration +quele +Ġruined +Ġpupp +女 +Ġkend +angan +Ġpalm +Ġunfair +Ġzm +ĠDV +chester +иÑİ +Ġooh +erg +ATH +°© +åĵª +rison +Ġinvolving +Ġpartly +ançais +Ġvow +Ġprominent +Ġcryst +iba +Ġdeserves +Ġovert +Ġsensit +ĠWhe +Ġtighten +Ġintimid +Ġaliment +will +Ġstrengthen +ĠTan +åıĪ +ãģĹãģ¾ãģĻ +oni +ĠMun +Ġproph +Ġrehears +ĠKle +Ġveces +Ġwondered +oki +Ġsenses +´ìĭ +Æ°á»Ľ +ĠÈĻi +Ġmuchos +Ġwatches +ortunate +ĠJuan +ìŀĸìķĦ +ÑĢе +ei +ionen +Ġexperimental +Ġdaughters +à¸Ľ +Ġmentally +becca +aware +ìĦĿ +Ġwhatsoever +Ġenables +ĠLow +oid +à¸Ĭ +ód +غ +Ġconstructed +ĠLadies +Ġaccused +Ġан +Dan +Ġspawn +Ġcontainers +Ġartistic +ıp +Ġdiscl +Ġautres +inas +ĠNation +Ġnag +bean +whe +ľëıĦ +ĠSeoul +Ġíı¬ +ĠNich +Ġcomplement +Ġinterven +ĠModel +ĠOrange +namon +Ġcalculation +see +Ġustedes +Ġleb +Ġdoct +Ñĸн +Ġfoster +Ġelastic +ĠAhh +Ġace +ĠPink +ĠJeg +Ġdeer +ãģĹãģĦ +sis +Ġjako +ĠEmma +ÑģÑĤвенно +Ġportrait +Ġmaker +Ġaument +ÑĢоб +Ġairplane +Ġtransparency +Ġadjustment +ĠCDC +çon +Ġuploaded +ĠдейÑģÑĤв +ĠгоÑĤов +Ġiter +Ġcurse +ôn +merce +aran +Ġleak +çµIJ +Ġabsence +Ñģкий +Ġreaders +aler +Ġbeneath +ango +hetic +Ġfinns +Ġpoop +Ġduplic +Hi +igs +ologically +opp +Ġdizer +ĠAllen +Ġgli +Ġacceleration +Ġvitamin +ãĥŃ +vä +ĠAccess +à®Ļ +rás +Ġappreciated +Ġnah +Ġposter +Ġtale +Ġhighlighted +æĸĩ +żeli +Ġblockchain +Ġmicrow +Ġcinema +ĠChang +ĠSearch +usters +ĠZero +ĠDivision +ÑĢаÑģ +Ġscare +Ġjelly +ĠAdministration +SO +Ġlined +Ġê°Ħ +Ġgeben +Ġsoda +Ġwinners +³¼ +ÙĴ +ĠAmb +åķıé¡Į +åĶ +Ġpeg +å·± +43 +Ġraus +Ġrewards +Ġinclus +Ġhighway +Ġhah +Ġmultiplied +Ġsẽ +Ġdisciples +Ġning +Ġdressing +Ġattributes +ĠMosc +ĠGreece +Ġsek +ĠLearn +Ġjus +rendre +Ġpersonne +plete +Ġplacing +Ġluego +illance +ĠобÑī +Ġprovision +Ġlion +tra +boards +Ġbehaviour +hey +Ġsubscription +Ġprotagon +ãĥ£ +Ġvara +ĠÅŁu +Ġhaha +Ġteaspoon +æŁ +avoir +Ġcrypto +ĠÑģÑĤаÑĢ +ĠStore +abs +ĠStudents +Ġlaund +into +Ġapproached +°ľ +ÑĥÑİÑī +ĠLabor +otes +iatric +ĠgroÃŁ +utive +Ġид +ĠGib +Ġplacement +ĠdifÃŃcil +Ġfrog +ĠвÑģеÑħ +ĠJr +azed +ÑĥÑī +Ġê¼ +frame +аеÑĪÑĮ +Ġlockdown +åij³ +Ġmedi +Ġ×Ķ×ŀ× +ений +emale +ì¢ħ +ateral +Ġdistant +Ġbears +Ġjournalist +解 +ĠMarshall +ĠIhnen +uetooth +bag +ĠÄijã +ĠHighness +Ġì°į +ика +ĠWu +ĠFran +Ġpeng +Ġfon +Ġhypothesis +ĠÑĢÑĥ +Ġly +×ļ +ìĽĶ +ĠRadio +à¸ŀ +Dav +Ġembarrassing +ĠìŀĪìĸ´ +Ġcasting +Ġcage +ĠPsych +ĠìĿ¼ëĭ¨ +Ġž +imb +Ġdirectors +SH +ĠÏĦην +á»ģu +ĠkonuÅŁ +Ġoptional +quarters +iker +ĠSant +Ġverses +ë¶Ģ +Ġolar +ĠÏĩ +ãĥķ +Ġγια +ĠImm +Ġcontroversial +Ġersten +Ġrecip +ĠChristianity +Ġê´ľ +ordon +×ķש +Ġslash +ĠPf +ÑĥдÑĮ +×ķ×Ŀ +ĠPerry +Ġmamy +Ġbackgrounds +Ġà®İன +Ġpendant +ĠColumbia +Ġinverse +ĠÑĩеÑĢез +Ġsv +Ġdigging +41 +chem +Ġnavigation +ĠShin +ĠFront +PD +Ġbearing +ĠWasser +Ġwax +ĠCHRIS +ching +Ġpressed +El +ĠDal +onsin +Ġbinding +Ñģкой +poons +Ġmock +arest +кÑĢа +MM +Ġcorrupt +storm +Ġrefres +ĠCoach +llä +ĠTHIS +Ġparag +Ġìĵ° +pool +Ġbillions +Ġê¹Ģ +group +Ġwelcoming +cellence +ĠDuke +긴 +Ġprimera +ìł¸ +Ġpond +Ġstatue +Ġ구ë +Ġhatch +Ġinstrumental +Ġresidential +커 +Ġaccepting +oshi +date +ĠìĶ¨ +Ġplanted +Ġjoking +ĠìĦľ +Ġhated +ĠÑĢаÑģÑģк +Ġslept +Ġpackages +Ġislands +esen +ģı +Ġdiagon +ĠOsc +Ġmesh +Ġscales +arity +ĠDefense +ãģ¡ãĤĩ +ĠLewis +ĠÑģегоднÑı +Ġflies +uinely +ĠConsider +Ġstark +hew +ĠAsÃŃ +³´ë +Ġpropose +Ġíķĺë©´ +odo +ĠNormally +Ġheeft +ĠHarris +gro +ĠBlood +base +ĠiOS +Ġtouches +Ġinspir +Ġ×ĵ +Ġbinary +Ġì¶Ķ +Ġserial +Ġion +Ġunemployment +Ġodds +ĠFab +ĠFBI +BRUN +Ġweights +νο +atile +Ġnurses +Ġinvolvement +ĠíĶ¼ +Ġgovernance +ĠâĤ¬ +ÑĢÑĥп +ierra +íĺķ +ĠJerry +Ġbeard +Ġsalvation +ĠAlong +gentle +ĠKi +bol +ĠPlat +Ġhasht +è¿ij +Ġware +Ġpartie +ycz +Ġintr +Fih +nent +Ġcheat +ilen +Ġë¯ +orie +Ġfácil +etric +Ġaffecting +unciation +Ġaffairs +Ġbee +Ġviewing +Ġorang +ĠLan +ĠСÑĤ +ä¸ĸ +ĠMes +ĥģ +erie +Ġespa +Ġinterpre +Ġpossess +Ġpurely +rito +found +asma +ìłģìĿ¸ +Ġexamine +ĠÑĥм +Ġbesch +ĠTomorrow +ĠBlock +Ġvariant +Ġpreference +Ġcoaches +Ġmedications +ĠíĺĦ +Ġempire +ëĦ¤ +ĠIllinois +Ġcrispy +Ġthì +Ġbees +77 +Ġglow +èº +ĠStudies +åIJĦ +ĠChallenge +Ġunlikely +Ч +ıyorsun +DIE +Ġminimize +izard +Ġún +Ġencontrar +ĠKill +å» +Ġvanilla +ĠGrant +ĠGT +sea +Ġsought +вод +Ġnäm +ĠAunt +OWN +Ġpumpkin +stellen +Ġrag +егда +Ġstoryt +Ġforum +æ©Ł +Ġestaba +uche +Ġcongress +ĠRey +Ġdramatically +ĠSport +ĠYellow +Ġê³ĦìĨį +Ġdisgusting +ĠRecent +Ġacquired +Ġcables +çĶļ +din +Ġvisto +Ġcommunicating +ÑģÑĤавлÑı +еÑģÑĤо +ãĥ»ãĥ»ãĥ» +Ġrég +Ġsocks +Ġproces +because +Ġutter +Ġcolocar +Ġnewest +Ġgramm +表 +ä¸įçŁ¥éģĵ +Ġshifting +Ġcarrier +ĠÑģкоÑĢ +ĠSchw +Ġexecuted +Ġmaintained +ĠÏĨ +ĠMoses +Ġdisse +Ġhorr +ãĢľ +Ġrally +Ġallem +ĠEventually +Ġdiyor +lvania +Ġschnell +Ġê³¼ +Ġ매 +Ġstruggles +late +Ġclarify +ément +Ġmultiplic +ибо +Ġjourn +Ġfragr +Ġsurprisingly +Ġdesperate +52 +Ġsul +ĠRead +ĠFried +Ġmond +woo +Ġorganizing +ãģĹãĤĩãģĨ +ĠSoon +ĠвопÑĢоÑģ +ĠNur +ĠÐĹд +Ġspider +еÑģÑı +Ġtutorials +Ġnutrients +orer +Ġcoefficient +Ġarrangement +Ġpricing +nan +yu +BL +Ġtribe +ĠHoward +unks +Ġnewer +Ġprovin +Ġprediction +hos +Ġolsun +ĠAround +Ġvier +ĠÑģÑĤоÑĢон +Ġvalley +ĠEla +ifi +Ġgalaxy +Ġtranqu +Ġadvers +ĠTemple +iffs +igence +èĩªå·± +Ġkönnte +ĠÄijó +Did +Ġphotographs +ĠAWS +ÑĨиÑı +Ġguards +Ġappointed +ĠGil +Ġмом +Ġcod +ĠUnlike +Ġevenly +isconsin +Ġestou +Ġmnie +ĠExec +ĠMV +ĠEine +ä¿¡ +ĠRoger +ĠFac +ĠList +Ġfuer +аеÑĤе +omed +Ġattraction +èī² +Ġterrain +ĠDrop +Ġcorporations +Ġsciences +Ġthrone +ãģĦãģŁ +Ġaj +ĠRot +çī¹ +Ġsupporters +ĠBere +Here +Ġdiferentes +Ġsignificance +Ïĥη +æĪij覺å¾Ĺ +Ġclamp +ĠëĮĢë +Ġfabulous +rez +æĮģ +Ġassumptions +uther +wid +pot +è¿İ +Ġyan +ulin +ÑĢÑĭв +ĠSlow +ĠPennsy +Ġíķ´ìĦľ +Ġmeio +Ġwealthy +ĠEight +Ġpulse +Ġfriction +idity +ĠHoll +iyorum +Ġsounded +ĠCarr +Ġfork +âĺ +ĠPA +Ġconspir +Ġcoding +rt +ĠTyp +Ġìĸij +Ġпог +Ġmiser +ĠÑģмоÑĤÑĢ +ĠSweden +Ġolarak +ĠZhang +ĠChi +ĠTitan +Ġscreening +ĠSpider +ĠÅŀimdi +Ġobstacles +lara +Ġchallenged +pse +TON +ụ +ĠPi +Ġlagi +ieurs +Ġhurting +Ġneglect +Ġgenerating +Ġyoungest +Ġaudit +ĠÑĢез +Ïģά +Ġdonate +ĠPDF +Ġvisits +Ġcruise +PP +aser +Ġwsp +backs +ivals +ãģĨãĤĵ +Ġdeve +Ġproport +Ġcath +ĠEffect +Ġwinds +ĠìĻĶ +Ġcharts +Ġsama +Ġautomation +Ġпока +Ġolan +Ġboats +Ġcafe +Ġdenied +ĠMama +Ġblocking +ĠThor +Ġphenomenal +Ġstakeholders +Ġunos +ÑĥеÑĤ +ĠAbraham +ãģ§ãĤĤ +Ġdetection +Ġjuris +Ġpowered +zial +Ġwelfare +Ġupgrad +Ġmożna +ĠCase +cular +ĶìĿ´ +ãĥģ +ĠGuess +Ġcycles +ä¾ĭ +給 +rock +umi +Ġelite +Ġquè +åł± +ÑĤом +Ġshore +gunta +Ġku +Ġfaithful +ĠJeremy +aid +à· +ugal +å°įåķĬ +ĠVel +Ġvrai +stell +¨¸ +Ġkol +è½ +Ġquanto +ĠзаÑĢ +Ġ2002 +esy +Ġreserve +ĠмоменÑĤ +Ġdeployed +Ġdefining +Ġsau +Ġgaat +\") +Ġtransmit +Ġpublishing +Ġranking +Ġoffense +Ġ46 +pin +ĠTaking +Ġentitled +Ġgenuinely +Ġvariations +Ġfinde +Ġtau +Ġunfortunate +ĠRah +ports +ĠcÅ +Ġmonkey +Ġbrac +wei +lung +Ġartif +Ġsyrup +ĠÐĶав +Ġlifted +Ġchez +ĠAdvent +ĠStock +Ġdol +мен +иÑĪÑĮ +Ġyn +gio +det +Ġdesse +Ġgri +ĠChairman +çħ +Ġcuenta +anim +Ġcrab +Ġescal +Ġpremière +ĠGef +Ġdining +Ġseventh +Ġchasing +ĠTower +Ġbrutal +Ġfundamentally +ãģ¨ãģĨ +лениÑı +stage +Ġacquis +Ġcylinder +Ġcommander +mem +ĠUV +happy +Ġepsilon +Ġinvitation +Ġfarmer +chair +Ġdestiny +Ġsovere +ĠHebrew +Ġservant +Ġbew +Ġgast +uties +Ġadministrative +ĠCommand +éta +Ġnitrogen +ê·¼ +Ġabi +Ġvillain +Ġblanket +ĠSend +Ġbeaten +²Ħ +Ġvolunt +Ġscholar +ĠEmperor +Ġ43 +vable +ĠDus +ĠGU +Ġtargeting +www +Ġamendment +ìĨĮë +Ġting +Ġnasty +Ġgauge +ĠÑĢод +ĠHans +Your +αν +Ġprojet +ĠHawaii +Ġsuspicious +Ġschw +Ġremoval +Ġintrig +ĠMU +Ġponto +ा +ĠобÑĢаз +Ġguessing +pace +Ġmothers +Ġmillimeter +ление +没æľī +Ġavailability +icz +æѤ +Ġfract +Ġbases +km +ĠBTS +ĠField +Ġdzie +Ġsegundo +ĠëĤĺëĬĶ +Ġlegitimate +imas +Ġвн +Ġcorruption +Ġsmash +ĠValent +Ġaligned +ĠPennsylvania +Ġgab +ĠEun +enth +ĠMorning +Ġcandle +Ġbackpack +ĠIslamic +ações +Ġencry +Ġmushrooms +íĮĮ +dit +Ġtransit +ĠWisconsin +Ġparticipated +ĠIls +Ġunfold +¶Ģë +Ġprofits +Ġwarming +ĠGang +Ġnetworking +Ġmega +Ġthoroughly +lements +ĠHm +Ġdeciding +Ġemotionally +Ġexhausted +ĠÐŁÐ¾ÑĤ +cido +ĠHTML +Ġcopyright +Ġmelody +yim +Ġanders +oshop +Ġë³¼ +Ġathlete +ĠGE +Ġfrequent +Ġdesires +Ġneeding +ĠYun +Ġrifle +Ġlover +'T +Ġdense +Ġtão +Ġnotified +Ġidi +ìĹŃ +íĨ +Ġinteracting +Ġrapport +еÑĢи +ski +Ġbesser +Ġmanufacturer +ĠKyle +Ġaccountable +ĠSak +ĠPil +ĠDomin +Ġpresum +ĠÐĴÑģе +Ġvinegar +Ġguaranteed +çľĭåĪ° +Ġhandled +éŁ³ +cat +Ġcivilization +Ġaccomp +ĠVM +émon +Ġdeze +Ġgrades +Ġsollte +Ġstaring +×IJת +arnt +Ġhorizon +Ġtravail +hour +第ä¸Ģ +ĠED +ĠDak +Ġny +Ġconve +ĠCham +Ġfirms +ĠLiu +ĠÑģÑĤÑĢан +Ġlibert +Ġlenses +Ġintake +ĠвÑĭб +Ġmensen +hel +Ġpractition +Ġ350 +ãĤ³ +FO +Ġbeds +Ġancestors +ĠìĹĦì²Ń +Ġdisturb +ĠLastly +ĠSupport +ีà¹ī +ĠCorona +Ġenthusi +Ġвозм +ĠìĤ¬ëŀĮë +Ġ52 +bird +Ġreduces +ĠìŀĪìĿĦ +ĠGene +êµIJ +ÄĻp +ĠÃľber +Ġconcerning +user +Ġconcentrate +ĠWHAT +ishop +onymous +nold +Ġsuggesting +©° +ĠFish +........ +Ġvessel +Ġtrabajo +ãģµ +ĠOcean +å§IJ +yg +Ġtowns +del +Ġterrifying +ĠçalÄ±ÅŁ +Ġsino +Ġeats +Ġgez +Ġgeme +ĠìĻĦ +Ġcompart +Ġimplementing +ĠPotter +ĠGermans +ĠgÅĤ +Ġtennis +Ġcarpet +auer +ĠSaudi +yeong +Ġcurry +ĠForest +Ñĭл +Ġfifteen +Ġbolts +Ġ{\\ +¬´ +Ġsettlement +Ġlange +Ġbam +Get +íķĻ +Ġswap +ĠKhan +Ġcommence +Ġquarantine +Ġscored +çĸ +Ġ1950 +Ġthicker +Ġsûr +åı£ +ĠLarry +Ġallez +ìĭľëĬĶ +Ġgü +Ġspectacular +// +both +Ġstats +妳 +ĠNancy +Ġbunu +Ġcrust +Ġactivated +Ġê·¸ëŀ +outhe +Ġports +Ġneural +Ġjaw +Ġobservations +Ġvoit +aban +ải +¦¬ë¥¼ +omes +à¯ĭ +qui +Ġkindness +Ðij +Ġ41 +Ġmoderate +Ġangels +ĠTamb +èt +Ġchlor +ĠBilly +ì²ĺë +acon +Ġselecting +ĠDelta +Ġnull +denly +Ġciud +Ġtendency +Ġbreakdown +Ġmint +ÑĦоÑĢм +orph +Ġdawn +spr +ĠWILL +ächlich +Ġpuppy +700 +Ġத +Ġfails +ĠConc +Ġrelatives +Ġinviting +Ġautonom +Ġcomposed +Ġunity +Ġdecis +Ġaccessories +ĠCass +Ġbist +ĠTip +째 +Ġpunt +Ġráp +éĢ² +ANK +ãģļ +exist +Ġcompatible +Ġner +ĠемÑĥ +Ġaplic +Ġbapt +Ġfailing +ĠTamam +Ġoscill +Ġletzten +Ġrepeatedly +Ġjungle +ĠPush +hai +Ġη +Ġdeadly +Ñıж +wiÄħ +ĠCommon +ĠÎķ +Ġskate +TC +ĠMini +Ġhobby +ần +Ġroutes +Ġamigos +Ġconjun +Ġpartnerships +Ġnovo +Ġaver +Ġpouvez +bridge +Ġpreoc +him +Ġturb +Ġsob +ĠSnap +Ġì°¸ +minute +Ġtraject +ujÄĻ +Ġeager +Ġregulatory +Ġbanking +bling +ÑĪÑĮ +aż +Ġbizarre +itated +dire +Ġthreatened +Ġshining +Ġnesse +Ġcorps +ĠÑģÑĥ +Ġteles +Ġtemp +tem +Ġкан +Ġfever +New +Ġheavier +ĠSah +bud +Ġoutros +Ġì°¾ +Ġëªħ +arring +Ġê´ľì°® +ĠNap +Ġsemin +ĠThan +ifs +Ġdesen +ĠÑĤакое +Ġloses +ĠBalt +kon +ĠнапÑĢ +Ġvois +ĠMoscow +Ġchairs +his +Ġrefugees +kg +Ġkole +į¨ +аÑģибо +¦½ +ĠUniverse +ĠDirect +Ġcheating +ĠCin +Ġpatri +Ġadvise +ĠNether +Ġprimeiro +Ġmentioning +nut +56 +arı +Ġpetite +bled +Ġpensar +icio +IND +Ġveteran +Ġladder +Ġconsequence +ожал +ĠBurn +Ġrug +ĠMade +Ġgit +\"... +Ġcompetitors +Ġprzed +Ġapparent +ĠArgentina +ĠWorking +Ġcollaborate +woman +Ġretain +Ġleurs +Ġdashboard +×Ļ×ĵ +ĠEarly +BM +ĠеÑij +олог +Ġsatisfying +Ġoftentimes +Ġmapping +ünkü +arth +fold +Ġlaunching +Ġaura +Ġprecision +works +God +Ġstrap +ĠImper +Ġrivers +Ġ| +Ġcuer +regon +Ġarrival +каÑħ +ĠMiami +анÑĭ +Ġsurvivors +ĠSenior +David +Ġestado +Ġsectors +Ġpopping +Ġchim +ayı +Ġkunnen +Ġgallery +Ġsunlight +esehen +Ġyelling +ĠMein +ĠPhoenix +Ġmano +Ġhistoria +Ġoccurring +欸 +ì¸ +ади +å¾ħ +Ġinstitutional +ĠTut +ç² +Ġslaves +ãģ©ãģĨ +Ġforgiveness +Ġtwin +ĠHyun +нÑĮ +ĠKomm +andra +shot +ssä +ĠÑĨе +atta +Ġexpense +ĠGPU +ĠPast +ribly +ĠëŃIJìķ¼ +Ġгода +Ġrespir +æĿ± +ĠQueens +hops +Ġsérie +Ġpref +Ġcomed +Ġplut +ĠOverall +ĠãģĿ +Ġcush +Ġringing +Ġincorrect +ĠÑģÑĤÑĢ +Ġgeometry +Ġadvertis +ĠШ +Ġreviewed +ãģĤãģĤ +Ġdozens +Ġdetermination +ĠPhill +Ġcontributed +ĠCit +Ġpassengers +Ġcôté +Ġrever +Ġtechnological +Ġallen +Ġraining +avi +Ġsalty +Ġtyping +ĠÑĤе +Ġtilt +Ġì¹ĺ +ĠоÑĢ +ĠпÑĢÑıм +Ġrou +Ġarena +arat +åĪ« +HHHH +Ġmanufacturers +ĠEdward +Ġtuck +Ġblows +ingo +ĠMarc +ìķĦìĦľ +Mich +ĠClean +è´ +esto +ĠPack +Ġshaft +BRUNO +Ġaven +uur +ÑģколÑĮко +ê´Ģ +Ġautomated +Ġventure +Ġsurveillance +ĠGrow +ĠEmer +ĠдоÑĢ +Ġinvestor +ĠYok +Ġlatter +ĠNI +Ġfunctioning +ĠHamilton +Ġ51 +Ġmurdered +Ġanchor +Ġcuc +ĠSCP +ĠMadam +Ġconstraints +Ġbarn +anken +Ġë§İìĿĢ +ĠMotor +ĠDoing +Ġamen +etts +Ġinstructor +egt +ako +Ġposture +ivia +ĠPolish +Ġдва +Ġcolorful +Ġelbow +Ġparle +Ġpasser +Ġcondem +ortal +Ġfertil +اد +ĠColomb +Ġalignment +Ġastronaut +ĠMut +Ġsalmon +Ġstructured +ŀר +Ġclicks +Ġmiej +æĶ¿ +ãģĦãĤĦ +ĠRound +Ġrainbow +ĠVA +ãģĶãģĸ +ì§Ī +otz +, +Ġchords +ĠSanders +Ġë¶Ħë +Ben +Ġdarüber +ilians +Ġordering +ĠManh +Ġkilogram +ĠkarÅŁ +Ġgrasp +Ġghosts +alen +ĠJedi +Ġбли +Ġdownloaded +Ġconducting +ĠHak +Ġresearcher +ilan +good +ĠHannah +ĠdÃ¼ÅŁÃ¼n +ĠMessiah +uity +iona +Ġprobable +ĠYE +Ġindependently +Ġbuffer +burn +ourd +ĠMcK +Ġlingu +ujemy +еÑĢÑĤ +Ġintuitive +Ġcracks +appropri +nty +Ġgeen +Ġlend +Ġcertification +IDS +unter +pees +Ġtrump +Ġbankrupt +Ġfeas +èĹ +Ġduż +æ¸ħ +Ġviruses +Ġ58 +god +Ġжел +Ġstalk +Ind +achi +ĠCF +ĠCond +Ġsanct +Ġconten +Ġfreed +ĠRT +Ġmentors +족 +Ġportable +ĠPaulo +rane +HAHA +ĠSection +çĨ +hyun +ĠÎŃÏĩ +ĠPub +ĠIndepend +Ġcompounds +ĠÑģÑĭ +Ġmessaging +Ġdedication +Ġnoticing +Ġdevoted +ÑİÑĤÑģÑı +Ġsnakes +Ġbattlefield +pers +Ġdela +92 +Ġhai +illä +érer +every +Ġresponsive +×Ļ×ķ +opf +éī +Ĭ¸ +Because +Ġtourism +Ġê·¸ê²Į +×ķצ +Ġcans +stüt +Ġdonne +ĠDios +ĠUber +actory +Ġoriented +ĠHerm +Ġpatron +urf +bei +Ġprograma +ĠOhh +gener +Ġfist +ĠWendy +Ġanda +Ġguessed +Ġfreak +ä¸Ńåľĭ +ĠKings +chool +Ġoffline +ĠIndiana +ĠAlliance +Ġ53 +Ġparticul +ĠFocus +Ġinhabit +Ġê°ĻìĿĢëį° +ĠMcG +owski +ĠìĿ´ê±´ +ĠpaÅĦst +они +itta +Ġconfirmation +ĠBrooklyn +Ġnoodle +fund +itud +Ġgrandparents +Ġbarbecue +ειÏĤ +Ġá +Ġballot +ĠVeter +Ġpipes +igious +ĠGraph +ested +Ġë¸Įë +ĠKE +ãģ¡ãĤĩãģ£ãģ¨ +Ġeins +Ġhatred +ãģijãģ© +Ġdang +eeee +Ġarchae +ĠJesse +Ġdetected +Ġseni +burgh +Ġdisplacement +Ġdop +Ġconditioning +ĠнеÑģколÑĮко +Ġdisturbing +PH +Ġthinner +Ġwounded +ĠCuando +Ġcushion +Ġwhites +Ġpreferences +Ġì¤Ģë¹Ħ +Ġkaż +ĠGate +ĠPath +dles +à¸Ħร +imore +Ġë³´ìŬ +Ġdisciplines +á»ı +Ġmesma +ĠìĥĪë +Ġìĭ¬ +Ġging +Ġumbrella +IGHT +Ġpension +Ġcombining +SS +Ġrectangle +á»ĩt +Ġproxim +ĠCow +¸Į +Ġintentional +æķĻ +Ġdecid +ĠÑģкаж +ĠUma +iasm +buz +Ġdebris +Ġcass +ĠProp +iska +ëł¥ +esterol +ussian +ìĿ´ëŀij +Ġunlimited +Ġadmire +Ġtightly +Ġgenome +ĠJunior +venir +gus +ĠcÄĥ +ĠVlad +ĠíĤ +Ġrelativ +inci +Ġaunque +ĠBoys +ÑĨион +ĠSwiss +Ġphysicians +Ġíıī +ĠPET +Ġwounds +about +Ãłi +onz +urities +ĠÑĥвид +å·¦ +Ġmentality +Ġvariance +Ġsegunda +Ġvolcano +alie +à¥ĩ +Ġtiles +ĠTerry +ĠاÙĦÙĦÙĩ +Ġcanon +Ġscattered +pton +Ġdefinitions +Ġalgebra +oten +ablo +ijuana +Ġwrapping +Ġsesame +ĠнаÑĩина +ĠAlf +ĠÐłÐ¾ÑģÑģ +orno +Ġankle +Ġspecialty +Ġattempting +iliation +Ġ1920 +Ġphenomena +ĠProduct +ĠBuck +ĠAww +seen +Ġvoid +ĠFranklin +Ġadvocacy +ĠSep +Ġcoolest +ĠÑģÑĢазÑĥ +ĠQuand +Ġ900 +ĠTrad +dies +Ġhash +æĪijå°± +ä¹Łæĺ¯ +Ġpots +Ġsadly +Ġviable +ĠTiger +ĠONE +Ġneurons +owanie +ÄĹ +ĠShar +ĠLandes +Ġconferences +該 +Ġcredential +Ġlime +inee +xit +pay +Ġincons +Ġ>>: +èªį +Ġíŀĺë +Ġlesser +Ġspill +Ġpremise +Ġ365 +ĠHost +Ġtomar +×IJ׾ +ë²Ī +ĠWhats +Ġlightweight +ĠMap +fia +ellschaft +Ġvendors +uesto +ĠMister +ĠÐŁÑĢи +åı³ +hma +Ġintentionally +ĠTang +éĹ® +Ġidentification +Ġetcetera +ĠNee +ĠÑĤÑĢи +ê·¸ +Ġcryptocur +Ġinhale +Ġaddict +åIJĦä½į +Ġmau +ĠÑĤакаÑı +Ġë²Ħ +Ġcomprar +iedzieÄĩ +ĠоÑĤно +Ġbeginner +ĠмÑĥж +Ġobsc +Ġlimiting +ascular +Ġinspection +aci +Ġrejo +Mus +Ġzaten +Ġszcz +ĠMadrid +Ġvarieties +ĠestÃł +ĠShakes +Ġkits +Ġadminister +Ġlava +ĠgÃ¥ +試 +ת×Ļ +ĠWayne +Ġinstagram +Ġrated +paper +Ġbild +Ġpretending +Ġobserving +ĠÑģамом +Ġtror +Ġorganisms +Ġfalta +Ġhometown +ç± +Ġíĭ +Ġcheg +Ġì¡ +Ġcomma +isé +Ġlikelihood +avored +Ġgeldi +ников +Ġmedio +Ġjakie +ĠJup +Ġgreenhouse +Ġspit +кое +Ġкаж +ĠGram +ĠConference +Ġdeficit +sın +inse +uÄŁ +Ġricht +Ġcoincidence +åıį +Ġeurop +Ġbutterfly +pread +Ġìĸ¼ +èĢ¶ +Ġwavel +ĠInfin +ĠPlanet +Ġselfie +ientras +Ġarrog +oser +idal +ł×Ĺ׳×ķ +ütün +Ġfreshman +ĠMachine +ÏĥÏĦ +ĠDia +ìĿ´ëĭ¤ +ãģĵãģĨ +nea +Ġlisting +Ġconfigure +utor +Up +tschaft +rière +Ġupwards +ĠÑħоÑĩÑĥ +Ġsweep +Br +Ġexpressing +Ġunhappy +Ġmandatory +gender +ĠAÃŃ +Ġindicators +Ġoils +note +Ġsegur +ожеÑĤ +ynasty +Ġdistances +Ġmerge +BERT +Ġsurrender +Ġbuat +ĠAwards +Ġseñor +odox +Ġflavour +Ġabdom +Ġconfigur +86 +ĠDIY +Ġrigid +°ĺ +Ġcorporation +Ġgroom +jaw +ĠNear +ило +Ġopera +ĠInnov +иÑĢа +ĵ± +Ġspecified +Ġcosm +ĠFreedom +Ġclown +ĠNem +Ġвол +Ñijн +Ġcharger +à¹ģล +Ġinfluential +äsident +é¤ +ĠìĦłë +Ġvolumes +æIJ +Ġoutras +ĠTwitch +Ġfounding +Ġawhile +Ġcoil +ê°Ļ +Ġcả +ĠThrow +ĠHence +ommt +ĠBenjamin +глÑıд +Time +obic +Ġmour +Ġdread +ĠLÃł +ĠChile +Ġpreval +Ġvain +Ġartık +Ġpreserved +ĠоÑĤд +Ġwarehouse +Ġbeste +ĠSeveral +ĠSituation +Ġcardboard +Tod +erna +Ġgarant +Ġgesture +Ġhen +Ġspelling +osexual +Ġanne +Ġmice +ĠMeine +card +Ġrebell +Ġcerto +Ġìľłë +Ġverschied +ĠBos +Ġinvention +Ġtrze +Ġmanière +ĠChad +Ġspre +Ġorganisations +Ġpoorly +Ġanterior +Ġstair +кÑĢ +Ġatomic +Ġsympath +Ġcontinually +Ġkleine +ète +иÑī +οÏĤ +peut +Ġreposit +Ġentra +Em +Ġfinancing +Ġмног +Ġthesis +ĠComputer +eau +ĠTree +Ġbride +onsieur +shire +wic +DE +ĠìĪĺë +Ġacom +ĠPO +ersch +ĠпомоÑī +ĠArmen +Ġ죽 +Ġzor +Ġprints +ĠDass +港 +Ġdurable +ĠTransport +ìŀIJê°Ģ +Ġлег +Ġdét +ôle +amous +YN +Ġcliff +Ġgrammar +ĠÐŁÐ¾ÑįÑĤомÑĥ +ĠlÃłm +esch +Ġmiserable +Ġvolts +ĠCad +ukan +ÑĤив +rust +Ġìĺ¬ëĿ¼ +Ġverk +Ġchickens +ĠYoo +Ġoutfits +code +Ġhierarchy +netes +Ġcounterpart +Ġtôi +Ġted +ĠBart +ĠëĿ¼ +ĠGenau +Ġincoming +ĠABC +rique +ĠоÑĤп +qual +Ġincentive +Ġihren +׳×Ļ +loe +Ġ1930 +Ġbarg +Ġdiction +Ġönce +INS +Ġreh +isiaj +mouth +Ġscoring +lık +ĠìķĦ주 +ORIA +ĠEstados +Ġcompanion +Ġassemble +Ġpunished +Ġital +Ġprevents +istes +ĠKentucky +Ġlocate +Ġfasting +ãģ¨æĢĿ +ĥĢ +ĠSeb +ĠCrown +opia +Ġwhip +usz +ками +Ġdatabases +åŃĹ +Ġprosec +Ġ1997 +ĠìĤ´ì§Ŀ +ĠSolar +ĠPues +ĠZen +ollo +ĠGuru +Ġsqueez +ĠÐĹа +ĠÄį +ceptions +cca +izable +mand +Ġbreakthrough +Ġtablespoon +ĠSEC +ikh +ĠSão +Ġпло +amen +Ġprac +Ġdarling +Ġtaller +Ġrendering +Ġìļ°ë¦¬ê°Ģ +ĠÏĦηÏĤ +Ġmã +Ġesos +uerdo +ĠÑģÑĩиÑĤ +aller +ìĹĪìĸ´ìļĶ +Ġmillones +lerin +Ġpegar +onne +Ġenrollment +Ġliegt +Ġboa +wiÄĻ +bsp +Ġcycling +ĠBernie +Ġ1989 +ĠдалÑĮ +ĠDakota +ĠÑģвÑıз +ĠCP +Ġstare +íĤ¤ +Ġprosperity +Ġarrangements +Ġarriving +mä +Ġkayak +ipt +Ġpardon +Ġrelat +Ġverste +ĠFig +Ġfoil +ĠTalking +peare +Ġnoi +ĠпÑĢиÑĪ +Ġhockey +Ġado +ĠOUT +67 +Ġhormones +ĠAvenue +ĠSuperman +Ġprescription +ubernetes +CL +otive +NIS +ienen +Ġsadness +ĠVit +Ty +Ġstarter +Ġbede +Ġfoundations +Ġsore +åºĹ +ÑīеÑģÑĤв +ìļ°ë +ĠÑĩÑĥв +link +Ġmaneu +working +Ãłn +ĠAttack +ĠCart +veis +ĠResp +ensing +Ġì¢ĭìķĦìļĶ +Ġescuch +ĠRNA +Ĥ´ +Ġadop +Ġbending +عد +Ġmanages +usp +Ġtart +Ġrouter +Bo +Ġestablishing +Ġbalancing +Ġathletic +ĠSlo +Ġfills +Ġнаб +Ġдал +Ġposso +ĠVielen +Ġcritics +Ġlawsuit +ĠIsaac +ĠÑĦилÑĮм +Ġtras +Ġpraw +ĠCrazy +Ġneu +Ġkull +Ġtumor +ĠAPP +gate +ĠARE +98 +ĠSteam +Ġfucked +lage +ĠâĻ¬ +ĠMD +fy +Ġshells +ĠSeems +izers +Ġranges +ĠAntonio +ATION +ĠBaba +Ġìĥī +kun +Ġprayed +ÑĢÑı +ĠпÑĢоÑĤив +Ġseas +bury +Ġ×Ķש +Ġtrait +ĠDepending +Ġdre +Ġkönnt +ÑĨÑĥ +Ġlipstick +eez +ĠпÑĢимеÑĢ +Ġassignments +Bob +Ġmetals +Ġspecially +å°įä¸įå°į +ĠìĺĪë +ĠÅ¡ +Ġvista +Ġά +Ġtwins +Ġnotable +ĠSau +Ġdévelop +Ġçek +Ġpolynom +avam +Ġtambé +оном +Ġplasma +Ġefect +Ġläng +Ġcasi +Ñģа +ımı +ãģĻãĤĭ +ĵ¤ìĿĢ +Ġlabour +ossen +ĠPun +rif +Ġdoses +Ġoperates +илли +Ġjaar +staw +ĠìĤ¬ëŀij +Ġatm +Ġprotects +Ġimped +HO +Ġcima +Ġtoch +abis +Ġsendo +laus +Ġcurl +ĠNum +Ġsponsors +Ġdébut +ĠAlexa +ĠBür +ĠAmer +Ġcope +Ġизв +jal +Ġ1995 +apat +resse +ĠPrize +ĠClaire +ĠBrandon +Ġwszystko +Ġvalued +à¸Ļะ +Ġsect +Ġsecretly +Ġdiamonds +ĠEvan +ĠRPG +ãģ«ãģª +ĪëıĦ +ĠUniversal +Ġdoubts +ĠPin +wiÄħz +ļ© +Ġalbo +Ġbraucht +AUL +ĠMobile +grades +Ġschem +why +ĠNicht +pi +gle +Ġchorus +Ġgly +Ġreinforce +Ġmuff +ĠShen +ĠHola +Ñĥг +videmment +vial +acious +laimed +ĠRico +Ġvegg +Ġillustration +ĠButter +owad +Ġeux +Ġenfants +ĠLeader +ĠVillage +etically +ÙĨÙĬ +Ġstew +Ġsurprises +Ġcue +ĠGrandma +ĠCelsius +ĠRicht +enc +Ġpetition +Ġherb +Ġwicked +Ġschle +ocaly +Ġtransf +Ġtokens +ĠGray +ĠBBC +IK +Ġ1500 +zn +ĠNev +Ġkoy +Ġzar +Ġbullshit +ĠColombia +ulative +Ġwidespread +yect +kit +Ġempresa +Ġnour +Ġburns +atin +aired +Ġrevolutionary +ĠгодÑĥ +ĠLogan +Ġ1996 +ĠGraham +reb +ĠNHS +æľĽ +Ġcostumes +Ġnawet +Ġlovers +ĠLucy +ĠIndigenous +íķĺ기 +Ġimmunity +¥´ë +uito +Ġexcessive +Ġdonations +Ġ×Ķר +Ġ첫 +éīĦ +Ġdrying +melon +Ġsurveys +Ġ무ìĬ¨ +風 +aaa +Ġprobe +ancial +Ġlouder +Ġhotels +Ã¼ÄŁ +agner +Ġorigins +Ġë§Īì§Ģë§ī +Ġ** +Ġstrangers +ĠHaus +comed +Ġanthrop +Ġuso +ĠìķĦì§ģ +ĠYuan +ĠíķĦìļĶ +pler +ressive +Ġspraw +ĠStew +Ġ1994 +Ġelders +Ġmeinen +Ġjunt +Ġacoust +ĠWohn +Ġbananas +Ġprojection +ĠStick +legt +speed +ĠcÅ©ng +ĠWort +ĠBaltimore +ĠÑĨел +Ġdunno +å¼· +?, +ãĥīãĥ³ +ĠLocal +osto +ÐŃ +ода +ĠPortuguese +Ġtheirs +Ġdém +åı¦ +Ġdrauf +ĠBuddhist +erta +Ge +Ġcarrot +ĠWonderful +Ġsoak +Ġchairman +ggi +ICA +fried +Ġflick +ĠThroughout +Ġìļ°ë +Ġcough +Ġfluffy +school +Ġripped +-------- +ĠZukunft +Ġнеб +Ġsto +ĠBO +pent +ĠLawrence +ÏīÏĤ +sticks +ĠEins +ĠÑĢÑĭ +ĠStrong +Ġcaramel +Ġspite +azar +éĥ½æĺ¯ +Ġcritically +Ġobra +owitz +ĠZone +ĠÑĢек +Ġsug +arded +Ġgì +ffentlich +anche +ØŁ +astically +ìĿ¼ë +лав +Ġsimplest +ĠFriend +Ġquello +Ġambition +Ġabbiamo +åºķ +ĠÑĦоÑĢм +ĠEssa +Ġeducators +Ġstatistical +éĢĻéĤĬ +Ġchanger +Ġatau +étais +ĠShakespeare +ëIJĺ +Ġtriggers +Ġrealiz +Ġcelui +wheel +Ġloyalty +Ġscreams +kehr +ĠMega +east +Ġtops +ĠTotally +ountain +lord +Ġviolation +ĠGA +Ġnicer +ĠFresh +ĠMelissa +function +Ġrape +Ġexceptions +Ġsilicon +Ġliberty +Ġhouseholds +ãģįãģ¾ãģĻ +ĠCA +ĠÐŀб +Ġlib +ŀĮ +cific +Ġtropical +Ġinvestigating +HD +Ġadapter +ĠPitt +ancia +ĠShell +friendly +Ġconclusions +Ġturtle +Ġdecomp +Ġanimations +ĠÑģек +insi +Ġretention +kie +Ġinjection +ĠMadison +ì°° +Ġvient +Ġvaried +Ġviolin +ĠBil +Ġluckily +Ġhtt +lä +Ġranch +çľĭçľĭ +Ġsólo +ìķħ +ĠDerek +ĠScripture +оÑĢа +Ġclassrooms +avil +formed +Ġbeforehand +ĠGem +prech +Ġlin +Ġgreens +ÑĨев +ĠMercedes +Ġdrought +gasps +Ġabortion +Ġterribly +Ġsposób +Ġsecured +Ġatrás +Ġwavelength +Ġgrains +ective +Ġspacecraft +Ġtours +Ġprofes +Ġsurgeon +ĠPie +Ġideally +arner +UP +opard +sce +Ġimmense +ĠOrt +roller +ĠDallas +ĠNicholas +Ġsulf +ĠToyota +Ġquantities +ceans +Ġcui +ança +ĠCAN +itzerland +åĦ¿ +Ġzou +ĠCyber +legen +ĠInit +edu +Ġapert +Ġadjac +ouv +èĢĮä¸Ķ +rs +Ġcabbage +Ġwheelchair +inyl +ĠDynam +ĠìķĦëĭĪëĿ¼ +Ġling +hl +ĠмогÑĥ +Ġcrisp +Ġmij +Ġdug +nin +Ġbloss +Ġbelonging +Ġloudly +Ġminerals +Ġconcluded +Ġsearched +96 +ĠMeet +ĠSEO +ĠСк +ĠHob +otta +Ġpropaganda +Ġcinnamon +Ġhunter +Ġgemeins +Ġsculpture +ulsion +Ġväl +Ġmagazines +Ġcontroversy +ä¸Ģ樣 +Ġsequences +ãģĦãĤĭ +ĠíļĮ +Ġdeleted +使 +IJëıĦ +Ġvarying +ãĥĨ +Ġmounting +Ġaffair +Ġpathways +æ¦ +Ġdigo +亮 +Ġдок +Alex +Ġtobacco +ĠCV +Ġbothered +Ġambient +inky +ĠSL +Ġhates +Ġjeżeli +Ġcongreg +Ġelas +Ġdeuts +ĠStudios +chÄĻ +Ġdocumented +ĠCruz +ĠLen +ĠDouglas +ĠPortugal +enti +Ġspouse +Ġanalys +avia +Ġedited +Ġlại +built +Ġville +adora +Ġbracelet +Ġsushi +Ġpm +Ġtrails +Ġlug +Ġöver +Ġsorrow +Ġcolony +adox +Ġserie +anyak +ĠØ· +ĠGulf +æĺ¯ä¸įæĺ¯ +ĠPV +ĠSamuel +ĠKit +ĠRal +ontin +expl +Ġentries +Ġactivists +Ps +Ġsant +ĠÑĤоÑĩ +ĠBruno +keley +Ġtutto +éĶ +Ġvintage +Ġterrified +ĠпоÑħ +usive +owers +айÑĤ +ëıĻ +Ġtwisted +ĠThought +Ġtah +Ġshrink +Ġsheer +lit +Ġdalam +Ġdib +Ġvard +owane +Ġdobr +ĠRena +ĠÑģвоÑİ +ĠpaÃŃses +ĠEra +ãģ®ãģ§ +ĠBUT +sighs +Ġ그거 +ĠgroÃŁen +Ġ빨리 +Ġnerves +Ġconstit +Ġpreocup +ĠGay +ĠXu +keeper +heure +..) +ĠCalm +ĠUnidos +ĠìĿ´ê²ĥ +ĠAqui +ĠìłľìĿ¼ +dır +ì¦ĺ +your +ĠÑįÑĤим +2020 +Ġrund +ĠHO +ĠCatherine +ieli +Ġfusion +Ġideology +Ġforam +shaped +ĠíĽĦë +Ġwt +Ġretr +Ġpréc +Ġê°ij +Ġopenly +vity +구ìļĶ +Ġobstacle +Ġboo +Ġseiner +icorn +Ġeigenlijk +Ġheader +aremos +Ġsofter +ĠÐŁÐ¾Ð´ +Ġprejud +Ġdefines +ierte +Ġblending +Ġbelievers +ĠWochen +Ġникак +ĠÐļогда +ĠTypically +Ġíģ¬ +管 +cios +Ġmissiles +Ġsponge +ĠKitchen +Ġtren +ningen +Ġscrap +Ġserait +´ìł +ç¹ +Ġë°ĺë +Ġrestored +ĠprzykÅĤad +ĠKubernetes +Ġsait +Ġuw +Ġenabling +Ġtravers +amps +åıĹ +ĠOMG +ensor +Ġzosta +Ġpronounced +Ang +normal +Ġeconomies +tin +ĠChampion +izen +Ġarbeiten +ĠGospel +ĠZu +nga +Ġliteracy +ĠMans +Ġcirculation +Ġadap +ĠTotal +Ġmereka +Ġolacak +ÑģÑĤаÑĤи +Jack +Ġmund +Ġthief +bies +Ġê²ģ +aque +ĠÚ©ÛĮ +ĠScar +å² +Ġabol +Ġdevote +Ġ01 +Ġsitten +ĠVisual +week +some +ingt +Ġjournalism +ĠHir +ĠBachelor +inery +ÃľND +ãĥŁ +ç»Ļ +Ġcoloring +ĠCrist +Ġcelebrities +ĠÑĩиÑģ +ĠCrit +Ġdifferentiate +ĠÐľÐ½Ðµ +elim +Ġseafood +Ġalgumas +otherapy +æĪ° +Ġglaub +Ġarbitrary +gens +ĠбÑĥдем +Ġtav +Ġcreamy +ĠCountry +añ +меÑĤ +Ġhinter +Ġmism +Ġillustrate +ÃľNDNIS +Ġdecreasing +Ġweniger +AKI +ixon +Ġней +Ġfatto +Ġnerd +çł +Ġbitte +Per +Ġtane +Ġgöz +Ġforte +ĠEy +ĠнавеÑĢ +被 +ĠWordPress +ĠMis +ů +zäh +Ġintéress +osaurs +ĠFalls +Ġnessa +97 +Ġmuseums +Ġcorresponds +Ġsings +four +Ġeder +ĠCommunist +oa +nek +ĠWHO +Ġcorpo +Ġmessing +ÏĦαι +Ġbrushes +Ġbisc +ĠArbeits +ĠTax +Ġsele +Ġflags +oupe +Ġanticipated +ãĥij +ĠNad +Ġpoured +Ġml +Ġllama +Ġvisualize +Ġlisteners +ÙĦÙĥ +alten +Michael +Ġcosì +Õ¡Õ +opus +Ġíķ´ì£¼ +Ġhike +ĠAttorney +ĠHillary +uded +Ġíķĺì§Ģë§Į +Ġdove +Ġstorms +акÑģ +Ġdoctrine +Ġhex +iks +noÅĽÄĩ +Ġscripts +Ġδεν +ĠÑįÑĤиÑħ +ĠÐĨ +aber +ĠVas +Ġcentimeters +×ŀ×Ķ +ниб +Ġriders +ĠTrib +åĮħ +Ġtakże +Ġnoun +Ġicons +Ġsolely +minded +Ġdispon +ĠSwitzerland +Ġclusters +Ġqueda +ailing +Ġmanga +Ġ68 +ĦĪ +Ġtet +gins +haus +空 +å·¥ +ĠOP +oted +Ġnouveau +ALLY +ÙĪد +òn +Ġmortality +ĠGitHub +drop +Ġdisgu +Ġrecom +Ġlocals +Ġhomemade +amba +Ġpronunciation +Ġalphabet +анÑĮ +owany +iras +idency +OME +ĠÑĢаÑģÑģ +arak +viamente +Ġnonprofit +ĠYouTuber +Ġparenth +ĠBoo +vat +ĠStir +Ġprecip +Ġants +Ġally +ĠMaori +ĠëĮĢíķľ +åı¯æĺ¯ +ogene +ĠLabour +arette +Ġrecycling +ensa +Ġpursuit +Ġsak +ĠÐĹдеÑģÑĮ +Ġtolerance +Ġsaat +Ġclicked +âĻ¥ +Ġfacebook +ĠInto +Ġincentives +기ëĬĶ +ĠDennis +ĠWik +gesch +à¹Ģà¸Ľ +ĠÏĢα +ĠWhoo +Ġrounded +Ġdope +Ġcapturing +ĠWarri +Ġcivilian +Ġcharming +Ġesas +Ġsustained +Ġleaning +Ġabundance +ÃŃlia +алÑĮнÑĭй +Ġphải +acja +Ġê°ĻìķĦ +activ +าย +Ġ97 +Ġмой +cro +ĠJackie +ittees +bracht +ulent +Ġìłľë +Ġplugin +vantage +party +Ġsuas +Ġante +Ñĥл +ÐĿÐIJ +æĤ¨ +ĠÏĥÏħ +Ġmeth +Ġenthusiasm +ÑıÑĤÑģÑı +íĻĶë +Ġsynthetic +Ġseasoning +ĠLost +onomy +ĠSpark +Ġbure +Ġassured +Ġimagin +Ġcarro +Sha +Äħt +нÑĥÑĤÑĮ +ática +TY +Ġkern +ĠBrazilian +ð +Ġsuspended +ĠCarib +Ġbizim +ĠOliver +ãģ¶ +Tom +Ġплан +Ġnope +omething +Ġbeiden +ÑĨен +Ġfluct +ĠμοÏħ +Ġfathers +ĠBlake +Ġupward +ĠDash +ĠLil +ĠìĪĺëıĦ +Ġrevelation +Ġelevated +ĠJiang +LED +ĠThompson +ĠмогÑĥÑĤ +ÑģÑĤÑĢÑĥ +ifiers +Ġcomeback +Ġbuyers +ê²° +ĠSales +иÑĩе +ciones +Ġwhistle +Ġdull +LEX +Ġíķĺê²łìĬµëĭĪëĭ¤ +Ġcriminals +Ġdescent +ipple +ması +Ġfoolish +ĠдÑĥмаÑİ +tar +Ġmango +Ġchoreography +Matt +Ġterritor +Ġacaba +ĠEinstein +ĠIBM +ĠMetal +ĠCrystal +Ġrah +Ġfoul +ĠIslands +Ġintact +ĠRail +.: +Ġacá +ĠпÑĢоп +еÑĢе +ĠWrite +hehe +ĠFO +ĠÏĥÏĦη +Ġdoin +held +Ġappropriately +Ġdeliberately +Ġarchive +Ġgiveaway +ãģĵãģĵ +Ġfinale +лаÑģ +ено +Æ¡n +æ£Ĵ +ogo +çī© +ĠAudience +ãħł +Ġsubur +Ġheadache +аннÑı +ĠWitch +ĠSwedish +ĠBI +Ġerase +Ġkhi +Ġcommentary +ĠSultan +íĥĿ +ĠLeban +Ġë³´ìĭ +ĠPam +pekt +month +Ġgrounded +ê¾ +ĠÅŁekilde +250 +ĠSCH +ioso +Ġinaug +heimer +Ġreflecting +ĠRuth +ĠOil +Ġtrouver +uep +..] +ĠìŀĪë +Ġolha +Ġreasonably +Ġglitch +UB +ĠGran +Ġadalah +Ġlent +را +Ġtraction +Ġadjusting +´¤ +нибÑĥдÑĮ +Ġдоп +Ġstretched +Ġort +Ġcosine +viol +Ġìħ +cir +Ġbastard +ä¸ĩ +ĠÑħод +Ġquier +Ġpressures +ĠAnh +å¹¾ +Ġelles +ĠдÑĢÑĥз +ĠможеÑĤе +Ġchá» +ĠMé +ök +ầu +ìłĪ +zin +Ġcaution +iban +Ġjudging +ÑĥÑİÑĤ +Ġbaj +ĠСейÑĩаÑģ +ĠPoor +ĠNazi +Ġupbeat +yang +Ġweekends +ĠEssentially +Ġoluyor +Ġspatial +acker +Ġseller +Ġ×IJ×ķת +ij׾ +Ġvivid +ĠBond +ê¶Į +iskt +ãĤµ +Ġgoat +driver +Ġmug +ictional +Ġallt +ĠIniti +ĠRand +Ġfinishes +Ġê°Ī +Ġvitam +Ġteenagers +ĠMorris +ì¤Ħ +ĠOri +iya +Ġmyös +Step +ĠKre +辦 +Ġdinosaur +Ġëªĩ +affe +ĠëIJ©ëĭĪëĭ¤ +Ġzeg +åĪĩ +ĠManhattan +Ġsujet +uelle +stoff +Ġdür +Ġsubmar +eses +Ġaquele +Ġnou +ĠFaith +tz +ĠÑĤомÑĥ +aceut +liers +Ġbandwidth +Æ°á»Ŀ +Ġrespective +ĠAve +Ġspreadshe +ĠSent +icamente +Ġinfra +Ġlearners +Ġà®ī +aiah +renal +Ġmustard +Ġhabt +çĥ +ĠQué +Ġanalyzing +æ¯ı +Ġsolic +Ġ×Ķ×ķ×IJ +Ġcausa +Ġwelcomed +ĠSuccess +Ġfacile +ĠÐŁÐ¾ÑĤомÑĥ +schein +Ġfetch +Ġstrat +ĠÑģÑĤоиÑĤ +ìĹIJìĦľëĬĶ +ĠÑģпоÑģоб +mam +ĠserÃŃa +naments +writer +Ġconsulting +íĺĢ +ĠBerkeley +eu +asive +UU +ĠAnalyt +Ġsubmission +Ġmagnificent +enza +Ġecon +Ġprofiles +Ġincar +Ab +ĠNun +Ġhic +screaming +Ġresilient +åĪ© +grund +Ġconcur +Ġbereits +LD +Ġnurt +ìī +Ġfeast +Ġencuent +ĠMichel +Ġsuprem +\"] +Ġfeeds +ĠKollegen +isser +ĠFeng +ĠWen +mun +ĠtenÃŃa +ĠWrest +Ġìĺ¤ëĬĺìĿĢ +Ġstead +Ġrestoration +Ġdonated +Ġdels +Ġcensus +Ġdesperately +worthy +HE +ĠSpa +ĠBryan +Ġhj +ĠRaw +ìķĦë +ĠCamera +Ġzien +Ġstyl +ĠTW +ĠCheese +borne +Ġobl +ĠAlready +Ġunstable +Ġflames +post +Ha +romagn +ĠìĹĦë§Ī +dest +Ġkolej +Ġtemporarily +Ġdetermining +ĠGlass +ÑĢон +olan +Ġdominated +åĮĸ +____ +ĠÙĩذا +ĠDana +Ġdinheiro +aqu +민 +ĠÃłs +ĠJoey +ĠGriff +Ġattain +Ġtransitions +ĠLiterally +енд +ĠHaven +Ġgrabbing +Ġcrystals +ĠFourth +Ġcandles +ĠÑģлÑĥÑĩа +rico +Ġ5000 +etto +Ġundo +Ġkto +Ġdivert +Ġchir +Ġpersec +Ġhiking +Ġannouncements +çĶ± +зÑĭ +Ġauc +Ġsystemic +ĠRM +Ïĥα +ĠÐĶж +Ġyar +ĠWard +Ġpissed +Ġcarn +Ġautonomous +ãħİãħİ +sover +æ²ĴéĮ¯ +å¾Ī好 +Ġreflex +Ġgardens +Ġdated +ì± +amiÄĻ +Ġcontinuity +Ġcitizenship +Ġschwer +Ġzak +table +ĠÑģÑĩ +è§ģ +ĠÏĥε +Ġgenerates +구ëĤĺ +öh +óm +alam +ĠJUDY +ĠBug +Ġãģ¦ +Ġdrones +Ġágua +acaks +æļ +ĠÐļон +×ĸ×Ķ +Ġstrive +ĠAltern +Ġnearest +Ġproyect +tera +ĠASHLEY +Ġworm +Ġreplay +Ġtara +ĠIndians +ãĤ° +icaid +ĠìĪľ +Ġappealing +ĠWes +Ġmentions +Ġделе +Ġkw +Ġfragile +isz +ków +hang +color +Ġpresidente +87 +еÑĦ +çĪ¸ +Ġдобав +ĠNelson +áfic +ĠMICHAEL +Ġmechanic +Ġmetres +ĠoczywiÅĽcie +ĠCind +ĠogsÃ¥ +Ġlandsca +ACE +Ġheadlines +Ġcatalyst +ĠCatch +inkles +Ġpills +ordo +Ġimmigrant +Ġexamination +Ġaccidents +zÄħd +Ġquiere +Ġnella +Ġ67 +Ġpassa +Ġsuperfic +istor +Ġnov +ëĭµ +Ġmandate +isons +ĠVirtual +Ġselber +Ġcounseling +ĠNBA +Ġsept +Ġbeliever +Ġmarvel +ĠIntegr +ĠмÑĸ +Ġorph +Ġbackward +ĠGeneration +ĠPict +ĠÑĤоÑĤ +Ġtapi +prochen +Ġhallway +hte +ĠÛģÛĴ +ĠZum +èĢģ師 +achment +iquer +folg +ĠEddie +ĠKil +Ġwellness +stock +è¼ĥ +Ġkaç +Ġterrorism +Ġpointer +Of +heric +ĠUltimately +Ġmeses +ĠTrade +Ġpint +Ġtuition +Ġdisagre +Ġê²ĮìŀĦ +Ġmanuscript +Ġroomm +Ġoutputs +еÑĨи +Ġries +Ġsalud +otzdem +Ġmasses +ĠbyÅĤa +Ġclearing +Ġdiscourse +atson +Ġfolded +ĠJar +ÙĦÙī +900 +ĠÑĥÑģп +Ġprophecy +Ġinterfere +иÑħод +à¹Į +Ġthri +Ġ×ŀש +Ġlazım +Ġ1992 +Ġfuturo +Ġlocking +Ġembargo +ĠNeither +ivamente +ĠmÃ¥ste +Ġmik +Ġcollector +екоÑĤоÑĢ +ĠGand +Ġsentir +ĠMight +å¡Ķ +Ġganzen +UC +Ġrelating +SD +Ġmosquito +GR +Ġhollow +âĺħ +ĠWalker +Ġaffiliate +Ġduplicate +нем +Ġgrape +ĠOrganization +Ġsynt +Joe +Ġgeg +Ġrevealing +ĠEthan +outer +Ġyay +é«Ķ +лаÑĢ +Ġreportedly +Ġihrer +Ġrecognise +Ġbumper +ĠRandy +ĠVenus +tles +Ġappetite +Ġglucose +Ġchodzi +ĠFurthermore +tir +Ġconta +Ġintuition +Ġaltitude +Ġchunks +ĠJoshua +ıģım +rylic +leans +ĠíĶ¼ë +LL +Que +Ġgor +ĠзнаÑĩиÑĤ +Ġpoems +Ġexcel +Ġexplored +Ġpopul +Ġincluso +stä +ĠGavin +alling +ĠÏĦον +é© +arbeit +ĠGas +Ġglorious +rieben +Ġspam +Ġindoor +Ġthrust +ĠAld +ĠPrior +Ġonboard +ãģłãģķãģĦ +oca +ASH +£ł +ĠChristine +Ġdrawer +Ġnoon +Ġìŀĺë +Ġpermanently +æ·± +ĠнапÑĢимеÑĢ +Ġpodcasts +erapeut +prit +Ġstainless +ĠÚ©ÛĴ +Ġfamilia +ĠÑĢазÑĢ +unto +ĠÑģÑĤол +Ġhä +ĠHai +ĠPB +izon +Ġkonnte +Ġbüyük +Ġutilizar +ÚĨ +Ġaquesta +Ġmixer +udent +лекÑģ +ÅĤu +ĠÑģиÑģÑĤем +ĠноÑĢм +Ġfatal +Ġconsiderations +Ġvalidation +Ġoli +ĠkardeÅŁ +ĠGLORIA +Ġpall +еÑģÑĤе +Ġrectang +Ġmedieval +allahi +asti +ĠSyrian +Ġshear +Ġdebug +ĠMai +Ġknocking +ĠLex +ardan +rov +Ġmemorial +æ°£ +ooky +Ġstuffed +Ġpassé +Ġwig +Ĥł +Ġpróxima +Ġ1991 +ĠмеждÑĥ +Ġnuestros +ĠBeast +Ġsmo +atched +ologia +Ġмод +Ġgee +Ġconceptual +Ġô +Ġdecreases +Ġqueries +олÑĮÑĪ +ĠApart +Ġexempl +å±± +Ġfled +ĠOFF +ggak +Ġbead +hir +lies +ĠClearly +ılar +Ġchess +Ġwhichever +Ġ96 +ằ +Ġrespects +ĠмоÑĢ +Ġorganism +Ġgrandpa +ĠVie +è·Łä½ł +Ġflooding +Ġupgraded +ÑijÑĢ +Ġcheeks +Ġconquer +Ġstubborn +Ġpuzzles +Ġauction +Ġrelying +ĠPROF +ĠEsper +ĠÐľÐ£ +Ġhype +Ġpossibil +Ġimprison +ĠErn +ìĹĪìĬµëĭĪëĭ¤ +Ġenvie +Ġresurrection +ä¸įè¡Į +Ġsper +ĠVenezuela +som +Ġìŀłê¹ +Ġnouvelle +Ġcloses +Ġ1940 +Ġqua +ĠJared +ĠPir +Ġinde +Ġscrub +uku +Ġrequiring +Ġвами +Ġconsiderable +åIJĽ +ilia +Ġinne +Ġmeinem +Ġhardship +Ġtraps +roc +ĠìĦ¤ë +Ġresearching +ĠMargaret +Ġpenny +Ġbırak +Ñijл +Ġwool +Ġrhet +Ġflatten +çĩ +à¹Ģร +Ġpied +ĠChap +Ġunderm +Ġfret +Ġcrashed +ĠFrauen +Ø°Ùĩ +ivan +Ġliterary +latego +Ġspäter +Ġsimilarities +âĨ +ĠCoron +ĠCreek +Ġbosses +Ġaccompanied +Ġdebates +Ġassembled +ĠÃģ +ĠVai +Ġtract +Ġsimplement +ĠArin +Ġvulnerability +Ġhormone +IEL +OOK +Ġrelay +ĠAndrea +ril +Ġnecessity +aceutical +ÑİÑī +ousing +nahmen +Ġfootprint +map +ĠTier +annya +intend +åĸ® +å¢ +Ġdecorate +Ġzombies +ĠHyd +ĠSuz +Ġcampuses +ĠEmb +Ġthrottle +Ġadmin +Ġoportun +Ġmirrors +Ġidentities +ĠClin +Ġë¹Ħë +á¹£ +ĠOtt +Ġblues +Ġimpressions +-, +Ġvague +afe +Ġinferior +erald +Ġmedicines +Ġpregunta +osely +Ġtélé +ĠMonth +ĠLeaders +ĠEgyptian +Ġration +kers +heits +Ġrecht +Play +Ġeg +Ġpolls +ĠWOODR +Ġslots +jam +Both +ĠRat +ÑĢаж +ĠBright +ä¸Ģå®ļ +á»iji +urious +Ġsingers +Ġlogin +Ġtêm +lation +ĠMum +Æ°á»Ŀng +ĠEditor +åIJij +Ġinnovations +have +ĠSek +Ġweaker +ĠGob +After +´ì§Ģ +Ġë¬¸ìłľ +ãĥ¼ãĥ¼ +Ġdisadvantage +確 +Ġgaze +ĠMack +Ïģί +ĠKiss +ĠHolo +ĠBirth +izi +bab +ä¿Ŀ +ìĭľê³ł +деÑĢж +Ġsquat +кÑĥÑģ +uni +ĠComme +ĠWOODRUFF +ĠChampionship +Ġwelche +ĠYouth +zem +Ġodpow +Ġpersistent +rut +ìĶ© +íĸ¥ +lair +iku +Ġvendor +Ġchúng +Ġfinanci +Ġoverly +âu +Ġgluten +Ġ1800 +Ġdivisions +Ġciudad +Ġobed +Ġwarum +Ġeher +Ġelim +ĠÐĴо +Ġpeuvent +ĠWanna +Ġattendance +Ġassessments +ĠBog +Ġimagery +Ġcollectively +Ġinformal +ĠSchwe +Ġdeutlich +ĠChel +ĠPE +owed +Ġbanner +Ġshelves +ĠReturn +æĭ¿ +LAUGHS +Ġcongratulate +ĠNorway +Ġdwell +ĠCaribbean +Ġnorms +ĠAnimal +ĠValentine +Ġextending +ĠVou +orr +ĠCheng +¡ +ĠдоÑĢог +Ġveg +ĠhÃ¥ +ĠXin +Ġì¹´ë +emet +Ġhypoth +Ġinteressante +rices +IZ +ĠUSD +Ġrunner +ĠBag +Ġê½ +Ġcomeçar +Ġpigs +Ġweaknesses +Ph +ĠViol +ä¸įçĶ¨ +Ġdragging +ĠAquÃŃ +ĠCSS +Ġmillimeters +Ġestás +Ġacute +Ġdejar +iÄŁ +obra +Love +Ġsilk +**** +Ġjoins +Ġprol +Ġê°IJìĤ¬íķ©ëĭĪëĭ¤ +æĶ¯ +ØŃد +aghetti +änner +Ġstrang +Ġdoubled +Ġdescriptions +Ġstellen +Ġparti +ç«ĭ +²Ħë +ĠÃ¶ÄŁ +ighing +Ġangular +Ġnatuur +ĠShel +Æ°Æ¡ +Ġrays +Ġseper +start +vised +Ġrushed +Ġinternationally +Ġnivel +Ġboxing +fallen +á»ijc +Ġseinen +plicity +Ġcarboh +ĠTravis +uso +ĠPhase +Ġactivation +Ġopio +·¨ +Ġdecreased +Car +Ġbundle +Ġexpend +ormal +Ġadjacent +Ġmee +ĠоÑĢг +Ġtranscript +ĠLanguage +GS +è§ī +Ġseul +Ãłnh +Ġnya +nings +Ġìĭľë +ĠëĶ°ëĿ¼ +ĠAgr +ÃŃd +çķĻ +Ġaby +ĠNeo +ıyoruz +ĠThinking +aime +Ġvite +Ġtravés +Ġ×ij×¢ +Ġмед +Our +hoot +Ġliner +ĠPizza +Ġhyg +flies +ĠContinue +Ġdental +ĠTib +Ġregulate +lieÃŁ +ALK +ĠTae +길 +ĠBrexit +ĠGut +Ġoccupation +Ġzrobi +âm +Ġwhisk +ä¸ĸçķĮ +Ġkanske +omon +robe +Ġwarfare +Ġthá»ĥ +Ġjaki +Ġstrokes +Ġpeas +ĠDamit +HAN +Ġinterference +ĠминÑĥÑĤ +NER +outing +Ġtextures +Łī +owi +ĠíķĻ +Ġdens +Ġprotagonist +änn +Ġgoddess +Ġwollte +ijo +ĠWoche +ĠVPN +story +Ġkinderg +Ġfunnel +Ġdistress +ноÑģÑĤÑĮÑİ +Ġnoisy +ĠпÑĢодолж +Ġdaran +Ġenzyme +лож +Ġmute +Ġdwar +Ġاس +Ġkompl +Ġmerit +Ġfosse +ĠDrink +Ġfora +Ġwohl +Ġbreeze +Ġsanit +Ġdrin +ĠìĿ´ê±°ëĬĶ +Ġ62 +Ġì°¨ë +abytes +Ġdeeds +Ġй +ième +iggling +Ġ\"' +ĠÑĩаÑģÑĤÑĮ +ĠAnswer +Ġevangel +Ġ1080 +ĠVisit +icient +Ġreliability +ÑİÑģÑĮ +ĠEarlier +Ġfid +çŃīä¸Ģä¸ĭ +Ġsleeves +iyorsun +Ġbib +ĠAccount +Ñıли +ciplinary +zas +ĠбеÑĢ +Ġnecklace +Ġblender +ĠPhillips +eti +ĠJupiter +Ġprovoc +ĠYears +entre +acio +Ġkü +Ġantenna +Ġnovels +Ġfart +ĠSugar +ĠJudy +Ġcollapsed +ç° +ritis +ĠìĥģíĻ© +ÐĹЫ +ĠVerf +ranean +ereum +ĠTarget +Ġ88 +ĠÐĺз +ideo +Ġregression +ì¶ľ +Ġmówi +Ġstudios +iens +iph +Ġfrying +Ġfascinated +ĠWah +bucks +maya +ĠSaturn +ĠMommy +Ġratings +Ġautumn +Æ°Æ¡ng +Ġloser +Ġcentro +érieur +ĠFold +Ġsupervisor +ĠNobel +Ġunderest +obia +ĠвÑģÑı +Ġverw +Ġfuels +Ġartifacts +Ġë¶Ļ +ĠAutom +çļĦæĺ¯ +ÛĶ +×ķס +Ġihnen +Ġ59 +ounding +еÑĢÑĭ +inars +chant +Ġaddicted +Ġexplosive +Ġdispers +âĸĪ +axis +ARY +Ġlum +ĠÑĥÑģл +ĠØĮ +Ġrupees +ĠPearl +camp +tv +oya +Ġconcludes +Ġcollision +Ġbuyer +Ġplayground +Ġsprings +Ġfeminine +ĠRas +Ġincarcer +íĹĺ +Ġdialect +Ġclosure +Ġchatting +Ġbabe +Ġspotlight +Ġnotation +è·¯ +Star +ião +Ġtête +Ġtide +Ġjunto +Ġsenator +Ð¥ +Ġexcuses +Ġblink +Ġadmission +ĠLily +Ñĭми +Ġamigo +Ġlust +ëĭ¬ +Ġamino +äºĭæĥħ +Ġconsultant +ĠElectric +Ġëħ¸ëŀĺ +ujah +Ġshooter +ichten +ĠUkrainian +Ġaims +ĠEntertain +Ġmiracles +èŃ° +Ġzeigen +Ġlam +Ġress +ĠJill +ylan +Ġrook +Ġhaya +Ġpassport +adata +Ġjuicy +conf +лей +ĠSz +Ġintercept +ãģĤãĤĬãģĮãģ¨ãģĨãģĶãģĸ +ĠTeams +Ġmaken +irrel +ĠLIKE +áºŃy +êµ° +Ġshortage +Ġparadigm +Ġpapel +Ġastero +ãģ¾ãģŁ +Ġsollen +ĠMickey +ĠOrleans +Ġcholesterol +Ġgoose +ÑĨиÑİ +ãģĤãĤĭ +ĠFL +Ġголов +Ġtribute +ĠGam +Ġévidemment +ÑıÑħ +å®ŀ +çĶ° +Ġinappropri +uhan +Ġorganizational +ailed +Ġendure +Ġ76 +Ġshotgun +Ġlivre +Ġsuited +Ġwarmth +ĠSIM +Ġenvision +Ġdegrad +îne +Laughing +ĠWhoever +ĠBuddhism +Ġsprinkle +ceÄŁiz +Ġruins +Ġstarch +ĠHerz +Ġinjustice +Ġhumidity +ожалÑĥй +ĠObject +ĠIgn +ĠExam +igers +Ġthou +ĠSoy +ivas +Ġpoles +math +Ġвним +INGING +edral +Ġexplor +Ġroasted +Ġcrawl +Ġcoff +Ġanom +Ġwij +Ġimproves +Ġtreaty +Ġdiscovering +Ġstatute +Ġmercado +ĠÑģил +Ġintel +ĠChancellor +ĠMedicaid +ugi +Ġverbal +Ġdön +Ġscripture +Ġiteration +eks +ĠOxford +Ġwäh +ĠVad +ĠAK +ĠìķĦìĿ´ë +Ġiets +Ġneedles +ÙĥÙħ +Ġpasado +Ġalbums +Ġyea +etzen +ĦëıĦ +Ġdetermines +Ġthee +ĠPlaying +ärt +Ġצ +cled +Ġdownward +alone +Ġsolu +Ġpartition +Ġwz +dd +Ġpessoal +媽 +Ġfactories +Ġbleibt +มา +alsa +ĠNFL +Ġfuera +Ġreserved +ĠEarn +Ġhelt +Ġshortcut +Ġconvincing +space +Ġenforce +Ġcores +Ġefter +Ġrecession +xico +Ġproposition +arians +ropol +Ġ몰ë +ĠÎľ +ĠìļĶì¦ĺ +Ġactivist +Ġconviction +Ġzab +Ġcanceled +ÑĤоÑĩно +Ġή +éĢĻ樣åŃIJ +nite +Ġfundra +buzzer +ело +ications +Ġzona +Ġteens +Ġmethodology +Ġì¤ijìļĶ +than +ĠUl +ĠGrey +Ġhog +INK +ĠSung +ĠClaud +ĠCNN +Ġdelivers +alin +ĠAdobe +othe +ĠDeswegen +ำ +Ġwerde +Ġgrease +Ġupgrades +ĠFinland +accept +Ġinterrog +bee +Ġãģ« +Ġprede +ĠNep +ĠCambridge +Ġgraphs +Ġhaunted +Ñģем +æ§ +åħĭ +Some +ĠMall +Ġrehearsal +ĠUrban +ĠLag +Ġnim +ê°ķ +Ġpositioned +Ġavoided +EMA +Ġllegar +Ġrápido +Ġgouvern +Ġhing +Ġdealer +Ġreforms +Ġfatty +кол +ĠAce +Ġnep +Ġì²Ń +Ġcomputation +ĠStream +bourne +tur +Por +Ġsleepy +Ġbanget +ãģĤãģ® +Ġweighs +Ġbleiben +ĠGren +Ġunions +ĠêµIJ +Ġaprender +uitar +ĠJest +uming +ĠPlayer +ĠExtrem +Ġinteger +аÑĩе +Ġconcerts +×ķ׼ +ĠtrochÄĻ +ĠRepe +éĩįè¦ģ +à¹Ĥ +żen +Ġsounding +Ġanonymous +Ġexca +ĠIranian +Ġenergetic +Ġwives +ĠÑĨвеÑĤ +Ġais +ãģĭãģª +Ġsudah +Ġunderwear +Ġcrunchy +ĠPain +Ġgerçek +redict +Ġmisma +ÑĸÑĤ +Ġsurviving +ÎŃÏĤ +Ġparticipant +ĠHessen +árias +Ġsubway +istä +Ġcoral +Ġmarijuana +ĠMemorial +ÑĪий +riz +Ġsatellites +Ġlease +ĠCameron +umph +Ġclassmates +ähän +ÑģÑĤве +Ġhue +ĵ¤ìĿĦ +Ġproportional +Ġnoss +Ġlaps +rÃ¥ +Ġbitcoin +ÐĹЫÐļÐIJ +Ġ충 +ĠÙĦÙĦ +ĠMort +ĠEsp +arnos +ĠÑģказал +Ġänd +åħĦ +×Ļ×Ļ×Ŀ +ĠGeb +gehen +Inaudible +borough +ÑĦÑĦ +Ġfellowship +ĠPaper +Ġcurved +ĠGEOR +Ġcalculator +ĠCatal +ĠvÃło +Ġbypass +леÑĤ +à³ +trans +rencies +ì¡Į +igent +Ġtasted +Ġoceans +uft +ervice +ĠÐľÐ£ÐĹЫÐļÐIJ +ĠClassic +Ġrespectively +~) +ître +ĠNash +Ġzit +ĠìĽĥ +ĠëĨĴ +quote +ĠUns +Ġtac +Ġproves +ĠPortland +bly +Ġere +ì¶Ķ +Ġépoca +ĠÑĤÑĭÑģÑıÑĩ +76 +Ġhade +ĠFro +ĠpolÃŃtica +tag +ĠíķŃ +Ġschö +arett +Ġprovisions +Ġmotors +Ġimaging +Ġdok +ulously +Ġmeille +çİ°åľ¨ +ëIJ +ĠISO +ĠSTEM +ĠBowl +Ġtowers +ĠEe +ĠPerformance +Ġloin +cussion +Ġcoastal +iale +compass +Ġspells +Ġdisappointing +Ġë²Ī째 +EER +Ġversatile +asury +Ġenfin +Ġdownside +Ġguiding +ĠاÙĦÙĤ +Ġninety +charged +ĠFans +Ġphilosophical +Ġgarn +ĠmÃ¥nga +Ġwillingness +Ġportions +aben +Ġï +¿ +raul +Ġsprint +ifen +ıyla +ĠкÑĥп +ãģıãģłãģķãģĦ +Ġensuite +ĠCapitol +Ġ63 +ĠговоÑĢиÑĤ +Ġappointments +æī¾ +omiast +Ġcareg +Ġpublisher +Ġheraus +Ġεί +ĠVS +ãģĿãģĹãģ¦ +ä¸Ńåħ± +Ġsacrifices +third +Ġhumanitarian +ĠëĤ´ì +imon +Ġinequ +Ġzob +Ġcomfortably +ĠDinge +Ġcancelled +ĠPSAKI +ĠRobinson +Ġfins +)? +ĠHistor +ĠÑĩеловека +Ġtbsp +text +kim +Ġupdating +Ġgeld +feld +ı¼ +Ġmä +Ġcafé +ÖĢ +ĠSri +ĠRegion +ĠHahaha +Ġfinances +ĠاÙĦØ´ +Ġbunk +ruk +haft +Ġlateral +Ġextensions +ĠìķĦìĿ´ +Ġdefinite +ĠZhao +ĠLuis +sty +Ġcasos +ĠKlim +Ġ1993 +Ġrealization +Ġhistorian +Ġcracked +ëĤ´ +Ġsystème +ĠCIA +ĠÑĤво +ospheric +Ġflee +Ġrất +ĠRegardless +Ġreluct +Ġtimely +ĠJulian +GM +éĴ +adura +é£Ł +Ġdresses +çģ£ +ĠëĶĶ +Ġnominated +Ġadvocates +ymph +Ġrecordings +Ġdeviation +Ġprioritize +Ġspiral +ĠYOUR +Ġtranspose +ampoo +ĠìĽIJëŀĺ +ĠVision +Ġpolite +Ġhamb +ĠPatient +æ¯Ķè¼ĥ +íģ¬ë +Ġsia +Ġê³³ +Ġže +è§Ģ +Ġsupermarket +ë¹ +ĠSierra +Ġgrilled +ĠUpon +Ġabsent +Ġmec +ĠApollo +Ġpunk +ĠPaÅĦst +ĠÑģвой +Ġ거기 +Girl +Ġskinny +ĠPremier +Ġterritories +Ġliability +Ġjerk +ratic +Ġdancers +ĠÑĥÑĢов +Ġê´Ģë +only +ĠStu +Ġskeleton +ĠëŃIJë +Ġзакон +ıkt +ĠMIKE +Ġlö +mie +Ġreiter +ãģĵãĤĮãģ¯ +ĠKolleg +ĠAdams +licher +Ġçocuk +Ñıг +Ġblush +Ġsunshine +Ġez +ĠDevil +Ġ길 +ĠãģĬ +add +Ġlicensed +Ġvinyl +ĠCzech +imag +Ġcracking +Ġìº +Ġudah +Ġsommes +Ġìĸ¼êµ +waÄĩ +Ġfres +åij½ +ĠWalmart +ĠТепеÑĢÑĮ +atisf +CI +lang +Ġdiffusion +çĶ· +Ġsomos +ĠMakes +æĪijæĥ³ +ĠRicky +Ġmucha +íķ¨ +Ġhorsepower +asia +Ġfibers +Ġerm +Ñģкие +Ġjeste +Ġfirefight +Ġcuisine +Ġbesonders +dig +Ġì¢ħ +ĠÑĥж +Ġtracing +Ġcertains +ĠApply +ÑĭваÑĤÑĮ +çĮ +Ġbru +ĠYES +ĠBai +ĠDit +ĠBis +Ġunle +ÑģÑĤаÑĤоÑĩно +ĠAwak +..\" +Ġ125 +Ġrooted +Ġcautious +const +Ġorchestra +çľ¼ +ĠвнÑĥÑĤ +Ġquelqu +ĠоÑĤвеÑĤ +ĠMethod +ì¹ľ +ĠμαÏĤ +lü +ĠìķĦê¹Į +Ġnaming +Char +ĠSicher +Ġprivileged +ĠFly +Ġãģĭ +áºŃt +Ġadvances +ĠZelda +Ġandra +Ġgrinding +ĠEdition +pf +Ġwarriors +Ġhedge +Ġunseren +ĠÑģÑİда +eliness +Ġpersonalities +Ġfö +'M +ĠÑĤоÑĩно +Ġshipped +Ġmeteor +Ġsurroundings +ĠFill +uesta +ĠPersonal +ĠAlle +ORT +ä¹ħ +ĠSche +VI +Ġcomparable +damn +Ġditch +YAN +ismus +Ġpickup +Ġdak +ĠEP +best +ĠSue +ällt +Ġpopcorn +Ġfolding +home +иваеÑĤ +å·²ç¶ĵ +Ġannot +chuck +Ġfierce +Ġdamaging +Ġflop +Ġpasar +Ġreef +ĠÑģвоей +Ġzoo +overs +jets +Ġprès +ĠSilicon +teok +ĠSeth +atamente +Ġtransmitted +Ġreplicate +Ġslim +ĠCream +æĦŁãģĺ +Ġsidewalk +ìĪĺë +ĠжизнÑĮ +ĠMonica +ä¾ĨäºĨ +Ġcopied +ĠTerra +istent +ç³» +Ġоно +Ġwhale +ĠWITH +лÑĥÑĪ +å½±çīĩ +ĠEen +ĠÑģвои +Ġordin +Ġplural +Ġspokes +Ġdispute +Ġsensible +Ġpreaching +Ġktórzy +pted +avier +Ġpistol +ĠTapi +ĠÅĤ +ffff +Ġacrylic +Ġignorance +ĠZiel +rans +Ġwelding +mid +æĪijä¸į +Ġзаним +Ġlanes +Ġmines +Ġmoms +×ķ×Ĺ +ĠChamber +tier +Ġmodest +ĠìĹ¬ê¸°ìĦľ +Ġunas +Ġwrench +handed +Ġsaturated +ĠFang +ĠCommissioner +र +Ġ×ĸ +ĠLouisiana +ĠMask +Ġcubes +ìĶ¨ +Ġvidéos +ĠnÃ¥gon +Ġrider +Ġì¶ľ +Ġsón +ĠLatino +bank +íķ´ì£¼ +ĠBrend +Ġsexuality +..., +Ġforgetting +ĠÛĮ +ĠAvengers +ĠBonjour +cessor +кÑĢаÑĹ +cence +Ġgeograph +culo +оÑģÑĤÑĮ +Ġsweating +íĥĢ +Ġsymmetry +tsÃ¥ +Ġjan +ĠFerr +é¦ĸ +Ġambassador +ziÄĻk +Ġmusun +ĠÑĥÑĤ +ĠLG +issent +commun +Ġcours +Ġdevelops +Ġbronze +Ġsubstances +driven +주ìĦ¸ìļĶ +Ġaos +åĦĦ +ĠPROFESS +half +Ġsorted +ĠBomb +лаг +ĠMalaysia +ĠChristina +Ġteammate +èģŀ +FT +Ġkı +hearted +++ +ogenic +Ġbells +ĠOuais +Ġspecialists +бÑĭ +depth +lasses +gies +ĠCoffee +Ġmarking +Ġfoll +uli +Ġadhesive +ĠBot +ĠPunkt +eye +ĠBub +elong +åĪ¶ +ĠпÑĢик +Ġdonor +84 +Ġenfor +Ġcatches +Ġbricks +Ġknitting +ĠKnowing +oks +HY +ride +ĠFantasy +iman +Ġpse +Ġìĺ¨ +Ġвд +Ġrestra +Ġevaluated +ÑĢев +Ġfortunately +Ġchegar +رب +Ġdomains +ibi +arry +Ġshutter +Ġficou +Mike +Ġinclu +Ġdonors +Ġapl +ĠLower +Ġimported +Ġacademy +Ġfinals +Ġdisappears +ÙĬا +Ġadministrator +js +Ġcutter +Ġranging +örper +Ġconstraint +ĠTable +ĠShan +vic +ĠFix +ĠSwift +ounces +ĠWarum +Ġlettuce +appelle +Ġshave +Ġbás +Ġ77 +ĠOoo +ao +ĠMcM +ĠDrew +Ġlump +Ġlashes +scheinlich +Rep +inis +ĠCette +Ġcomposite +emetery +Ġsorte +ĠFinancial +оне +rones +ĠVoy +Ġtéc +ł¹ +ĠNinja +ĠCorin +еннÑı +ìĿ´ìĹĪ +Ġnich +Ġdetective +âĢ¦\" +Ïĥε +Ŀ¼ëıĦ +Ġë³Ģ +Ġë¸Ķë +Ġprope +ĠWright +Ġ×Ķת +ĠShi +ĠãģŁ +Ġinvestigations +éĤĦæĺ¯ +ĠPowerPoint +ĠChu +Ġìĺ¤í +ĠìĻĦìłĦ +ĠFragen +unning +Ġpourrait +Ġtextbook +мÑĭ +Ġfahren +ĠÑĤоÑĢ +Ġlakes +ünde +Int +ĠMetro +Ġmansion +Ġаб +ĠZhou +Ġcorridor +Ġescol +Ġindicating +iaÅĤa +Ġmommy +Ġarchives +Ġfounders +engine +ĠDieu +Ġsickness +Ġë³´ëĭĪê¹Į +Ġarb +Ġned +ĠChop +Ġcovid +Ġslam +Ġpublications +DC +Ġspends +æ¾ +Ġrefugee +Ġdile +Ġ×IJ×ĸ +ificar +ĠSach +Gu +Ġreload +???? +ĠjeÅĽli +ĠÑģоÑģÑĤо +Ġsimplicity +Ġbullying +Ġмол +Ġrealidad +Ġunclear +appa +levant +ĠISIS +ĠWatson +Ġdein +ĠMicro +íķľë +üg +Ġdevam +Ġtweeted +å°İ +Ġunderstandable +atan +Ġversa +Ġpreca +Ġvá»ģ +ĠCopy +ĠOracle +Ġmindfulness +Ġdiscret +ernen +ĠPle +Have +Ġisolate +Ġdeu +Ġseventy +ĠHills +Ġarcade +ĠÑģпеÑĨи +Ġsiguiente +ĠBÃľNDNIS +liga +ĠвÑģÑĤÑĢеÑĩ +ôm +Ġtweets +Ġschauen +Ġcritique +ĠðŁİµ +Ġstatt +ĠÑģамое +ância +Ġsupernatural +Ġplugged +Fl +ynı +ĠTambién +Ġencouragement +ĠServer +ëĤľ +upa +Ġaston +Ġhears +ÑĢаÑħ +Ġsche +Ġrats +Ġrecuper +Ġunten +ĠFighting +Ġacademics +示 +ĠSü +ÑģкиÑħ +Ġpaired +ĢìĿĦ +Ġárea +Ġsweetness +åıĬ +Ġdefer +Ġmuitas +ĠAudio +Ġlocker +ÙĬد +ĠÑģÑĤав +Ġbuena +ANS +Ġdetector +avo +bek +Ġαν +íݸ +Ġdragged +Ġдолжен +Ãĸ +رة +ìĿ´ì§Ģ +Ġcelle +cking +ĠاÙĦج +ĠCanvas +Ġespañ +Ġglimp +Ġspreads +ongo +ĠMason +ĠIng +Ġê°ĢëĬ¥ +ÏĦικ +Ġsecular +Ġbater +Ġinquiry +Ġenergies +Ġmanufactured +Ġvegetarian +Ġpineapple +ÑıÑĤа +Ġpractitioners +2000 +Ġíķ´ìļĶ +ĠìŬ룬ë¶Ħëĵ¤ +Ġë¶Īë +ĠJefferson +ĠJoan +Ġtram +容 +chmal +ĠHait +á¹ĩ +Ġunreal +Ġsymbolic +Ġstealth +Ġsplash +ĠEntertainment +Ġmetallic +?\". +è¶Ĭ +around +Ġdespair +ĠNevada +ĠFinance +Ġkrie +ĠLux +ĠSmash +keeping +Ġзаг +Ġnarciss +Ġdzisiaj +Ġtolerate +oard +Ġlinking +ĠEconomic +Ġì¼ +Ġmorph +ĠNak +ĠBaker +aton +rings +ĠPeng +ĠAirport +ãģĭãģ£ãģŁ +íķĺëĭ¤ +§ģ +prints +Ġhadi +Ġempir +ĠLives +anners +Ġним +ĠPROFESSOR +Ġpositively +antom +Ġbadge +kelt +Ġinterfer +Ġfulfilling +Ġvisualization +éĹľä¿Ĥ +ĠPrice +�� +Ġscenery +Ġprone +Ġwizard +Ġbanyak +verb +sky +Ġwished +Ġrailway +Ġüzer +Ġalguien +ĠAW +ĠколиÑĩе +Ġreacting +ĠBuch +ึ +Ġanth +Ġsih +Ġhust +ĠScreen +ilant +aho +Ġfragrance +Ġelevation +ĠMediter +Ġë¿ +Ġéqu +Ġwraps +Ġinert +Ġrecreate +лаÑĤ +Ġboleh +Ġharassment +unky +Ġglimpse +regierung +Ġfutur +Ġrepository +Ġengra +Ġtrafficking +assis +ĠTrek +Ġë²Į +Ġë§Īë +ĠKab +aniu +give +Ġdinosaurs +Ġfeather +Ġattitudes +Ġplum +ĠRS +ĠAnfang +illery +ĠìĬ¤ +MY +Ġtrzeba +Ġskies +ĠAj +urable +CU +ĠShane +Ġdeparture +ĠTON +ieten +rats +æ°Ĺ +isu +Ġbord +Ġinterestingly +çĻ» +oughing +Ġrushing +Ġvolatility +Ġpyt +Ġformats +ĠзаÑĤ +Ġê¼Ń +Ġwhatnot +Ġcomport +sw +orean +ĠRelax +Ġclan +ĠAH +Ġpew +Ġdictionary +Take +shirts +ĠHugh +ĠعÙĦÙĬ +ĠPic +Ġenrolled +Ġjednak +Ġofferings +Ġcoraz +Life +Ġ!!! +Ġcler +ĠVideos +ĠRodrig +ĠIdent +ĠPos +ĠStage +ĠRace +Ġenact +ãģĦãģ¾ãģĹãģŁ +ĠGy +ĠHispan +Ġdefence +ĠCampbell +matic +Ġrelev +Ġpeach +Ħ¸ìļĶ +Ġparadise +Ġceremon +Ġannoyed +æĮĩ +lax +Ġexploit +Ġclause +eker +ĠBloom +nant +ateurs +Ġheights +Even +Ñģон +Ġoutrage +ĠVietnamese +ãģ¯ãģ¯ +TR +Ġeer +Ġcannon +ĠComb +IJë§Į +è»Ĭ +Ġê²ĥëıĦ +Ġaccomplishments +ĠAnalytics +Ġshaping +reiben +Ġbachelor +Ġfingert +acked +Ġpyramid +ĠStewart +ást +Ġsurvivor +Ġduct +Ġdealers +æ´» +عÙħ +лин +Ġede +×ķ×¢ +ĠÙĥاÙĨ +ĠÏĦι +Ġchooses +ĠOwn +гоÑĤов +hire +алÑĮнÑĭе +ĠÐĽÑİ +ĠоÑģÑĤав +tech +Ġdroit +Ġsubjective +enes +Ġdivis +avez +Ġmaneuver +à¹Ħà¸Ķ +adece +ĠEns +acial +ĠProtection +ĸ´ +Ġformally +Ġwyd +inguém +Ġziem +Ġrecruiting +×Ļ×ļ +nem +Ġforbidden +ĠBapt +×IJ׳×Ļ +Ġsubset +ĠMagaz +nement +Ġaquela +ragon +Ġcommittees +Ġétaient +udi +ĠDawn +Ġbore +Ġcomposer +ĠwiÄĻcej +anga +Ġdislike +ĠDays +åŁº +Ġparal +Ġmientras +Ġheavens +ãģĴ +heid +Ġtraders +once +Ġmascara +ĠÏĢÏģο +Ġwhisper +ĠMusk +éĽĨ +ĠFamilie +Allah +ĠOlivia +ĠPros +Ġolika +ilim +Ġrépond +ĠPeters +Ġå¾Ī +Ġbites +Ġvic +ĠNY +emption +Ġ450 +Ġvisuals +Ġlieu +ücken +ĠSteel +ĠGP +wait +Ġnoticeable +ucha +Ġrehabil +Ġrejection +ĠÑģледÑĥÑİÑī +Ġslider +Ġregarded +Ġgravit +ĠReserve +count +Ġbreeding +Ġlonge +aleb +Ġknight +Ġвой +Ġprésent +ĤĺìļĶ +ĠSpecifically +Ġposes +Ġveure +okay +emas +Ġãģ§ãģĻ +ĠmajÄħ +Ġwebinars +Ġcannabis +Ġdamals +ĠNorthwest +Ġpada +Ġcrowds +Ġfutures +Ġän +Ġcivilians +ĠSachen +æį +Ġtraces +Ġë¨¹ê³ł +QU +é¡ĺãģĦ +ĠIF +anın +ìĤ´ +Ġbiblical +ĠVed +Ġstoring +ÑĢавлÑı +æĩī該 +Ġnast +Ġdö +ÑĢоп +elia +Ġsideways +ĠUnderstand +ĠQur +Ġperpend +ĠMillionen +Ġwatermelon +ĠDivine +ultur +abord +Ġsuccesses +Ġhombre +Ġcarp +Ġsuscept +ungkin +Ġkij +ulus +اج +Ġnotch +Ġpolynomial +å¹² +å© +Ġúnico +Ġtelescope +Ġpolitique +kiem +ĠÎŃνα +Ġaggregate +ĠGeoff +Ġtril +ĠGRA +Ġsubscriber +imet +ĠдоллаÑĢ +oping +Ġtherapeut +ĠCancer +Ġparade +Ġirrig +âĻªâĻª +Ġclearer +Ġbog +ĠMaur +าà¸ĩ +ĠShanghai +achte +ĠKol +elujah +Ġhav +ĠCrime +sek +Ġë¡ľ +ienna +ĠGor +èĽ +ĠпоÑĤÑĢ +ĠкажеÑĤÑģÑı +ĠLift +ĠSort +ĠPsal +Ġping +ĵĿ +phis +ĠFUCK +ĠSyn +Ġbamboo +¬ìĺģ +cuts +Ġmmm +Ġfunktioniert +Ġ_ +ÃŃcio +Stop +Ġimaginary +Ġnotamment +ĠInitiative +ãĥ¥ +ĠKurt +Ġloosen +Ġbuscar +çģ« +Ġzelf +Ġprops +åĽī +Ġmoeten +Ġmilli +Ġhalls +ĠMatch +Ġbrackets +ĠCou +æ¦Ĥ +ĠÐľÐ°ÑĢ +ISA +Ġcigarette +Ġcompetitions +ĠMIN +Ġbehö +voor +Ġust +ĠZi +ĠOcc +ulates +Ġballoons +Ġpronto +ĠMiy +ĠFile +ĠклаÑģÑģ +нÑĥл +Ġcereal +Ġincrement +Ġrefined +åı¦å¤ĸ +prising +ĠRF +Ġrespectful +Ġloot +asket +Ġdeixa +ingle +Ġfunciona +ĠRevel +Ġsober +Ġperforms +ĠGentle +ãĤ¨ +Ġrecipient +ĠHause +Ġëĥ +From +Ġministers +Ġparadox +å°±æĺ¯èªª +Ġtasting +Ġ×Ķ×Ĺ +Ġreuse +ĠLane +ĠÑģовеÑĢÑĪ +Ġremembers +Ġfeminist +Ġcommitments +Ġprojected +Ġgaz +iyoruz +Ġobligations +Ro +zar +Ġchw +ĠJAM +ĠbÄĻdÄħ +aspberry +ĠмеÑģÑĤо +ë²ķ +Ġregulated +Ġwicht +ĠTrevor +Ġsecondly +ĠIhre +elsh +Ġreporters +ÑĤоÑĢа +oyo +GI +Ġinterconnect +éIJĺ +OSH +æŃ² +Ġbrass +Ġignoring +ä»ĬæĹ¥ +infect +Ġprojekt +oret +ÏĦαν +ĠÑĤип +Ġmutta +Ġunboxing +Ħ° +å¡Ĭ +Ġadvised +ĠDenver +Ġseverely +ĠMhm +Ġflipped +Ġpien +Ġkommun +ĠFRE +Ġà®ĩà®° +ainted +Ġknives +Ġhabl +Ġgeworden +arettes +CS +ĠмаленÑĮ +Ġgalax +Ġninete +ê±°ëĤĺ +Ġsis +Ġadvisory +Ġdrilling +ĠWouldn +ünf +gestellt +ĠHelen +Ġ×ŀ×IJ +apolis +Ġrzeczy +Ġterra +Ġhep +Ġalgún +ikk +Ġastronom +ĠStarbucks +kÄħ +Ġpatrol +Ġì½Ķ +Ġgon +ĠãĢIJ +Ġsonst +Ġencounters +Ġretrou +Ġsharks +Ġdor +ĠRever +Ġevapor +Ġreservoir +Ġalleged +uler +Ġverm +Ġcommerce +Ġfitted +gem +Ġtactical +Ġlith +éīĦå¡Ķ +had +è®Ĭ +Ġcarbohyd +Ġlengths +ιο +Ġdemographic +Rob +ĠSkin +ccoli +Ġsimplified +Ġreadily +ĠCum +adesh +ĠDÃ¥ +usst +igne +eton +Ġmenor +qi +OOM +à¸Ńà¸Ļ +Ġpsychiat +Ġeighty +Ġмилли +ĠTob +edo +網 +ĠÄijến +Ġcircuits +ĠLAUGH +icism +emor +Ġregener +egree +Ġbureauc +ĠAlber +ä¹ĭå¾Į +ĠWor +夫 +Ġresin +ĠbyÅĤy +ĠIG +à¯į, +Ġ78 +Ġweeds +ĠMyth +93 +æ¿ +ĠëĤĺìĻĶ +év +á½ +ören +çar +ĠPAUL +Ġdisadvant +Ġpositioning +Ġcocktail +Ġagrees +nn +ĠSally +Ms +Ġinherent +Ġmonetary +Ġnatur +ĠNh +ĠImport +Ġleben +Ġwi +ussy +Ġobes +Ġwandering +Ġìĭłë +Äħda +etchup +Ġdisposal +ĠJA +ĠCer +zilla +Ġvirgin +ĠSlide +andel +Ġrighteousness +ĠΣ +Ġideia +ä½łå¥½ +иÑĢоваÑĤÑĮ +ר×IJ +Comment +Ġprelim +ĠVale +Ġì§ĢëĤľ +ĠVanc +OMAN +ĠпÑĸд +Ġyum +stre +cem +Ġpocz +Ġfragment +ĠÑģлÑĥÑĩае +Ġundergo +ĠHank +ceks +ĠFPS +Ġocur +Ġdeterior +注 +Ġempresas +Paul +Ġ))) +ĠвÑĢемени +Ġscold +×Ļ×¢ +Ġsuspected +Ġaccessing +Ġsubstit +Ġhistorians +ä»» +Ġдело +Ġsocied +rone +Ġreden +Ġextends +epherd +Ġbalcon +ä¸įèµ· +ĠSolo +Ġpolitician +олÑĮно +Ġirgendw +Ġtraumatic +Ġrapper +ĠROBERT +Really +æģ¯ +Ġlineup +ASE +Ġcontractor +ĠCorporation +gor +ĠTodo +ÑģÑĤÑĢой +FBE +Ġnewsletter +ĠkoÅĦ +alties +ĠпÑĢиÑĩ +ĠHeavy +Ġswords +Ġmanipulation +Ġfunk +ĠvÃ¥r +ĠTaliban +Ġë°¥ +Ġacne +ürü +Ġdeswegen +ĠDust +Ġsilic +Ġhooks +Ġblij +Ġpetits +Ġfilme +ĠBereich +ĠSaid +Ġimposed +Ġdiary +ĠгоÑĢ +ĠGates +Ġalta +å¸Į +Ġchcia +pleasant +Ġë°Ŀ +Ġmożemy +ĠAustria +Ġbroker +Ġsucked +èĢĥ +Ġcompartment +Ġclone +Ġ×Ķ×¢ +ĠDanke +Ġnochmal +езд +Ġadrenal +Ġkleinen +ãģ¾ãģĹãĤĩãģĨ +Ġsubsequently +Ġdecentral +Ġgenetics +Ġê´ij +Ġmonitors +ĠApplic +ĠReporter +wert +Ġwiem +ĠMovement +Ġinterviewing +Ġhairs +Ġpuò +ĠChelsea +Ġcoher +Ġcot +Ġzas +Ġpatches +Ġlah +Ñĥнк +ĠReagan +ĠMarco +city +Ġdefender +Ġdecoration +iji +Ġlitter +Ш +Ġjego +REW +ĠPik +ĠHee +ĠIv +Ġиде +ĠTheater +ĠÑĩаÑģÑĤо +Ġsweater +Ġhighlighting +Ġainsi +Ġdiplomatic +ĠNevertheless +å³ +ASON +Ġpúblico +Ġferm +reated +cod +Ġ물ë +Ġmister +ĠVancouver +Ġrecognizes +ecd +Ġcomplications +encial +ãģĹãģı +Ġê°Ģì§Ģ +ĠUltimate +Ġvaig +ĠMerry +×ķ×Ĵ +ĠMarcus +總 +owego +Ġmente +Sm +Ġaja +ĠTao +Ġjudicial +Ġentrepreneurship +Ġнемного +Ġpis +Ġerg +Ġchrist +ĠCurt +ĠÑĢаÑģп +λε +ensch +ÃŃre +Ġfocal +ĠDiamond +avÃŃa +Ġhanno +ĠSquad +Ġassociations +ĠCreative +Ġmessenger +Ġbegging +Ġdecimal +ĠdÄ±ÅŁ +Ġmetadata +sels +ĠÄ°ÅŁ +ữa +Ġdifficile +dı +Ġslaughter +ĠVerg +Ġ×Ĵ×Ŀ +ç°¡ +æĮī +ĠTea +asses +Ok +Ġsynthes +otiation +Ġpainter +Ġelbows +Ġarchitectural +ĠÑĢад +Ġglor +image +ampa +culiar +ł¨ +Ġteve +ĠStelle +ĠBam +Ġì´Ī +asis +ipedia +ĠGI +ĠActive +çĦ¶åIJİ +azi +ãĤĮãģ¦ +ĠLucky +íķ© +ĠпÑĢиÑħод +Ġrunway +Ġauthentication +Ġposible +Ġsupplements +Ġsurgical +Gen +Ġfeasible +DO +Ġoutlook +Ġintervals +Ġanecd +Ãłng +Ġstraps +ĠShu +udd +issenschaft +Ġporte +Ġcommitting +Ġalley +Ġcovenant +ĠPedro +lessness +ĠSolid +ĠMolly +ĠнекоÑĤоÑĢ +Ġcooperate +åĮĹ +ollen +Ġtuna +Ġkindergarten +ĠSiz +Ġdużo +ĠMBA +ĠGEORGE +ĠFisher +å¿ĺ +ĠCaesar +ĠкÑĢаÑģив +ĠDelhi +zym +Ġexplicar +ê°Ģì§Ģ +uns +grow +ĠпÑĢиÑģ +Ġ86 +Ġstating +Ġmassa +chter +Ġì»¬ëŁ¬ +Ġdeputy +SM +noc +Ġgeography +ĠEnterprise +ĠCant +öz +Ġunpack +ĠíĻĶë +Ġsearches +Ġpresidency +Ġtrivial +Ġpige +oubt +ãĤļ +ì¼ĢìĿ´ +Ġbudgets +Ġub +Ġpne +ĠYale +ĠÅŁÃ¶yle +regular +Ġimperfect +ARA +ĠfamÃŃlia +urm +ĠAdventure +ãĥĬ +cis +emark +Ġnego +Ġinappropriate +ĠпÑĢиз +ĠÑĢол +Ġdreamed +Bry +Ġshuttle +Ġpillars +Ġbik +inum +ĠÑĥÑģ +ĠNebr +Ġperpendicular +Ġbooked +bery +Ġvikt +bear +esus +Ġвозможно +¨¹ +Ġpresumably +ĠMemphis +Ġambulance +×ķ×ŀר +Ġthumbnail +Ġmodification +éĩı +Ġinterpreted +Ġpromo +Ġκά +ĠεÏĢ +Ġacoustic +ĠDB +åĵİ +Ġnonetheless +oule +Ġpequ +Ġknob +ãĤ£ +ĠëıĮìķĦ +Ġpurchases +ĠÃĩünkü +Ġdividing +perform +raction +healthy +ĠTitle +Ġuk +Ġcerca +Ġarguably +Ġfale +ë³µ +Ġgamers +Ġutilizing +Ġoffended +Ġtava +alı +Ġmedian +Ġinfectious +ĠAnnie +Ġsmartphones +Ġparole +åĸĿ +ĠEpic +zza +Ġunified +Ġê·¸ëķĮ +Ġcurtain +ĠÄĥ +Ġsexually +Ġunserem +ĠConvention +Ġallegedly +Ya +ĠHoo +enment +æĢª +íĽĦ +Ġgigantic +Ġnoting +Ġrebo +ĠJama +ĠAlz +Ġborrowed +침 +Ġperipher +оÑĤа +ĠGB +ĠGear +Ġeconomically +Ġtelefon +Ġqueremos +ĠдалÑĮÑĪе +Ġras +ĠTeach +icios +atos +Ġpledge +bau +ĠHimself +Link +Ġespero +Ġchromos +ĠPER +Ġerle +Ġpodium +ços +Ġnieu +Ġfen +ĠGOD +ĠChocolate +werk +Ġtừ +Ġsuppress +λη +Ġ240 +Ġsitä +Ġhonesty +ĠBio +ĠBard +ĠобÑīем +ĠмÑĥз +Ġmarble +ĠÑĨенÑĤ +Ġprocure +Ġrotor +bern +Ġtuh +Ġheadset +atem +Ġwarranty +à®´ +Ġfiling +ιά +Ġcomprendre +Ġimpulse +Ġsalv +written +Ġinstitute +Kim +ĠLGBTQ +ficiente +His +ĠαÏħÏĦÏĮ +Ġteenage +orus +ĠÑĢазб +See +ĠConserv +á»ģn +fulness +Ġstrawberries +ĠAbu +ион +Ġolla +NOISE +ĠEmploy +Ġwiped +urger +Ġmodifications +Ġíķĺì§Ģ +Ġfootsteps +Ġhonors +Ġadul +Ġflipping +ĠHU +ZY +Ġintegrating +بر +ulla +Ġnatuurlijk +ĠíĹĪ +ĠEthereum +ÙĬÙĦ +wed +Ġpeaks +ĠKes +Ġbloom +Ġcrashing +Ġ911 +ĠоÑĤлиÑĩ +Ġcontrollers +ĠDod +ĠвмеÑģÑĤе +Ġsortir +å¥ĩ +ĠStraight +ĠGracias +Ġgroove +Ġtogg +Ġìĭ¶ìĿĢ +éro +Ġoutward +ĠWA +ĠRocky +Ġscam +Ġhayat +ignty +âĦ +plings +Ġantibiotics +Ġä¸Ģ +Ġnevertheless +jang +commerce +Ġspoiler +Ġglove +Ġchatter +ĠBY +~? +Ġíĺ¸ +Ġdemol +wechsel +imir +Ġraid +еÑĢÑħ +ìŀIJ기 +enf +Ġcommented +Ġoptimized +Ġconvicted +Ġbats +ĠSB +ĠAur +ĠTong +Ġimplicit +ĠJanet +Ġreag +ãģ² +ĠAdvanced +Ġimpose +ש×Ķ +Ġschemes +ougher +abolic +Ġê±°ì£ł +Ġslowing +Ġwtedy +Ġdestructive +ĠопÑĢед +Ġlandmark +ĠëıĪ +ĠWalking +ẹ +Ġtijd +ĠKN +ĠQuant +ìĺ¤ë +ĠкÑĢÑĥ +Ġperder +Ġnove +ände +ĠãģĹ +bia +Ġcustody +Ġbiod +æĿ±è¥¿ +Ġdirecting +...âĢĭ +Ġreloc +Ġdemande +ãĤĵãģł +ĠoÄŁlum +Ġодна +ĠMilk +åı· +ĠKra +ĠHonda +Ġpue +Ġelekt +Ġbeginners +Ġspear +ÃŃnh +ĠLuft +Ġnig +ĠSchools +Ġforums +ĠQin +ppo +Ġzag +ĠЮ +Ġtoothp +ĠStyle +ì´Ī +Ġpunct +Ġreps +ĠAly +Ġamendments +Ġöz +Ġdigits +urai +Ġchaotic +ĠMasters +eon +ĠCash +ĠCuz +Ġbedeutet +Ġscanning +Ġжд +неÑĤ +Ġcertainty +jek +Ġdijo +ĠClimate +Ġrinse +Ġkrij +veland +Ġsoundtrack +ĠSafe +ĠNova +94 +Ġathe +ĠVerb +oler +ìĿ´ì£ł +Ġvin +Ġrespiratory +ĠStudy +ĠCAM +Ġavocado +ĠZhen +Ġlatency +Ġfeathers +Ġcontar +ĠвеÑī +Ġfark +Ġblended +Ġexploded +ĠXX +ĠBenim +Ġalguém +istoire +Ġconfidential +Ġmast +Ġì¿ +geh +Ġdisrespect +ĠSystems +Æ°a +Ed +Ġwys +Ġexotic +Ġglowing +ùng +ounge +èĦ +аниз +Ġpalav +ĠSword +Ġgim +ĠCrow +Ġpotent +bish +Ġabused +ĠJed +Ġgambling +ĠSpect +Ġinvestigators +æĻļ +Ġratt +Ġdob +ĠDES +hog +ĠоÑĤкÑĢÑĭ +íĮħ +ĠденÑĮги +Ġíĺ¹ +Ġ머리 +Ġsaturation +Ġinherited +ĠInnovation +ìĹĪëįĺ +Ġtangible +Ġdepri +hed +Ġпомог +Ġsliced +à¥į +Ġthế +Å¥ +68 +Ġcorona +Ġgifted +Ġsoir +Ġhumility +ĠìĿ´ê±¸ +Ġflaws +ĠпÑĢакÑĤи +Ġkald +waż +yw +ãĤĵãģ§ãģĻ +irteen +Ġcrochets +¦¬ê°Ģ +ĠìłĦìĹIJ +Ġdese +æ¥Ń +Ġмаг +ĠdziaÅĤ +Ġlég +changing +Ġllev +ÅĦsk +çĶ» +Ġ1984 +orns +ĠWelsh +Ġpharmaceutical +Ġpumping +ĠShaw +punk +Ġvault +Ġkinetic +Ġhurricane +ĠIncluding +ức +ĠGrandpa +anship +é¦Ļ港 +ĠвÑĭÑħод +нож +ľł +utta +Ġê²ģëĭĪëĭ¤ +Ġbaz +ĠпоÑĪ +Ġpeculiar +zyÄĩ +ĠEllie +Ġlearns +ĠKrishna +Ġconsecut +Ġempath +ĠDin +Ġtraded +ĠBoris +uggage +olla +Ġназв +Ġeternity +Ġвп +èmes +Ġgrapp +bé +ĠпÑĢедÑģÑĤав +ĠFC +įëĭĪëĭ¤ +even +ĠNebraska +ortune +Ġkarena +ĠAgent +Ġsting +ĠPI +Ġmunicipal +powered +Ġconsegue +ĠManchester +Ġrainy +Ġbli +Ġkost +Ġhalten +ĠAhhh +insula +erting +ĠاÙĦÙģ +Ġrelacion +Ġkomen +Ġdome +Ġpriests +ĠIntrodu +rophe +shore +velt +clipse +ĠÑĢÑĥÑģ +×Ļס +Ġsabemos +ĠHolland +ogi +anki +ĠMats +Ġsmoked +ullie +Ġeurope +ĠдейÑģÑĤвиÑĤелÑĮно +Ġbardziej +Ġtransforming +ĠEz +opath +Ġìĸ¸ëĭĪ +ĠÑģÑĤан +ằng +ัà¹ī +ĠOuch +Ġclearance +ustain +Ġsolidarity +Ġproving +ĠÐĺн +ĠÑģÑĬ +Ġprolong +адно +Ġsos +ĠDeal +Ġ170 +mons +Ġзем +Ġlogged +Ġlifelong +Ġsensory +Ġbehold +ĠFAR +ètement +ĠFederation +Ġdodge +ĠShir +Ġdragons +ĠArctic +Äħż +Åį +º +Ġdenke +ĠpodrÃŃa +cole +ÑĥлÑĮÑĤаÑĤ +Ġsystematic +ама +chos +Ġclinics +ĠBS +Ġtales +usions +ĠíĪ¬ +Ġpreservation +Ġlore +ĠProtest +Ỽ +å¸Ĥ +Ġacknowledged +ĠIsaiah +ĠëķĮëĬĶ +Ġ×ĺ +Ġcompetitor +Ġadvancing +zip +Ġtenth +ĠLaure +Ġhints +Ġexercising +ŀľë +ĠIntelligence +uated +OUT +oped +Ġautonomy +Ġbranding +ĠMediterranean +Ñĸк +Ġscrewdriver +Ġsupre +Ġstap +Ġjurisdiction +ĠSettings +Ġforefront +ĠFemale +comfort +Ġmultiplication +ĠMurray +Ġbob +ĠTas +Ġtahu +Ġonun +etter +Ġprophets +lag +Ġrevenues +Ġprá +Ġuploading +Ġmachinery +ascal +ĠEstá +ĠGoth +ĠBald +ĠSaw +Ġstripes +ìłij +Ġpowin +æĹ¥æľ¬ +Ġhostile +Ġdarum +Ġprevented +ожалÑĥйÑģÑĤа +Ġalgunas +Ġhopeless +Ġznaj +Ġreadings +Ġcraving +tat +ĠPig +Ġliar +çĪ± +Ġmultiplayer +Ġdale +ĠCourse +íģ¼ +ĠKita +Ġcustoms +Ġresponds +endra +è¦ĸ +Ġmetro +Ñģол +Ġmitigate +Ġoppression +ĠæĪijåĢij +quinho +Ġammo +Ġenfer +Ġpony +Ġounces +°Ķ +ĠìĪĺê°Ģ +Ġdicho +ĠDeb +Ġwonders +ĠRoose +Ġprizes +ĠALEX +Ġthankfully +Ġtissues +ĠÑĢавно +ĠLuna +intelligible +ĠìĻ¸ +ê°ij +ĠHeat +ĠÑģид +ĠQui +Ġions +Ġaccommodation +便 +ĠKart +ienst +Ġtarde +Ġsoaked +ĠCasey +Ġì´Ŀ +ĠÑĢÑĥб +Ġdifferenti +Ġleftover +Ġexchanges +second +Ġfirstly +Ġbuilder +rien +Ġdw +Ġbouncing +?< +ologÃŃa +wealth +Ġmeditate +ĵ¤ìĿĺ +ĠCraft +è§īå¾Ĺ +æĻ® +riv +ĠAgainst +Ġceramic +espère +Ġcompetent +ĠHopkins +Ġkilos +Ġgravel +Ġpiston +Ġfriendships +Ġescre +Ġvoz +ĠGesellschaft +Ġunterstüt +Ġmuj +Ġwarnings +pos +ĠProfessional +wszy +odle +bands +Ġteamwork +stellung +Ġdx +åįĬ +Ġattorneys +Ġweitere +ãħĭãħĭãħĭ +ĠOriginal +×Ļ×Ĺ +Ġbroadcasting +ĠпеÑĢвÑĭй +uchi +Ġheure +Ġgrabs +ĠWOR +ĠPlaid +Min +Ġpaz +ĠPuis +umu +itates +Ġcoats +Ġbuen +Ġheir +Ġpneum +שר +enser +ĠJUDGE +Ġblonde +á¹Ľ +Ġgak +Ġsık +Ġquoted +Ġequipo +Ġwishing +ÃŃcia +Ġverbs +çµĦ +ĠCanadians +Ġgoverning +ĠEvans +Euro +Ġgenres +Ġunterschied +ĠBecky +³¼ê²ĮìļĶ +Ġeinge +ĠRaise +oland +ĠStrateg +Ġeres +ĠVeterans +Ġbreakout +Ġsanté +Ġadel +Ġinvestigated +Ġpeur +Ġagile +Ġrailroad +anska +Ġей +Ġexpos +atories +ĠContent +Ġtruths +ĠTrail +Ġgua +Ġpores +Ġwritings +ĠUhr +ĠThats +Ġicing +OC +ĠProduction +Ġcarne +ISS +Ġninguém +non +Ġvicious +×ķ×Ķ +Ġreconnect +Ġcentres +ĠKem +Ġcrease +ĠìĿ´ë¯¸ +айÑĤеÑģÑĮ +ĠбоÑĢ +ĠHayır +ĠÑģÑĥд +Ġúnica +owaÅĤ +Ġadher +hua +ZZ +Ġpreciso +Ġcurrents +Ġseasoned +ĠIoT +ĠBishop +è¨Ī +sted +ĠBernard +ì¤ĺ +æ²» +ĠGlenn +Ġktórym +ืà¹Ī +Ġastrolog +ĠKot +å¤ľ +Ġparfois +Ġforwards +ĠWiÄĻ +ĠÎĺ +Ġnano +è»į +sub +ĠBrill +Ġgrit +Ġcited +gado +Ġmelts +Ġforcé +âĸĪâĸĪ +Ġbajo +Ġdiscretion +°° +ativity +Ġsituated +ãĥ«ãĤ¯ +Ñīее +åľ°æĸ¹ +ĠпÑĢинÑĨип +amaz +Ġaquarium +Ġdissolve +ĠGods +Super +Ġamid +zk +ĠãģĦ +éłIJ +ampf +Ġhela +'! +Ġdevelopmental +ĠDise +ĠÑĢабоÑĤаеÑĤ +Ġsnapshot +好好 +Õ¸ +ĠYue +ĠHulk +ĠDoom +ĠFelix +Ġréf +Male +ç·Ĭ +phants +ENS +ĠMechan +ĠGolf +åĨįè¦ĭ +Ġgenerosity +ätze +Ġunlocked +ĠãĤĴ +íĥģ +ocalypse +Alright +Ġê°ľë +Ġ×IJ×ij׾ +ĠKeeping +Ġcollaborating +chief +ĠFernando +Ġchefs +ĠíĶ¼ë¶Ģ +Ġskipped +Ġpersonn +Ġaxe +chez +Ġextraction +ĠAV +ĠGibbs +Ġíľ +Ġsı +IAM +View +ĠGRANT +Ġ몸 +Ġverification +Ġdepicted +ĠMoz +oux +Ġtul +Ġscanner +Ġcomedian +ĠVolks +ĠJEFF +è¨Ĥéĸ± +§Ħ +Ġdistraction +rá +ĠINTER +Ġsincer +Ġ×ŀת +Ġש׳ +Ġconstructive +arf +ĠëĪĦë +Ġeco +ramos +Ġrenewed +inement +ĠUb +ĠPepper +ì§Ģê°Ģ +ĠDarwin +Ġmerchand +Ġvárias +èce +NG +ĠìľĦíķ´ìĦľ +ĠакÑĤив +ĠUnters +عÙĦ +Ġintric +omma +ieving +ĠCaroline +åĵģ +ĠPRES +Ġperformer +Ġautour +ãģ¾ãģĽãĤĵ +Ġutterly +Ġsynthesis +Ġlesbian +Ġretrieve +Ġmaneira +Ġimpair +Ġmentoring +ĠSouls +ĠGoPro +ÑĢаÑĤÑĮ +Ġcose +ĠSSD +IRE +Ġupfront +ĠAun +Ġgamer +Ġlitt +Ġaggression +ĠLikewise +ĠBetty +ĠDart +ĠDLC +ishment +ìŀ¥ìĿĦ +Ġ对 +ç»ı +cream +ĠBabylon +Ġnug +brar +Ġaynı +amily +bike +ahahaha +loyd +Ġmira +Ġperme +ĠGaming +Ġfirmware +Ma +Ġassisted +atics +Ġìķŀìľ¼ë¡ľ +ĠMental +niejs +ĠIz +owÄħ +Ġtougher +Ġdeed +èĭ¦ +Ġstylish +ĠTools +ĠHamp +Ġsunscreen +Ġarticulate +iye +иÑĦ +ĠSpread +ĠHAVE +Ġswirl +Ġsponsoring +ä»ĭ +iovascular +mesi +Ġrelaxation +ĠÑģвоиÑħ +Ġmargins +ĠsaÄŁ +ĠPride +ĠÏĦοÏħÏĤ +иÑĨи +enci +Does +Ġcorpse +Ġendurance +Ġíŀĺ +ì¹´ +Ġhaircut +Ġinterrupted +Ġwindy +ĠCaleb +ÏģÏĩ +ĠPourquoi +Ġholistic +uclear +ĠWhole +士 +Act +Ġgallon +cade +ĠRegional +roads +ĠSchne +áng +Ġизмен +ãĤĪãģŃ +Ġmenus +Ġsplitting +Ġpriced +ĠÎĵ +Ġusername +ĠÐŀÑĩ +Ġcompressed +yin +Ġguardian +Ġgoof +Ġchecklist +Ġinterchange +Ġexpedition +Ġextern +Ġinfrared +engo +Ġdenying +Ġpackets +onent +BB +ĠIncre +Ġsini +ÃŁer +èg +maal +generation +Ġminorities +Ġllevar +Ġnomination +Ġconsid +Ġ×ľ×¢ +muÅŁ +ĠEsc +Ġnumerator +Ġkaik +Ġktórych +iesen +Ġvê +ĠUSS +ĠPrivate +Ġодно +Ġalém +ÃŃtulo +Ġlimb +Ġforgiven +Ġdisclosure +ÏĦί +Ġningún +Ġtherapeutic +Ġnegotiating +ĠNike +enseful +Ġincap +Ġflagship +town +âĪ +ĠÏĢολ +Ġwolves +Ġviolations +ĠArnold +Ġintervene +Ġheater +Ġrecursos +Ġmaid +ê²¼ +ĠдавайÑĤе +ĠCelebr +Ġcape +ĠSty +ainen +site +bij +ĠполÑĮз +Ġframed +Ġpublishers +ĠÑĩÑĥÑĤÑĮ +Ġtemptation +Ġcerteza +Ġexempt +ìĬ¹ +selling +ĠTask +hoon +ĠCoc +ĠParks +Ġrepetition +ĠÑĤÑĥда +Ġensl +ĠdeÄŁiÅŁ +ĠOrlando +ĠMainten +æŃ¢ +ocument +ĠHC +Ġscooter +ĠнапиÑģ +Ġtighter +Ġtease +Ġremoves +Ġkijken +ĠÑģÑĥÑīеÑģÑĤв +Ġthé +ĠвÑĭглÑıд +Ġrelieve +Ġmitä +Ġstationary +öff +pable +Ġarter +Ġdéf +rative +Ġconect +Ġsaddle +ĠDiane +Ġcommemor +fendim +SÃŃ +Ġíģ´ë +Ġmange +atte +Ġarrogant +Ġrobotic +ĠgiÃł +æĺ¯çļĦ +Ġneighbourhood +isson +Ġдвиж +ĠRI +ĠNorman +brand +amation +Ġrazor +Ġmurders +ĠÑĤÑĥ +Ġwszystkim +Ġutilities +Ġmicroscop +ê¿ +Ġdaqui +ollar +ĠÐĶавайÑĤе +Ġannée +Ġkilometres +Ġhomosexual +Ġarchitects +ãģ¡ãģ¯ +Ġniye +LER +Ġmicrophones +ĠStunden +Ġconsecutive +ienda +vänd +DER +Ġlifts +ĠMeat +Ġsavez +íĸĪëįĺ +Men +Ġdismant +거를 +Ġinsulation +Ġscall +Ġspooky +Ġparc +Ġballet +ĠWhatsApp +Ġfranc +Ġdeliberate +ĠíħĮ +Ġmars +ĠZur +Pr +disciplinary +Ġobsession +ме +Ġmarching +ĠEmergency +iguous +Ġszy +ĠLands +Ġboarding +ĠпоÑĩÑĤи +Ġenvy +Ġcompassionate +Ġmerci +Ġdesirable +dale +Ġcanım +ĠAntar +temps +Ġconfigured +ĠCompared +neh +icating +Ġnickel +ÙĪÙĤ +ÙĥÙĪÙĨ +opes +Ġformulas +ĠÐķÑģÑĤÑĮ +Ġpobl +ĠPJ +ĠLud +ä»ĬåĽŀ +ĠBrid +ĠHog +ĠBris +Jen +Ġshading +ĠYas +Ġdisturbed +Ġrecommending +Ġcé +ĠHOW +ìĹĪìĸ´ +Ġreversed +ĠInterestingly +ioxid +åħŃ +Ġìĺ¤ì¼ĢìĿ´ +ếu +xx +Ġouais +ĠYouTubers +ĠRosa +ĠHaupt +jadi +Ġvlogs +Ġcultura +ĠLeadership +ĠHep +Ġillum +´ëıĻ +Ġcustomized +Ġmarca +Ġquatro +Ġнаг +ĠSpaceX +ĠEigen +asting +ĠolduÄŁu +Ġforts +ãģī +riment +iencia +Ġtenir +roffen +Ġ1979 +Ġcie +ĠëIJĺê³ł +Ġescri +ÏĮÏĤ +íı¬ +uzzy +Cong +ìĿ¸ìĿ´ +Great +sil +éch +ãģ¨ãģĭ +Ġmultic +ĠDisk +²ķ +Ġfazla +Ġlevant +Ġabajo +urry +stru +Ġ먹ëĬĶ +Ġaccessory +Ġдвиг +ĠRid +2019 +Ġdownstream +æķ¸ +Ġkaz +utan +Ġcharcoal +Ġafect +wu +Ġcontexts +Ġfeared +ĠìĦ¤ +Ġhistories +Ġfas +ensible +Ġcocoa +illar +geons +Ġspirituality +ĠPew +Ġpharmacy +Ġpassions +Ġbos +Ġallá +Ġthriving +ĠReact +Ġoccupy +Ġwithdrawal +Ġallowance +ĠFraktion +Ġbuddies +Ġidle +Ġdissolved +Ġprevalent +Ġmilitar +Ġsensing +Ġpojaw +Ġancora +Ġabundant +Ġhairst +ãģĤãĤĮ +Ġtwee +Ġnächste +ĠMöglichkeit +Ġhoo +ufficient +Ġfantast +Ġedible +Ġëĸ¨ìĸ´ì +ìĽĥ +Ġvein +ucci +Ġdevotion +Ġconcealer +income +Ġrecycled +ĠìĬ¤íĥĢ +Ġpontos +Ġdessus +Ġvérit +Ġreflections +ĠAA +Ġtakeaway +bare +ĠContact +eil +ĠHear +Ġmirac +ĠGerilim +ĠÑģамÑĭй +Ġvivo +Ġkilograms +ĠCrim +ût +78 +Ġsincerely +raz +Ġë³µ +Ġarriv +Ġconception +ĠPersian +Ġsjäl +Ġstarring +ĠìķĦ무 +ĠForever +еÑģÑĤÑĮ +Ġveil +Ġsubtit +odka +ĠоÑĤноÑĪ +Ġcooks +енÑı +Kay +Ġniños +ĠPhone +Ġstitching +Ġfingerprint +é¢ĺ +λά +Ġdedicate +ĠLob +Ġblacks +ĠBle +bout +ĠÄijang +Ġeks +Ġsquash +ĠKü +odi +ĠnÆ°á»Ľc +Ġvoyage +Ġplayful +ĠØ¥ÙĦÙī +anic +Ġcondemn +ĠBöyle +ĠPolize +ãĤ¿ãĥ¼ +Ġayuda +Ġpam +à¹Ħà¸Ľ +ĠKathy +един +нова +Ġbrig +eger +Ġeagle +Ġvisions +ĠíķŃìĥģ +Ġshitty +Ġhott +ĠBritt +utors +ENTE +æĽ² +Ġphon +ĠBing +ĠподдеÑĢж +spring +æĸ¯ +etten +Ġpilgr +Ġediyor +енÑĤÑĭ +aggio +Ġjul +Ġcomprend +teil +Ġز +Ġperformers +Ġinfamous +ĠMK +çª +æ³ģ +otle +eff +ĠHash +Ġcoward +ĠBRA +ĠDD +Ġcomida +Ġplata +Ġflap +ĠMehr +ribution +ĠYemen +Ġmysteries +ĠÄ°yi +Ġstell +Ġeyeliner +Ġdeles +Ġnailed +Ġillnesses +Ġstacks +Ġtrabajar +flower +ciu +Ġcrude +Ġsubstantially +Ġhomem +Ġnephew +Ġstamps +Ġcarbs +ÑĮÑĤе +mooth +Ġtunnels +acie +æ³¢ +ĠSeñ +ĠHera +ĠìķĦëĭĪìĹIJìļĶ +ĠWyoming +ĠHDMI +ĠLis +ución +Ġsteer +оÑİ +иÑĤа +NT +Ġìĸ¼êµ´ +Ġpalms +Ġneon +ованиÑı +Ġfiltering +Ġjouer +ĠHö +ĠнеÑģ +ê²łìĸ´ìļĶ +Ġ81 +Ġstoryline +Ġprzep +Ġthanking +ĠBoeing +Ġsoftly +jem +алÑĮнÑĭÑħ +Ġflashlight +ĠпÑĥ +ĠWOMAN +ắc +ÃŃch +Ġluxurious +Ġwün +Ġimpactful +Ġconson +reu +irring +ifter +Ġconstituents +èIJ½ +Ġ94 +ĠTou +gom +ĠìĥĿê°ģìĿĦ +Ġstereotypes +Ġmożli +åĪĨ享 +Ĥ¨ +Ġpencils +ĠÑģлож +Ġihrem +ĠBesch +ĠKoh +ĠEntscheid +Ġlek +Ġförs +Ġtotalmente +Ġlively +Ġentropy +Ġdiscern +ĠÐĹна +Ġdov +Ġmythology +è¨ĺå¾Ĺ +apanese +Ġapproximate +аÑĤив +ifiable +ĠSeo +åĢĴ +´ìĭ¬íŀĪ +Ġìĺ· +Ġtemporal +ĠiT +Ġestat +ким +Ġsprink +Ġgrund +Ġinfantry +Ġschaffen +ç´Ħ +Ġank +riages +ĠYeon +ĠMoroc +Ġinvasive +ģĶ +Ġparenting +ĠRis +ibile +Ġmods +å½¢ +ĠпÑĢовеÑĢ +ĠThing +ĠWherever +Ġacknowledging +Ġpawn +ummer +orb +69 +Ġretrouve +Ġrelies +ĠHighway +Ġawe +ãģ§ãģĻãģĭ +itaire +Ġapplicant +Ġaisle +worm +Ġpayload +Ġcarre +ĠBach +æł¼ +Ġì¹ľêµ¬ë +ние +ĠitÃŃs +onnaise +sol +èı¯ +algia +Ġrocking +Ġbesten +rites +^^ +иной +Ġbaixo +Ġ기ìĸµ +оÑĤÑĢи +sim +Ġincarn +ëĭ¤ìĿĮ +Ġlick +sided +Ġ71 +forder +Ġresonance +Ġtegen +Ġmetaph +owser +Ġ×IJ׳×Ĺ׳×ķ +?ãĢį +Ġspielen +Ġvolley +ĶìĿ´íģ¬ìĹħ +looked +Ġsentenced +Ġmultiplying +Ġideals +Ġwahrscheinlich +Ġdeposits +bilir +Ġeffet +illon +Īë§Į +Ġtestimon +Ġzawsze +ĠпÑĢоÑĨеÑģÑģ +ĠLav +ä¸įéĮ¯ +Ġtravailler +Ġlaisse +ĠMountains +ĠÑĢоб +Ġexamined +itus +Was +лÑĭ +Ġattributed +ĠìĬ¹ +ĠBaron +Ġgep +Ġattent +ĠCollection +Ġtheat +ĠCai +Ġwells +Ġhumano +çĹħ +ĠHast +ĠÑħоÑĤÑı +czas +Ġpermits +Ġlegg +Ġepo +ĠFen +Ġthi +ĠFoi +Ġélect +Ġ83 +Ġoverth +Ġè¬Ŀè¬Ŀ +Ġtenant +è²· +Next +Ġpraised +security +ĠImpact +为ä»Ģä¹Ī +Ġvouch +Ġnegó +Ġunve +Ġcriticize +ĠKenya +Ġtactic +Ġlogr +Ġpois +Ġpapa +speaks +ðŁij +ispers +Ġsurplus +Ġcolder +åįĹ +åIJ¬ +plets +ĠVienna +ĠLead +Ġaerial +ĠTah +енÑĤов +ĠGreeks +Cam +Ġmáxim +Ġkuin +chio +Ġdemonstrates +anos +ĠCert +ĠÑįн +Ġblogs +ĠìĦľìļ¸ +Ġbeams +иков +Ġprompted +Ġfrightening +ĠPorsche +ãģĪãģ¦ +larını +Ġchilling +isphere +Ġflashing +ĠKard +bread +Ġexh +Ġtycker +Ġecological +ĠMae +Ġ×ŀ×IJ×ķ×ĵ +ĠëĤĺëıĦ +лон +yss +Ġpergunt +Ġprix +izzard +Ġcancers +Ġ91 +susp +ĠItem +ÅŁa +Ġpest +ĠtakÄħ +Ġlymph +ĠPatri +fill +Ġreconna +Ġoptimism +Ġmimic +Ġì²ľ +ĠMadame +ocy +lining +åijĬ訴 +erme +Ġfolders +ĠczÅĤ +uchar +Ġcurso +Ġbreach +ниÑĤÑĮ +ĠpamiÄĻ +Ġelig +Ġautop +Flow +Ġprogrammed +ĠProcess +Ġfigur +ĠSF +ĠEles +Ġprogrammes +Ġdizzy +ìĭľê°Ħ +Ġлибо +Ġsniff +ĠSebastian +ĠHye +Ġ4000 +Ġpermite +æ¢Ŀ +ĠзаÑī +Ġguit +ĠDais +Ġaccordance +Ġmodular +ogeneous +æĭį +Ġpouquinho +Ġartillery +Ġlubric +Ġvolcan +ĠNH +ðŁ¤ +Ġdean +Rh +Ġministre +åĿIJ +ĠInv +ĠBulgar +ĠDaten +èİ +Im +Ġoriginated +ĠNixon +integr +Ġlacks +ĠNacht +ìĸ´ëĤĺ +camera +Ġradish +kiye +Ġanges +Ġpréf +juk +ĠBee +ĠBU +ĠвоÑģп +ĠBT +êmes +ĠStück +ĠInk +æĪĸèĢħ +ĠSergeant +ĠMultip +Ġhiçbir +ĠСам +ĠDé +olph +ìĸ¸ +Ġimpat +ĠìķĬê³ł +ĠÑĤакого +ĠнавеÑĢное +Ġunpredictable +Ġmend +ĠìĹĨìĸ´ìļĶ +ĠjakieÅĽ +Ġanni +Ġdonné +ĠKirsty +Ġrectangular +Ġempezar +ĠExchange +ê°Ķ +Ġéconom +ãģĵãĤĵ +elin +reibt +Ġ×Ķפ +Ġcemetery +Ġespañol +olin +лÑİд +Ġgrâce +allen +ĠPhilos +ĠErst +ĠìĥĪ +ĠVid +Give +OH +μο +ĠPare +Ġmetabolism +Ġmaple +Ġaxle +ĠDy +Ġkomme +Ïİν +Ġgreatness +Ġverified +Ġspé +ĠFahrenheit +ĠBren +ĠConfeder +Ġhistoire +Ġeliminating +ĠAdding +ĠAbi +æĿİ +Ġhospitality +tim +Ġbonito +Ġpartes +ĠдÑĢÑĥгиÑħ +ĠShay +ĠSed +Ġregrets +Ñıми +Ġtenants +éĢŁ +ĠPTS +Ġdevi +ĠLate +uez +Ġsöyl +ãĤ» +Ġìŀ¬ë°Į +Ġtoggle +Ġmasking +алÑĮного +Ġpersön +Ġamerican +fik +ĠRGB +enson +ĠKA +wwww +ĠÑĢег +metics +Ġeducator +ãĤ·ãĥ«ãĤ¯ +park +елÑĮзÑı +arus +ÑĢеÑĤ +Ġfeito +Ġchoir +Ġlargo +Ġeens +Ġwatts +ĠSingle +Ġsusceptible +icer +ĠвклÑİÑĩ +Ġpus +íĻĺ +Eng +Ġfantas +Ġspecification +Ġconfronted +ĠColumbus +ивеÑĤ +arım +Ġcaffeine +munition +Ġmigrants +lide +itations +ĠGeme +ẫ +Ġplanner +Ġstimulate +Ġaproxim +ceu +ĠNom +Ġvog +ĠÑĢаÑģÑĤ +Ġenseñ +Ġsellers +Ġguten +zd +Cal +Ġdescript +Ġreconciliation +zinho +á¹ĩa +ãģĺãĤĥãģĤ +acyj +ĠCOL +saw +ĠíĻķìĿ¸ +Ġvarit +Ġpartnering +Ġdetention +Ġbombing +clapping +iencies +ondu +AME +Ġê°ĻìĬµëĭĪëĭ¤ +cÃŃa +ĠпоÑģÑĤо +ĠASMR +Ġhomepage +Ġsiè +antha +ĠPoll +Ġigen +cych +Ġê°ijìŀIJ기 +Ġconsiderably +ä»ĸçļĦ +ĠArist +Ġwithstand +Ġqualitative +ĠKraft +ĠÑįлекÑĤ +ĠBead +екÑĤив +Ġcrushing +ì³IJ +Ġnavy +ÙĪÚº +sho +Ġoak +ippers +Ġsoils +Ġpigment +Ġevitar +ãĥĩ +Ġfuse +ĠDale +:\" +Ġcomplètement +Ġkel +à¹Ĩ +Ġquatre +ĠUM +Ġë§IJë +æł¹ +ÃŃr +Ġleisure +ĠHousing +Ġfolds +estion +ARS +Ġmash +urpose +Ġaccumulated +ĠStuff +èªŀ +Ġtapes +ĠÑģилÑĮно +ĠLOVE +Ġ1982 +Ġscars +Ġcapitalist +ĠNed +Ġsoften +Ġnotably +Ġforcément +ĠRaum +ĠнеобÑħод +Ġtrademark +Ġfertig +Ġ?! +æĹł +Ġreinforced +Ġrecharge +ĠPutting +Ġvillains +Ġhandic +Ġadvertisement +تÙĬ +ĠÑģÑĥм +ĠRiley +×ķ×ij× +京 +Os +از +Boy +Ġsquish +ocket +Ġtestify +æ¼Ķ +Ġ׾×ŀ× +ĠмаÑģÑģ +manuel +ĠArkansas +iffe +Ġanalysts +ĠDeaf +Ġjó +Ġgroceries +ĠWheel +ĠÑĢиÑģ +Ġcòn +ĠCob +Ġprisons +ève +ĠCabinet +Ġposed +Ġguerre +ĠLloyd +Ġclerk +Ġcrises +ĠSho +ĠOre +ĠFootball +ĠAdvis +ĠZheng +èį +ĠAMY +Ġunfor +Ġmonaster +Ġcompile +Ġimmortal +atable +Ġparano +Ġtiver +ĠSteph +ĠFuÃŁ +Ġdiscontin +Ġripe +Ġhacking +Ġsiendo +Ġseguro +altres +Ġanderes +Ġ리ë +Ġexports +æŃ¥ +Ġtabii +Ġ기ëĭ¤ë +Ġbothering +Ġpickle +ĠBRIAN +Ġaltar +ĠпÑĢиб +Ġtransferring +ĠVors +ĠÙĩÙĪ +ĠZa +ĠFrances +Ġbrowse +emit +Ġchewing +ĠFreddy +Ġeditors +älle +ĠíĮĢ +ĠSque +ĠCultural +awk +ĠSache +ĠCarbon +ắt +FL +ĠNGO +peÅĤ +ĠSou +Ġhvor +unintelligible +Ġë²ķ +Ġ° +iin +Ġ×¢×Ŀ +Ġderrière +Ġczym +ĠApost +Ġregarder +Ġagrade +ĠCandy +Ġmare +Ġintroduces +birds +Ġuniquely +Ġmuk +Ġcooker +Ġcrews +Ġjeito +ERT +¶Ħë +nisse +Ġef +Ġcarte +ĠYak +ĠPAT +ино +bokki +Ġmates +Ġdistint +Ġì½Ķë¡ľëĤĺ +Ġyıl +Ġκάν +Ġconfigurations +enga +recht +Happy +ãĤĦãģ£ãģ¦ +invest +Ġreconstruct +ĠÑįÑĤомÑĥ +Ġmosque +raum +Ġvoyez +ĠNBC +ĠìŀIJìĭł +Ġsturdy +Ġкап +Ġansch +alid +Ġmasih +ĠREP +Ġì½Ķë +Ġdeduct +Ġsalir +wurf +ilot +ĠMutter +olds +ĠFEMA +ĠBib +Ġneighboring +Ġbliss +Ġíĺ¼ +лиÑģÑĮ +ĠÑĤÑĢеб +Ġå°±æĺ¯ +Ġgrenade +Ġegal +Ġfinely +Ġpetals +Ġkeer +Ġchyba +Ġskipping +Ġthirteen +Ġgravy +ĠSAT +61 +Ġног +Ġmins +ITE +Ġsozial +íķĺë©´ìĦľ +ruktur +Ġвозмож +ĠопÑıÑĤÑĮ +Ġarth +ĠCuban +Ġtreasures +Ġfertilizer +Ġawakening +Ġë°±ìĭł +Ġrall +Ġdepict +ĠPablo +Ġnineteen +Ġwatt +Ġentirety +KS +ĠWoods +Sch +ĠÚ©ÙĪ +ĠDry +ãģŀ +uve +Ġreconstruction +Ġanatomy +Ī를 +Ġbaba +Ġlistener +Ġsharpen +ĠPeru +ĠвÑĭз +Ġrecreation +Ġinitiate +Ġcalor +ĠNaj +gee +ĠFeels +ĠSnapchat +ĠTet +ĠNest +ĠDaf +ĠFinish +ĠÑĤаким +úc +izens +Ġspins +Ġembry +Ġpassages +Ġcient +Ġjustification +ä»ĸ說 +Ġolmaz +Ġflooded +Ġemoji +Ġembracing +Ġdiscard +ĠBasic +agog +ĠìľĦíķ´ +Ġasylum +erin +Ġfim +Ġninja +Ġautomate +Ġallergic +ÿÿÿÿ +amam +ĠмаÑĢ +ĠOi +äus +Ġinduct +ĠBEN +ĠzÅĤ +Ġkażdy +ĠAMP +nÄĽ +Sure +Ġquil +Ġespec +rok +BSCRI +Ġliebe +pus +achsen +Ġcricket +ëĬIJ +ĠFrame +ekkür +arb +ĠpÅĻ +иÑģÑģ +Ġzeggen +Ġdoubles +ĠDre +test +insp +boys +Ġmão +ĠVerse +Ġmuscular +ĠMALE +Ġdulu +Ġoccasional +Lo +conomic +Ġvak +Ġremedy +å¤ł +ĠâĻªâĻªâĻª +vem +Ġönem +ĠkarÅŁÄ± +ĠSharp +hur +Ġë°©ë²ķ +Ġgrandson +Ġaktiv +ĠThrones +ĠìķĪìĹIJ +Ġtots +Ġsubd +ĠPaula +Ġgraves +ĠBrent +ĠникÑĤо +Ġsöz +Ġcrec +ĠVladimir +çĸ« +Ġпой +Ġ\"- +Ġpsy +atri +idan +Ġaún +Ġstandardized +ì¹ĺë +ĠкÑĢов +ĠZhu +something +Ġ750 +Ġmujeres +Ġait +éĹ´ +agu +Ġcorrected +ikka +eled +ĠCareer +owym +Ġroommate +Ġdescendants +ĠNapoleon +ĠÐĶо +íĸĪìĸ´ìļĶ +Ġbunun +ĠMicha +ç·ļ +Ġdescob +PI +Ġpalabra +Ġtracked +Ġdependence +ĠBarack +åģĩ +Ġfertility +ĠSouthwest +Ġincomplete +Ġcomunic +Ġcompris +ĠRestaur +Ġacron +κα +Ġapprentices +Ġmusst +ĠAbr +Ġpentru +ĠConsort +ĠAvec +Ġdumplings +LR +Ġwszystkie +Ġswamp +нев +uggle +Ġwatercolor +Ġproton +ĠEspaña +ocking +овал +Ġtakim +Very +Ġdementia +ĠÅŁeyi +Jac +ĠMacBook +ĠLiv +fficients +ĠHunt +Ġoverlay +æĦŁè¦º +ĠSkype +punkt +Ġconfined +ĠAdrian +رÙĥ +ĠJeep +Ġenquanto +Ġanest +оÑĤвеÑĤ +ĠменÑĮ +Ġirrigation +á»ijn +Ġeighteen +ĠPon +Ġrescued +Ġ1983 +rü +jae +ĠJeong +Ġamazingly +ĠFDP +Ġbackstage +cue +ĠÏĥÏĦην +ĠاÙĦص +Ġlivestock +ĠWarner +Ġmajors +ãĥģãĥ£ +Ġcooperative +ĠBrady +rained +rieb +Ġ×ij×ŀ× +ĠдоволÑĮно +ĠFE +Ġleaked +ĠMercury +Ġpersuade +Ġtransformer +ĠNorweg +ĠìŬ룬 +ĠzrobiÄĩ +Ġcardiovascular +ĠCrash +Ġgossip +аÑģÑĤÑĮ +Ġ쪽 +Ġswept +ĠHorn +ĠAté +Ġbukan +ĠKaw +KY +ĠStories +Gary +Ġgardening +ĠQuickly +ĠFalcon +Ġovat +cı +ĠComplet +ĠDate +ĠпÑĢим +Ġläuft +ĠAudrey +ĠWent +ĠpelÃŃcul +Ġcarriage +Ġunacceptable +nymi +ĠÑģлÑĭÑĪ +Ġterre +uellement +EEEE +Ġpharmac +hões +Ġzich +Ġmigrate +ĠFry +ñana +ĠMuito +EOVER +Ġfortress +ĠCompan +ĠJSON +ordnung +Ġwarto +Ġungef +ìħĶìĦľ +ĠÑĢок +Ġpaddle +Jared +Ġsubmitting +Ġlatch +Ġfug +ĠкоÑģ +ĠEf +Ġlaunches +Ġft +otechn +Ġtravelled +اÙģ +éģķ +Ġproch +Ġdedim +83 +Ġrebound +ĠLU +path +ĠÑģпÑĢав +Ġöl +ĠíĤ¤ +Ġprivat +Ġtractor +ĠAttention +Ser +Ġcoses +ária +pal +ĠìĿĢ +Ġsuccessor +Ġconnectors +ĠÑĥÑģÑĤанов +Ġgenocide +Ġsufficiently +ĠAixò +Ġstabilize +Ġcongest +Ġcarving +Ġzost +ĠбÑĭÑģÑĤÑĢо +Ġshortest +Ġlivel +Ġ89 +éģĬ +Ġerk +Ġportraits +à¥Ģ +èĺ +boat +llah +ANC +Ġempirical +ĠEcho +ĠNederland +è¿Ļä¹Ī +Net +Ġcuidado +ĠRoma +Ġcalf +Ġgiants +ĠExplorer +ĠCollect +alition +ĠDestiny +Ġausge +ĠEdu +ĠClo +Ġearrings +ĠTrack +ĠROS +ĠBelle +çĻ¾ +Ġpueda +Ġdaytime +Ġsupplier +ĠSV +ĠExhale +Ġgalera +course +Ġcentimeter +ĠBast +mud +Ġsangat +ĠPhysical +Ġprivately +Ġtrata +lynn +illi +Ġë©ĶìĿ´íģ¬ìĹħ +Ġcrystall +Ġpods +ản +inator +ĠRecords +å®ĺ +ÄŁimiz +issement +hare +hadow +ĠDK +ĠìķĮê³ł +Ġwyn +Ġrequesting +ĠDonna +ĠìĹ´ìĭ¬íŀĪ +inea +Ġexert +ĠDuncan +ĠвеÑĩ +ĠHah +à¤Ĥ +ĠLif +ĠFinding +ĠNov +Ġзнак +ĠоÑĦ +ĠQuè +Ġquarterback +ĠÑĦак +Ġbipartisan +ÄŁin +Ġnécess +Ġreferendum +Ġcompiler +Ġprobabil +еди +Ġtrader +æĺĵ +ĠRum +geme +Ġdio +ĠbÄĻdziemy +ĠÏĢά +꾸 +×ķ×ĺ +Ġà¤ķ +Ġблаг +Ġscalp +ĠPause +Ġcaption +Ġendanger +Ġenlar +Ġrotten +ãĥĥãĥĪ +Ġwah +èĤī +Ġdzi +ĠInstall +Ay +Ġcrear +енÑĤа +Ġweighing +Ġbutterflies +ĠGast +äºķ +horn +warz +ICEOVER +ĠнайÑĤи +Ġcoefficients +ç°¡åĸ® +ĠSpencer +ĠHigher +Ġcowork +å¨ĺ +ĠкоÑĤоÑĢое +Ġmonit +Ġdysfunction +ĠÑģÑĤанов +Ġtournaments +Ġoyster +BN +Ġtrud +slow +ĠPenny +ĠOdys +ær +Ġfou +Ġenjoyment +аÑĤÑĭ +ĠwyglÄħda +алÑĮнаÑı +ĠProtect +Ġmoy +Ġclaw +Ġsuspicion +Ġsacrificed +Ġgosto +Big +Ġaggressively +Ġvorne +ãĥł +Ġblamed +ĠSehr +פר +cito +Ġseals +Ġmujer +ĠWeird +Ġforens +Ġcontributes +estra +Ġpog +LOL +Ġhacerlo +оÑĤÑĮ +fiction +79 +λο +大æ¦Ĥ +声 +ĠÑĤоб +ĠGS +ĠClara +itez +Ġadvocating +ĠíĶĦë +sung +Ġvertices +Ġnavigating +Ġeuropé +çļĨ +Ġslowed +Ġforeground +ĠIndustrial +Ġadore +ìĭŃ +Ġcréer +æŀĹ +chnitt +Ġunaware +Ġcurly +entar +Ġler +Ġprohibited +ĠHeroes +ĠReed +uca +Ġsmok +Ġkunna +zeitig +immen +ĠLun +ĠабÑģолÑİÑĤ +Ġdegli +Ġvillagers +Ġpreset +zept +uds +Ġemit +ä½łè¦ģ +Ġëī +ëĬĶì§Ģ +нако +Ġosób +Ġ1969 +ĠÐIJÑĢ +Ġmanchmal +ĠBrock +Ġmantra +ĠWIL +bach +inä +elas +keln +Ġdisciple +Ġqualc +Ġdehyd +ìĿ´ëĿ¼ëĬĶ +Af +ìĦ±ìĿ´ +Ryan +Ġpuppet +ĠдÑĢÑĥгие +Ġrud +Ġpending +Plus +ĠìķĬìĿĦ +Ġbá»ĭ +ĠSega +çe +Ġprogrammer +bli +Ġunl +Ġenslaved +Ġsociété +Äģh +Ġinheritance +ĠBangl +ermaid +Ġpractitioner +ĠStalin +ĠUser +cible +Ġcardiac +ĠKoreans +Ġdumped +Ġ×Ķ×Ļ×Ķ +áis +Ġhydraulic +oubtedly +ĠPit +Ġpicnic +Ġbehöver +ĠÑģмог +Ġbraking +é»ij +utar +ĠìĦ¸ë +ubl +Ġüz +Ġmajesty +Ġbers +utable +Ġhotter +çħ§ +ÛĮÙĨ +Ġbiases +Ġsubjected +Ġnaughty +Ġcircus +ãģĹãģĭ +ĠImmedi +ĠStefan +ĠTriple +enk +Ġwit +Ġrecycle +emie +dated +Ġunload +Ġpopula +chin +Ġyields +Ġenglish +ĠBonnie +Ġspiders +Ãģ +Ġerosion +éĥ¨åĪĨ +ĠNICK +иÑıÑħ +Ġimpart +Ġкни +Ġresolutions +Ġlithium +Ġconvergence +ĠTara +Ġдве +ths +ĠCindy +æĪijè¦ģ +幫 +ĠDIE +Ġassurance +ĠопиÑģ +Ġbuckets +Ġcues +ĠQuiet +Ġsimilarity +Ġfoundational +ĠMinist +滿 +Ġpian +Ġcentr +Ġnumb +Ġmonks +ujourd +enzie +Ġskateboard +Ġdlatego +ĠÑģоÑĤ +ĠAE +Ġmasterpiece +ĠSolomon +ĠReddit +Ġriot +abl +ĠJazz +Ġelectromagnetic +Ġinsecure +ĠCompet +geries +обод +ł×ķ +ðŁĴ +Ġsenators +ĠBrisbane +ĠAlb +uttering +ĠAllow +zero +Ġpai +ĠÐIJлекÑģ +ĠDisplay +ĠBlade +ĠApps +Ġpä +ĠдеÑģÑı +Ġquella +ĠGao +еннÑĭÑħ +Ġspoilers +Ġgallons +ĠÙĦÙĬ +ĠZion +æľīä¸Ģ +onie +ragt +ĠChand +Ġë³ij +Ġblunt +Ġusu +ĠKad +rakt +Ġcinematic +Ġammunition +rene +Ġfourteen +ĠCarn +crit +Ġtenure +vu +Ġprincipalmente +Ġalleen +éĢĻä¸Ģ +Ġkomplett +Ġdüny +James +Ġreceptor +Ġoneself +guru +Ġmerchant +liness +Ġoverlooked +Ġharmonic +éķ¿ +ieso +×ķ×ŀ +colm +ĠпÑĢоекÑĤ +ĠAda +اس +Tim +Ġrecurring +Ġproceeds +ĠParticularly +ĠDownload +etrical +Ġmatrices +Ġproyecto +ancies +ĠUhm +Ġcaves +Ġìĸ´ëł¤ +ĠLeaf +ĠобÑĭÑĩ +ĠìĿ´ìľł +Europe +ĠtÄħ +Ġpuls +Ġtakiego +ÐĿе +GU +Ġfors +Ïģγ +Ġfotos +Ġ)) +Ġ멤ë +Ġaquilo +ĠKurd +ï¸ı +ptic +ĠDort +Ġmisery +auso +åĬŁ +chuckling +ĠRidge +ĠíĸĪìĬµëĭĪëĭ¤ +Ġ*** +客 +ĠHmmm +Ġgeographic +Ġanys +Ġtalvez +Ġskelet +Ġsignatures +Ġliters +IJë©´ +ĠÑģвоего +Ġskiing +ĠÐľÐ¾Ñģ +Ġadopting +Ġhaft +Ġsymmetric +ĠLiqu +Ġthyroid +Ġmisin +lude +Ġhull +ĠXD +ĠGust +zeich +Ġvibrations +Ġesemp +ĠвÑģÑİ +ĠQuem +Ġübrig +ĠSke +ĠLynch +rooms +artet +fest +Ġfrüher +Ġlure +ä¸į好æĦıæĢĿ +ĠìķĮìķĦ +ĠWIN +ĠRYAN +ĠкоÑĤоÑĢÑĥÑİ +ĠKash +Ġ×Ķ×ŀ +Ġsafeg +ĠHallelujah +ĠдвÑĥÑħ +Ġstaple +Ġsediment +ĠActs +Ġblaming +Ġmainland +Ġsporting +Ġdecorations +Ġexecuting +Ġparan +ĠDollar +Ġprojections +Ġcommissioned +Ġbour +öm +Ġsteamed +ĠëŃĺ +Ġpetrol +Ġcelular +帶 +ĠHungary +Ġrented +ĠваÑĢи +bbie +Ġsécur +üll +Ġswings +between +ĠиÑĤ +estro +Ġniemand +ĠìĤ¼ +ĠPardon +esses +ĠMID +Ġcentralized +ĠAlien +culos +Ġcrise +裡éĿ¢ +Ġclasse +beitet +iÄŁi +Ġwhales +Ġperimeter +Ġtying +Ġstrony +Ġlikewise +ĠPunch +Da +ĠBaptist +Ġsorting +Ġiv +Ġíķ© +Ġrehab +Ġeta +river +Ġsai +ãģĦãģŁãģł +odus +ãģĬé¡ĺãģĦãģĹãģ¾ãģĻ +Ġessayer +Ġturtles +ĠHazrat +Ġfabrics +Ġcavity +Ġponieważ +Ġschlecht +Ġsalsa +ÅŁekkür +Ġseating +Ġeconomists +Ġmang +Ġseguinte +Ġrang +Ġratios +Ġconstell +Ġlongtemps +uating +Ġspoiled +Ġrecipients +Ġsniper +ä¹ĭåīį +ìĬµëĭĪê¹Į +Ġwp +ĠLINKE +Ġflare +ĠAdri +ñas +Ġbackl +mÃ¤ÃŁ +ĠBend +Ġworkloads +ĠÑģÑĥп +Ġ1975 +имÑģÑı +ане +Ġмон +Ġaspirations +ĠAer +ĠговоÑĢиÑĤÑĮ +ĠQian +å¦Ī +Ġcompromised +Ġyolk +лаÑģÑĤ +Ġhemen +rove +dens +ĠкомменÑĤ +Ġ--- +Ġfluores +ноÑģ +ĠLiverpool +ĠÑģобой +ĠZwe +Ġlumin +ĠOG +Ḡ+holm +profits +SN +Ġproportions +Ġmica +ĠBoh +ĠAtlas +Ġunsure +Ġtouring +Ġnied +ĠtÄĻ +Ġimperative +Ġdemek +ĠSheriff +rance +Ġhomeland +ĠHail +ĠGanz +ymm +Mon +åĨ· +vida +Ġdesarroll +æĬĢ +Ġintriguing +ĠHugo +ĠãĤĤ +é¬ +аÑĨ +ĠWiÄĻc +atted +ĠìķĦëĭĪê³ł +ĠVari +ád +Ġsurreal +Ġdisparities +Ġmó +ullen +ĠìŀĪëĭ¤ê³ł +ĠпожалÑĥйÑģÑĤа +Ġmains +Ġeject +Ġmethane +Ġmarginalized +Ġchilli +rès +Ġyem +ä½łæĺ¯ +ĠChun +Ġdebts +Ġdownloading +ĠAthens +isierung +ryn +Ġtekn +ĠQuindi +éľĢ +Ġtaraf +Ġhé +Ġconsciously +Ġfixes +uckle +mayın +Ġfrei +Ġspa +Ġì§Ħíĸī +ĠاÙĦØ° +ĠÑĥк +lett +ĠolmuÅŁ +Ġcheesy +าà¸ģ +naire +Ġwiden +Ġlien +Ġescaping +iggs +ĠBlick +cÄħ +ĠìĦľë +Ġ×Ķס +ĠвпеÑĢ +ophone +iell +ĠSUBSCRI +Ġlions +Ġê·¸ê²ĥ +Ġinspires +Ġguarantees +Ġcomeça +ĠGrowing +Ġneglig +ĠFrankf +Ġgegeben +ĠÄijầu +Ġendlich +Ġìį¨ +ĠTT +ĠLith +ÏĢα +astern +ĠAzer +Ġlunar +hic +ĠнаÑĢод +Ġnenhum +è·ij +ĠSalvador +ĠProgress +Ġprivileges +ĠëıĻìķĪ +Ġantagon +ĠImpf +Ġdescub +ĠLei +ĠìĥĪë¡ľ +Ñĩе +Ġdólares +ĠMeghan +ĠWire +too +aying +usc +Ġtud +Ġappeals +educ +Ġpane +Ġji +Ġdecks +ĠAlter +Ġå°± +ìĦ¤ +åĪĨéIJĺ +Ġproductions +ĠWILLIAM +Ġimplied +Ġfulfillment +ĠAah +Ġsaja +xus +ĠÎļαι +Ãłs +ucch +око +ĠDiscord +ĠSY +jsk +ĠWallace +unction +Daniel +Ġköt +ijah +Ġmarche +Ġdisgr +Ġmungkin +Ġalma +³µ +Ġextensively +ĠFloren +ĠAllison +ãĤ± +ÙĬÙħ +Ġjuven +ĠRenaissance +Ġfundraising +ĠChaos +Ġparaly +Ġnarrator +Ġecosystems +Ash +Ġmitigation +ĠAujourd +ĠIdee +!, +Ġ½ +Ġlandlord +Ġdefects +Ġacre +ulsive +Ġalgae +pek +Ġemba +ĠRoc +éĽ¢ +ksom +äche +Ġleuk +Ġleveraging +Ġê·¸ëłĩì§Ģ +ĠPalm +Ġäven +Ġlis +ĠInsp +ĠRita +ĠAbb +ithm +Ġsupervision +Ġrevisit +ĠpiÄĻ +Ġeuh +Ġfades +Ġmotto +åį¡ +езж +ĠShim +Ġrelevance +Ġoo +Ġostat +nica +Ġchoix +ĠFaculty +Ġì¤ijìĹIJ +ĠAbove +ĠнеболÑĮÑĪ +Ġsequencing +Ġnutrient +Ġconquered +Ġdigestive +Ġbackdrop +ĠLori +ailable +Game +Ġneglected +omorph +illah +Ġkne +Ġsiitä +Ġworkspace +ĠVenice +ĠKne +Ñīо +ħĢ +ĠHass +Ġvita +Ŀ¼ë©´ +Ġlays +ências +érica +ĠLl +æ±Ĥ +ĠCoca +ĠWHY +èĪŀ +Ġrouting +Ġpermissions +Ġdings +prend +program +Ġcrocod +bral +AAAAAAAA +agit +ĠNä +Ġgekommen +atten +Ġreferenced +Ġpairing +ĠPartner +ĠCoronavirus +ÑĸÑģ +è½ī +Ġ×Ķ×ĵ +ĠespecÃŃfic +arsi +quelle +Ġspontaneous +çĨ± +Ġê²ĥìĿĦ +ĠÐŁÐ¾Ñģле +ĠاÙĦد +ĠShout +Ġнал +Ġdisguise +ĠJord +Ġwee +Ġmiejsc +Ġserum +Ġplaisir +Ġcredible +ĠbÃ¥ +ĠAJ +mares +Ġrods +Ġeran +ãģ¾ãģĤ +Ġpää +ĠUA +ĠUnknown +ĠÙĦÙħ +ĠRabbi +Ġlaat +Ġhairstyle +Ġغ +éģĭ +Ġcach +ĠWriting +оÑĩки +abad +Ġstraighten +--\" +wife +Ġhottest +Ġpunya +ĠFashion +griff +ĠQR +otch +ĠÐľÐ¾Ð¶ÐµÑĤ +Cloud +ĠStrike +ĠHein +Ġ羣çļĦ +Ġlei +ĠFlow +wegs +Ġhabr +åīĽåīĽ +nahme +Ìģ +Ġpleasing +opping +Ġ구ëıħ +Ġdran +Ġbangs +Ġ79 +Ġsket +Ġcaval +ĠMacron +Ġweighted +Ġmuted +Ġnuestras +EEP +Ġmathematic +ĠMRI +agus +Ġtherapies +θε +Ġunpl +Ġcommencer +full +Ġtowels +Ġprue +Ġlicenses +׼×ķ׾ +ĠÐŁÐ¾ÑĩемÑĥ +Ġpointless +Bye +Ġeligibility +Ġscrape +Ġabusive +ĠMant +Ġjeunes +tal +ĠPrincip +ĠOrthodox +Ġmelod +ĠмаÑĤеÑĢи +Ġprosecutor +Ġopioid +ĠÑĥвеÑĢ +ĠBeen +Ġìłijì¢ħ +Ġdynasty +Ġajuda +Ġentreg +Ġweighed +Ġeure +ĠBem +Ġabnormal +82 +ĠJR +ĠAkt +ĠBri +út +Ġstagn +!* +Ġwegen +Ġleaking +ĠWords +ĠMau +Ġvue +ĠLiam +анием +Ġclinicians +ĠPump +Ġförst +?... +Ġautomotive +ĠOwen +zusagen +ĠHundred +Ġdecentralized +Ġbulbs +Ġ׾׼ +Ġprovinces +ĠMilan +81 +kas +Ġëĵ£ +Ġforça +Ġrightly +島 +rÄħ +Ġvenues +Ġwai +Ġpredicting +ĠWiFi +Ġê¶ģê¸Ī +رÙĪ +Ġ×Ķ×ĸ +century +Ġgradual +ĠProbleme +ĠìĹħ +Ġcoping +ĠBrus +Ġpeanuts +irtschaft +Ġзал +ĠTroy +Ġsperm +ĠMitar +ĠTürkiye +grand +¦Ń +Ġ×ŀס +Ġpans +ĠKnowledge +berly +ĠÐķго +Ġdanced +ĠFrost +ĠBurg +Ġbiting +ìłķìĿĦ +meal +Ġheroic +Ġmotherboard +ĠLicht +ãģ£ãģ +llan +айн +ĠÑĢÑıд +Ġà¹Ģภ+onen +irie +Art +rang +νη +Ġnewborn +Ġamis +ĠاÙĪر +Ġsophom +ĠCareful +Ġprospects +ensen +Ġthrill +ĠViá»ĩt +Adam +rition +entric +uden +Ġcertificates +Ġashes +調 +playing +Ġsadece +Ġost +Ġairplanes +ÑĢок +oner +Ġmagnesium +Ġgoddamn +Ġ1972 +ĠSchule +Ġtemat +Ġpartout +à¯Ĥ +Ġinve +ĠScientists +ĠHudson +winning +ceksin +Ġcongressional +oru +Ġropes +вед +Ġmadre +Ġferry +ĠCohen +ĠPred +Ġvagy +ĠбеÑģп +Ġmultim +Ġdrainage +Ġsimulator +giggles +ĠStadium +обÑī +Ġnotices +Ġcrawling +Ġgroupe +åı¸ +ĠktoÅĽ +ĠYoga +Ġmedida +ĠÑħваÑĤ +ĠLite +Ġrav +orama +Ġdiscord +ĠDIRE +Ġteh +ĠNurs +ç²ī +Ġpitched +Ġbarking +ĠCoke +wiad +Ġpopulated +éĻ¤ +pelled +Ġбог +Ġpewno +ĠCube +Ġrecruited +éĢĻ種 +ĠCara +ıģını +imated +ĠÑĪкол +icional +ĠпÑĢоÑĦ +Ġcontamination +Ġúltimos +Ġfearful +Ġelephants +usi +ĠiTunes +ĠSwami +ê¼ +ĠìĦ¤ëªħ +ĠRichards +Ġmagnets +ĠRichtung +ĠLegion +èıľ +Ġkitty +Ġkissed +Ġwatering +Ġcono +ĠPalestine +idir +Ġmaze +Ġfluids +ĠProducer +ĠKrsna +好åķ¦ +laf +Ġ×IJ×ķ +Ġmiesz +ĠXing +ointed +sein +ĠFuk +ĠDepression +ĠDuty +ĠPanther +Ġsund +Ġrefere +Ġexclusion +Ġnaval +ĠWinston +Ġslogan +Ġhypothetical +Ġelevate +ëł¹ +Ġcabeça +ĠGesund +meter +ĠìķĦëĭĪë©´ +Ġcloudy +âĢ¦? +ĠSchritt +ĠJS +ìį +ĠSprings +ĠBatter +·° +Ġtailor +ĠPTSD +ĠGent +ĠbaÄŁ +Ġspatula +Ġcray +ĠLegisl +Ġsú +Ġleve +าม +Ġerad +Ġdong +Ġderm +ĠBanks +icho +åħĪçĶŁ +ĠFranz +ravel +éģĶ +оло +Ġflute +ĠEk +Ġjoyful +Ġchased +ĠLarge +Over +Ġentrepreneurial +Ġconsiders +Ñĥем +opa +Ġdormir +ĠElementary +Ġprzypad +ÑĥÑģка +ĠоÑĩеÑĢ +ugene +Ġtenido +Ġlugares +ë¥ +ĠÑĩаÑģÑĤ +Ġsao +Ġbraid +ĠVere +ĠReich +ĠPoss +Ġinan +wand +ref +Ġmontrer +Ġ1981 +çķª +asında +Ġchrome +ĠTrinity +Ġexploitation +ĠSense +ĠCMS +ĠNoble +ĠìĦłíĥĿ +Ġswelling +electronic +]? +Ġbrushing +Ġliquidity +ĠHook +ĠConnor +ĠAlum +Ġgucken +suite +Ġwiele +Ġbarrels +ĠRegel +ĠMent +ĠTrip +ĠBrush +ĠErik +urate +ÉĻr +ĠCyr +ouble +ĠBecca +Ġpasswords +ű +borg +Ġvendo +ĠClaus +ĠFaz +indest +Ġdeceased +Ġcomparisons +ĠLCD +ĠPork +Ġeventual +Ġpatreon +Ġinability +Ġextinction +Ġì¢ĭìķĦíķĺëĬĶ +ĠÑģоÑģ +aju +Ġ×ij×IJ× +Ġsofort +Ġdestined +ĠRin +Ġmouths +ĠNatürlich +Ġpreserving +Ġlimp +黨 +ocused +инг +Ġexposing +Ġξ +ëį +laugh +Ġhiss +ãģłãģĭãĤī +Ġindie +Ġdetal +ÑĢавÑģÑĤв +Ġtrên +æķ° +Ġogni +Ġsimplemente +Ġ1978 +Ġgoo +Ġ1967 +Ġgenug +hö +Ġhistó +å®Ł +Ġlobster +cendo +Ġteil +Ġallevi +0000 +OLD +Ġpesos +Ġbonuses +Ġami +Ġrevival +ĠHorse +Ġsack +Talk +Ġmulher +ĠпоÑģÑĤоÑıн +ĠHood +Huh +Ġë¶ģ +Ġhyung +ĠMeeting +Ġimporta +Ġì°¾ìķĦ +ĠVern +Ġstripped +Ġrefuses +Ġqualifications +opl +ĢëıĦ +ixÃŃ +Ġdiab +itime +flows +Ġinac +ĠGong +Ġmeaningless +Ġcourageous +Ġmicrobi +azy +hist +Ġvolunteering +VIE +Ġviolated +Ġsympathy +ĠEdit +好åĥı +electric +product +Ġpandemia +Ġgeometric +ĠConvers +gre +Ġglut +isted +ĠاÙĦÙĥ +ĠChain +ĠPresent +ĠYin +ĠÑģог +ĠVlog +Ġìĸ´ë¨¸ +Ġdonn +Ġhitch +ucking +ãģĬãģĦ +wald +risk +Ġhari +ĠKens +ĠIdol +Ġвнимание +Ġtodd +Ġsmashed +Ġinvari +ĠконÑĤÑĢ +Ġautistic +ìŀ¥ëĭĺ +Res +дÑĭ +chau +Ġselv +Ġhätten +ि +Ġexpects +Ïģη +Ġaçık +ĠHTTP +leÅŁ +Ġsweeping +ĠBeta +Ġcounterparts +abile +ĠSims +Cs +Ġrepar +squ +Ġprovincial +Ġshareholders +Ġrunter +Ġgedacht +ĠTeen +Ġgrands +çĶ¢ +agles +Ġrocky +vens +Ġrivals +unal +Ġreacts +ë© +Ġmercury +ĠLuigi +Ġог +ĠJUST +Ġlod +Ġcortex +wig +Ġlakh +ì¤ijìĹIJ +ĠVic +ĠMund +Ġmapped +ĠDell +ĠDruck +Ġlifes +алÑĮное +ividual +adım +Ġatrav +ĠFlug +ĠKlein +ê±°ìķ¼ +หà¸Ļ +Ġappli +ா? +üyorum +ĠинÑĤеÑĢеÑģно +Ġdisinfect +>- +Ġchampagne +Ġkla +opers +Trans +ĠDesert +Ġcultivate +ĠFucking +idelity +ĠÑĤан +Ġincub +Ġtemu +Ġlearner +founder +ĠSyl +ãĤĢ +Ġfato +zier +ĠìĹĨìĿ´ +ĠìĪ¨ +Ġpsycho +ĠÑĤелеÑĦ +Ġregarde +Ġrepresentations +Ġlitigation +Ġspann +ults +bior +è¦ĭãģ¦ +ä¸įå¤ļ +ĠSurvey +ĠLEDs +Ġträ +Ġlên +Ġantioxid +еÑĢом +Ġinduction +Ġfooled +ätzlich +ĠговоÑĢÑıÑĤ +ĠFact +umbai +Ġwiggle +NOUN +Ġdévelopp +ĠClaro +Ġì¸ +ë¬ +ãģªãĤĵãģł +Ġaccumulate +Ġmaintains +ëĦ +ĠFighter +íĨł +Ġmatin +Ġcoupon +Ġstunt +Ġdebuted +å¾ħãģ£ãģ¦ +Ġprag +иваем +73 +Ġexpres +Ġìĺ¤ë¹ł +ĠпеÑĢÑģон +Ġcalculus +Ġabrupt +ĠInspector +ourt +æĸĻ +źniej +intense +Ba +Ġlounge +Ġasthma +ĠHiç +ª» +Ġeditorial +Ġseize +Ġkır +Ġmouve +Ġtierra +Ġtestosterone +Ġrh +ĠKingston +ELLE +ĠRepresentative +Ġ1974 +Ġiba +Ts +Ġsorta +Ġ(?) +ĠتÙĪ +ĠëĤ´ëł¤ +Ġbekommt +Ġspiritually +Ġdistorted +Mad +Ġreim +ánh +ĠOttoman +ĠRelig +ĠEls +Ġretained +ĠLaughs +æĢ» +ĠSAS +ĠколиÑĩеÑģÑĤво +×ķתר +Ġinnovate +Ġkork +ĠÑĢаÑģÑģказÑĭв +ondere +ivi +aye +ounty +ĠполÑĥÑĩаеÑĤÑģÑı +Ġbuns +åħ« +Ġyüzden +Ġsurgeries +Ø£ÙĨ +Ġbankruptcy +welt +Ġsiamo +Ġdarkest +ĠHann +gga +Ġformas +ĠDj +named +Ġshields +ueller +ĠFew +Ġlace +Ġfurious +ĠYU +Ġsocietal +Ġjudgement +ĠDos +Ġjab +laws +Ġreinvent +ĠKatherine +ĠChoi +adows +Ġrans +oden +ĠMidwest +nın +Ġdeport +ĠDip +ç´ħ +Ġatención +ĠCourtney +ividad +ĠÚ©Ûģ +Ġefficacy +ĠBrooks +Ġreferral +ĠконÑĨ +Ġmalicious +Ġkir +ĠGoddess +Ġfunky +Ġinterim +ĠKörper +Ġìĸ¼ë§ +kur +Ġкли +Ġtrucs +gesetz +Ġzug +ĠGlück +ĠMinute +Ġprestigious +Ġniez +Ġconcentrations +лаÑģÑĤи +ĠSis +ĠVitamin +kov +ĠPBS +Ġнее +Ġretailers +Ġconventions +ĠSamantha +Ġproudly +Jordan +ĠJASON +atk +Ġtriste +Ġstär +Ġreiterate +Ġposterior +Ġ1973 +ĠPine +ĠJuliet +Ġpedir +kil +Ġoverlapping +Ġexclude +Ġeconóm +Ġaccepts +ĠSter +決 +Ġìļ´ëıĻ +estab +Ġtug +arg +Ġlivro +اص +Ġseams +Ġburaya +Ġello +ĠTM +ĠPaw +ĠIndex +Exc +Ġinspirational +Ġdunk +è°ģ +akter +Ġconditioner +ĠSalut +ÅĤec +Ġìī½ +ĠÑĥзна +ĠRomeo +fruit +ĠYO +Ġchá»ī +бÑĥ +bons +Ġreproductive +Ġorada +Ġíļ¨ +Ġtentar +Ġmañana +ãĤ¬ +Ġsolvent +Jessica +ĠLegal +Ġtua +Ġsic +ĠEQ +aukee +ìĭľëĭ¤ +ĠÅŀu +Ġadhere +ĠTul +Ġà®Ĩ +Ġtextbooks +ĠFifth +Ġexperi +Ġchic +Ġheap +inely +atra +Two +Ġhelemaal +Ġfren +æݨ +Ġbisher +اش +ĠìĦłìĥĿ +ĠTages +Ġsá»± +Ġbullied +ؤ +Ġbenefited +ĠPreviously +ĠÑįÑĦÑĦ +Ùį +Ġsenate +ĠMorm +ijke +ĠFlu +Ġincorporating +jack +ĠпиÑĤ +Ġimply +Ġhacks +ĠRICH +ĠкваÑĢ +ĠпÑĢекÑĢаÑģ +Ġdependency +Ġìļ© +Ġì±ħ +Ġwährend +Ġsulla +ĠPittsburgh +Ġesempio +¼ë¡ľ +prot +ĠRosen +ĠIndependence +Ġparsley +iegen +Ġhaw +Ġaquell +ĠCAP +ĠÑĢабоÑĤаÑĤÑĮ +ĠCliff +ionar +Ġsecuring +æĪijåĢijçļĦ +νε +Ġutilis +Ġcoule +ĠPing +Ġtrek +Ġfak +Ġenorme +Ġìĭ« +让 +Ġdoubling +ĠнÑĢавиÑĤÑģÑı +Ġhed +hoven +ĠStanding +ĠmÃŃn +ĠJimin +Ġmonarch +Ġcoke +Ġmr +Ġclic +Ãį +Ġimpeachment +Ġdurability +Ġvarios +Ġcommercials +Ġgreetings +ĠRi +ĠAppreci +ìŀĪëĬĶ +Ġrésult +ért +Ġsalute +Ġpoderia +Ġsunrise +veck +Ġreluctant +Ġcommissioner +念 +âte +ĠKenny +ĠSiri +ãĥĥãĥĹ +ĠëĬĺ +ĠEE +Ġunch +кон +ĠاÙĦØ¥ +Ġbelts +Ġhass +ĠмоÑı +Ġdisplaced +Ġabra +ÎŃλ +Ġscratches +Ġcomet +Ġauthorization +ĠLLC +Ġproduk +Ġrehabilitation +åŀ +ÑĸÑĩ +uding +olit +Ġ105 +Ġexpands +Ġaltri +ĠKomment +Ġanf +Pl +ĠMana +fed +Ġbri +Ġora +Gs +ĠGur +uckland +Ġjunction +Ġironic +ĠFeed +Ġprakt +ĠHammer +ĮëıĦ +ĠTracy +çµ± +ĠAside +него +ĠиÑģполÑĮзоваÑĤÑĮ +Ġzaj +Ġequitable +Ġcurb +ĠãģĵãĤĮ +Ġderivatives +Ġpuppies +ĠKenneth +ĠCompl +igram +ĠGarcia +)\" +ĠHarbor +estial +Ġä¾Ĩ +Ġers +æ¹ +Ġunwanted +Ġbelang +аго +emb +dos +ĠìĻľë +ĠBudget +Ġbattling +ØŃت +kok +наÑĩала +Ġplag +Ġcantidad +Ġgrupos +Ġplugins +lerini +ĠимееÑĤ +Ġsozusagen +olics +Ġpueblo +Ġreminis +rän +ĠMorrison +Ġlinha +Ġbreaths +ĠTaste +Ġenfrent +ĠDocker +Ġден +Ġethnicity +Ġwob +Ġsuffers +Ġtransitioning +ĠRange +ÄĻdzy +ĠкаÑĤ +Ġsyner +Ġdonut +Ġprobabilities +ĠOmar +Which +uish +isin +Ġdemos +ĠìłĢ기 +Ġëĺijê°Ļ +Ġедин +Ġcerve +Ġjoka +IAN +Ġkilometer +Ġhorizontally +ĠBhag +Ġ-> +ĠMonitor +Ġknowledgeable +Ġfav +Ġpinned +ĠeBay +icker +Ġìŀłê¹IJë§Į +ĠXiaomi +Ġcapit +Ġnp +Ġ1965 +hoe +Ġnok +ĠSage +ĠнелÑĮзÑı +ĠTow +gam +Ġdicen +ĠSUBSCRIBE +Ġreboot +Ġpaj +Ġë³´ìŬë +Ġthicken +ĠReality +idän +Na +Ġê²ĥìĿĢ +!!) +Ġroutines +Ġодного +Ġexting +Ġì¦Ŀ +Ġsulfur +Ġcarve +Ġasteroid +ĠWarrior +Ġphotographers +Ġpell +Ġcrossover +æĪijçŁ¥éģĵ +Ġhacemos +ĠNej +Ġsettling +Ġirm +ĠBooks +ientôt +Ġespacio +ĠScholars +Ġdoomed +ĠIRS +wohl +Ġsegue +ĠëĪĦê°Ģ +Ġpratic +BT +ĠConsidering +ĠBuffalo +Ġtrainings +Ġgebru +ĠGleich +Ġpirates +Ġenvelop +Ġreopen +imat +Ġtee +Ġsued +feh +Ġ×Ķק +Ġdiets +Ġjuntos +asto +Ġmisunderstood +Ġruim +Ġclassify +ĠпÑĢодÑĥк +Ġinse +Ġillustrated +Ġcorrosion +Ġaccred +ĠAuntie +ĠпÑĢивеÑĤ +ĠLIVE +Ġrek +Ġreceipt +åĪ°åºķ +ĠBarbie +ĠSnake +turn +Jeff +ãģĬãģĬ +ķĦ +VOICEOVER +coll +Ġrunners +ìłľë +osos +moon +Ġkeynote +ĠInstit +SPEAK +Ġplugs +Ġcurv +ĠYuri +ĠTheres +ĠPs +ĠμÏĢο +Ġconverter +Ġrefine +Ġbadass +Ġοι +Ġregen +azzi +ÙĬÙģ +Ġseized +Ġiçer +ilee +Ġupstream +Ġbuds +Ġpim +Ġíķĺ루 +Ġalluded +Ġthemed +Ġconsisting +Ġbons +unuz +ĠпÑĢовод +ĠLovely +à¥ĭ +Ġparach +ĠStaats +éļĬ +Ġselective +Ġfase +ĠGeorget +Ġcocaine +Ġreproduction +ĠLara +ĠLD +Ġgh +Jon +ĠlÃ¥ +ĠëijIJë +Ġtyped +ĠBana +ëĵľë +Ġsavory +ĠZomb +standen +Ġpedestrian +Ġdifférents +Ġìĭ¸ +èī¯ +Ġcomplained +ç¦ı +ĠÐļÑĤо +Ġ׾פ +aliÅĽmy +Ġmortar +Ġverdict +Ġsuficiente +ĠMillion +mittel +inals +ĠاÙĦØ® +аÑİÑģÑĮ +ĠmiÄĻdzy +ĠOle +Ġinvert +czyÄĩ +озможно +starter +Ġauditor +ĠScout +chien +ĠSverige +uffled +Ġzehn +ĠAuckland +Ġargent +Ġ1976 +ĠHoe +Ġbothers +Ġsocialist +Ġpliers +Ġemergen +ĠXP +еÑĢов +More +ĠLevi +ĠAnders +ibilidad +ĠParents +Ġinduced +ìĸ´ì¤ +Ġbalances +ĠвÑĭÑĪ +Ġsubmarine +Start +Ġdries +Ġvolver +Ġticking +cott +Ġfaj +prés +ĠSabb +ĠзаÑĩ +ĠпокÑĥп +Ġbaptized +ĠBrilliant +ĠÐijог +Ġmots +bits +Ġlattice +æĪijè·Łä½ł +Ġcoriander +Ġresidency +ync +Ġpierwszy +ĠKnock +ĠZap +ĠÐķв +견 +å°ıå¿ĥ +Ġuneven +ĠJas +odor +ç¿Ĵ +74 +ĠSite +Ġaconteceu +ympt +Ġtrilogy +Ġlantern +ĠZucker +vari +welling +ĠPotato +gomery +Ġreacted +ĠChron +Ġjede +beeld +Ġtwent +Ġlact +æ¨Ĥ +Ġrése +Ġrelent +Ġfurnace +Ġwidget +Ġearthquakes +ĠAdjust +ilit +ĠØ£ÙĪ +Ġhearings +Ġdefendant +irsiniz +Ġbask +cja +ľ¨ +Ġrifles +Ġinstal +ĠForgive +pical +ĠÐŀÑĩенÑĮ +Ġpetites +Ġhp +Ġrenowned +ĠInn +Ġ주ìĦ¸ìļĶ +Ġemphasized +éĹ®é¢ĺ +ĠìŀĪì£ł +Ġê²ĥìľ¼ë¡ľ +ãĤĨ +Åĵ +gili +Dave +Ġexhausting +ÅĤug +Ġschema +μά +cycl +Ġautant +Ġparcel +Ġmateria +ĠBerry +ĠÑģами +Ġextracted +ĠSaying +ismatic +ĠпопÑĢоб +Ġneuron +graph +ľë©´ +Ġenclosure +ĠJohann +Ġaftermath +ÑĤоб +Ġuży +Ġsamp +360 +ĠMei +Ġtaco +Ġreceptors +Ġpunches +ĠHoje +ĠÙĩÙĨا +=\"# +ĠAngular +Ġmusique +Ġrol +Ġñ +sterreich +Ġclam +ĠTreasury +chemical +Ġapar +Ġappend +Ġforbid +ĠHamburg +аков +Ġê¸Ī +ilda +Ġpreparations +ĠmogÄħ +Ġcamino +Eric +ĠBlind +èĪĩ +å¹´çļĦ +ĠDiscovery +ì¸ł +çĪ¶ +Ġinterpreter +Ġbred +ĠPsalm +Ġdefended +ìī¬ +ĠErfahr +ĠPeach +Ġmoons +ĠOst +Ġspécial +Ġarriver +ĠWis +uci +Ġrobotics +IVE +Ġsiege +arla +Ġseparates +ĠTC +íı° +quisite +Ġparentheses +ике +ç«Ļ +Ġtrous +建 +ĠÑģилÑĮ +Ġbeers +ĠплаÑĤ +ãģĻãģĶãģĦ +Ġsola +Ġdès +mingham +ikte +Ġoops +Ġtwitch +å°ĩ +ÏĪ +ĠShouldn +uvre +Ġleer +criptions +Ġeyeshadow +ĠGuo +ĠPowell +Ġsupuesto +Ġana +rals +ĠMontreal +Ġsurfing +ĠÐŁÐµÑĢв +×ŀ×ķ +Ġmilliseconds +Ġsuburbs +Ġplaneta +ÑĥÑĪка +hrlich +ĠHY +ĠسÛĴ +ĠMM +ĠEff +åı¯æĦĽ +ĠHS +anson +Ġì§ģìłij +Ġsuo +Ġdeploying +Ġkunt +tering +Ġerect +ìŀ¥ìĿ´ +ĠìĿĮìĭĿ +Ġspecimen +!... +æĪij說 +Ġligne +Ġkonst +adequ +Ġìĥģíĥľ +Ġaccessed +ĠPole +kill +Ġë²Ħë +Ġauthenticity +Ġappelle +ulle +Ġrevision +Ġgoats +гли +Ġpau +ĠRanger +ĠImag +author +Ġeve +ĠMessenger +Ġnay +Ġwholes +ätte +Ġonwards +ĠDepois +ĠíijľíĺĦ +ĠSARS +Ġwszystkich +Ġdestru +umbing +Ġcompatibility +Ġmisinformation +odore +ĠFavor +eko +ıĮ +waukee +ĠTeaching +ĠKO +Ġbetting +Ġquests +Ġvivre +ĠмÑĥзÑĭ +Ġsaga +Ġswell +Ġgehe +æĢİ麼樣 +ĠоÑĢганиз +Ġgide +ĠGross +Ġdalej +Ġclaws +á»Ļc +Ġprejudice +Ġinsign +ihood +Ġpled +Ġdónde +ĠPolitical +Ġpremises +undert +عت +onnen +Ġespaço +Ġfé +ĠHarrison +ĠCensus +Ġcardio +Ġdiy +Ġmilieu +Ġjournée +ĠRelease +NIE +ĠMuk +idée +á»įi +Ġiçinde +ŀĻ +Ġresonate +Ġmoles +ĠFlying +ĠGloria +ĠPastor +ĠArena +好ä¸į好 +NON +олов +ĠallÃŃ +omat +ìĸ´ëıĦ +ĠcaracterÃŃst +Ġdeclining +ÑĸÑı +anco +ĠInform +Ġbargain +Ġbushes +ĠNaturally +Ġrechts +ĠTensor +ĠPatricia +Ġprincipio +ĠMumbai +Ġwomb +Ġnostra +Ġdilemma +Ġirgendwann +Ġ1964 +ĠenergÃŃa +ĠнаÑĢ +Ġsegregation +ĠAthlet +Ġ», +Ġyeni +ĠSeit +Ġvenom +Ġdakika +ĠëıĮë +ĠÃīl +Ġfus +ĠMog +¦½ëĭĪëĭ¤ +Ġremar +ĠTeddy +Ġbreasts +icans +æĶ¶çľĭ +kap +ĠhÆ¡n +ĠJP +ãĥ³ãĤ¿ +Ġresurrect +ĠìĿ¸ë +herical +Ġfotograf +ĠJosé +Ġlivelihood +Ġbibli +teri +Ġvorstellen +ĠAAA +Ġassessing +YA +Ġsplend +Ġexcav +Ġbaptism +yll +wow +Mac +Ġplastics +teokbokki +Ġintéressant +Ġcommanded +Ġfamously +ĠÐĺли +ĠManuel +Ġsouthwest +Ġdeformation +ÃŃculo +ĠнаÑħодиÑĤÑģÑı +ĠPatter +degree +ĠczÄĻsto +\"- +Ġìħĭ +Ġmanger +ĠTrustee +Ģ리 +Ġpuntos +ivable +Ġvolatile +ĠëĬIJ +Ġinstability +Ġciel +ciÄħ +Ġpurity +ноÑģÑĤ +Sil +edar +åĻ¨ +NOUNCER +Ġspelled +GER +Ġsanctuary +Ġaccelerating +Ġscout +ĠпÑĢев +fahren +ãģĵãģ¡ãĤī +ĠëĤĺìĺ¨ +ĠpoczÄħt +ĠMeu +kaar +³´ê³ł +akra +Down +ĠÃĦr +ĠElite +Ġallons +Ġmayonnaise +ĠSustain +prisingly +Ġsupervis +Ġê·¸ëłĩì£ł +Ġunemployed +Ġfreshly +Ġ×ŀ×¢ +ĠDh +Ġtackling +Ġogr +Ġì´Īë +ãĤĪãĤį +Ġloft +arah +ĠAirl +ĠDir +ĠÐľÐ¾Ð¶Ð½Ð¾ +Ġbooking +ĠCRA +Ġhttps +Ġchoke +Ġgown +Ġnoite +Ġzac +istol +Ġsecre +Ġresembles +Ġcuad +ìĤ¬ê°Ģ +show +Ġblanc +Ġagu +ĠPrint +asted +ĠWeather +ipl +Ġobscure +Ġconte +oughs +); +ĠDame +ä¸Ģ缴 +Ġclarification +Ġintimacy +Ġuphold +ĠMirror +Ġwagon +xide +Ġclog +apper +ĠImmediately +úde +Ġtouchdown +Ġrooft +аÑĪа +Ġçıkt +Ġlaisser +ĠUnreal +ensitive +Ġ123 +Ġplaster +Ġducks +Ġetme +Ġbishop +brevi +Ġbic +ä¸ĭåİ» +Ġruntime +Ġambitions +маÑĤ +ĠWein +ĠMari +ĠíĬ¸ë +Ġresolver +ĠngÃły +ĠRise +ãĤĪãģĨãģ« +ĠCrus +Ġmerchandise +Ġeli +Ġstatewide +Ġowl +éģł +æĶ¹ +Ġtwisting +Ġcontaminated +ĠCommerce +hythm +ĠÃĪ +Ġìĭ¤ë +Ġmusste +uir +Ġsums +ĠSomewhere +ãĥİ +Ġkami +Ġaired +ĠANDREW +Ġêº +Ġviendo +Ġantibody +Ġabsolument +Ġprotesters +ĠQuébec +stadt +Shaun +Ġchambers +ĠWear +ĠEffects +Ġhazards +Ġnei +Ġcorazón +Ġá¼ +ĠSG +Ķ© +ĠìĹŃìĭľ +Ġcomfy +ĠCody +Ġpensando +Ġganska +ĠAcross +öllig +abyte +Ġwedge +Ġkalian +Ġsigue +endes +ĠGroÃŁ +Ġutiliser +Ġflown +аниÑİ +Ġlevar +restrial +Ġillustrations +Ġaslında +BLEEP +ĠдоÑģÑĤ +Ġturret +Ġsuitcase +ziÄĻki +Ġsketches +Ġacred +ĠRei +Ġtsun +ĠSag +Ġthirds +ĠKIRBY +rai +Ġhumanos +Ġrecommends +Ġextraordinarily +Ġcommencement +KN +opez +Ġ×ijש +Ġlethal +ĠEstamos +Ġinspector +ĠSeok +eun +Ġoffshore +Ġgettin +years +ĠSilence +ĠNatur +upun +Ġtrzy +Ġnoget +Ġhamburger +ĠPraise +énd +Ġ1971 +ylie +krit +ĠìĥĿê°ģìĿ´ +çļ® +Ġmomentos +Ġesté +Ġdissemin +Ġgigs +Ġdesaf +Ġavis +ĠZoo +ĠìķĬìĿĢ +häng +åı¥ +hake +ĠBism +Ġrethink +ĠMalcolm +Ġidentifies +lower +ixel +ĠtvÃ¥ +ked +ierz +Ġöffentlich +Ġproclaim +soon +lol +Ġloi +Ġbitten +rollo +Ġsermon +Ġesqu +Ġjackets +Ġgráfic +ĠпоказÑĭв +Ġcabeza +chodzi +Ġpelvis +Ġnostalgia +Ġbrew +Ġshortcuts +ĠAdemás +Ġsuperficial +åħ©åĢĭ +Ġboca +ĠæĪijæĺ¯ +imentos +åĽłä¸º +Ġsprouts +é£Ľ +ĠJonas +ĠFlorence +static +daughter +*) +ÅĤby +fashion +ĠGinger +Ġ매ë +Ġhustle +utos +ĠÑĤÑıж +ĠLös +ש×Ļ×Ŀ +anych +tuber +Ġtidy +Ġfrontal +Ġwhiskey +Ġhumid +ĠÎŁ +Ġridge +Ġmarin +Ġbientôt +ĠCarrie +chw +Ġtahun +ĠErgeb +FR +Ġìłķë¶Ģ +ĠSoldier +Ġenlightenment +Ġexamining +ĠNotre +Ġeram +ĠSunny +Ġlayered +ĠDazu +rades +好åIJĥ +ĠнаÑĪей +Ġtimber +Ġmanners +ĠBirmingham +Ġminiature +ometers +Ġfiller +ĠRip +ĠKomb +owner +ì¿ +idian +Ġdemás +ĠÙĪت +Ġprecautions +Ġgoverno +zelf +ĠComplete +å¸ĥ +ĠPhantom +ãģ¾ãģļ +Ġнез +ĠкаÑĢÑĤ +ĠAntwort +ĠPfizer +ĠFranco +ĠwÅĤ +Ġfrig +esper +Ġkale +Ġfilmmaker +Ġkurt +Ġinvalid +å±Ģ +arella +Äĥng +ramento +Ġnutritional +Ġdictators +Ġafin +Ġfuzzy +ĠGina +ót +ĠExtremadura +Ġdemonstrations +ĠMontgomery +íķ´ìĦ¤ +ĠGandhi +ãĥĿ +ç½® +Ġreunion +ĠjakiÅĽ +ĠZug +OUGH +lifting +Ġಠ+á¹Ľá¹£ +eb +ĠWOW +ĠShiva +ometry +Ġwildly +Ġtended +Ġmegap +ì²ĺ +Ġnause +Ġgerek +ãĥĭ +ĠMarcel +Ġneste +خر +Ġfeh +åĨħ +suspenseful +ĠWrestle +ĠPalestinians +ĠGORD +iyet +ĠÑĢади +Ġversuchen +Ġtransistor +ĠÐŁÑĢоÑģÑĤо +ĠпонÑĢав +Ġrhyme +ĠVermont +platz +è®° +ĠÄ°ÅŁte +ĠHag +ĠÐĺм +ĠÑĢаÑģÑģказ +Ġmetros +ĠInfinity +wolf +ibal +ftig +ĠÚĨ +Ġíĺ¹ìĭľ +Ġoggi +Ġdisposit +ĠпÑĢил +ĠвÑĭпол +Ġthôi +ĠKENN +Ġhanding +actus +Ġtacos +Ġformerly +ĠCorinthians +ãģ«ãģ¯ +ÑĨÑĸÑĹ +Ġpadre +Ġcongregation +æij +fert +Ġsubir +aiser +qua +araoh +ĠCurry +ĠìķĬëĬĶ +елÑİ +Ġfuss +Ġbooty +Ġlows +Ġhommes +ĠMH +ĠDisneyland +went +Ġresidue +Ġbeeping +è¼ķ +ätta +Ġmould +ĠProjekt +stalk +Ġartifact +ĠAntrag +ĠAMD +ĠCrypt +Ġë©Ķ +ĠFelipe +ĠCOB +elu +Ġselfies +ĠSanti +chutz +ĠУкÑĢаÑĹ +gesamt +Ġflock +jaz +plain +Ġwrinkles +Ġreais +Ġpaljon +Ġempowerment +Ġattendees +ppa +Ġneden +онÑĭ +Ġtimeframe +ĠCherry +Ġidée +Ġgag +Ġdonkey +Ġông +ĠHare +éļĽ +ĠKara +Ġacompan +places +imientos +ĠHamm +би +uben +iliyor +Ġthirst +Ġkry +ĠGeorgetown +׳×Ķ +Ġorch +Ġheartbeat +Ġtransformations +estones +ĠKH +Ġcartoons +Ġanci +Ġworthless +Ġtailored +pu +Americans +Ġpiles +ĠMonkey +Ġbasin +ĠTemper +ĠPaint +Ġpunching +Ġbaik +ĠOakland +vre +ÅŁallah +ydd +Ġcasually +odu +Ġcoded +ĠNorwegian +ĠVince +Ġpremature +ĠPromise +екÑģÑĤ +Ġdevastated +ĠPremium +ĠParam +ĠÃĸyle +umuz +PO +rators +Ġlamps +Ġterritorial +Ġbackbone +listed +DY +ĠاÙĦر +Ġpursued +ĠCommons +Ġ곡 +locks +edor +Ġconceived +gere +Ġdisappearing +ĠSull +ĠìĹ°ë +Ġhoffe +Ġdetox +íĶĮ +Ġretir +ĠëģĿëĤ +Ġpergunta +ĠBOY +ç²¾ +Ġpenn +æĿ¥äºĨ +hés +hon +Ġcatastrophic +Ġaust +Ġtorso +Ġìĸ´ëĬIJ +ĠìĤ¬ëŀĮëĵ¤ìĿ´ +Ġmarvelous +ĠHarley +achine +Ġtiế +itto +ĠIÃŃm +ylon +Ġshutdown +.'' +Ġapologies +ĠCommunication +ĠговоÑĢÑİ +ãģĤãĥ¼ +âĦ¢ +ÃŃveis +acun +Ġretaining +Ġcontradiction +ĠADAM +COM +Bryan +ĠMonsieur +Ġadapting +ШÐIJ +ĠScr +ändert +Ġplaus +ä»Ĭ天çļĦ +Ġonset +Ġassistants +Ġvalves +Ġscatter +ĠRust +awia +Ġreadiness +Ġpais +Ġbible +Ġambiente +ĠамеÑĢик +Ġuncond +Ġkalk +åĬ¨ +Ġmoc +unn +Ġactu +Ġhumming +issimo +ĠPatrol +gow +ãĥ¤ +ĠTHEY +ĠBoden +ĠBie +Ġreel +ĠÑĥÑģлов +Ġendeavor +ĠPeriod +ustomed +mals +alon +Box +ĠÏĥαÏĤ +Ġomdat +Ġaltre +ĠHeh +kad +Ġprotector +Ġdominance +odynamic +Ġcommunicated +kö +Ġpredecessor +ĠLuk +ĠFlower +Ġãģ© +poque +ÑĤиÑĢов +Ġretrospect +Ġdecisive +Ġexempel +{\\ +ĠRück +rite +ĠZeus +Ġcalorie +Ġattractions +ĠHinter +Ġuhm +ĠíĮIJ +Ġrulers +Ġdiscouraged +Ġacontecer +Ġaccents +ĠOptim +ĠAlg +kids +2021 +ĠLindsay +Ġfilmmakers +prowad +Ġterug +ëĭ´ +ĠSommer +2018 +Ġborrowing +ĠTransfer +ноп +arias +Ġheadphone +ì¼ľ +Ġtranslating +Ġaufge +à®ªà®Ł +weis +avant +paid +baby +Ġtoughest +Ġrepeats +ĠTeresa +Lord +Ġacabar +ĠRide +dir +Ġleng +Ġdwa +Ġheadaches +Ġnữa +ĠнаÑģÑĤоÑıÑī +Ġboils +Ġlonging +rias +ório +ĠParadise +ĠSeñor +erdem +Ġreinst +Ġsalaries +Ġinsecurity +ÅĤoÅĽci +ĠабÑģолÑİÑĤно +inken +ĠEddy +udos +Ġdummy +Ðļак +six +Ġinbox +ẩ +People +á»ĵng +Ġorganizers +find +Ġül +ĠCOM +ża +weile +Commentary +íĬ¸ë¥¼ +ĠMittel +kus +èĽĭ +न +iral +Ġgarment +ικά +Ġstool +payers +Ġshimmer +ĠOllie +ĠJeżeli +è¿ĺæľī +Ġ1977 +Ġjeux +Ġextinct +ĠTransportation +ĠMaker +Ġjohn +Ġrichest +Ġtraumat +Ġliegen +´ë¥¼ +è¿ĻéĩĮ +Ġunrest +ĠStraw +æĭľæĭľ +Ġcoma +ĠKristen +ĠÐļонеÑĩно +ĠBryce +ĠÑıкÑĸ +Ġpearls +ĠпонимаÑİ +Ġadditions +Ġasympt +ĠменÑĮÑĪе +Ġscans +Child +ĠHide +кÑĥÑİ +etas +Ġdank +Ġpleas +Ġessays +Ġjets +åħĴ +Ġвед +Ġpositives +hof +-) +zzo +Ġstarters +Ġsmiled +Ġ1944 +quiera +Ġrok +Ġpuesto +Nico +Ġsimulations +Ġච+Ġintrigued +ĠOverwatch +åĸĤ +sigh +bai +Ġë§IJê³ł +idé +Ġcrabs +áºŃp +ĠIraqi +ìĿ´ë¥¼ +ÑĤÑı +ĠSophia +ĠDNS +Ġönemli +ĠLuo +Ŀ¤ +ĠCounsel +ligen +анÑĮÑĪе +Ġtrumpet +Ġdapat +ĠJM +ĠEVERY +Ġå°įä¸įå°į +夢 +ĠLayer +Ġcô +нал +ĠJoo +ĠHack +Ġsunt +ĠLeonard +ĠFirebase +änger +Ġexploding +voy +Ġì¦IJ +ĠÑģеÑĢÑĮ +Ġseverity +Ġbestimm +çµIJæŀľ +Ġtiring +Ġprocurement +Ġdiplomacy +Ġdecorative +ĠÙĬا +Ġpenetration +Õ« +Ġoutright +ENE +ĠUni +odles +Ġzeros +Ġdelightful +jm +Ġdopo +没äºĭ +Ġpositivity +ĠVISTA +ĠResource +íĥĢë +ÑĪие +Carl +Ġpiping +Ġchopping +ĠGanze +üss +ĠAo +Ġshattered +ĠDetective +Ġundoubtedly +Ġhalluc +Ġench +ÑĭÑĩно +ÑĥлÑıÑĢ +isesti +Ġpedals +Ġdurum +¤íĶ +laimer +Ġpropre +Cu +Ġtranslator +ĠcaÅĤ +Ġ그걸 +ĠcaÅĤy +UA +Ġrevised +Ġподоб +ĠArticle +ĠHaiti +ĠÃĵ +ĠCtrl +Ġrozm +lait +Ġletzte +ispering +display +Ġaluminium +Ġpalabras +Ġconocer +Ġzitten +Ġdirig +åıªæľī +Ġbrainstorm +Ġwifi +ĠParticip +Ġviewpoint +ĠQuan +Ġhierarch +Welcome +対 +Ġoffen +ĠRecovery +gano +Would +Ġrepro +Ġperceptions +Ġdemasi +ĠBangladesh +ĠIncredible +Ġletzt +Ġbehaving +Ġastonishing +ĠâĨ +ĠëĤ¨ìŀIJ +èµ°äºĨ +ãĥĶ +ĠGORDON +CAR +?!\" +ĠPrest +Ġë§ŀìķĦìļĶ +Ġtand +Ġlash +çĬ +ificant +Ġintoler +ĠгеÑĢо +Ġteu +aso +ĠÑģовеÑĤ +Ġtravelers +ĠSynd +ĠвеÑĢÑģ +Fonda +adı +Ġtranscription +Ġtitanium +Ġtwists +Ġgearbox +ensation +fat +Coll +ĠCommonwealth +zon +ĠPolizei +ĠAPPLAUSE +fry +ĠJuda +esteem +Ġsock +ĠJugend +ĠкÑģÑĤаÑĤи +ĠDro +Ġprochaine +ãĥ¼ãĥ« +Ġliksom +ĠEnergie +ĠMarina +Ġ230 +Ġê°ĢìĦľ +umping +Ġlone +ç´ļ +Ġfonts +Ġbusinessman +Ġply +Ġdoe +grid +ĠMilwaukee +ĠEden +!\". +ĠÛĮÛģ +ogens +Ġteaser +Ġquién +Ġincentiv +govern +Ġchildcare +Ġsneakers +Ġimprisoned +® +иÑĤеÑģÑĮ +anbul +Ġregain +Ġtranquil +Redner +鼨 +IFA +Ġideological +ĠmayorÃŃa +Ġbureau +eterm +ĠDID +ìĬ· +Ġwaving +Ġbeb +Ġár +Ġкв +Ġenvoy +anut +икÑĥ +ĠEnvironment +ĠAssass +ãĤĵãģ§ +ĠBread +ĠТÑĥÑĤ +Ġstaircase +ĠDisease +Ġaucun +ĠëĭĪ +Ġconfrontation +Ġ1941 +Ġirony +Ġworsh +ãĤĮãĤĭ +Ġfick +ĠNaomi +Ġbackside +ieux +Kap +Ġvedere +Ġlengthy +Ġbreaker +ĠRolle +Ġpredator +Ġnossos +Ġadvertise +è³ĩ +ÑĢоде +Rednerwechsel +reten +Ġcollectors +ıģımız +Ġtrig +Ġaxes +inters +Ġpenalties +ĠOsman +ĠJenna +Ġflakes +Ġtrainers +Ġstunned +ĠScroll +ĠPip +ĠнаÑģÑĤ +ĠnhÃł +ĠSmack +ẫn +ratos +ĠÑĢабоÑĤÑĭ +Ġucz +ĠLemon +ĠSind +Ġpsychic +ĠAbg +Ġmammals +Ġimmersive +Ġbots +Ġverschiedene +Ġgeral +Ġfollower +Ġä»ĸ +Ġseguridad +Ġimmersed +feito +cross +Ġöld +íĥĦ +Ġãģĵãģ® +Ġ×Ķ×Ļ×IJ +ĠJian +Ġbiliyor +area +Ġkaf +Ġgodt +çĽ¸ä¿¡ +Ġë°©ìĨ¡ +Ġdetriment +æ¥ļ +Ñĸл +ĠÄijâu +Ġchloride +øre +lei +Ġmonte +Ġdifférentes +à¯ģ. +Ġcaregivers +Ġinadequ +Ġfarewell +ĠÑĤипа +ontec +ĠEph +HHH +ĠTodos +ĠСШÐIJ +Ġtrov +Ġlige +Ġcông +ĠCiv +Ġcapaz +ĠVallahi +Ġqueste +Ġreplica +سب +zna +ĠÑģлÑĥж +ĠPT +wave +ieni +Ġrelied +develop +Ġdeme +ĠAman +Ġ[...] +Ġcompliments +uais +ĠíĮ¨ +Ġsmelling +Ġdadurch +ÙĪت +Ġoranges +Ġлай +Ġstabilization +åĢį +ãĤĮãģŁ +楽 +Ġappliances +Ġhm +ĥIJë©´ +odynamics +ĠciÄĻ +ĠCott +MON +ĠMang +æĶ¯æĮģ +Ġallerdings +ική +shots +Ġts +ĠGör +ĠCHAR +Ġ:( +Ġwrath +Ġfique +Ġführen +Ġtestament +Ġ^^ +á¹Ľá¹£á¹ĩa +ALD +Ġtexto +ĠDogs +Ġsib +Ġpathetic +ocks +Ġradically +ĠMORE +ĠJAMES +Ġingl +ĠTechnical +Ġporch +ĠUT +ĠобÑıзаÑĤелÑĮно +Ġrenewal +Ġaesthetics +ikum +Ġbeverage +dern +Ġpredictive +Ġchuy +ĠRegarding +ĠForward +ĠÙĪÙĦ +Ġcontextual +Ġdwarf +Ġprehe +Ġgoverned +ħĦ +Ġtrabalhar +Ġnegócio +ĠболÑĮÑĪой +еÑĩаÑĤ +ĠдÑĥÑħ +Ġfloods +Ġbowling +ĠOB +ĠHär +Ġgrading +주ëĬĶ +Ġgars +dling +Ġrak +ëĪ +creat +ĠÑīе +Ġneighbours +food +Query +Ġheroin +iceps +ĠKinda +NET +Ġmari +Ġimitate +Ġachter +Ġsettlements +rare +cciones +Ġëĵľ +Ġfik +itung +ĠмакÑģим +Ġelf +Ġdalla +ĠPolsce +ĠPul +ЧÑĤо +ĠMorgen +ØŃÙħ +Ġsupremacy +Ġkys +ĠHurricane +ĠGTA +ĠFeh +Ġfinalmente +mund +ĠKrie +époque +ĠTucker +ITT +Ġlur +Ġdipping +äv +Ġeerste +ĠFlint +bildung +ูà¹ī +Ġtoim +Ġpracy +Ġtransforms +Ġspeeding +Ġpresenter +Ġfellows +filled +ieza +Ġadvising +ĠInterview +игÑĢ +wehr +ĠDante +pture +Ī문 +¯¸ë +IJIJ +ĠCounter +Ġcrist +Ġì§ľ +Ġjeune +ĠÑģÑĤÑĢаÑĪ +ĠmieÄĩ +Ġtutor +Ġmasala +Ġpowdered +Ġnau +ĠFrederick +Ġbilling +ĠEisen +ĠдобÑĢ +Ġmest +æ½ +Ġsnipp +Ġmono +ĠAlo +ĠMercy +érience +Ġcasualties +ĠANNOUNCER +ä»İ +Ġtocar +Ġbacterial +Ho +Ġstreak +ĠJENN +Ġplast +Ñģлед +Ġreapp +Ġpaycheck +Ġminers +habt +ĠJap +нÑĥÑĤ +Ġredemption +Ġquir +hnlich +Ġaccumulation +Ġshove +Ġadrenaline +Make +ĠHern +ossing +ĠVil +ubby +hertz +breaks +Ġspur +ĠDaha +USTIN +Ġcontinuer +ĠSaul +ãģ®ãģ¯ +ĠíıŃ +ĠëIJĺë©´ +Ġë§IJìĶĢ +Ġож +Ġsuspects +Ġlaquelle +ĠMuchas +Ġvöllig +ulen +Ġimpres +Ġlobb +enee +Ġнаж +Ta +Ġréalité +ĠRex +Ġharvesting +Ġestr +æ¶ +ospace +OSS +Ġdisturbance +assic +ĠIsab +Ġdécouv +ĠHampshire +Ġornament +Ġluôn +ĠUW +ĠjÄħ +éĤ£ä¹Ī +Ġrespecto +Ġcomunidad +Ġcomigo +agna +Ġintrinsic +ĠAlumni +Ġsesleri +Ġestimation +âĢĶâĢĶ +Ġproduit +ãĢĤãĢį +ĠвÑĢ +Ġwhirl +Ġacces +çu +Ġvariability +Ġvodka +itsu +Ġinternships +Ġallocate +RR +íĽĪ +Ġinstructional +tant +Ġà®ħத +Ġinvites +Ġhak +Ġscares +Ġeclipse +пов +колÑĮ +ativas +Ġstabbed +ĠDOM +ä¸įåĪ° +roots +ĠPicture +íĺ¼ +ĠCHA +iec +ıı +hanol +Ġmisunderstand +Ray +Ġroadmap +ocumented +izione +ĠOlive +rift +Ġ×Ķ׳ +æ¯į +lest +;; +ĠEA +éľĢè¦ģ +одÑĥ +Ġhobbies +Ġburial +ãģ«ãģ¡ãģ¯ +Ф +lege +ĠHJ +Ġobjection +ĠãģŃ +ctory +Ġincremental +Ġgymn +Ġepidemi +ÑģÑĭл +Ãij +Ġadvancement +Ġparch +News +Ġayr +лам +Ġ׾ש +Ġdiploma +ãģ¡ãĤĥãĤĵ +Ġrobbed +Only +Ġincur +Ġchanting +Ġíķ´ëıĦ +Ġriches +ĠCarmen +Ġnostro +λÎŃ +ĠPowder +à¹Ģห +ĠìŀĪìľ¼ë©´ +Ġgerçekten +ĠPikachu +емон +OLL +Ġplanetary +Ġslows +Ġclockwise +alion +ĠìĮ +Ġvern +Ġhomme +Ġendpoint +Ġinnocence +Ġelementos +Ġsophomore +Ġnotions +ĠCouldn +pur +Ġzat +Ġobsess +Ġmotivo +ĠKub +ĠDrug +Ant +ĠPlayers +ĠHumans +Ġmelee +ĠWildlife +ĠVP +Ġvolcanic +Ġcomin +ĠGuang +ĠÏĦιÏĤ +ĠоÑģобенно +ĠSize +Listen +ĠAaa +appro +Ġbarbar +ĠParkinson +нÑıÑĤÑĮ +åį° +Ġunderestimate +Ġsubstitution +Ġcosmetic +ä¸ĭ次 +Ġwillen +Ġbeide +anni +Ġconditioned +ĠDebbie +Ġisto +ĠEdwards +ìĽĮìļĶ +ĠÑĤов +Ġabbrevi +ĠMün +ĠPrinc +ĠLiang +Ġstink +Ġradioactive +ãģĨãĤı +Ġacontec +Ġuncon +ĠTurbo +ãģIJ +Ġkisses +æĺ¯ä»Ģ麼 +еÑĤÑĢов +Ġfrontier +ĠSpy +ĠBelarus +ĠCBS +á»Ĺ +amoto +íķľëį° +ĠÑģÑĤÑĢо +ĠEnfin +Ġbreadth +éĺ² +ĠCafe +ĠDafür +ĠBour +aras +Ġblueprint +anı +Ġconstants +Ġattacker +ĠFormula +zaÄĩ +Ġsowie +Ġeyebrow +obook +Ġsetzen +第ä¸ī +onsider +awning +Ġsöyleye +Ġinvaded +Ġpronouns +Ġdobry +Si +ĠХоÑĤ +Ġvolleyball +Ġlament +isches +arme +api +ĠWiki +лиÑĪ +Ġkasih +Ġpess +ĠÑĦоÑĤ +ĠSul +å¾· +Ġpseudo +Ġmemo +ĠìĹ°ìĬµ +ĠдоллаÑĢов +ĠпеÑĢем +ĠReach +miral +alted +Ġstatut +reading +Ġsöyled +ĠLindsey +ĠAhmad +ë¶Ģë +ĠСегоднÑı +Ġprzygot +Ġhyster +URE +ĠNeigh +Reporter +ĠBunu +ĠTreaty +ĠRank +ĠFame +inished +Ġgeared +Ġcompose +odia +ĠLon +ĠjesteÅĽmy +ĠDIRECTOR +Ġelkaar +ĠViel +×IJש +ynthia +並 +Ġmère +ĠTomato +Ġexatamente +niÄĻ +ĠFrei +ĠDif +Ġopenings +Ġgraphical +ĠÑĥдоб +ĠвÑģп +ĠWeekly +ева +Ġhangs +Ġunsafe +Ġemblem +ĠKolleginnen +alay +Ġksi +Ġhides +Ġolmay +Ġentste +Ġarthritis +ÃŁerdem +Ġbinnen +Ġlistens +ĠHess +åĨįä¾Ĩ +ĠLouise +lden +енÑģ +ĠVersion +ĠAgriculture +ìĬ¤ë¥¼ +ман +ëĦ¤ìļĶ +Ġwines +ĠINF +rul +ĠJK +ıyorlar +shield +reath +Ġterus +ĠLum +Ġanticipation +Ġaccustomed +ĠMina +Ġwield +ioè +mera +Ġcountdown +Ġcling +Ġcommend +Ġfaktiskt +Ġdefenses +Ġcockpit +Ġкоманд +Ġdishwas +ĠThanos +Ġkidneys +Ġsehe +Ġmicrobes +Ġcuff +ĠвÑĭÑģок +ĠSpicy +çŃīçŃī +வர +culus +orc +ç¾ħ +ixes +ĠCredit +Ġraj +Ġbringt +ĠNiss +Ġgrim +ĠSOL +Ġtenim +ĠSudan +ĠSpart +Ġpromotes +ĠNossa +ĠÑģоÑģÑĤоÑıни +Ġì°© +Ġuncont +ĠLiberal +ĠТолÑĮко +ĠViele +Ġktórej +Ġ**** +Max +ĠЧÑĤобÑĭ +350 +Ġíĺ¼ìŀIJ +Ġë¶Ħëĵ¤ìĿ´ +Ġwarp +Ġtenga +Ġsympathetic +Ġbizi +ĠZack +iedo +Ġëī´ì +piel +ĠÑĤол +Ġscaled +ĠPETER +ĠCOMM +ĠCame +Ġcatastrophe +Ġsweaty +igration +Ġstuffing +ĠÏĢολÏį +ĠDriver +zyst +Tech +Ġassessed +ĠSurface +ırım +sur +lerweile +Ġдог +Ġshutting +Ġfractions +ĠÑģол +everyone +Ġern +ĠÐĿов +Ġdefenders +Ġversucht +ãĥ³ãĥĢ +Ġpolity +ĠÐŁÐ¾Ð½ +verständ +Ġbrowsers +Ġtransformative +Ġdictate +ĠLEGO +Ġninguna +ê´ij +Ġpizz +ĠHarold +ĠLopez +Ú¾ÛĮ +anız +atchet +ÙĬت +Ġlernen +Ġê·ĢìŬ +Ġhoused +Ġcleanse +ĠWAT +laration +Ġbytes +Ġtucked +Ġfaults +до +FX +Ġìĸ¼ë§ĪëĤĺ +Ġdeform +Ġcontracting +ĠTIME +irse +Ġneben +Ġcerc +ĠArmstrong +Ġtester +Ġparfait +Ġjealousy +Ġtoxins +Ġdisbel +ÑĥÑĢÑĭ +impression +Ġprostate +Ġfirewall +Ġclassics +еÑĩÑĮ +Ġsocialism +Ġgracious +ĠÑģнова +ĠднÑı +Ġburner +ĠMinor +Ġìļ°ë¦¬ë +Ġjedes +Ġcontinuum +Ġhots +Ġoccurrence +Ġadministered +ĠзамеÑĤ +Ġhesitation +Ġdrills +erca +ĠвÑĤоÑĢой +Ġsteadily +Ġinsanlar +Ġihan +íij +Ġhelper +ĠSenin +åģľ +ование +ĠERIC +bla +ĠAcademic +Ġhumanities +black +umpy +ortex +ĠìłĪë +ĠØ¥ÙĨ +Ġdisclose +ĠElijah +ĠλÎŃ +ĠQuer +بÙĦ +ãĤ¡ +Tell +arle +ÑĸÑĢ +Ġaugmented +Ġë¹ĦìĬ· +Ġandroid +त +arma +Ġszer +geord +Ġgeek +Ġyeux +Ġpong +ĠãģĿãģĨ +Ġtortured +ĠBath +zig +asonable +Ġnets +Ġbaru +ĠFlat +ĠVater +ĠTerror +ĠAvo +Ġceremonies +roe +Ùģس +Ops +Ġhyvin +Ġapresent +olor +ĠигÑĢÑĭ +orton +Ġê·¸ëŀ¬ +Ġlookin +ĠTY +ĠMint +Add +Ġmite +ĠSmoke +Ġnota +Ġmoss +ĠAbend +Ġ컨 +Ġexaggerated +fires +Ġredist +ffiti +Ġopenness +ê°IJìĿ´ +endeu +енной +Watch +Ġavatar +ĠPey +urun +Ġsenza +Ġì§ĢìĹŃ +ĠNatomiast +Ġemergence +rays +Ġcrafted +gary +ãģłãģij +üng +-\" +Ġhacked +Ġstray +encie +emo +Ġcomen +ĠKız +ĠJasmine +ĠHindi +manas +Ġinfinitely +emon +ìĿ¸ëį°ìļĶ +jak +Ġroaring +érique +sweise +ĠRolex +åł±å°İ +ĠStuart +bnb +Ġdiagnose +Ġcoherent +ĠMJ +æºĸåĤĻ +Ġpike +lav +Ġorchestral +аÑģÑĤи +Ġterminar +Ġgatherings +Ġcompliant +Ġupgrading +Ġregulator +Ġlanç +éĢ£ +Ġmerchants +tawa +Ġmonitored +Ġrendre +两 +Ġunterwegs +anguard +gard +ĠBelow +duino +ĠЦе +Ġimpedance +ìľ¡ +份 +Ġaktuell +ĠVatic +åŃ© +Ġstewards +Ġbrightest +Ġkenn +Ġkau +ĠMatrix +ĠBark +ĠðŁij +Ġtaper +Ġcasino +ר×Ķ +ysical +Ġbuilders +ĠczÅĤowie +ĠNepal +Ġ!\" +Ġterme +Ġinnych +Ġmaths +Ġdrafted +ĠBalk +Ġhesitant +Ġvoltar +Ġrevive +ĠÑĦилÑĮма +Ġassassin +ĠSolutions +Ġduel +Ġbearings +à¸Ħะ +Ġrookie +ikat +Ġbiscuits +Ġcords +ÑĥваÑĤи +ARIN +Ġprogressing +ĠGir +Ġpenetrate +ĠStorage +eight +ĠÑĤÑĢÑĥ +ĠdonÃŃt +Ġsizin +Ġoutdated +ĠнаÑĪи +Ġaffir +Ġspoons +Ġoni +Ġflank +ĠGol +hã +Ġpéri +Ġhonorable +ĠBreathe +scenes +Ġobviamente +икÑģ +Ġש×ŀ× +Ġsmoothie +ŀĪë +Ġdime +ĠíĸĪìĸ´ìļĶ +Ġappel +ĠCatholics +Ġsingles +Ġlaten +Ġçünkü +ĠVader +æıĽ +Ġvardı +ĠIstanbul +gré +ĠElsa +ël +Ġinvece +Ġcrane +Ġobe +ĠShark +Ġsmack +Ġrestoring +.\\ +Ġë¹łë +Ġfaded +umbers +Singing +Ġdepressing +thest +ĠWahr +Ġmultitude +ÑĢавÑģÑĤвÑĥйÑĤе +rijk +eka +Ġcompletes +ĠWells +Ġroy +ĠPray +ĠKalau +izin +iaÅĤem +Ġlocom +ĠNashville +ĠPentagon +미 +ĠNEW +ÄħÄĩ +ÃŃss +Ġmarrying +Ġfeud +íĻķ +æĢ¥ +)! +ĠOperations +ÑĥÑĶ +Ġmoje +Ġinstructed +ĠëĪĦ구 +Ġ×Ķ×Ĵ +ĠпомоÑīÑĮÑİ +Ġsabia +ìķĺìĸ´ìļĶ +plane +pri +ĠполноÑģÑĤÑĮÑİ +ĠKitty +Ġpróprio +edere +Ġinteresante +Ġде +Ġcondensed +Ġavent +TOR +Ġgreasy +ARK +orta +AJ +Ġdisreg +Ġcorrections +Ġstero +Ġinfluenza +Ġdesses +Ġballots +Ġmeget +Ġmafia +Ġböl +nost +ĠÑģÑĤаÑĤÑĮ +Ġresponder +Ġhinten +grav +à¸Ńะ +ynchron +Ġviens +Ġsamo +Ġdt +pannt +ĠÅĽwiat +ĠзапиÑģ +Ġmerged +Ġkep +Ġmisleading +Ġdigamos +Ġammon +è¾Ľ +chet +Ġê°Ģìł¸ +Ġuni +ĠëIJĺëĬĶëį° +ĠнапÑĢав +ĠкоÑĤоÑĢого +Ġanimate +×ķ×IJ× +еÑĢв +Ġminced +Ġkaum +ãģĤãģģ +ÏĢε +лег +existing +Ġplataform +ĠKRIS +ìĽł +ĠFamilien +ĠLibya +Ġbiodiversity +Ġidiots +irdi +Ġszyb +ĠRolling +ücht +ĠÑĥдив +ÑģÑĥд +Ġrealizar +Ġcanned +ĠÑĢан +Ġmetabolic +ĠBeef +Ġkilka +лÑİÑģ +Ġregistry +моÑĤÑĢиÑĤе +Ġvielä +Ġodc +Ġcondemned +æ©ĭ +fal +ĠDil +woÅĽci +Aw +Ġstatistically +Ġsogen +ĠBETH +Ġshaving +幸 +ocal +ĠFunny +Ġpeacefully +Ġaddictive +ĠInsert +lauf +Ġexperiencia +é¦ĸåħĪ +иÑĤелÑı +ÃŃgen +ágina +Ġabdomen +íķľëĭ¤ +icus +imana +ìį¨ +arching +Ġkonkret +ìķĺë +ека +oufl +ivel +Ġnude +ètres +Ġmonsieur +Ġclash +Ġtherapists +Ġcubed +Ġretrouver +Ġwaveform +Ġpotem +ĠFormer +isión +åºľ +Ġ×IJ×Ŀ +undos +ĠMeinung +صÙĦ +ĠJude +ĠnÃ¥r +ĠLeonardo +ĠCristo +ĠGOT +ÑģÑĤÑĢÑĥк +LAN +ĠgÃ¥ng +Ġdéb +ĠFrankfurt +Ġcrappy +Ġlil +année +ĠмеÑģÑĤе +RET +ĠNer +ĠCOSTA +Ġjedem +Ġcurtains +Ġiterations +Ġunav +Ġplaque +orum +Ġζ +Ġnúmeros +Ġdesap +²½ +Ġcompiled +Ġrefle +Ġrankings +Ġrepaired +ĠÐĿапÑĢ +Ġdownloads +Ġarmour +Ġ×Ļ×ķתר +Ġlongevity +ĠTONER +ĠкомменÑĤаÑĢ +Ġczego +Ġnotify +Ġairports +Ġenduring +lette +Ġapparat +Ġhabil +á»ĩc +nad +ICO +ĠBrah +Ġsegún +Ġgovernors +kaha +ĠSchluss +Ġodpowied +irting +Ġrempl +ĠAboriginal +identally +Ġenhancing +licting +ĠHawaiian +Ġstriving +ĠNiet +Ġznaczy +Ġobedience +ĠnÃ¥got +Ġexpired +Ġ1918 +presented +Ġprowad +ĠTerr +ĠPrinceton +Ġmorgen +Ġattracting +ĠSigma +igner +ĠRechts +ĠPeki +Ġmethy +Ġhamm +Ġdireito +Ġdelegation +иваÑİÑĤ +Ġgin +Young +Ġdependencies +ĠBradley +buds +Ġfis +Ġpytanie +Ġinterconnected +Ġembaixo +ĠSas +Ġruh +ĠSicht +Sur +Ġsuperb +ĠSabbath +ĠDanger +kol +Ġhou +supp +ĠNacional +Ġsuccession +Ġvá +ĠMaÃŁnahmen +ĠJessie +ĠIdaho +forest +ħĺ +Ġ×ŀ×ĵ +ĠØ£ÙĬ +Ġsweetheart +Ġneatly +ĠEvangel +곡 +ĠSuite +ública +ĠÑĥли +ĠAnnouncer +ligh +Ġsensations +Ġshelters +Ġhart +Ġsqueezing +ĠRivers +ĠCooking +ì±ħ +personal +Ġmanos +ÑijÑĤÑģÑı +wij +Ġgogg +ĠMilli +ĠFP +ünst +ĠLS +Ġspraying +Ġfaux +Ġautograph +ologic +Ġtorment +Ġencrypted +á»ħ +Ġestre +ç¹¼ +à± +Ġstumbled +Ġaider +Ġsaben +xter +ĠCities +ĠTürk +ëĭ¥ +chine +Ġtopping +Ġpoisoned +ĠRomania +×ĵ×Ļ +Ģë¡ľ +ĠпоÑĢÑıд +Ġchirping +ĠìĻĦë +×ij×¢ +Ġcuanto +Ġdonating +ĠRegent +ĠBeruf +Ġdistracting +Ġstamina +ĠDarren +Ġì¶ķ +lists +dal +chuss +Ġeconomist +ãģĪãĥ¼ +orgt +Ġistiyorum +è¿Ľ +ĠSurprise +ĠHao +Ġìµľê³ł +ĠGW +ĠInner +Ġquieren +Ġminded +Ġsupercomputer +Ġdiagrams +íĬľë +ê²łìĸ´ +ĠобÑĬÑıÑģ +Ġestaban +Ġdestroys +ĠBreaking +ĠkarÄ±ÅŁ +Ġrebuilding +ľëĮĢ +ливо +ĠSauce +ĠFusion +×ķ×ŀ× +ĠQuinn +Ġgauche +ĠÙĪØ£ +ĠÈ +çĵľ +Ġtechno +Ġdispatch +ĠaÅŁk +Ġeinzel +ĠGmail +çŀ +Ġê°ľìĿ¸ +ĠÑģемÑĮ +Ġjourneys +Ġiht +Ġfibre +Ġdramas +ouched +Ġrename +ĠопеÑĢ +Ġpoo +ĠDru +ĠиÑĤог +Ġzast +Ġcoz +Ġzucch +Ġobtaining +Ġcommute +Ġsubmer +ĠVish +ĠRabb +ogg +Ġhut +íĸĪìĸ´ +æ¯Ķå¦Ĥ +eremi +Ġμα +Ġdiskut +ĠбÑĥк +Ġimpaired +depend +ĠÙĪا +ĠÑĢÑĥк +ĠбаÑĢ +Ġoxidation +Ġsituação +ÉĻn +ução +Ġsagte +ĠSER +ĠCake +Ġturmeric +ĠKak +bung +ĠKá¹Ľá¹£á¹ĩa +Ġpoisoning +Ġslipping +ĠSays +å°±åı¯ä»¥ +òng +çŁ³ +« +ĠClaudia +ĠCharacter +ниÑĨ +coat +Ġprogressed +ĠFergus +Ġìĺ¤ëĬ +Ġoat +ordable +ĠLey +ĠHeraus +Ġresultados +ĠKayla +Ġriff +Ġchegou +Ġxi +Ġspacious +Ġrecognised +Ġech +ĠTie +Ġlauncher +Jim +Ġsuppression +ĠImpossible +Ġguitars +ĠFourier +иÑĩеÑģкий +ĠTherap +ĠKaf +centered +ĠÑģооÑĤвеÑĤ +Ġklim +Ġcarbohydrates +ignant +ĠAstron +Ġemple +Ġdrastic +ĠмиÑĢе +вин +uw +Ġprettier +Ġdonuts +ĠAthena +Ġdissert +Ġplante +Ġuranium +ìĿĮë +aré +Ġrzecz +Ġdisplaying +æĪ² +Ġsarc +rão +Ġtampoco +Ġphilosophers +ĠRecht +æĵļ +Ġcomentarios +yse +Ġìľ¤ +Ġmise +ĠGin +Ġном +ĠFROM +liner +atif +ĠspoÅĤec +xa +ĠÑĤÑĢÑĥд +Ġwag +기ìĹIJ +ĠMG +Ġoffspring +ĠUnderstanding +åıªæĺ¯ +ORA +Ġwhirring +Ġsurrend +Ġpoker +Ġmonuments +ĠâĻ© +Ġorganised +ĠSozial +ĠFactory +Ñħа +Ġresemble +зд +Ġexplosions +Ġpayroll +Ġomn +ĠJorge +ιÏĥ +Ġfracture +Ġpersecution +Ġdemais +ECH +,) +Ġcriar +ĠJOSH +Ġdemographics +Ġ1600 +Ġcurrencies +ĠTips +ĠéĢĻåĢĭ +ĠRefer +ĠDancing +Ġinconsistent +Ġdeh +Ġimmens +Ġmeist +Ġimpatient +Ġbehaves +æĿ¾ +ĠëĤ´ìļ© +Ġbackstory +Ġagreeing +ĠÅģ +ihin +Ġtemperatura +ĠBackground +Ġnutzen +Ġëħ¹ +ĠMänner +Ġcollaborations +ĠKos +éģİåİ» +Ġnightmares +ëĵ± +ĠQueensland +Ġassociates +ĠKok +Ġfactorial +ĠHyung +Ġê·¸ëĭ¤ìĿĮ +Ġfilho +Ġelét +Ġíĸīë³µ +°± +Ġgefunden +Ġsemicondu +Ġcounselors +ĠUpper +ĠAub +ickers +Ver +Ġnorthwest +ĠMaintenant +ĠLakes +аÑıв +inté +ì°½ +Ġгаз +Ġgiorn +Ġdigitally +ĠCircuit +ì¼Ģ +ãĤĬãģ¾ãģĹãģŁ +Ġcheerful +ĠPeterson +ĠDanish +ativos +Ġliken +Ġharbor +алиÑģÑĤ +xe +Ġcurls +ĠRhod +End +ĠET +Ġacquaint +ĠKelvin +Ġtrif +ĠAway +ìŀIJëĬĶ +vs +Ġpágina +Ġinlet +ĠSantos +Ġìļ°ìĻĢ +Ġyapıyorsun +theme +Ġsouff +Ġinjected +Ġpóźniej +iverso +amped +Ġdaher +Ġdagger +ĠлÑİбим +Ġtummy +Ġenlightened +cents +ĠDah +Ġcuest +ä¾Ĩ說 +ILY +Ġ×ijר +Ġbanging +ĠEmil +ĠCler +ĠBorder +ижÑĥ +Ġpresenters +ĠSTUD +coins +ĠíĻį +Ġperks +Ġparap +Ġcertaines +ĠLore +öst +ĠMARTIN +Ġbios +Ġwhereby +verts +ĠMiranda +Ġstip +澤 +andez +׼׾ +ujin +Ġê¾ +Ġallergies +plate +Ġyapıl +Ġundertake +ĠëĤĺê°Ģ +Part +Ġkızım +hguru +ãģĤãģ¨ +ĠJohns +Ġeyelashes +Ġdrained +ĠstÃ¥r +ãģĤãĤĬãģ¾ãģĻ +ĠJade +Ġcalend +film +Ġmesa +Ġludzie +Ġattracts +Ġjuices +Ġкил +Ġnieuwe +Ġmencion +Ġignition +Ġbladder +andaag +ĠExtension +íĤ¨ +feed +ĠÙĪÙĩ +Ġspun +Ġtät +оÑĢоÑĤ +tyard +ronics +ĠHuge +Ñĥжд +string +Ġunjust +Ġprawn +Ġfrosting +Ġdisappearance +iosa +Ġcardi +ĠPriest +ĠcientÃŃfic +åĵªè£¡ +ĠÐĴаÑģ +Ġë¶Ģíĥģ +Ġthieves +Ġphysique +ĠEugene +Ġблиз +Ġmonopoly +Ġbiography +ĠhoÅŁ +Ġtö +mac +Ġshocks +ìĦ¸ë +hit +Ġsnug +Ġincl +Ġdedic +Ġultras +ĠизвеÑģÑĤ +Ġutilization +ĠÑģовеÑĢÑĪенно +Ġservi +stag +180 +Ġsewer +ĠChoice +Ġdischarged +ĠJD +олеÑĤ +ĠкваÑĢÑĤи +Ġtelescop +ĠJeÅĽli +ĠNana +cale +ĠÑĤон +mmm +äºĨåIJ§ +Ġgehabt +ëĤł +æĬķ +à¸Ļà¸Ļ +Ġether +Ġzen +Ġresearched +ĠCzyli +å®Įåħ¨ +workers +Ġ경찰 +Ġsheriff +allo +Ġtipos +Ġprosecution +Ġfrogs +Ġfalt +jd +ĠíĮĶ +Ġfiltered +ĠOft +Ġìį +Ġdisfr +ĠMustang +Ġwoah +ĠREALLY +Ġмогли +Ġentrada +ĠигÑĢа +Ġmixes +ĠавÑĤомоб +ÐĻ +Ġshin +Ġparanormal +Ġsomeplace +Ġdishon +etaan +Ġfuerte +Ù¹ +Ġdoom +ìĪľ +Ġexistential +Ġbuld +ĠSDK +ĠпÑĢавда +Ġturnover +ĠìĹ¬ê¸°ìĹIJ +Ġह +Ġmodeled +Ġbugün +Ġexperimentation +Ġmornings +Ġmedo +Stevie +Ġplayable +Ġairlines +gments +Ġ기ë¶Ħ +ĠTomb +ĠMVP +AUDIENCE +Ġcheckout +Ġpasst +Ġbeispiel +ĠLinks +heavy +Ġquestionable +Ġìĵ°ë +Ġsill +Ġmanipulated +ĠLoren +Ġìľ¼ +Ġverge +ák +IES +Ġsabot +ĠCustomer +ależy +Ġnominee +ĠGad +Ġnouvelles +ĠSPE +istling +Ġoval +обÑĢаж +ifty +éĩİ +Ġbezel +yet +Ġfreight +ĠHanım +rÃŃa +Ġzoning +Ġindem +ĠBü +Ġfeminism +Ġvoix +Ġoficial +Ġdiyorum +»IJ +Ġarose +Ġparar +ìĿ¸ì§Ģ +ĠMartine +ĠLect +Ġrester +Ġdrowning +uya +cida +ĠAriel +Ġ02 +Ġ×Ķ×Ķ +ç´ł +ĠWert +ТÑĭ +Ġwidow +Ġparchment +Ġcottage +ĠXL +ĠSlack +ĠNES +Ġrobe +Ġgimm +Ġcaminho +ĠHarper +Ġcitrus +Ġfirefighters +Ġdopamine +elets +Ġdemocrat +ìłľë¡ľ +Ġplayback +oj +ĠпÑĢок +ĠSullivan +semble +ĠWorth +ĠMustafa +าร +Ġmets +éĸĢ +лоÑģÑĮ +Ġinertia +Ġuniforms +足 +ério +×ķר×Ķ +ént +Ġà®Ĵ +ĠÑģамÑĭÑħ +Ġvoulais +ĠZimmer +ê²łë +ĠноÑģ +encias +Ġrelación +Ġ걸ë +Ġfaction +Ġgosp +полож +nap +hak +Ġproceedings +ĠìĨĶ +ìķĦëĭĪ +ĠìŀIJ기 +Ġwerd +Ġsof +Ġschlim +Ġflavored +Ġquadratic +ĠBoot +Ġpublicity +ĠCaro +Ġ?\" +ниÑĨа +mania +ĠSUR +ĠBUR +lance +ética +Ġzobaczy +Ġtrio +sama +ĠtaÅŁ +Ġasymm +resser +Ġتع +ĠпеÑģ +Ġbeginnings +ladım +ĠбÑĭÑģÑĤÑĢ +Ġmoo +ĠGeneva +Ġåľ¨ +erus +borah +Ġrefusing +bull +ĠWaiting +ĠIndividual +Ġanonym +imens +Ġmedidas +Ġfragrant +Ġdirectement +ĠìķĦë§Ī +uria +Ġspherical +Ġabge +ĠVictorian +Ġspectacle +ĠRodriguez +Ġocup +ĠNär +marks +ngulo +ĠLuci +Ġshouted +Ġregulators +ÄŁini +Ġdisent +ĠÑĢÑĭн +ëĤ¨ +ĠìĤ´ë +Ġproblèmes +ĠFinger +assemble +Ġpear +Ġdroite +ĠEverywhere +tam +оÑĤив +вой +ordinate +ĠLak +ĠmỼi +ĠTelevision +Ġexponentially +avas +Ġblev +ĠMT +俺 +Connell +ĠêµŃ민 +ĠÑģвоим +Ġacha +ĠDynasty +Jin +Ġtore +Ġflor +Ġмногие +æ²Ĵäºĭ +owan +bah +Ġì£Ħ +ĠCela +Ġìµľê·¼ +Ġpermettre +Ġabras +Ġverstehen +Ġescort +ĠThem +ärke +porter +Ġkahkaha +Ġhect +Ġdau +wah +olve +ĠAges +schaft +ĠStell +nelle +ĠEnsuite +ĠÐĴÑģем +Ġcréd +ĠPP +lords +grunting +Ġcontraction +Got +Ġacquiring +Ġsopr +Ġpoisonous +RNA +Ġanar +ĠHof +') +Ġremarkably +Ġinternacional +ücke +inqu +Ġduy +Ġbeasts +ĠLAN +Ġprecedent +ĠRPM +åij¨ +Ġselon +Ġmorte +Ġcomeçou +Ñıла +Ġinterpreting +ĠBurke +ÑĤÑĢа +ĠìĿ´ëŁ¬ +Ġpessim +ĠNok +íĮĿ +Female +Ġìĭ¤í +ĻĢ +Ġstimulation +Ġslick +Ġê°ĢëĬĶ +Ġказ +ĠHBO +Ġpapier +Ġkönnten +Ñĥбли +ĠConstant +SPEAKING +ĠktórÄħ +Ġcosmetics +ĠTrend +Ġrobbery +Ġtitt +Ġgjort +Ġdietary +łĮ +ĠKirby +ĠпÑĢимеÑĢно +Ġqualification +Ġìķī +Ġcabinets +Ġhttp +ĠErica +義 +Ġdisadvantages +Ġchattering +yz +feit +Ġguild +ĠETF +ĠDragons +ĠHERE +venth +ÙĦاÙħ +Ġmarché +Dam +Ġphoton +Ġestable +Mag +Ġolhar +Ġcoupling +ĠHilfe +ĠWizard +Ġмало +help +ĠlÃŃnea +Ġì« +Ġstandalone +Ġmorale +Ġzweite +ãĤĪãĤįãģĹãģı +ährt +Ġdotted +Ġdripping +ĠFlag +éĿĴ +rocket +rategy +irim +Ġíķĺë©´ìĦľ +Ġsogenan +ĠUno +ĠSchutz +Ġestilo +ĠSubs +ĠDaisy +ÐĿеÑĤ +'... +Ġplatinum +Ġbirl +ĠSovi +Ġviolate +ÑĥеÑĤÑģÑı +rill +Ġtraz +Ġsnip +Ġcumpl +à¸Ńà¸ģ +Ġcuk +éħĴ +ĠParlament +Ġhypert +Ġpulp +Ġtongues +atto +Ġbusca +ihn +ERO +ĠÙĬع +Ġvarias +ĠMarian +Ġbounded +Ġpitching +Ġdeficiency +ĠBlessed +ĠExerc +uchs +ĠnhÆ°ng +æľ¬å½ĵ +Ġraped +hales +Ġmala +pic +Ġ401 +ÅĽniej +arina +ëĵ¤ìĿĦ +otti +Ġдолго +Ġtracker +ĠShelby +Ġvanished +Ġbakery +Kapı +Jesus +ĠKR +JO +ħ¸ +Ġdiscs +ìĦ¯ +ì§Ģë +×Ļצ +emary +Kendra +Ġyük +ückt +Ġvaz +Ġkup +aktu +ĠÑģпаÑģибо +Ġaik +Ġnursery +Ġendangered +êmement +ematics +Ġresponders +ĠRepresentatives +Ġsculptures +igkeiten +Ġdepl +Ġinterpretations +Ġdeadlines +Ġ1942 +ÃĹ +Ġsugars +emu +lively +Ġrecreational +Ġdistort +Ġunderscore +Ġunquote +Ġsafest +Ġswollen +Ġanalyses +Ġcommencé +妹 +andin +ĠХоÑĢоÑĪо +Ġdiarr +ãģ¾ãģģ +ziest +Ġtoothbrush +éł»éģĵ +uations +Ġcade +Ġbacklash +hind +Ġrisque +zess +ĠìĿ´ìķ¼ê¸° +Ġesperar +Ġtranslations +ioned +groans +ĠпÑĥÑĤ +Ġgenetically +éĢł +Ġhappiest +Ġwerk +atoon +Ġmusi +Ġfunção +ĠìŀħëĭĪëĭ¤ +ĠÑĢай +Ġbevor +BLANK +Ġrepentance +Put +Ġpotrzeb +Ġsala +Ġcampa +WER +ĠdecÃŃa +Ġsécurité +ĠAppreciate +Ñĩи +ĠRandom +ë³Ħ +kah +Ġmöj +Ġsäger +Ġ×Ļ׼×ķ׾ +Ġ190 +xtures +Eu +Ġgä +Ġ×ijת +ĠCroat +apo +PLE +Ġpersistence +åĬ© +Ġblends +Ġtreffen +ĠSantiago +ydia +aldo +ĠTensorFlow +ĠDual +ãĥľ +Ġchiff +ìĹ´ +Ġcontracted +Ġsegreg +ĠFairy +Ġwisely +Ġvulnerabilities +Ġhandheld +Ġgadgets +ĠboÅŁ +ĠPopular +Ġcurvature +문 +ĠMARY +ìĿ´ìĬ +Ġformulation +Ġcelery +Ġblurry +ĠTS +alez +Ġws +Ġprogramm +ĠStack +ĠJIM +овали +ıll +Ġpère +ĠKanye +ĠDelaware +Ġãģł +Ġdaunting +ĠбеÑģ +ĠStupid +big +fficial +Ġprecipitation +Ġplung +ục +burse +Ġdarle +Ġcripp +Ġpioneer +Ġdisput +Ġsean +ãģĵãĤĵãģª +Ġresistor +Ġallein +ipples +arel +Ġendors +zust +ĠÑĢебÑıÑĤа +eded +Ġì¹´ë©Ķë +Ġlleva +Ġkennt +Ġбал +ĠDocument +ĠKnights +Ġbuckle +Ġìī¬ +Ġalk +ĠEveryday +atters +Ġtoilets +Ġjugar +ĠìŀĪì§Ģ +Ġgenauso +ĠLandesregierung +ãģ£ãģ± +ije +Ġtrailers +ĠTigers +Ġgitti +Ġforgiving +Ġconcurrent +ĠVu +ĠíĬ¹íŀĪ +ĠBROWN +ounded +\"; +Ġtremb +Ġtiet +ĠÑĢежим +Ġnutshell +елиÑĩ +Ġlosers +ricting +Ġredeem +defined +Nice +Ġbroadband +KO +Ġteasing +Ġpartisan +ıma +Ġìŀ¬ë¯¸ +ĠJourney +Ġslopes +uning +grunts +Ġtäll +Ġuncovered +ĠmyÅĽlÄĻ +ĠEsther +äºİ +ĠHealthy +Ġë°ij +rée +Ġpolarization +Ġflav +Ġcambiar +Ġyr +ĠRanch +Ġsplits +Ġtrouvé +åľĭ家 +Ġrecorder +Ġdépart +ÙĪب +ĠKry +Ġinteressant +Ġederim +ÅĽwiad +ilateral +wright +Ġpourra +êter +Ġcamel +áŀ +Ġrapidement +Ġmej +Ġstiffness +ADAS +Ġdiffers +Ġalot +ĠSig +ÑıÑĤелÑĮ +Ġabstraction +åľĺ +Ġkeiner +grupp +ĠSherlock +íĺĶ +Ġcite +Ġoverflow +Ġtại +úcar +bula +Ġconjunto +ĠCI +Ġmoderator +Ġindirectly +Ġalleine +âĤ +ÑĪиб +Ġбаб +Ġdanach +Ġ1939 +Ġpromet +Ġdestinations +ĠIllust +ικÏĮ +Ġsabes +Ġheh +ĠGesetzent +ĠMiz +енко +ĠMys +Ь +ĠJudaism +Ġmustache +Ġstimmt +ĠGaza +Ġvolte +Ġnuo +Ġmón +ĠComput +ูà¹Ī +ĠRadi +Ġexceptionally +Ġassumes +éĸĭå¿ĥ +ãģĪãģ° +inform +Ġshrine +æĵĬ +Ġimplication +ĠFitz +æ²ĴéĹľä¿Ĥ +!. +Ġlt +Ġalloy +Ġethic +Ġmonastery +ìĭľì£ł +icação +Ġcoordinating +ĠMoto +Ġoverlook +Ġchois +Ġantibiotic +ĠMinne +ĠBJ +ĠApa +orian +Ġspilled +Jam +Ġhusbands +Ġcreations +Ġañ +üssel +ĠìĿ´ìļ© +Ġanalyse +rose +Ġpunched +Ġpresque +Ġastronomy +Ġschwierig +ĠEbola +Ġcis +Ġacet +ĠFX +endre +ĠìĿĮìķħ +Ġwebpage +Ġfreaked +Ġlatte +Ġì¿ł +Ġ머ë +Never +Gra +íĻĶ를 +eyed +Ġë°ľëĿ¼ +Ġespera +Ġaparece +ração +Ġdisruptive +ĠJoint +urous +reas +ĠquerÃŃa +Ġdistributions +Ġexponent +ì¹ĺ를 +Ġdl +zhou +ĠHearing +å·®ä¸įå¤ļ +ĠCraw +Ġfloats +ounced +Lab +World +Ġburdens +Ġauthoritarian +ĠBolt +ĠоднÑĥ +Ġpigeon +Ġdistractions +ĠHerausforder +Ġzest +esc +Ġshakes +atas +ĠÙħØ´ +holes +Ġthinkers +alta +Ġarche +ĠSuk +anha +Ġtempting +Ġyoutuber +Ġvì +ĠdziaÅĤa +ĠVatican +Park +Ġsupers +ĠNikki +ëĬIJë +orang +ramient +鬼 +Ġê°ĸê³ł +Ġdesserts +Ġavere +ĠGregory +Ġëĵ¤ìĸ´ìĺ +Ġcosting +ĠClinic +Ġrebels +ĠMob +Ġbunlar +ĠYours +ertime +Ġretali +mara +atus +alles +ĠдÑĢ +ĠдиÑģ +Ġdiscounts +ĠGUY +Ġкакое +ĠExperiment +rement +ĠXiang +Ġbate +WE +Ġspecialize +Ġdeity +ĠLoki +mag +ĠNit +West +Ġmaternal +Ġquis +åŁºæľ¬ +broken +Ġlasers +Ġhakk +ĠAngels +Ġmastery +antis +Tiffany +eee +çij +orem +Ġinacc +Ġjurisdictions +ĠKardash +æľº +Il +ĠSinn +åĭķçĶ» +Ġathletics +cÄĻ +Ġloosely +Ġdieta +Ag +Ġ?? +ĠëĮĢíijľ +Ġsuperv +Ġnutrit +Ġdrifting +ĠìĦłìĥĿëĭĺ +ĠпонÑıл +ĠVictory +ÙĦØ© +×ķ׳×Ķ +ĠпиÑĪ +Ġshaved +Ġmesure +onden +Ùĥر +Ġexile +ĠDesde +ĠPinterest +Ġattachments +Ġhombres +Ġfines +ĠìĦ¸ìĥģ +Ġsleeps +ĠTaco +ĠIRA +rios +Ġoll +etes +Ġunut +fashioned +Ġtreball +ĠNearly +ĠÑĢеалÑĮно +Ġchil +éĢ± +ÄŁa +ĠMEL +roscop +ĠCG +Ġvenge +Ġdishwasher +algic +Ġmodifier +Ġembassy +timer +emics +Ġintricate +Ġevet +ĠëĮĢë°ķ +Ġisot +ĠнаÑĥÑĩ +ĠQuiz +reso +δÏİ +Ġyelled +Ġfeder +ELLER +Ġexceeded +onas +icano +ĠживоÑĤ +ĠMao +ĠKazuto +Ġãħĭãħĭãħĭãħĭ +Ġfrontline +ĠHungarian +Ġüberall +awat +Ġgrips +ições +arnya +ĠÍ¡ +Ġseid +Ġanak +Ġacabou +íķij +Ġnotorious +ĠGodzilla +Ġovercoming +ĠPend +Ġolabilir +ülme +Ġerhalten +ãĤīãģĦ +ê·¹ +ĠMeter +Ġstaan +Ol +Ġchats +ĠBuenos +ÃŃve +aluable +Ġstrategically +Ġcomprised +ĠпеÑĢÑģонаж +Ġwann +ĠCen +ниÑĤе +Łģ +ĠÑĤобой +iad +ĠkardeÅŁim +ĠCongressman +reaming +homme +Ġcommunaut +Ġalcoholic +Ġpickled +Ġacord +position +egól +Ġtroubling +ĠMarcheg +Ġzumindest +Ġseamlessly +Ġolun +ĠTVs +ĠпÑĢакÑĤиÑĩеÑģки +Ġbackend +ãģĵãĤĵãģ«ãģ¡ãģ¯ +idable +Ġgadget +Ġfaço +ĠMarchegiani +Ġë°¤ +Ġaccidental +ĠLP +Ġeldest +ĠAdmiral +ĠnÄĥm +lever +Ġpastel +Ġfondo +Connie +Ġtercer +Ġpact +ĠMonte +Ġmeats +ĠSMS +ĠAustralians +ç¼ +Rhett +Ġexactement +Ġë¹¼ +ĠMOD +ç¡ +ĠRapt +ĠNoch +Ġabort +ĠNaval +ĠFuji +INTER +ĠновÑĭй +Ġmiejsce +ĠICU +ĠGraduate +ĠGlen +ardi +ĠÈĺ +Ġsolder +Ġprofessions +Ġorthog +omn +introdu +ĠDenise +ìŀIJ를 +Ġcorrespondence +AMA +Ġinflict +Ġfand +ĠGü +ĠÑĩеÑĤ +Ġtraced +Ġpatents +Ġambush +Ġlotta +ffer +ĠWagner +Ġimperson +Ġextrêmement +ÙĤت +conduct +Att +ĠMueller +ĠAlicia +Ġcyc +Ġhacker +Ġtys +Ġhail +ĠзаÑıв +Ġpasso +Ġì¶Ķê°Ģ +ĠÎĪ +Ġpackaged +ĠCynthia +heet +ä¸ŃåĽ½ +ĠNissan +ĠQuesto +é¨ +did +Ġμια +ĠEllis +ĠAnalysis +cemos +Ġaseg +ĠMyster +ĠCao +Ġtuv +ĠIndustry +ì£¼ê³ł +otal +Ġpequeño +bras +Ġcomprehend +ĠSimpson +ÑģÑĤвие +ocracy +иÑĩеÑģки +ĠMush +ĠLaurie +Ġtriangular +ĠPresents +ĠKunden +ç´¹ +æѦ +ĠIss +ĠDeck +á»ĥn +ĠDarkness +Ġinflammatory +eremiah +Ġwarmed +veyard +ĠMemory +etty +Ġtaxpayers +à¸ĵ +Ø¡ +Ġpractise +ëĭ¬ë +Ġdrilled +mÃ¼ÅŁ +logo +ĠFach +¤ë¡ľ +Ġübrigens +Ġkonnten +Ġnormalmente +Ġargues +ilingual +°ë¥¼ +egal +Ġtravaill +ovy +аÑĤо +Ġruth +ĠLights +Ġconsisted +×ijר×Ļ×Ŀ +Ġstereotype +Ġpayer +ĠRee +ĠAirbnb +Ġdrowned +ĠZoe +Ġcanopy +Ġbarr +ĠноÑĩ +Ġpagan +Ġjars +Ġrê +erver +æĪ¿ +ieben +Ġespect +ĠFi +Ġunwilling +Ġtechnician +ặt +member +ĠCanal +سÙħ +Ġlieber +Ġinference +Ġhonoring +åijµ +ĠCampaign +Ġlineage +ĠStress +Ġvictories +Ġdeja +×£ +êtes +blick +Ġменее +oths +ĠCouple +Jason +ĠNicolas +екÑģ +lib +Ġherramient +Ġ×IJ×ķ×ŀר +Ġвидим +millimeter +Ġsilhouette +Ġdriveway +Ġcherish +ãħłãħł +Ġransom +Ġinterdisciplinary +ĠPortal +Ġtrag +thood +Ġtedious +Ġglossy +Ġprépar +ĠCay +ĠTook +ĠBottom +Ġzig +å« +åį± +represented +à¹Ģลย +Ġdesarrollo +ìĦľë +Ġviscos +Ġmilligram +ĠGund +Ġferment +drum +Ġdrawers +Laugh +Ġpelos +Ġpavement +Ġmemoir +avait +Ġ2050 +¤ë¥¼ +Ġrazón +Ġflourish +Ġstern +ä¸Ī +ĠChung +Ġserpent +ĠGentlemen +羣çļĦå¾Ī +kook +Ġlut +importe +parent +Ġwsz +Ġscree +ĠMitarbeiter +å·´ +mut +Ġìĸĺ기를 +Ġsemble +ĠOW +Ġinvestigator +ĠCheryl +ĠGerald +Ġprere +Ġcompares +nyt +Ġdiferença +?- +Ġquá +ר×Ļ +Sen +Ġheps +Ġgratuit +Ġconsort +ĠSTOP +ĠProtestant +Ġelectrode +âĹ +Ġsecurely +иÑĩеÑģкой +Ġtää +Ġregisters +ĠHeavenly +ogly +issä +ĠPhysics +ĠMerkel +Ġrév +éĻ¢ +Ġerased +ĠSacramento +Ġcoffin +Ġexacer +Ġlanz +Ġpoets +ulif +Ġì¹ĺë +ĠNerd +ĠNCT +ĠHour +nehmer +ŀĺëıĦ +ĠPrinci +Sw +mies +armed +ĠBeatles +Ġpropagation +Ġexchanged +Ġcumulative +Ġì§ijìĹIJ +Ġdefeating +æĬ± +bels +Ġwes +ĠOdyssey +ä½łæĥ³ +avior +ĠìľĦìĹIJ +Ġbrit +Ġhijo +DAY +ĠاÙĦتÙĬ +ĠСеÑĢг +Ñĥка +edsiÄĻ +Ġimpos +Ġellas +Ġfirearms +ĠNR +Ġ×ij×IJ +ĠÐŁÐ¾ÐºÐ° +awi +ĠìĦ±ê³µ +Ġpupils +ĠTack +Ġfrase +ĠShip +Ġstad +举 +ĠGreater +unun +immung +grown +ĠNXT +ĠAmericas +fox +Ġmanten +éłIJåĤĻ +ĠÑģок +Ġrikt +lectric +deep +ĠзнаеÑĪÑĮ +Ġbenut +ĠInfrast +ĠEmir +ĠоÑĤпÑĢав +ĠKimchi +ĠFinnish +´ìłģ +inaire +Ġoike +æ¸ħæ¥ļ +Ġhostage +ĠButton +ÙĤÙĬ +eking +ĠKazakh +Ġcomforting +Ġsog +Ġgreeted +guitar +payer +Ġrelational +Ġconstruir +çī¹åĪ¥ +opian +ĠVolume +ieth +ÑģÑĤвом +urrection +liÅĽmy +Ġhemisphere +ĠBean +IGN +Ġkötü +ĠFallout +Ġbrace +ç¹¼çºĮ +ÏĢά +ĠHAS +Ġgé +Ġcharacterize +ặc +ĠMilky +Ġtumors +Ġnuit +ĠGaz +ĠìŀĪëĭ¤ëĬĶ +ĠгаÑĢ +essment +ĠAbe +Ġë½ij +ĠEinsatz +JIN +jä +Cry +ĠPromised +ĠÑģеÑĢд +okus +Ġscalable +ĠпоÑģмоÑĤÑĢеÑĤÑĮ +ücklich +Ġrealism +Ġmayo +Ġjuvenile +Ġheadlights +ĠgörÃ¼ÅŁ +ĠReform +Ġhalves +czne +Ġbreakup +żej +Ġrätt +Day +ĠìĿ¼ë³¸ +Ġmuerte +Ġtunes +ĠSmile +record +Ġrecherche +atisfied +Ġpozi +Ġcelebrations +isexual +ĠROB +thirds +ĠFortune +ĠÑĤой +Ġbranded +loo +Ġdud +Ġrandomized +Ġcombin +ä¸ĢäºĽ +ieran +czenia +įãĥ« +Ġcurator +Ġartery +ĠÑĥÑĪ +ĠÑĩиÑĤ +Ġsubsidies +Ġblossom +ĠTwilight +Ġhyvä +ĠPompe +ĠCisco +ĠÐŁÑĢо +Ġbiri +Ġgern +Ġrebuilt +Ġwcze +Ġbenefici +Ġdrummer +Ġsolids +Ġdiyorsun +ãģĤãĤĬãģĮãģ¨ãģĨãģĶãģĸãģĦãģ¾ãģĹãģŁ +lated +Ġmuddy +Ġholog +Ġclaps +ĠRings +ĠOkey +ĠBrave +Ġvaluation +Ġmigrant +Ġintermitt +Ġeigene +iliary +ãĥ¼ãĥĪ +markt +kr +ĠRib +á»Ļi +Ġaccusations +Ġarab +wash +ĠBardzo +Ġugh +esters +ophren +Ġalimentos +ĠUz +ÖĤ +Ġ650 +ĠпÑĢиеÑħ +FI +Ġsampai +Ġparlé +hesion +Ġsır +Ġapparatus +Ġcorrelated +ĠPrincipal +Ġcorr +ĠOfficial +иÑĩеÑģкие +Ġterminals +Should +Ġvacun +Ġstellt +Ġmooi +etzung +ĠкÑĢа +Ġdai +Ġпож +Team +ĠPPE +ĠÐŀÑģ +ĠLeah +ĠIvy +yst +Ġuhhh +Ġnighttime +Ġtrendy +Ġsecurities +Ġcontinents +Ġfirsthand +ĠVeron +ĠëĤ® +Ġbrowsing +ĠCada +tro +Ġtramp +reib +Ġerstmal +irler +Ġpsic +Ġgetir +ĠNP +Ġdzieci +обÑĢаз +Ġmagician +Ġscrutiny +Ġslab +ĠOT +isty +iries +orest +Ġtasked +Ġmorally +ìķ¼ì§Ģ +ustered +Ġfools +Ġirrespons +Ġeinf +Ġviá»ĩc +Ġscor +Ġpillows +ĠGegen +Ġtutte +Ġquarterly +Ġdidnt +ĠGym +ĠEther +ĠØ« +лиÑĪком +Ġsignaling +ĠNode +ĠDoncs +Ġyah +ĠKanal +Ġfading +etin +Ġinfluencers +Ġmedals +Ġengineered +Ġfermented +ê²łì§Ģë§Į +ĠBeethoven +×ŀש +inental +ĠìķĮ볤 +ütfen +alnya +Ġovere +Ġdenkt +акÑĤеÑĢ +Ġâĺ +Ġnecesit +Ġgenerators +grass +ĠподÑĥм +lieÃŁen +Bar +ľëıĻ +ĠдеÑĤей +Ġsucking +Ġstencil +Ġprimo +ĠBreath +strom +Ġimmensely +Ġappreh +ìłķìĿ´ +Pop +Ġjong +ĠGiul +ĠADHD +Ġhören +Ġelo +ivent +Ġrus +Ġoutrageous +Ġmastered +Ġ커 +ÙĪÙģ +ipes +ĠRudy +Jacob +Ġbullish +Ġtapped +Ġfaud +izophren +ĠÑģоÑħ +ĠDarling +Ġ1963 +ĠPrevention +²Ķ +Ġabdominal +stones +Ġavaient +á»ķi +make +Ġsare +ĠInstant +кам +Ġkeeper +Ġblankets +ãģ§ãģĹãĤĩãģĨ +Ġsweats +ĠMinneapolis +åħ¨éĥ¨ +Ġgenommen +Ġfasten +ĠBrussels +åij¼ +Ġcafeter +Ġabsorbing +Ġhago +ĠElmo +Ġgusto +ĠYap +Música +Ġtert +Ġbanda +Ġmily +Ġthereafter +ĠStockholm +ĠCarson +Ġcalibration +avaÅŁ +ansa +ikke +Ġforesee +Ġqualche +Ġdeste +æ¤ +ünüz +Ġforge +Dis +esten +Ġδια +Ġencaps +ĠGespr +Ġchercher +ickets +ÑĤоÑĢÑĭ +Cr +ĠТакже +Ġrabbits +ĠDot +heiten +Ġcausal +ĠFoster +ajÄħc +Ġbereit +Ġayudar +é«Ļ +ãģ³ +song +comb +Ġfringe +Ġcybersecurity +Ġ뾨 +Ġkier +Ġbeschäft +ĠконÑĨе +Ġfacilit +ĠNamen +Ġbilateral +tx +ĠWissenschaft +Ġnuances +Ġripping +Ġfy +ĠSicherheit +ĠGhana +olon +Ġtopped +ĠMorocco +Ġradial +ĠLEE +ĠAndreas +edd +ĠìĹ´ë +ĠAirlines +ãģĵãĤį +Ġvalores +ê·ľ +Hy +ĠзадаÑĩ +ĠKendall +ĠÑħаÑĢ +ĠVamp +Ġpython +Ġmanageable +ĠGente +oise +iciary +Ġimposs +ĠBunny +iesta +Andrew +Ġsert +ĠCec +zzarella +Ġautomobile +ĠTiere +allows +åĨĨ +Ġë°Ģ +ĠScorp +ĠJelly +agara +ĠStretch +Ġredef +Ġexacerb +ĠSHA +éf +orsa +Ġflawed +ĠNoel +?!? +Ġprocent +Ġmenstru +ĠпÑĢоÑĩ +Ġinfants +ðŁİµ +pause +ĠRacing +Ġ1948 +Ġsuperintendent +idores +idy +brahim +Ġunlucky +Ġperk +anci +Ġë§ĮëĤĺ +ĠÐľÐ¾Ñģкв +Ġfinans +Ġdiferencia +łĪìĿ´ +éħį +ORY +ĠTac +ÛĮا +Ġdesem +Ġважно +ĠJU +ĠìŀĪìŀĸìķĦìļĶ +ĠÎĿ +Ġinformations +ĠHEL +hst +ĠпоговоÑĢ +Ġvoiture +Ġreus +ändig +ĠпоÑħож +jing +Ġdru +altra +Ġproduits +Ġkite +Ġeyeball +ĠBelt +ĠRestaurant +Ġgamb +Ġporridge +itters +Ġconverts +Ġyardım +Ġmáximo +wirtschaft +ĠíķĺëĤĺë +Ġì¤Ģ +Ġiceberg +Ġvorbei +Ġ256 +ocratic +Ġreckless +onner +Ġmús +Ġlogically +ĠPrison +ĠNetz +Ġvacant +Ġnimmt +ĠHARR +Ġзов +ĠDee +ringe +niest +ĠRules +ìĬ¤ëŁ½ +cussions +Ġfloral +Ġconstrained +Ġdifferentiation +ĠQuebec +ĠÛģÛĮÚº +Ġpública +itel +Ġaccommodations +ĠGrü +íľ +Ġpickles +иÑĩеÑģкиÑħ +Ġcommissions +ĠBaek +ĠçocuÄŁ +ĠMedium +Ġperiodically +Ġwonderfully +Ġstaffing +ìĽIJë +rire +fle +ĠMcL +ĠÑĤеп +ĠпеÑĢек +нолог +Ġíģ¬ê²Į +çĻ¼çı¾ +Ġprosperous +ĠSpiritual +ĠChick +DIA +ĠÐŁÑĢивеÑĤ +ĠperÃŃ +ÑĮÑİÑĤ +Ġconsultants +ĠEarl +ä»Ĭå¹´ +Ġruining +оÑĢе +Ġpenser +Ġtakiej +Ġstrengthened +ĠLiquid +онеÑĨ +аваÑĤÑĮ +Ġcamer +Ġdisagreement +Ġbathing +ĠYosh +aal +prechen +RISADAS +Ġsuperstar +æģŃ +лÑıÑĤÑĮ +Ġnib +ĠTherm +ĠDANIEL +Ġpaw +Ġliquids +Ġcapacit +arken +Ġvagina +Ġmashed +Ġemerges +yscy +Ġunrelated +ĠGuild +Ġinverted +itives +Tra +Ġbegr +Ġalte +ì§ķ +ãĤģãģ¦ +ĠÑĢазÑĢабоÑĤ +finder +Ġдалее +ĠблагодаÑĢ +walker +Ġcrater +assadors +rences +inski +ĠKIM +ĠElliot +2017 +ĠSr +inka +anov +Ġìŀĺ못 +Ġproprietary +displaystyle +ĠÑģим +Ġизб +ĠPanel +Ġinstincts +ĠCommunications +麻 +midt +Ġë§Įëĵ¤ìĸ´ +ĠÑģлова +ĠGilbert +缮åīį +Так +voorbeeld +еÑİÑģÑĮ +aryn +quez +Ġdart +ÑĸÑĪ +ĠHut +Sal +Ġsoutheast +Ġpesticides +Ġhelicopters +Ġendured +iada +Ġbrewing +ìŬë +ĠÑģвобод +ĠSaints +ĠFrançais +ĠEconomics +Ġdisloc +ophobia +Camer +Ġnegotiated +ĠÑģÑĤали +ìĬ¤íģ +ogie +Ġtsunami +Ġpeeled +Ġmotivations +è¨Ń +ostat +flan +ĠDAC +Ġkav +'RE +ĠPearson +bbe +czenie +Ġatenção +íĨµëł¹ +ãģ£ãģ¡ +ĠÑĥдаÑĢ +Ġintroductory +ĠIci +ëĮĢë +akat +Ġtrench +Ġproceeded +ĠCoin +Ġderecho +ĠRede +æ¯Ľ +аннÑĭй +Ġincarcerated +ĠRichmond +Rock +ĠPav +ĠKarma +uges +Ġconteú +ë¹Ħ +Ġê·¸ë§Į +ĠGone +ĠwspóÅĤ +ĠRahmen +unken +Ġì¤ijìļĶíķľ +Ġib +Ġattaching +Hay +Ġsuka +ìį¹ +Ġpivotal +ĠRespect +ÃŃda +IB +ĠVerantwort +wiet +Ġforensic +ÑĢиÑģÑĤ +ĠпÑĢинÑĨипе +Ġmarkings +Ġkettle +ĠOpera +ĠDoctors +Ġshredded +Ġrecuer +Ġvigil +ĠFail +Ġentrev +ĠдÑĥÑĪ +Ġoutbreaks +èµ°åIJ§ +ĠÏĢο +Ġrogue +angled +Ġyearly +ĠCreed +Ġwam +Ġlotus +ê³¼ë +ãĢģãĢģ +ĠSpit +ĠItu +Ġstrains +Ġstamped +Ġplaint +Ġpotion +Ġconsolidation +è©ķ +оÑĩкÑĥ +Ġvlogging +Ġslate +ĠAuft +ĠIncor +ừng +§IJ +enh +ĠheiÃŁ +Ġdomest +ĠStrom +åį³ +akis +Ġfragen +Ġfiner +ĠSug +Ġuphill +Ġéén +âĢ¦) +ĠÑģоп +ĠCorey +Ġsiebie +Ġmuse +Ġcloves +Ġpous +ĠFinanz +ĠRoute +amat +Ġmutually +ĠвнÑĥÑĤÑĢи +ĠSelena +ëĶ +ĠGaussian +ë¶ĢíĦ° +Ġ×ij׼ +Ġejerc +å¾® +kea +ĠGerry +ĠSic +大çļĦ +Ġ1966 +iese +Ġfossils +Ġestad +ĠKane +ciÄĩ +ĠìľłíĬľë +Ġпам +ĠCruise +intérieur +Ġbekannt +ĠPode +Ġdemander +Rem +Ġinvade +Ġdecorating +ropic +Ġcowboy +ĠPhoto +opolit +Ġì»¬ëŁ¬ë +Ġreap +Ġhandwriting +à¹Ħร +Ġëļ +Ġبعد +ĠMt +ÙĢ +Ġspaceship +Ġnationalism +Ġcouncils +ĠGriffin +ĠAhmed +Ġclich +ĠOL +wl +ĠPilot +å®® +Ġacronym +Ġgels +Ġelectroly +èĵ +Ġмной +Ġepisod +ĠDieses +ĠATP +Ġediyorum +Ġexpresses +Ġexhibits +Comm +ĠкÑĢÑĥп +Ġmatar +Ġ2025 +ĠArtem +vasive +rÃł +ĠbeÅŁ +é»ĥ +Ġlizard +Ġfille +Ġì§Ī문 +ĠмоÑī +Ġtür +Ġculprit +Ġwoven +ĠANY +nim +Ġtay +Ġpromin +Ġacompa +Ġidé +Ġboiler +ĠThemen +Ġavenue +ĠMud +ĠновÑĭе +Ġwitnessing +Ġlance +ĠCHAN +ĠBever +تÙħ +Ġchemotherapy +King +ĠbÄĻdÄĻ +Ġatual +Ġtive +Ġtalkin +Ġquedar +ieÃŁ +edel +Ġìĸ´ìłľ +Ġjogar +Ġör +Ġundertaking +ĠStrength +Ġmilhões +ĠWine +ĠMolt +讲 +ãģijãĤĮ +Ġundermine +ĠArchives +vana +mercial +MC +Ġcaste +пÑĢ +Ġlegislators +ulators +ênio +Ġëį°ë +ĠÑħоÑĤиÑĤе +Ġнек +Ġsurn +Ġconsci +ĠPOW +Ġculinary +ĠKAT +ĠFolks +Ñĭваем +Ġвок +ãģijãĤĭ +service +pts +Ġпобед +æĺ¯åķĬ +Ġtents +Ġnord +STE +Ġrepublican +Ġwyk +Ġminions +èĻķ +Ġmemang +jest +Ġcomparative +Ġtyle +carbon +bedingt +ksen +Ġnegativity +Ġsjälv +Ġdú +æīĢæľī +Ġrecalled +cra +ĠTada +ĠÑĢÑĥки +ĠопÑĢедел +Ġprocrast +Ġjogos +ĠOo +ĠHearts +Ġéch +ĠksiÄħż +Ġcoarse +ĠTube +ĠGreens +Ġén +Ġdumbbell +ĠÑĤи +Ġquerer +اØŃ +Ïĥει +ĠпÑĢавилÑĮно +Ġпап +Ġcompra +Ġtér +ĠAntes +Ġoptimum +Ġbiscuit +κι +aczego +Ġìĭľê°ĦìĿ´ +ĠMarines +vero +Ġvaccinations +Ġpetty +riters +Ġал +country +Ġcounters +Ġattendant +ĠHui +ãģ¨ãģĦãģĨãģĵãģ¨ãģ§ +cka +ÑģÑĤвеннÑĭй +guy +Ġtricked +ĠRED +Ġthrilling +ÏĢοι +Ġpiggy +Ġanunci +ORTER +ĠValue +Ġrond +ĠADA +Ġposer +hores +ĠRoland +ĵ¯ +Ġnoir +Ġש×IJ× +ë°ľ +iemand +ĠпоÑĤеÑĢ +ê³³ +Ġê±± +Ġformatting +ĠLed +è§Ģçľ¾ +Ġkillers +ĠÄijấy +Ġhaar +again +!>[ +minster +Ġвли +Ġidentifier +ĠLambda +Ġtros +Ġflawless +Ġdetrimental +Ġbunları +War +Ġregião +羣çļĦæĺ¯ +ĠBike +cessors +Ġcùng +ĠRN +Ġê½ĥ +Ġküçük +ĠBeginning +íĺ¸ë +Ġgewe +Ġdenote +ĠAlberto +Ġprobiot +Ġode +Ġmolar +Ġbursting +assumed +Ġfootprints +veda +Ġsteroids +Ġflaming +ĠEller +Ġerkennen +ätzen +Ġlifecycle +ĠDOU +ĠKarena +ĠGuerra +è¿ĺæĺ¯ +Ġsinister +Ġpodéis +Ġparab +Ġoko +Ġmatéri +Ġcaric +sonaro +Ġpraticamente +ÑĥÑģа +Ġcomunque +Ġvigilant +Ġregimes +ĠShooting +Ġraids +ĠNora +ĠWieder +mens +ĠÑģод +Ġê²½ìļ°ìĹIJëĬĶ +ĠвÑħод +Ġautobi +ĠSchn +ĠRobbie +ĠFitness +ĠконÑĦ +Ġpenguin +моÑĤÑĢÑı +Ġминим +plays +Ġdelegates +Mer +Ġsistem +ĠMichaels +male +اع +Ġcách +ĠHä +Ġ×Ļ×ķ×ĵ×¢ +Ġsuperpower +Ġstron +Ġrover +Ġdépend +éĻ³ +Ġretiring +Ġvampires +Ġmerde +ĠChanging +Ġtame +Ġspokesperson +Ġcay +Ġflirting +ĠGrö +Ġwär +Ġwyb +Ġcoeur +ạnh +ĠìĻĢìĦľ +Ġconnais +ĠHundreds +ĠBea +ĠαÏĢ +pruch +Ġsociedade +ĠWhilst +ĠKait +espace +Ġchia +ĠErm +Ġë°Ķê¿ +Ġfences +ĠMortal +ê²ģ +ĠгÑĢаÑĦ +ĠHomeland +ĠJUN +isst +Ġparlar +Ġsporty +éo +Ġdeepen +ĠBehavior +éĢı +åĵĪåĵĪåĵĪ +Ġerrand +Ġrotary +ĠWellington +Wind +Ġmesela +ảng +iende +Ġexcell +ĠGenius +ĠEduardo +æľī人 +ĠÅŁunu +ĠÄ°stanbul +Ġproduto +Ġãħİãħİ +OFF +Ġwollt +çĪĨ +Ġëī´ìĬ¤ +Ġlass +Ġhertz +Ġaromatic +Ġзвон +Ġautoc +ĠLust +Ġ112 +ĠÎĹ +Ġreviewers +Ġreceptive +å°įäºĨ +ând +oglo +ĠìķĦëĭĻ +Ġngo +ÑĸÑĤи +Ã¥t +cono +Ġtekrar +Ġì£¼ê³ł +ĠgelmiÅŁ +Ġbedtime +ĠArgh +ADA +ĠгоÑĢода +ĠÄĩ +Ġalliances +giggling +Ġyerde +Ġspies +Ġgutes +çi +Ġalltid +ĠLah +ŀIJë +ĠdokÅĤad +ÙĪÙĬ +Ġtoxicity +Ġcancellation +Ġ1958 +dro +ĠìŀijìĿĢ +ĠMotorola +Ġmultin +Ġenthusiasts +ĠMighty +ĠCoconut +:ãĢĮ +ĠPictures +Ġsangre +Ġblinking +olesome +ĠìĬ¤íĥĢìĿ¼ +FP +Ġbooming +ĠдеÑģÑıÑĤ +Ġratchet +Ġtimelines +leness +Ġcages +ĠGoodnight +ometimes +Ġcunning +ĠRisk +uled +dade +Ġprata +ĠgustarÃŃa +amus +ĠJinping +Ġestrut +Ġdescobrir +ĠMÄģ +ĠAllan +ĠåĪĨ +Ġ׾ק +Ġpreserv +ĠStrawberry +Äı +Lu +Ġkro +ĠReports +ìħĶìķ¼ +Ġvalt +Ġpouvait +Ġappar +ĠBone +Ġpreferably +ĠRepública +å°±åĪ° +Ġherzlich +Ġchimney +Ġçev +Ġvisas +Ġverr +Ġcultivation +ĠArmenia +ĠвдÑĢÑĥг +Ġcockro +retched +artz +ĠлÑİдÑıм +ĠpolÃŃticas +ĠPanz +ĠAKA +ĠëĪĮ룬 +Ġerro +Ġcamper +Ġ102 +स +done +Ġhoard +ĠÐŁÐ¾ÑĤом +jeong +Ġdesta +pak +Ġinim +Ġgrowers +ĠMessage +Ġelector +engage +ĠForbes +ĠCincinnati +Ġdifférence +df +Ġspar +Ġawaits +ĠUSSR +ĠRising +ĠHoÅŁ +Ġfooting +Ġcondiciones +ÑĤоÑĢов +Ġclinician +ĠDiskuss +å£ĵ +ר×Ĵ +×¥ +iteit +gren +Ġcharisma +Ġleuke +Ġirritating +Ġcirca +ĠRhodes +Ġpior +Ġhandicap +royable +Ġvull +OG +ĠinÃŃcio +ieri +Ġsplashing +Ġdemise +Ġassistir +ÑĩÑĤо +Ġcovert +ĠGud +à¸ī +klär +ĠìŀIJ꾸 +Ġverändert +ĠREM +ĠConven +atge +Ġpierwsze +Ġclergy +lington +liv +VPN +ĠÑģожал +ĠHate +ãģ¨ãģĵãĤį +ÏĨο +ĠRespons +озд +Ġetmek +Ġchemin +ÙħØ© +Ġê°Ģ족 +Tre +Ġumas +ĠBurton +Ġpatriarch +ĠSmithsonian +¥ĺ +Moon +Air +Ġmedios +Ġeraser +Ġwollten +Ġpareil +ĠBillie +æĬ½ +еÑĢÑĤв +Ġparlament +Ġagony +ĠQUE +sequently +Another +ĠWhew +ĠAnnual +Ġseben +ìĥģìĿĦ +values +ŀľë§Į +Ġsinon +ereal +ĠEnlight +ĠChemistry +ĠCatalunya +Ġdoctr +anton +Ġstuk +ĠPlate +ĠKardashian +Ġfilos +ĠWet +ĠпопÑĭÑĤ +Ġunknowns +ĠSchon +ĠBaldwin +Ġtelescopes +ĠGucci +oxide +ĠConservative +ìĦ±ìĿĦ +Ġhinaus +Power +Ġê±´ê°ķ +Ġprevail +orman +machine +Ġ1946 +Ġunbel +Ġschaut +Ġpiel +eenth +Ġobjectively +Ġchakra +audio +Ġchicos +ĠVault +å°Ī +Ġmedicinal +ĠTail +While +Ġasphalt +Ġfroze +ĠEK +unching +nosis +2015 +ĠGri +Ġoddly +ĠMär +ĠAeg +colo +Par +Ġëĵ¤ìĸ´ë +Ġvinden +ĠOVER +Ġiced +Ġscorp +Ġhac +qualified +ĠÑĥвидеÑĤÑĮ +ermo +HEN +Ġsoi +Ġmultiples +Ġlayouts +Ġblindness +ĠBowser +ĠподÑĤ +ĠÃİ +ventional +Ġmata +madı +Ġgeez +Ġcadence +Ġważne +ĠChristie +venge +Call +Ġturnaround +Ġblob +ĠЯк +ĠVoiceover +Ġperil +ĠJaime +ĠHOY +lane +Ġsebel +ĠDuo +ĠHistorical +Ġdni +Ġgema +yk +Ġsabem +ắng +Ġvars +ĠRonnie +ĠRonaldo +ĠPerquè +nsinn +hair +Ġrelentless +Ġlyn +Ġtraveler +æĢİ麼äºĨ +nine +Ġantim +Ġì¼Ģ +Ġsnowball +ĠÑħаÑĢакÑĤеÑĢ +Ġinterns +Ġconstituency +ĠÐĿам +׾׾ +VEL +Ġviktigt +Ġapoyo +ÙĦب +Ġjard +Ġheightened +ÑĢоÑģÑĤ +ĠSMITH +Ġдела +Ġrepairing +Ġrigt +ĠSheikh +ĠBritney +Ġeverytime +Ġadventurous +ockey +ernt +Ġataque +ĠAlternatively +effect +Ġpalavras +ĠElliott +Ġréussi +Ġhypertension +ĠManual +Ġprophetic +Ġhandc +ÑĮе +Ġrefrain +ĠSquid +ìŀ¡ +Ġкоман +ällen +Ġllegó +Ġbash +iony +ĠÑģклад +Ġкаб +Ġcareless +ĠPool +Ġtrás +Ġfils +ĠSchr +Ġsprawd +ĠMonaten +Ġunforgettable +ĠCotton +Ġinconvenient +ĠRX +oris +Ġhumbled +ת×Ĺ +Ġآپ +ĠincreÃŃ +ĠKommentare +èĪĴ +ración +Ġvantage +ĠSeal +ĠìĿ´ê±°ë¥¼ +Ġjoue +ãģĿãģĨãģ§ãģĻãģŃ +Ġìĺ¤ëŀĺ +ĠиÑģпÑĭÑĤ +oben +Ġgrate +Ġcontrole +ĠPercy +ÅĤada +Ġsimultaneous +Ġprototy +ĠgroÃŁer +Ġbewusst +inizi +Ġpassieren +ĠHappiness +åīĩ +shi +geht +Ġstationed +ĠErgebnis +Ġdirectamente +Ġsurvives +Ġpersones +BERG +Ġvomiting +Ġconhecer +Ġadjour +ĠCivic +pei +burst +Ġëĭ¤ëĭĪ +éı +Ġsled +Ġplataforma +ĠSect +ĠDefin +çĻ»éĮ² +énom +chnet +Ġprofitability +Ġerreicht +á»ıi +cation +Ġì§Ģê¸ +Ġperdre +Ġfelony +Ġ1957 +æĪijå¾Ī +Ġunsuccessful +Ġnagyon +Ġelasticity +Ġfacade +Ġearthly +ĠамеÑĢикан +Ġconn +cla +Du +Ġpolitiques +Ġhalo +iantes +Ġмоей +ãĥ³ãĥī +tones +elier +è®ļ +htaking +Ġwichtige +Ġanno +ĠLok +illions +Ġviver +Ġsolchen +Ġsuf +ĠSalz +ĠNvidia +zuge +ĠSpike +Video +Ġtwor +ĠAla +èijī +Ġhanya +ĠAdm +ìĿµ +ĠPatienten +ĠOnion +ĠKobe +ĠScene +ĠRash +æ¨Ļ +ÑĢаÑģÑĤ +istani +General +leye +imbap +Ġconcealed +ĠFridays +ĠWool +ĠновÑĭÑħ +شر +Ġê²°ê³¼ +Ġjedoch +´ìĭľ +ĵ¤ëıĦ +Ġìŀ¥ëĤľ +ukt +Lou +Ġ먹ìĸ´ +ĠExpect +Ġдомой +Ġirresponsible +Ġacerca +ĠZust +ר×ĺ +UI +Ġyoutubers +ĠPositive +Ġsocioe +Ġsnatch +èĥĮ +Ġrefreshed +Ġnominations +ĠPatt +Ġobsolete +ĠdemiÅŁ +åı¤ +ormuÅŁ +ĠìĨĶì§ģíŀĪ +Ġfla +Ġcraziest +ĠZie +ĠTú +zep +icem +Ġë©ĭìŀĪ +Ġcynical +ãģĿãĤĵãģª +Ġtresp +Ġcraz +Õ¥Õ +Ġnelle +Ġmph +ĠNered +ĠKob +ĠEck +¨¸ëĭĪ +Jan +ĠТогда +Ġdeci +ĠVog +Ġbubbling +éĢĢ +úa +Ġproductos +iberal +Ġreplicated +ĠImprove +illary +Cha +Ġrédu +ĥIJíķĺë©´ +Ġconnot +ĠKrit +ĠдÑĥÑħов +Ġtreadmill +ĠPW +ĠзовÑĥÑĤ +Ġclams +Ġdrafting +Ġ1956 +unta +Ġexpenditures +ĠHoover +WOO +ÑĪее +Ġdeduction +monary +Ġrecib +Ġpovo +ĠëįĶë +ĠPAL +ĠBlow +Ġwyp +Ġdestac +deal +Graeme +Ġnécessaire +Ġdamned +Ġ1938 +Ġìĭ¤ìłľë¡ľ +Ġtroop +Ġinsightful +ĠTJ +ĠоÑģв +Ġfidelity +ĠSkip +ĠMayo +ë§Ŀ +appe +Ġblas +ĠWY +ĠGN +ctar +Su +Ġcuent +hews +Ġcorpses +Abs +Ġwastewater +Ġciek +ĠOnu +Ġexplosives +Ġarma +ĠSTEPHAN +politik +ĠOsaka +taÅĤ +Ġyapıyor +Ġizquier +Ġbeleza +ĠWyatt +åIJ¸ +Ġsuk +Ġspecjal +Ġdanke +whistle +ĠfÃŃsica +ĠHarriet +ĠìķĦíĮĮ +Ġwillkommen +iping +ĠÑģмоÑĤÑĢиÑĤе +ĠможеÑĪÑĮ +Ġinaccurate +Ġarrogance +ĠRemo +γά +assed +Ġdeliveries +Ġstinky +ĠпеÑĢеж +jay +Ġtransitional +Ġrere +ĠNGOs +ĠATM +خت +iology +Ġвлад +Ġschme +ĠShine +ìķ¡ +pants +Ġserge +Ġsenhor +Ġabduct +ĠBryant +VES +Ġawakened +ĠLaz +ropolis +ĠLao +è¾Ľèĭ¦ +Ġvilla +Ġsummers +Ġenthal +Ġ1949 +Via +Ġìĸ´ì¨ +Ġtendon +Ġviolet +Ġintellectually +Ġbounced +araus +Ġ1919 +Ġvraag +Ġspel +ĠSchwar +Scott +ĠIndo +Ġë§Ŀ +Ġcanonical +ĠIKE +ĠthatÃŃs +Ġmellan +æ¯Ĵ +igmat +Could +...?) +Ġfoarte +ĠKumar +rendo +Ġélé +à´ +valuation +cases +Ġintuitively +hong +etted +Ġsouven +Ġmorb +Ġcors +ĠNV +ĠHasan +æĥħåĨµ +ieved +Ġì§Ģê¸ĪìĿĢ +Ġdumpling +Ġcontrôle +Ġambiguity +æ©Łæľĥ +Ġcog +ĠScriptures +Ġcai +Ġbever +大家éĥ½ +Ġhuis +Ġaime +Ġerklären +ĠLM +ĠFey +éļ¾ +றத +Ġsupervised +Ġjewe +spl +ĠÑĨенÑĤÑĢ +Ġcollisions +ÙĦÙģ +ĠHogwarts +ĠDurham +×ķ×£ +Ġphosphate +Ġoversee +Ġinspections +Ġbrinc +ĠZak +Ġpayoff +Ġchaud +ĠHunger +ãos +vir +Ġfiance +Ġboug +lived +cry +åĽŀä¾Ĩ +Ġjointly +Ġgirlfriends +ĠNexus +¦¬ê²łìĬµëĭĪëĭ¤ +ĠKwang +åĵĪåĽī +å§ij +ÅĤÄĻ +ĠNeden +iece +Ġinserting +æŁĵ +ĠMummy +ĠGlobe +Ġlee +Ġgerman +Ġcreams +acho +ĠchÆ°a +ĠGalile +Ġfürs +Ġestiver +cidos +Christian +Ġlorsqu +Ġcutest +vale +ĠкÑĢеп +Ġwary +Ġslicing +Ġesperando +ĠVander +ĠDeixa +Ġ1954 +ĠmówiÄħ +ÑĸÑĶ +Ġtooling +Ġrestor +Ġposición +Ġintentar +ĠApache +OUL +ĠÙĪب +Ġmatière +ãĥ¼ãĤĵ +Ġlinen +Ġestratég +ĠMutta +顯 +è¡ĮäºĨ +Ġparting +Ġminimizing +Ġapprendre +æľĿ +Ġанглий +ĠDoo +ĠFirefox +cómo +Ġgeopolit +Ġmakan +Ġmogelijk +ĠÏĢεÏģι +Ġcứ +Ġinstaller +Ġdibuj +ĠHeath +loop +ĠBroken +HYUN +shelf +Ġfizer +Ġenhances +ä¾ĭãģĪãģ° +ĠдоÑģÑĤи +ĠPUB +ĠKollegin +Ġattained +ľ +Ġmistress +ĠOftentimes +×ŀ×Ļ×Ŀ +Ġbewe +ĠSora +rauen +baum +Ġrollers +Ġmering +ĠPAC +ĠнÑĸ +ĠRépublique +ĠÑĤÑĢав +ĠVanguard +uciones +Ġ무ëĮĢ +Ġgour +¯¤ +ĠÏī +Ġsauna +Ġpeine +ĠValerie +ĠSikh +fendimiz +bero +ĠÑĩи +ĠdoÅĽwiad +ĠEuros +Ġcommentaires +Ġtweaks +ĠFaster +ĠÑĢаÑģк +Ġprogressively +ĠEuch +boro +ĠIngred +Cap +Ġuncheck +Ġìĺ¤ë¥¸ +Ġwre +ĠFT +örung +Ġmemorized +ĠDinner +ĠPhew +oubl +Ġputa +Ġadmits +езде +opod +Ġpanda +Ġhinges +cipe +Ġtransact +Ġpodia +Ġpics +Ġcriterion +ĠOrchestra +ĠBlog +Ġsolemn +ĠPixar +Three +Ġвниз +ĠVolunte +ĠSavage +ĠPVC +ĠCaf +Ġwykon +Ġgraders +Ġcrouch +Ġcliche +Ġsoybeans +ĠMUR +ĠGonzalez +ĠMimi +ĠBolsonaro +Ġdiaphrag +Ġbilang +ëIJĺëĬĶ +éĤ£æĪijåĢij +Ġregulating +Mc +Judge +Ġнож +ĠjakÄħ +itesse +ĠWij +Ġlata +groaning +POSING +Ġ×IJ×ķת×ķ +Ġhaga +Ġgrounding +Ġviolently +Ġtills +Ġengag +ĠHollow +ĠпопÑĥлÑıÑĢ +Ġwprowad +Ġreplaces +Ġfluorescent +urgical +iggly +ĠTraditional +tte +ĠÙĦÙĩ +Ġphosphorus +Ġapron +ĠWaters +ĠKultur +авай +Ġolives +Ġ×Ķ×IJ׾ +Ġteilweise +Ġsencill +Ġprends +Ġnarrower +Ġjätte +ĠInformationen +ìĥģìĿ´ +Ġstarve +Ġfrick +ĠBeweg +ल +Ġdolphin +ĠLAUGHTER +ĠINTERVIE +åĶī +ĠyanlÄ±ÅŁ +Ġtorpedo +Ġshortages +ìĿ´ëĵľ +ıldı +Ġpaws +Ġozone +Ġcultivated +ĠFot +Ġnotor +ноз +ĠкоÑĪ +Ġtouchscreen +ĠAlly +æľĢè¿ij +Ġ맼ìŀĪìĸ´ìļĶ +ĠСеÑĢ +Ġвполне +Ġpaprika +ĠDustin +Ġefecto +Ġopini +Ġmuut +Ġhá»įc +Ġinterject +ÄĻt +Ġbutts +urez +ĠPike +ĠHok +ĠGuinea +ĠCathedral +Ġ1400 +Cra ++, +맼 +³´ëıĦë¡Ŀ +abyrin +Ġvideog +ĠоÑĢÑĥж +Ġuž +Ġbuscando +ĠAssistance +éĻ½ +Ġmelhores +ì¡´ +Ġëģ¼ +ĠRJ +ĠتÙħ +Ġomin +Ġmotorcycles +ĠSapp +Ġsupplying +ĠAlgun +Ġaerospace +×¢×ľ +occup +leist +Ġê±°ëĬĶ +Ġcompleta +bres +!( +ĠÐŁÑĢед +Ġdisadvantaged +ĠAttend +ĠJudah +á»ĭch +ylene +actly +Ġsetups +Ġammonia +ĠSchweiz +ĠShame +Ġbande +ĠFuel +Ġtroublesome +Ġnumero +ĠMOM +ĠпÑĢедлаг +mentioned +ĠболÑĮÑĪое +ĠViktor +ĠStyles +Ġcrucified +ructured +environ +Ġmorals +Ġmeditating +Ġaxial +isance +ĠAbst +Green +Ġê±´ì +Ġquadrant +Ġpergi +Ġcameraman +ĠSequ +Ġpaused +ĠLaughing +ê·Ģ +?.. +ĠÅ»e +Ġpermitir +Ġdetectors +ĠHUD +aval +ĠìĹ¬ê¸°ê¹Įì§Ģ +Ġhubs +Ġbestimmt +ĠбÑĥдеÑĤе +INTERPOSING +Ġtengan +Ġcrave +ĠBundesregierung +ĠBloody +Ġusability +ĠEas +ĠÄijá»Ļng +Ġ1955 +Ġkriegen +Ġhabitual +Ġessentials +riminal +Ġroommates +éĤ£å°± +ĠпеÑĢеÑħод +Ġnghi +Ġmening +ĠSymphony +ĠHug +aggi +Ġwied +Ġmitad +ãģ£ãģ¦ãģĦãģĨ +teenth +idaÄĩ +Save +ĠrobiÄĩ +Ġbounces +°ĸìĹIJ +stars +Ġpragmatic +Ġcognition +Ġwrapper +Ġwarten +adh +Ġpensa +ĠHertz +ĠnÄĽ +ĠReid +ĠPCs +ĠMole +Ġ..... +Ġprecio +ĠChampionships +ê°ĢëĿ½ +Ġvér +Ġcorridors +ĠElectronic +Sl +Ġале +Ġoverthrow +Ġkabul +ĠRES +ĠCyberpunk +огод +ĠÐĿав +Ġwan +Ġmanifestations +Ġcuales +ĠWise +ĠLösung +Ġexfol +Ġearns +ÑĥÑģÑĤиÑĤÑĮ +Ġsapp +ĠBraun +ĠBRANDON +ì¹Ļ +Ġsano +ĠFEL +ÑĭвайÑĤеÑģÑĮ +ождениÑı +Ġsewn +Fun +Ġreciprocal +Ġexpansive +ĠTraffic +Ġktórego +ĠÙĪس +æĺ¥ +Ġ빨 +prove +igare +Ġloh +اض +Hope +Ġdevotees +ĠGom +Ġsteals +ĠUms +ĠTwice +ãĤ² +iyim +Ġrhythmic +ĠVorte +Ġprefix +omination +Ġdato +Ġcustard +ĠVOICE +å·ŀ +Ġmeny +istors +Ġíĺij +ĠìĤ´ìķĦ +ĠíĥĦ +Ġkort +Ġaba +ĠVera +epy +Ġì¹´ë©ĶëĿ¼ +Ġsubmerged +ĠClock +Ġthumbnails +Ġboast +ĠFare +!!] +ĠÅĽm +Ġkaikki +ĠTechnologies +ìĻ¸ +ãĥĴ +иÑĤай +å°ıæĻĤ +ĠаÑĤ +Ġknobs +Ġreicht +ượng +glio +Ġ맼ìĿ´ +ê°IJìĿĦ +Ġjotka +ĠHandy +ĠHaben +nous +Ġinland +Ġamazon +hooting +SL +Ġleisten +~\" +Ġprovoke +ĠTwist +Ġ×ij×Ĺ +Ġdeparted +ê°ľë¥¼ +Ġkonse +ĠCarwyn +íķĺìĭł +idental +ESCO +Ġtteokbokki +Ġdizendo +ç·´ +ındaki +imasu +afar +Ġlandfill +Ġcorrecting +Ġclears +ĠNummer +HAM +Ġcartridges +ĠDiesel +paced +Ġobliv +Ġmoyens +ĠSinne +ĠPreis +iliz +ĠÑģмож +Ġbroaden +ä»ĸæĺ¯ +xes +Ġcarbohydrate +íĺ¹ +seok +Ġechoes +Ġcess +ë°Ķ +ĠбизнеÑģ +Ġllamado +Ġessent +ĠìĿ¼ë°ĺ +ĠAires +phen +Ġzebra +Ġsymbolism +Once +Ġracks +ĠKafka +ĠÑģеÑĢÑĮез +Ġsinn +picious +kaa +Ġmotherfucker +Ġapprenticeship +Ġrpm +Ġtaxation +Ġfurry +ĠSacred +ĠÑĢазм +pora +enges +ĠíĹĪë +ĠÑģин +Ġsanitizer +Ġcringe +ĠSca +оÑĩно +Ġofere +Ġmelodies +ĠVelvet +ĠIhrer +ĠHybrid +ĠGiov +Ġirgendwas +Ġdepende +ĠUsers +Ġhump +driving +Ġsf +Ġruthless +à¹Ģà¸Ħ +Ġlemons +Ġföret +ĠOj +Ġмама +Ġinterpersonal +Ġgev +Ġabnorm +иÑģл +Ġинд +Ġkontroll +Ġregres +Ġledge +Ġerzählt +ĠTact +Ġarrivé +Ġsubstantive +Ġspoonful +zwischen +ooooo +Ġcontenido +Ġbesl +á»ĥm +kten +Jamie +Ġsandy +ä¸įåIJĮ +âĭ +Ġpase +Ġdette +ĠBelgian +ê°ľë +ulares +rud +igor +ĠíĮ¬ë +Ġremedies +Ġblasting +ĠSich +Ġожид +Ġmonstr +Ġmanifold +Ġglauben +ĠEST +Ġstreamline +Ġlobbying +ĠGothic +toire +..' +Ġdémocr +ĠнаблÑİд +Ġwspól +ĠczÄĻÅĽÄĩ +ä¸ĭéĿ¢ +isés +gangen +Ġbezpie +remlin +ê°Ŀ +Still +Ġresides +Ġgelecek +Ġtéléphone +Ġpewn +Ġleopard +Ġcomplimentary +Ġcrib +ĠAnimals +Ġgeil +essel +Ġgarder +Ġcatchy +樹 +ĠEts +ĠCommercial +ĠDENNIS +ĠCoordinator +ĠAbigail +ffffff +ấp +Ġpequeña +Ġinjections +cekt +Ġphilanthropy +Ġpuck +Ġcelebrates +ĠDunk +ĠDlatego +ãģ¾ãģł +δή +graduate +ĠMobil +till +acam +Ġyolks +Ġtangled +Ġmaniac +Ġobliged +ĠLaink +Ġverder +ĠDamon +Ġmutant +Ġhopping +Ġreins +Ġinverter +Ġcontempt +×ł×¡ +learning +Miss +ĠÐĵоÑģ +ĠMeyer +ê»ĺìĦľ +é£İ +×ķ׳×Ļ×Ŀ +asking +Ġtrimming +Ġtreasury +Ġsente +Aust +ĠUnterstützung +ĠComedy +ĠAnakin +é¹ +ÑĢÑĥÑĤ +ĠHari +ographers +Ġoatmeal +ĠBots +ä¸įäºĨ +ĠпалÑĮ +Ġacknowledgement +xic +Ġê´Ģìĭ¬ +gasping +Ġãģķ +Ġterrace +Ġornaments +ĠMER +committee +ĠìĹĨìĬµëĭĪëĭ¤ +Ġrij +é³ +צ×Ŀ +leme +Ġliberties +Ġfellas +ĠCopper +bench +ĠIdea +á»įn +ÑĪа +Ġversión +ÏĦοÏį +ĠÐľÐ¸ +ĠпÑĢилож +Ġboxer +ĠTanner +ĠMoy +ì¹ĺëĬĶ +Thr +Ġtinham +Ġpolishing +Ġconsequently +Ġamenities +ĠKI +ĠGREEN +ĠFrankie +ниÑĤ +ittel +Ñģкое +ursed +Ġupbringing +Ġthứ +ĠìĭĿìľ¼ë¡ľ +Ġwhim +Ġchinese +confidence +ĠJeder +ãģªãģ®ãģ§ +ajcie +ĠTous +ĠPowers +ừa +othermal +ĠвÑĭÑĪе +rale +اخ +Ġì§ĢìĽIJ +Ġépisode +Ġsulph +Ġencara +kraft +aları +ĠComes +Ġdivul +ĠRudolph +ĠMuse +Ġutens +ĠìŀIJ주 +Ġpana +ĠVegeta +ĠPHP +ĠNSA +entin +ĠCarnegie +اÙĬ +iÄĻcy +Harry +Ġfır +Сп +Ġgladly +Ġaveraging +íķĺê²łìĬµëĭĪëĭ¤ +лÑıÑİÑĤÑģÑı +ĠÐľÐµÐ½Ñı +Ġquotation +rires +itchens +ayed +Ġunatt +ĠPerez +ĠоÑĤмеÑĤ +Ġtactile +ĠEuh +isini +buh +Ġhatır +ĠìŀĪìľ¼ +Ġpolicymakers +³´ìĦ¸ìļĶ +acı +Ġκι +Ġregistering +reto +ĠSprinkle +ĠGrammy +axter +Ġби +Ġsitter +Ġpredic +Ġthinly +Ġstrum +Ġaggrav +Ġaha +رج +mellow +Ġconstante +ĠLaut +iston +Ġtransitioned +ĠCambodia +ãģĦãģįãģ¾ãģĻ +è·Łå¤§å®¶ +arted +Ġmisf +ĠPunkte +Įëĵł +Ġtrembling +Ġgespannt +ĠعÙĦÙĬÙĩ +ĠникакиÑħ +Ġë¶Ģëĵľë +ĠÑĢазвиÑĤ +Ġitchy +Ġciento +Ġplains +Ġkittens +Ġbacklog +ĠPresiding +pta +Ġhavoc +ĠDarrin +ĠÐĽÑİб +Ġsegregated +Ġghetto +Ġerlebt +Ġdrugiej +ĠSixt +åıĥ +ระ +uencia +Ġíķĺ기 +ĠëĨį +Ġrobi +Ġpioneers +Ġmilliards +ĠWitcher +Ġ무ìĹĩ +orro +mass +Ġdivergence +ĠRivera +ĠNoodles +Ġendroit +ĠKosten +ĠдÑĢÑĥга +ĠmÃŃnimo +ĠKazakhstan +تÙĩ +ĠвоздÑĥ +Ġgeschrieben +ĠNil +Ñģки +ĠFrüh +Ġbeverages +æºIJ +ĠGon +æĺ¨ +Arin +ĠIntro +ocalyptic +Ġexhaustion +ĠStatus +ĠBattery +ész +£¼ë +airy +Ġë³´ìŬëĵľë +Ġdisparity +ÙĮ +ĠTucson +Ġbrightly +problem +Ġbiomass +éĻį +§ī +Ġhurdle +Ġwavelengths +Ġ<< +Ġteamed +FFFF +ĠSlim +omial +Ġunveiled +ĠVerein +ÙĤØ· +estry +Ġclás +Ġcheddar +Ġaccusing +ĠScientific +ĠбÑĥде +ĠCyrus +εÏĦε +Ĩĵê³ł +Ġë³Ħ +Ġcurd +Ġreferrals +shift +åįķ +ników +Ġmier +Ġconfronting +ê²ĥëıĦ +awl +Ġtryin +Ġê·¸ëŀĺìļĶ +Ġchiar +Ġìĺ¤ëĬĺëıĦ +æĶ¿æ²» +esque +Ġmismos +ĠShak +Ġsociaux +ĠpiÅŁ +ĠkiÅŁi +Ġcyan +hay +bew +bod +Ġι +ĠMainly +ÑİÑĤÑĮ +habitude +ĠÑģпокой +è·ŁæĪij +Ġprecon +ĠMandy +ðŁ¤£ +illos +Ġgrupp +Ġcrumble +Ġconstructor +ervices +Ġlighthouse +ĠConcept +анÑĤи +altro +hope +ĠAlleg +ìĸ´ë¥¼ +pieces +ounter +ĠíķĺëĭĪê¹Į +ĠìĿ¸íĦ°ë +Ġvéritable +Ġthreaded +blind +ĤĺëĿ¼ +Ġtrays +ĠEdison +ĠÃĸz +ĠStevie +Ġlender +Ġbrigade +Ġdeutsche +muffled +bart +Ġinsanity +Ġsavvy +Ġsensational +Ġderechos +ĠMX +ĠпÑĢеп +Ġthreatens +ĠrealtÃł +Ġindicative +Ġchops +Ġbenefiting +ĠVernon +ĠStrand +nun +quently +101 +Ġeel +ìĪĻ +rints +ĠÙħس +Ġبد +ĠпоÑģÑĤÑĢо +ĠyapmÄ±ÅŁ +Ġolması +Ġiedereen +olé +kef +Ġë°ľìĥĿ +Ġrained +Ġalmighty +ĠвÑĭд +ĠCPR +Fre +Ġinhabited +Ġarbets +Ġakin +аÑģÑĤв +vania +Ġhäufig +ĠMatte +sorry +Jenny +ĠгÑĢад +Ġwhit +Ġbrokers +å¯Ł +Ġhine +asten +ĠгÑĢÑĥ +MB +ĠPRI +Sab +Ġwrestler +Ġfacilitating +Ġehkä +ĠCred +Ġ127 +Ġnothin +Ġmandated +å¯Į +ÑĥÑĤÑģÑĤв +Frank +Ġwors +ĠdzieÅĦ +ĠUnderground +Ġznajdu +ĠBä +ĠPrinzip +аÑĤелей +Ġveterinar +Ġsplendid +Ġrozp +Ġpsychopath +igon +Ġhops +Ġcần +ĠXian +Ġtroisième +Ġproducto +ĠdeÄŁer +ĠContinuing +ивал +cık +Ġmoisturizer +White +Ġsiis +ĠEverest +ienced +Ġcảm +ĠJapon +´ìłĦ +ĠtenÃŃan +Ġencanta +Mm +Ġdropdown +ĠIya +³´ë©´ +Ġwording +ĠSqueeze +ĠMaple +Ġclarified +ĠMunicip +ĠRouge +ĠNicki +ĠGoo +volt +tek +fecture +fred +arrive +ãĥ¼ãģĦ +tez +Ep +Ġobras +ĠVID +ĠRiv +ĠModi +ibe +Ġacontecendo +Ġimitation +Ġcamouflage +Ġspanning +ĠSECRET +ĠOreo +ìĨĮ리 +Ġhunch +ĠcaÅĤe +Ġspontaneously +ĠPerd +Ġetap +ĠHole +ĠDisability +Ġafterlife +æģ© +Ġtestified +Ġpresup +Ġpetroleum +Ġcontrario +ĠAssessment +ÄŁlu +Ġpests +Ġdilig +ĠвÑģÑĤÑĢеÑĤ +Ġconséqu +Ġcannons +Ġcanoe +ĠMile +Ġcitoy +Ġbegged +ĠMinnie +ÅĤych +Ġprincipe +ÏĢÏĮν +mniej +Ġwert +Ġëĭ¤ëĵ¤ +anse +Ġuncles +Ġprovocative +Ġintersections +Ġdemocrats +ĠJulius +инки +ygusal +Ġ׾×ķ +Ġgjorde +Ġgasket +ĠBock +ĠÄ°n +breat +ĠEquity +ardı +Ġканале +Ġдней +ĠtỼi +Ġfixture +Ġabuses +Ġvaya +Ġouvert +Ġmulticultural +Ġcontexto +ĠSesame +Ġdépl +Ġconsomm +ĠParte +Ġpem +ĠConan +ĠбÑĸлÑĮ +Ġpersuaded +Ġdrains +Moo +FORE +ĠбаÑĤ +Ġfod +ĠProducts +ì§Ħì§ľ +Ġ\"[ +ĠWick +ĠNaruto +нали +ryw +Ġlodge +Ġinh +Ġvontade +Ġdij +ĠJesús +Looking +Ġforearm +ĠIntegration +ĠHARRIS +Ġtoolbar +leader +Ġseldom +ĠбÑĢоÑģ +ĠKook +онд +Ġmonopol +Ġmillet +Ġlira +ĠAsians +Ġ1890 +ciÄŁim +Ġeden +ĠIKEA +ĠNeighbor +ĠKazuya +üd +Ġpsychedel +Ġenvisioned +åĿĹ +Ġï·» +Ġwunder +ĠBulgaria +Brid +Ġmarrow +Ġdepiction +ĠTin +ĠPharise +Ġeinzige +Ġblindly +ãģĽãģ¦ +Ġdefens +Dire +Ġvibrating +Ġtrolls +Ġdisrespectful +Ġwod +Ġstimuli +Ġcreeping +Ġclairement +Ġscariest +Ġdécouvrir +Ġ104 +ĠвеÑĢÑħ +ĠÅĤat +Ġróżne +Ġbarley +ĠRepl +ĠTwe +kke +ĠãģĿãĤĮ +ĠRedmi +ĠMetroid +ĠήÏĦαν +Check +ĠSEN +Ġido +ÑĤоÑĢии +óp +UNKNOWN +Ġändern +ĠJuice +ĠGesicht +å°±æľĥ +ĠнаÑģÑĤолÑĮко +íĥķ +ÂŃ +exhales +Ġì´ī +Ġjsem +ÏĢÏīÏĤ +Ġitt +ëªħìĿ´ +Ġremix +Ġblossoms +ĠRenee +isations +ìĬ¤íĦ° +Ġë³´ìĿ´ëĬĶ +uestas +opedia +ĠAim +ìĿ´ì¦Ī +scene +Ġleakage +uckt +Sad +Ask +Ġsuspense +Ġimpost +ĠStrategic +ĠItÃŃs +âĢĮ +Ġkeyboards +Ġamusing +ogr +iderman +ŀĸ +ĠвижÑĥ +Ġdips +Ġapologized +ĠSTAR +Ġescuela +ĠChing +нениÑı +Ġë¶Ģë¶ĦìĿ´ +ĠFleet +Ġsamb +Ġentsprechend +Ġelectrodes +ĠFreiheit +æĪijä¸įçŁ¥éģĵ +ĠShrim +iÃŁe +Ġselections +Ġfordi +Ġdoss +ÑıÑĩ +Ġdiscriminate +ĠAuÃŁerdem +Ġdesenvolv +ĠInternal +ĠBenedict +å¯Ĩ +ĠShiv +Missy +ĠобнаÑĢÑĥж +ĠнаÑģÑĤÑĢо +Ġcontrolar +ĠLia +Ġopioids +antu +Ġcupboard +æģIJ +ге +achts +Ġcurated +Ġxem +Ġweary +Ġbrethren +Ġbudgeting +Ġpourtant +éļ» +aisia +ĠоÑĤвеÑĩ +ĠGIS +μαι +Ġש×Ķ×ķ×IJ +Ġsaud +ĠlỼ +ÐķТ +ubine +ĠнÑĥжен +Ġkidnapping +Ġbrat +ĠTerre +ĠMonet +Ġë§ĪìĬ¤íģ +Ġflashy +ĠISBN +Ġfreelance +iage +Ġjunge +충 +ceral +ĠÑĤоÑĩки +Ġformulate +ĠFER +ĠDartmouth +ìľ¼ë©´ìĦľ +å¢ĥ +owiÄħ +ĠëĶĶìŀIJ +Ġregiment +Ġmetabolismo +ĠParr +Ġ충ë¶Ħ +Ġsanity +ĠLal +ĠGö +ĠGla +Ġproto +Ġmicroscopic +Ġkang +ĠScalia +Ġpug +ĠScore +ĠSavannah +Ġgarde +ĠNOR +å°įåIJ§ +Ġscheint +ĠpóÅĤ +Ġcorri +Ġbrute +ĠÅĤad +ä»ĸ们 +Ġsucceeding +Ġbicycles +Non +Ġseekers +Ġunconditional +Ġrhymes +ĠGarage +Ġinvoice +Ġcanvi +neck +Ġcustomizable +iritual +Queen +íķĺìĭľëĬĶ +Ġpowerless +Ġcsak +ä¸įä¼ļ +isoft +ĠìłķíĻķ +Ġnhân +ĠMAND +ĠHaf +Ġrevolves +ä¹Łåı¯ä»¥ +ovan +aroo +ĠGrind +éĽª +Ġindispensable +Ġconsulted +ĠClinical +Acc +Ġolhos +Ġmonter +ĠHana +etah +Ġvaan +Ġtigers +Ġcaucus +ðŁĺĤ +³´ìŀIJ +powers +iums +ĠíĨłë +Ġtradicional +Ġresonated +Ġìĭłê¸° +them +Robert +Ġelemento +Ġantid +ĠобÑģ +Ġnatives +Ġloca +owment +ĠTight +ĠæĢĿ +Ġmelan +ĠNue +amis +Ġsorgen +asına +Home +ĠPUBG +Ġawfully +ĠShore +ĠPerché +ĠLau +ĠCinderella +ĠChest +Ġsemantic +Ġdeserted +ĠMomo +ĠHernandez +genes +ĠAdult +иÑĩеÑģкого +oshima +ĠcaracterÃŃsticas +ĠKL +´ìŀ¥ +ocar +Ġfehlt +Ġdruk +ĠPoppy +ENGLISH +ĠVergleich +Brien +Ġrecomp +ĠÑģд +Ġmerger +Ġmarketers +Ġhoneymoon +Ġpenso +Ġbelli +еÑĤÑĥ +Ġbanker +Camera +ĠStall +ĠStamp +ĠBite +ежде +Ġsür +Ġgüç +ĠPassover +ĠBugün +ĠÑģожалениÑİ +Ġниз +Ġmanure +Ġglacier +è«ĩ +RAY +terror +Ġsalads +Ġhurricanes +ĠDesigner +atorio +Ġfactual +ĠTammy +ĠзвÑĥÑĩ +Ġintroductions +Ġhousekeeping +Ġhanger +ëĭĺë +akte +ĠCola +'] +ĠGender +оÑĢон +ipse +icias +Ġsuccessive +Ġpolitic +Ġhöher +ĠQiao +ĠGimme +Ġлож +Ġseb +ĠWeiter +ĠSakura +ĠBoulder +ĠAmérica +peÅĤnie +ĠtecnologÃŃa +ishops +fur +Ġmoonlight +Ġdispersed +Ġrez +енное +алÑĮнÑĥÑİ +ĠTwelve +ĠHOR +ìĭ¤íŀĪ +ilage +Ġshaded +Ġresumes +ĠPeanut +ĠMILL +apons +ĠUFC +ĠSole +Ġjoystick +ĠOlivier +warming +Ġsyllabus +ĠобÑīе +Ġhiá»ĩn +Ġfesta +Ġcradle +ĠZac +Ġremembrance +Ġê°ĻìķĦìĦľ +ĠpiÄĻk +Ġcoexist +ĠVII +Ġáreas +Ġuważ +Ġobservers +Ġmänniskor +coon +ĠDAM +Ġnaszym +Ġalligator +ĠFreeze +ĠEstate +ĠÑĤÑĢади +Ġundercover +Ġnies +ĠFehler +plin +ĠKabul +ilate +Ġê³łìĸij +Ġmop +ìĦ¼ +Ġanderer +ĠKELL +оки +ĠжеÑģÑĤ +Ġgrazing +ĠdaÃŃ +Ġcapitalize +Ġapex +Ġnurturing +Ġcortar +Ġcontrac +ımızı +Ġtandem +éĥ½æľī +gement +ĠÑģиÑģÑĤема +Ġmanque +iajÄħ +WOR +Ġاب +Ġcarts +ANO +Ġë°Ľê³ł +ĠCena +ĠBiology +idar +Ġaż +erne +anu +Ġthanked +Ġsubmarines +Ġmanic +Ġмоз +ä¼Ĭ +instant +essential +Ġsamurai +Ġpasti +Ġalan +Ġbroch +Ġbaker +ĠGuill +¨¼ +Ġwithdrawn +ëĭĿ +Perfect +quency +Ġstreamlined +Ġ1300 +´ëıĦ +Ġëĸłë +Ġãģ¯ãģĦ +Ġhvad +ä¸Ģå®ļè¦ģ +Ġverbally +ĠKons +Ġì¡°ìĭ¬ +Ġdiez +æİ°æİ° +Ġchuckling +ĠMih +Ġrallies +Ġmanter +Ġearnest +super +Ġgece +ĠRend +ĠGerade +jenigen +ĠVall +ĠìŀĪëĤĺ +ĠÑģказала +Ġtrabalh +ĠнаÑĪем +ĠмеÑħ +ikit +Ġnouns +Ġneurological +Ġmotivational +ĠMcMahon +ĠFinished +Ġë³´ìĿ´ +ĠFields +Ġadolescents +ĠTisch +ĠNeben +ĠFlowers +ĠEnerg +Ġdiret +ĠThi +ĠPicas +æĥľ +æĢİä¹Īæł· +Ġavete +ĠFors +ĠChapel +Não +Et +ĠÑģодеÑĢж +reno +Ġsven +ĠdostÄĻp +nee +ĠSnapdragon +ĠIDs +ìķĺëĬĶëį° +ר×ļ +Ġsunflower +Ġperpetual +ç³ĸ +Ġknights +Ġgird +ĠTold +Ġvolcanoes +Ġadversary +ĠEconomy +Ġextrapol +Ġbluetooth +Ġzooming +Ġskys +Ġgenial +ÃŃculos +ambre +ĠмеÑĢ +Ġteeny +Ġstressing +ìķĮ +ONY +Ġtranslucent +Ġrounding +Ġgrues +×Ļ׳×Ķ +après +Ġprueba +Ġpolygon +Ġblueberry +ĠProgramm +Ġtrenches +Ġsebagai +Ġpalate +Ġlaude +Ġbehaved +Ġlongitudinal +ĠModule +Ġadmir +λι +Greg +Ġwyst +Ġpropagate +Ġmolds +ĠTub +ĠLoud +usto +Ġunstoppable +Ġreinforcing +éĿŀ常çļĦ +ĠпÑĢоблема +Ġpotencial +Ġhemp +ìŀĶ +य +Ġoptic +Ġerfolgreich +ÑģÑĭ +олÑĮÑĪе +urst +ĠPois +Ġrespondents +Ġnehme +ĠExternal +olate +Hyun +Ġquartz +Ġmathematician +Ġbásicamente +Ġail +ìłľë¥¼ +attutto +Ġnooit +Ġafflict +ĠOlga +èŃ· +ĠнаÑĤ +Ġdites +Ġrealidade +Ġkän +Ġuniqueness +Ġpadres +Ġsubsidi +Ġpigeons +βα +stad +Ġderen +ĠСлед +doo +ĠопиÑģании +Ġamber +Ġgoosebumps +ĠfrÃ¥gor +ĠVital +ĠIsraelites +wasser +Isn +Ġcommits +ĠSTEVEN +ĠBevölker +uitive +Ġlegen +Ġbruk +иÑĢован +ynen +helm +Ġgenerational +ĠLändern +οιÏĢÏĮν +uzu +Ġcaller +онÑĮ +ümü +Ġbesar +Ġplats +Ġmigrated +Ġjap +ĠWAR +Ġdissect +ĠZusch +ĠZeiten +ĠLions +ĠDF +âĶ +кив +Ġpedestrians +ĠMarilyn +dock +Ġyht +Ġreincarn +ĠSono +ĠGrowth +ÑĥÑģов +Ġdungeons +Ġbagus +kich +ĠÑĥкÑĢаÑĹ +éĨ« +ĠKeller +chemistry +Japanese +Ġwillst +Ġdecomposition +ĠÑģÑĤен +Ġrevived +íķĻêµIJ +ĠÅĵ +ä½IJ +ìĭ¸ +ippy +Ġhourly +jän +ĠWorkshop +Ŀ¼ìĦľ +Ġcuarto +Ġpatrim +ĠBurch +ĠìŀĪ기 +Ġhepat +ĠhÃłng +ĠëĮĢíķ´ +ĠваÑĪи +Ġrework +Ġparse +Ġçıktı +ĠSax +ĠMongo +ĠAaah +ramble +DJ +Ġstabilized +ĠSpeech +Books +Ġhurdles +ĠWO +ĠLamborg +Ġ1933 +Ġvorbere +Ġclinically +Ġbreathtaking +ĠGateway +пеÑĢвÑĭÑħ +uters +Ġë¹µ +Ġyeter +Ġpulley +Ġmuffin +ĠPrefer +ĠPence +Ġinformação +ìĬ¤íĬ¸ë +ãĤ¸ãĥ£ +ĠTurtle +ĠRegina +ĠLoad +does +panze +¸Ķ +Ġmina +ĠLatinos +ammers +ĠTort +ĠBeyonce +имоÑģÑĤи +ĠвопÑĢоÑģÑĭ +Ġbulun +èĢĮå·² +inek +bereich +Ġpasture +ĠOA +ĠMelt +ĠEtt +ĠDY +Ġobwohl +Ġleagues +ÑĤеÑģÑĮ +ĠкÑĥÑģ +Ġvors +Ġtopp +ographical +asst +Ġlindo +Ġë°ĿíĺĶ +Ġréfl +Ġclimbs +Ġvarsa +Ġmethyl +ĠKarere +Æ°á»Ł +Rad +Ġpreparedness +онÑĩ +ĠOD +ĠCGI +Ġम +Ġspeechless +Ġlasci +Ġbolag +ĠÑħоÑĩеÑĤÑģÑı +Ġgrieving +ĠJohannes +ĠCarroll +adaki +Ī¬ë +ĠsÅĤu +Ġinnerhalb +Ġgymnastics +пÑĢи +ifiques +Ġkarate +Ġdomu +ãģĿãĤĮãģ§ +OTHER +Ġdemandé +Ġbooklet +ĠKyoto +Ġwoh +ĠMarÃŃa +violent +JE +Ġlóg +Ġbrutally +cot +ĠÙħÛĮ +ĠWarsz +å®Ī +wol +Ġmikä +ĠPronounce +ĠBrendan +Ġroup +Ġitaliano +å¦ĤæѤ +ĠкомпÑĮÑİÑĤ +Ġurging +edes +Ġcarbono +ĠRichardson +ĠÐĿаÑĩ +ĠTrainer +ĠCrimea +Ġdiapers +Ġcovet +ĠMahar +ĠHutch +ĠAusw +berty +Ġindifferent +кÑĢеÑĤ +uldade +Ġharms +¢ÙĨ +lesia +Ġgio +ĠMistress +ĠKnox +ĠFREE +Ġ루ë +ĠнаÑĪа +Ġinvincible +Ġmaiden +ĠJeez +Ġbreve +pole +Ġcriticisms +ĠRusia +म +phin +ĠCompare +ĠBON +Ġsneaking +ĠRails +ĠGeral +Ġ1953 +Hola +ĠопÑĭÑĤ +Ġrainforest +Ġbelum +ĠObi +ĠISS +ãĤĮãģªãģĦ +ĠСв +Ġblond +Ġwzgl +ĠpowiedziaÅĤ +Ġchoking +ĠSongs +ĠBiraz +Ġyells +Ġstylist +ÏĮÏĦε +Ġschreiben +ĠJaw +ĠEleven +ĠRif +/. +Ġìĺ¤ëŀľë§Į +Ġtreaties +uffed +ĠâĪĴ +Ġroofs +à¹Ģส +Ġë» +Ġsparkle +ĠKiev +ĠArgu +erecht +ĠÐĿадо +ĠFIL +Ġmolta +ĠDevi +Ġcampe +Ġbenevol +ĠTough +Ġmoim +Ġevacuate +Ġerrado +å©Ĩ +ÑĢÑĥго +Ġíİĺ +ĠÎĵια +Ġweaken +Ġilluminated +Ġsiglo +ĠVacc +ией +alis +ĠÑĥÑģÑĤÑĢой +Ġdona +ÅĤos +üman +Ġproducción +Ġclot +ĠMango +Ġuneasy +Ġshuts +ĠExamples +vell +ebe +Ġpromptly +ĠTeles +ĠпÑĢоÑĪл +Ġpuerta +Ġüberzeug +Ġcoch +social +ĠBenson +ĠMeth +ĠExped +Ġsupplemental +Ġconceive +Ġ×ĺ×ķ×ij +Ġcaptivity +ıĻìķĪ +ĠÑħÑĥд +forming +Ġuploads +Ġturbulence +joint +Ġsatisfactory +ĠAnime +Ġwashes +Ġliberals +ĠSunshine +ĠREAL +ublik +binary +Tony +Ġpolarized +Ġenriched +taking +ĠëģĿëĤĺ +Ġpleasures +Ġextermin +inese +atl +vär +аÑĢÑĭ +ĠmyÅĽ +narrator +Ġодном +ĠnajwiÄĻ +Ġmobilize +Ġmillor +Ġata +æ·· +ĠpolÃŃtico +Ġplead +Ġpainters +ĠSow +оÑĦ +ĠìĺĽëĤł +ĠÑĩÑĤоб +Ġsabor +ĠUndert +ĠJERRY +Å¡ÃŃ +Ġë°ĸìĹIJ +Ġprécéd +Ġannotation +ĠInaudible +Ġtextured +Ġfisherman +vordan +icherung +ĠìłģìĿ´ +Ġgezeigt +Ġmandates +Ġbeak +ĠTWO +ĠAkbar +ilian +Ġtiếp +Ġsuperiority +inku +Ġlys +ĠFCC +ĠCPA +ustering +nicos +anja +Ġchills +ĠCage +Ġsealing +Ġsaç +Ġdedans +ĠAlger +Ġspezie +Ġcoloss +ıyı +clockwise +Ġexactamente +Ġiemand +amı +Ġmandar +raj +faced +agua +Ġê¹Ķë +Ġinsbesondere +Ġdrizzle +Ġdiminish +ĠYoda +AI +Ġbilmiyorum +ĠMMA +ategory +ĠпеÑĢеп +Ġparticipar +Ġnormalized +Ġcomplexities +æ´² +æݧ +аÑĢов +mist +icha +Group +Ġresiliency +Ġnogle +ĠCNC +prü +Ġphysicists +нок +LI +Ġstuffs +Ġsistemas +Ġinterfering +ĠMarvin +ército +ĠìĹĨê³ł +Ġsonic +Ġequiv +Ġabord +ĠRamen +Ġ09 +medim +atiques +ĠделаÑİÑĤ +Ġunanimously +Ġskirts +ĠíĬ¹ë³Ħ +ĠPrix +kami +Ġfruition +Ġbirthdays +иком +Ġinaugural +Ġcorrelate +ĠTory +ĠëĤĺìģ +Ġdew +ĠPrecis +ihi +Ġë¬¸ìłľê°Ģ +Ġciting +ĠLana +ĠKag +Ġplaythrough +ĠProtocol +frist +hovah +Ġmerciful +Ġbilingual +ĠGuitar +rh +Ġglamorous +ĠVikings +ĠOoooh +íķĺëĬĶëį° +ĠUganda +Ġcollapses +entry +Ġantioxidants +ëĤĺë +ÑĪаÑı +Ġtrivia +Ġgäller +Ġfungi +Ġmilks +Ġdicht +μη +poke +ĠвÑĭпÑĥÑģк +Ġfeeder +ĠAlcohol +hower +Ġdeserving +ĠRebel +iosis +Ġ103 +Ġhandout +Ġenm +Ġlandlords +Ġgeology +rils +Ġcobra +ĠVold +ĠPanch +ĠGREG +Ġpross +Ġbracelets +ĠVega +Ġrozum +款 +азд +ĠLynd +ĠHonors +Ġsurrendered +Ġlibrarians +125 +ĠÑģиг +Ġuniformly +ĠEagles +ìķĻ +иÑĤан +andid +ĠìłĪëĮĢ +Ġض +Ġarrests +ĠCSV +ĠAzerbaijan +ortic +ĠDX +ĠAdventures +Ġabus +ĠFau +Ġschlimm +Ġrattling +Ġconsumes +ĠTolkien +Ġresurrected +ĠXY +íĬ¸ê°Ģ +ĠвÑĭÑģÑĤÑĥп +ĠAngie +żenia +Mic +ĠSheila +achtet +Ġoverst +Ġlâ +Ġineffective +æĿ¡ +æĢİä¹ĪäºĨ +å¿Ļ +Ġwichtiger +Ġvino +Ġpum +Ġangled +ĠPione +ĠMỹ +ãģĿãĤĮãģ¯ +woÅĽÄĩ +draw +ัà¹Ī +markets +Ġcafes +ĠCem +âĿ¤ +ĠSuit +MK +Ġemphasizes +Ġtortilla +Ġmejorar +ĠSurviv +casting +Ġeducación +ĠGum +uely +ĠìĹ¬ê¸°ëĬĶ +Ġstretchy +ença +Ġwithhold +Ġexiting +Ġenthalpy +ĠTransit +ılmÄ±ÅŁ +alies +Ġsalvar +Ġleaned +ĠgroÃŁes +Ġfitt +аки +Sarah +Ġhostel +Ġfingerna +ĠnadziejÄĻ +wives +Rec +Ġspool +аÑĤов +ĠEnemy +Ġfury +Ġdetta +ĠFay +éļ¨ +ÑıÑİÑĤ +Ġaproximadamente +Ġsilos +Ġmagist +Ġcree +ĠKrank +ĠDOWN +Ġstartled +Ġreborn +ĠUmwelt +ĠSuzanne +ниÑĨÑĭ +outez +ĠJAC +yards +radas +rau +ipts +hail +Ġparagraphs +Ġmeglio +Ġisolating +Ġaceite +ĠHarsh +Ġcyst +ĠBlockchain +ĠÑħоÑĢоÑĪий +Ġvirtuous +Ġinvestigación +Ġdevoir +Ġmasturb +ĠSale +ÙĬرة +ĠΧ +ĠStraÃŁen +Ġdikk +Ġafore +ĠJungkook +Ġchociaż +ĠDebatte +Ġweirdly +Ġviaje +regist +Help +Ġkinderen +Ġformulated +Ġenfim +ĠTowards +коÑĹ +ivering +ĠдеÑĤи +charger +Ġpurl +Ġacademically +ĠNurse +Ġdeleting +ayo +Ġrefusal +Ġdepicts +ĠDracula +Ġtoasted +ĠZombie +ĠSuperior +ĠBold +Ġquizzes +Ġgle +450 +Ġcomeço +ynn +Ġverst +ĠOlaf +Ġpomoc +ĠSask +ëĺ +ĠTCP +ĠProperty +íķĺì£ł +à¸ľà¸¡ +boom +aros +ĠÑĢоÑģÑģий +ĠбÑĭваеÑĤ +åĩºåİ» +ĠìĿ´ìķ¼ê¸°ë¥¼ +Ġcombien +vacc +Ġebenfalls +para +Ġзм +Ġdesperation +ordre +Ġש׾×Ļ +Ġgenerously +ĠÐŀк +Ġorbiting +> +<|startoftranscript|> +<|en|> +<|zh|> +<|de|> +<|es|> +<|ru|> +<|ko|> +<|fr|> +<|ja|> +<|pt|> +<|tr|> +<|pl|> +<|ca|> +<|nl|> +<|ar|> +<|sv|> +<|it|> +<|id|> +<|hi|> +<|fi|> +<|vi|> +<|he|> +<|uk|> +<|el|> +<|ms|> +<|cs|> +<|ro|> +<|da|> +<|hu|> +<|ta|> +<|no|> +<|th|> +<|ur|> +<|hr|> +<|bg|> +<|lt|> +<|la|> +<|mi|> +<|ml|> +<|cy|> +<|sk|> +<|te|> +<|fa|> +<|lv|> +<|bn|> +<|sr|> +<|az|> +<|sl|> +<|kn|> +<|et|> +<|mk|> +<|br|> +<|eu|> +<|is|> +<|hy|> +<|ne|> +<|mn|> +<|bs|> +<|kk|> +<|sq|> +<|sw|> +<|gl|> +<|mr|> +<|pa|> +<|si|> +<|km|> +<|sn|> +<|yo|> +<|so|> +<|af|> +<|oc|> +<|ka|> +<|be|> +<|tg|> +<|sd|> +<|gu|> +<|am|> +<|yi|> +<|lo|> +<|uz|> +<|fo|> +<|ht|> +<|ps|> +<|tk|> +<|nn|> +<|mt|> +<|sa|> +<|lb|> +<|my|> +<|bo|> +<|tl|> +<|mg|> +<|as|> +<|tt|> +<|haw|> +<|ln|> +<|ha|> +<|ba|> +<|jw|> +<|su|> +<|translate|> +<|transcribe|> +<|startoflm|> +<|startofprev|> +<|nocaptions|> +<|notimestamps|> +<|0.00|> +<|0.02|> +<|0.04|> +<|0.06|> +<|0.08|> +<|0.10|> +<|0.12|> +<|0.14|> +<|0.16|> +<|0.18|> +<|0.20|> +<|0.22|> +<|0.24|> +<|0.26|> +<|0.28|> +<|0.30|> +<|0.32|> +<|0.34|> +<|0.36|> +<|0.38|> +<|0.40|> +<|0.42|> +<|0.44|> +<|0.46|> +<|0.48|> +<|0.50|> +<|0.52|> +<|0.54|> +<|0.56|> +<|0.58|> +<|0.60|> +<|0.62|> +<|0.64|> +<|0.66|> +<|0.68|> +<|0.70|> +<|0.72|> +<|0.74|> +<|0.76|> +<|0.78|> +<|0.80|> +<|0.82|> +<|0.84|> +<|0.86|> +<|0.88|> +<|0.90|> +<|0.92|> +<|0.94|> +<|0.96|> +<|0.98|> +<|1.00|> +<|1.02|> +<|1.04|> +<|1.06|> +<|1.08|> +<|1.10|> +<|1.12|> +<|1.14|> +<|1.16|> +<|1.18|> +<|1.20|> +<|1.22|> +<|1.24|> +<|1.26|> +<|1.28|> +<|1.30|> +<|1.32|> +<|1.34|> +<|1.36|> +<|1.38|> +<|1.40|> +<|1.42|> +<|1.44|> +<|1.46|> +<|1.48|> +<|1.50|> +<|1.52|> +<|1.54|> +<|1.56|> +<|1.58|> +<|1.60|> +<|1.62|> +<|1.64|> +<|1.66|> +<|1.68|> +<|1.70|> +<|1.72|> +<|1.74|> +<|1.76|> +<|1.78|> +<|1.80|> +<|1.82|> +<|1.84|> +<|1.86|> +<|1.88|> +<|1.90|> +<|1.92|> +<|1.94|> +<|1.96|> +<|1.98|> +<|2.00|> +<|2.02|> +<|2.04|> +<|2.06|> +<|2.08|> +<|2.10|> +<|2.12|> +<|2.14|> +<|2.16|> +<|2.18|> +<|2.20|> +<|2.22|> +<|2.24|> +<|2.26|> +<|2.28|> +<|2.30|> +<|2.32|> +<|2.34|> +<|2.36|> +<|2.38|> +<|2.40|> +<|2.42|> +<|2.44|> +<|2.46|> +<|2.48|> +<|2.50|> +<|2.52|> +<|2.54|> +<|2.56|> +<|2.58|> +<|2.60|> +<|2.62|> +<|2.64|> +<|2.66|> +<|2.68|> +<|2.70|> +<|2.72|> +<|2.74|> +<|2.76|> +<|2.78|> +<|2.80|> +<|2.82|> +<|2.84|> +<|2.86|> +<|2.88|> +<|2.90|> +<|2.92|> +<|2.94|> +<|2.96|> +<|2.98|> +<|3.00|> +<|3.02|> +<|3.04|> +<|3.06|> +<|3.08|> +<|3.10|> +<|3.12|> +<|3.14|> +<|3.16|> +<|3.18|> +<|3.20|> +<|3.22|> +<|3.24|> +<|3.26|> +<|3.28|> +<|3.30|> +<|3.32|> +<|3.34|> +<|3.36|> +<|3.38|> +<|3.40|> +<|3.42|> +<|3.44|> +<|3.46|> +<|3.48|> +<|3.50|> +<|3.52|> +<|3.54|> +<|3.56|> +<|3.58|> +<|3.60|> +<|3.62|> +<|3.64|> +<|3.66|> +<|3.68|> +<|3.70|> +<|3.72|> +<|3.74|> +<|3.76|> +<|3.78|> +<|3.80|> +<|3.82|> +<|3.84|> +<|3.86|> +<|3.88|> +<|3.90|> +<|3.92|> +<|3.94|> +<|3.96|> +<|3.98|> +<|4.00|> +<|4.02|> +<|4.04|> +<|4.06|> +<|4.08|> +<|4.10|> +<|4.12|> +<|4.14|> +<|4.16|> +<|4.18|> +<|4.20|> +<|4.22|> +<|4.24|> +<|4.26|> +<|4.28|> +<|4.30|> +<|4.32|> +<|4.34|> +<|4.36|> +<|4.38|> +<|4.40|> +<|4.42|> +<|4.44|> +<|4.46|> +<|4.48|> +<|4.50|> +<|4.52|> +<|4.54|> +<|4.56|> +<|4.58|> +<|4.60|> +<|4.62|> +<|4.64|> +<|4.66|> +<|4.68|> +<|4.70|> +<|4.72|> +<|4.74|> +<|4.76|> +<|4.78|> +<|4.80|> +<|4.82|> +<|4.84|> +<|4.86|> +<|4.88|> +<|4.90|> +<|4.92|> +<|4.94|> +<|4.96|> +<|4.98|> +<|5.00|> +<|5.02|> +<|5.04|> +<|5.06|> +<|5.08|> +<|5.10|> +<|5.12|> +<|5.14|> +<|5.16|> +<|5.18|> +<|5.20|> +<|5.22|> +<|5.24|> +<|5.26|> +<|5.28|> +<|5.30|> +<|5.32|> +<|5.34|> +<|5.36|> +<|5.38|> +<|5.40|> +<|5.42|> +<|5.44|> +<|5.46|> +<|5.48|> +<|5.50|> +<|5.52|> +<|5.54|> +<|5.56|> +<|5.58|> +<|5.60|> +<|5.62|> +<|5.64|> +<|5.66|> +<|5.68|> +<|5.70|> +<|5.72|> +<|5.74|> +<|5.76|> +<|5.78|> +<|5.80|> +<|5.82|> +<|5.84|> +<|5.86|> +<|5.88|> +<|5.90|> +<|5.92|> +<|5.94|> +<|5.96|> +<|5.98|> +<|6.00|> +<|6.02|> +<|6.04|> +<|6.06|> +<|6.08|> +<|6.10|> +<|6.12|> +<|6.14|> +<|6.16|> +<|6.18|> +<|6.20|> +<|6.22|> +<|6.24|> +<|6.26|> +<|6.28|> +<|6.30|> +<|6.32|> +<|6.34|> +<|6.36|> +<|6.38|> +<|6.40|> +<|6.42|> +<|6.44|> +<|6.46|> +<|6.48|> +<|6.50|> +<|6.52|> +<|6.54|> +<|6.56|> +<|6.58|> +<|6.60|> +<|6.62|> +<|6.64|> +<|6.66|> +<|6.68|> +<|6.70|> +<|6.72|> +<|6.74|> +<|6.76|> +<|6.78|> +<|6.80|> +<|6.82|> +<|6.84|> +<|6.86|> +<|6.88|> +<|6.90|> +<|6.92|> +<|6.94|> +<|6.96|> +<|6.98|> +<|7.00|> +<|7.02|> +<|7.04|> +<|7.06|> +<|7.08|> +<|7.10|> +<|7.12|> +<|7.14|> +<|7.16|> +<|7.18|> +<|7.20|> +<|7.22|> +<|7.24|> +<|7.26|> +<|7.28|> +<|7.30|> +<|7.32|> +<|7.34|> +<|7.36|> +<|7.38|> +<|7.40|> +<|7.42|> +<|7.44|> +<|7.46|> +<|7.48|> +<|7.50|> +<|7.52|> +<|7.54|> +<|7.56|> +<|7.58|> +<|7.60|> +<|7.62|> +<|7.64|> +<|7.66|> +<|7.68|> +<|7.70|> +<|7.72|> +<|7.74|> +<|7.76|> +<|7.78|> +<|7.80|> +<|7.82|> +<|7.84|> +<|7.86|> +<|7.88|> +<|7.90|> +<|7.92|> +<|7.94|> +<|7.96|> +<|7.98|> +<|8.00|> +<|8.02|> +<|8.04|> +<|8.06|> +<|8.08|> +<|8.10|> +<|8.12|> +<|8.14|> +<|8.16|> +<|8.18|> +<|8.20|> +<|8.22|> +<|8.24|> +<|8.26|> +<|8.28|> +<|8.30|> +<|8.32|> +<|8.34|> +<|8.36|> +<|8.38|> +<|8.40|> +<|8.42|> +<|8.44|> +<|8.46|> +<|8.48|> +<|8.50|> +<|8.52|> +<|8.54|> +<|8.56|> +<|8.58|> +<|8.60|> +<|8.62|> +<|8.64|> +<|8.66|> +<|8.68|> +<|8.70|> +<|8.72|> +<|8.74|> +<|8.76|> +<|8.78|> +<|8.80|> +<|8.82|> +<|8.84|> +<|8.86|> +<|8.88|> +<|8.90|> +<|8.92|> +<|8.94|> +<|8.96|> +<|8.98|> +<|9.00|> +<|9.02|> +<|9.04|> +<|9.06|> +<|9.08|> +<|9.10|> +<|9.12|> +<|9.14|> +<|9.16|> +<|9.18|> +<|9.20|> +<|9.22|> +<|9.24|> +<|9.26|> +<|9.28|> +<|9.30|> +<|9.32|> +<|9.34|> +<|9.36|> +<|9.38|> +<|9.40|> +<|9.42|> +<|9.44|> +<|9.46|> +<|9.48|> +<|9.50|> +<|9.52|> +<|9.54|> +<|9.56|> +<|9.58|> +<|9.60|> +<|9.62|> +<|9.64|> +<|9.66|> +<|9.68|> +<|9.70|> +<|9.72|> +<|9.74|> +<|9.76|> +<|9.78|> +<|9.80|> +<|9.82|> +<|9.84|> +<|9.86|> +<|9.88|> +<|9.90|> +<|9.92|> +<|9.94|> +<|9.96|> +<|9.98|> +<|10.00|> +<|10.02|> +<|10.04|> +<|10.06|> +<|10.08|> +<|10.10|> +<|10.12|> +<|10.14|> +<|10.16|> +<|10.18|> +<|10.20|> +<|10.22|> +<|10.24|> +<|10.26|> +<|10.28|> +<|10.30|> +<|10.32|> +<|10.34|> +<|10.36|> +<|10.38|> +<|10.40|> +<|10.42|> +<|10.44|> +<|10.46|> +<|10.48|> +<|10.50|> +<|10.52|> +<|10.54|> +<|10.56|> +<|10.58|> +<|10.60|> +<|10.62|> +<|10.64|> +<|10.66|> +<|10.68|> +<|10.70|> +<|10.72|> +<|10.74|> +<|10.76|> +<|10.78|> +<|10.80|> +<|10.82|> +<|10.84|> +<|10.86|> +<|10.88|> +<|10.90|> +<|10.92|> +<|10.94|> +<|10.96|> +<|10.98|> +<|11.00|> +<|11.02|> +<|11.04|> +<|11.06|> +<|11.08|> +<|11.10|> +<|11.12|> +<|11.14|> +<|11.16|> +<|11.18|> +<|11.20|> +<|11.22|> +<|11.24|> +<|11.26|> +<|11.28|> +<|11.30|> +<|11.32|> +<|11.34|> +<|11.36|> +<|11.38|> +<|11.40|> +<|11.42|> +<|11.44|> +<|11.46|> +<|11.48|> +<|11.50|> +<|11.52|> +<|11.54|> +<|11.56|> +<|11.58|> +<|11.60|> +<|11.62|> +<|11.64|> +<|11.66|> +<|11.68|> +<|11.70|> +<|11.72|> +<|11.74|> +<|11.76|> +<|11.78|> +<|11.80|> +<|11.82|> +<|11.84|> +<|11.86|> +<|11.88|> +<|11.90|> +<|11.92|> +<|11.94|> +<|11.96|> +<|11.98|> +<|12.00|> +<|12.02|> +<|12.04|> +<|12.06|> +<|12.08|> +<|12.10|> +<|12.12|> +<|12.14|> +<|12.16|> +<|12.18|> +<|12.20|> +<|12.22|> +<|12.24|> +<|12.26|> +<|12.28|> +<|12.30|> +<|12.32|> +<|12.34|> +<|12.36|> +<|12.38|> +<|12.40|> +<|12.42|> +<|12.44|> +<|12.46|> +<|12.48|> +<|12.50|> +<|12.52|> +<|12.54|> +<|12.56|> +<|12.58|> +<|12.60|> +<|12.62|> +<|12.64|> +<|12.66|> +<|12.68|> +<|12.70|> +<|12.72|> +<|12.74|> +<|12.76|> +<|12.78|> +<|12.80|> +<|12.82|> +<|12.84|> +<|12.86|> +<|12.88|> +<|12.90|> +<|12.92|> +<|12.94|> +<|12.96|> +<|12.98|> +<|13.00|> +<|13.02|> +<|13.04|> +<|13.06|> +<|13.08|> +<|13.10|> +<|13.12|> +<|13.14|> +<|13.16|> +<|13.18|> +<|13.20|> +<|13.22|> +<|13.24|> +<|13.26|> +<|13.28|> +<|13.30|> +<|13.32|> +<|13.34|> +<|13.36|> +<|13.38|> +<|13.40|> +<|13.42|> +<|13.44|> +<|13.46|> +<|13.48|> +<|13.50|> +<|13.52|> +<|13.54|> +<|13.56|> +<|13.58|> +<|13.60|> +<|13.62|> +<|13.64|> +<|13.66|> +<|13.68|> +<|13.70|> +<|13.72|> +<|13.74|> +<|13.76|> +<|13.78|> +<|13.80|> +<|13.82|> +<|13.84|> +<|13.86|> +<|13.88|> +<|13.90|> +<|13.92|> +<|13.94|> +<|13.96|> +<|13.98|> +<|14.00|> +<|14.02|> +<|14.04|> +<|14.06|> +<|14.08|> +<|14.10|> +<|14.12|> +<|14.14|> +<|14.16|> +<|14.18|> +<|14.20|> +<|14.22|> +<|14.24|> +<|14.26|> +<|14.28|> +<|14.30|> +<|14.32|> +<|14.34|> +<|14.36|> +<|14.38|> +<|14.40|> +<|14.42|> +<|14.44|> +<|14.46|> +<|14.48|> +<|14.50|> +<|14.52|> +<|14.54|> +<|14.56|> +<|14.58|> +<|14.60|> +<|14.62|> +<|14.64|> +<|14.66|> +<|14.68|> +<|14.70|> +<|14.72|> +<|14.74|> +<|14.76|> +<|14.78|> +<|14.80|> +<|14.82|> +<|14.84|> +<|14.86|> +<|14.88|> +<|14.90|> +<|14.92|> +<|14.94|> +<|14.96|> +<|14.98|> +<|15.00|> +<|15.02|> +<|15.04|> +<|15.06|> +<|15.08|> +<|15.10|> +<|15.12|> +<|15.14|> +<|15.16|> +<|15.18|> +<|15.20|> +<|15.22|> +<|15.24|> +<|15.26|> +<|15.28|> +<|15.30|> +<|15.32|> +<|15.34|> +<|15.36|> +<|15.38|> +<|15.40|> +<|15.42|> +<|15.44|> +<|15.46|> +<|15.48|> +<|15.50|> +<|15.52|> +<|15.54|> +<|15.56|> +<|15.58|> +<|15.60|> +<|15.62|> +<|15.64|> +<|15.66|> +<|15.68|> +<|15.70|> +<|15.72|> +<|15.74|> +<|15.76|> +<|15.78|> +<|15.80|> +<|15.82|> +<|15.84|> +<|15.86|> +<|15.88|> +<|15.90|> +<|15.92|> +<|15.94|> +<|15.96|> +<|15.98|> +<|16.00|> +<|16.02|> +<|16.04|> +<|16.06|> +<|16.08|> +<|16.10|> +<|16.12|> +<|16.14|> +<|16.16|> +<|16.18|> +<|16.20|> +<|16.22|> +<|16.24|> +<|16.26|> +<|16.28|> +<|16.30|> +<|16.32|> +<|16.34|> +<|16.36|> +<|16.38|> +<|16.40|> +<|16.42|> +<|16.44|> +<|16.46|> +<|16.48|> +<|16.50|> +<|16.52|> +<|16.54|> +<|16.56|> +<|16.58|> +<|16.60|> +<|16.62|> +<|16.64|> +<|16.66|> +<|16.68|> +<|16.70|> +<|16.72|> +<|16.74|> +<|16.76|> +<|16.78|> +<|16.80|> +<|16.82|> +<|16.84|> +<|16.86|> +<|16.88|> +<|16.90|> +<|16.92|> +<|16.94|> +<|16.96|> +<|16.98|> +<|17.00|> +<|17.02|> +<|17.04|> +<|17.06|> +<|17.08|> +<|17.10|> +<|17.12|> +<|17.14|> +<|17.16|> +<|17.18|> +<|17.20|> +<|17.22|> +<|17.24|> +<|17.26|> +<|17.28|> +<|17.30|> +<|17.32|> +<|17.34|> +<|17.36|> +<|17.38|> +<|17.40|> +<|17.42|> +<|17.44|> +<|17.46|> +<|17.48|> +<|17.50|> +<|17.52|> +<|17.54|> +<|17.56|> +<|17.58|> +<|17.60|> +<|17.62|> +<|17.64|> +<|17.66|> +<|17.68|> +<|17.70|> +<|17.72|> +<|17.74|> +<|17.76|> +<|17.78|> +<|17.80|> +<|17.82|> +<|17.84|> +<|17.86|> +<|17.88|> +<|17.90|> +<|17.92|> +<|17.94|> +<|17.96|> +<|17.98|> +<|18.00|> +<|18.02|> +<|18.04|> +<|18.06|> +<|18.08|> +<|18.10|> +<|18.12|> +<|18.14|> +<|18.16|> +<|18.18|> +<|18.20|> +<|18.22|> +<|18.24|> +<|18.26|> +<|18.28|> +<|18.30|> +<|18.32|> +<|18.34|> +<|18.36|> +<|18.38|> +<|18.40|> +<|18.42|> +<|18.44|> +<|18.46|> +<|18.48|> +<|18.50|> +<|18.52|> +<|18.54|> +<|18.56|> +<|18.58|> +<|18.60|> +<|18.62|> +<|18.64|> +<|18.66|> +<|18.68|> +<|18.70|> +<|18.72|> +<|18.74|> +<|18.76|> +<|18.78|> +<|18.80|> +<|18.82|> +<|18.84|> +<|18.86|> +<|18.88|> +<|18.90|> +<|18.92|> +<|18.94|> +<|18.96|> +<|18.98|> +<|19.00|> +<|19.02|> +<|19.04|> +<|19.06|> +<|19.08|> +<|19.10|> +<|19.12|> +<|19.14|> +<|19.16|> +<|19.18|> +<|19.20|> +<|19.22|> +<|19.24|> +<|19.26|> +<|19.28|> +<|19.30|> +<|19.32|> +<|19.34|> +<|19.36|> +<|19.38|> +<|19.40|> +<|19.42|> +<|19.44|> +<|19.46|> +<|19.48|> +<|19.50|> +<|19.52|> +<|19.54|> +<|19.56|> +<|19.58|> +<|19.60|> +<|19.62|> +<|19.64|> +<|19.66|> +<|19.68|> +<|19.70|> +<|19.72|> +<|19.74|> +<|19.76|> +<|19.78|> +<|19.80|> +<|19.82|> +<|19.84|> +<|19.86|> +<|19.88|> +<|19.90|> +<|19.92|> +<|19.94|> +<|19.96|> +<|19.98|> +<|20.00|> +<|20.02|> +<|20.04|> +<|20.06|> +<|20.08|> +<|20.10|> +<|20.12|> +<|20.14|> +<|20.16|> +<|20.18|> +<|20.20|> +<|20.22|> +<|20.24|> +<|20.26|> +<|20.28|> +<|20.30|> +<|20.32|> +<|20.34|> +<|20.36|> +<|20.38|> +<|20.40|> +<|20.42|> +<|20.44|> +<|20.46|> +<|20.48|> +<|20.50|> +<|20.52|> +<|20.54|> +<|20.56|> +<|20.58|> +<|20.60|> +<|20.62|> +<|20.64|> +<|20.66|> +<|20.68|> +<|20.70|> +<|20.72|> +<|20.74|> +<|20.76|> +<|20.78|> +<|20.80|> +<|20.82|> +<|20.84|> +<|20.86|> +<|20.88|> +<|20.90|> +<|20.92|> +<|20.94|> +<|20.96|> +<|20.98|> +<|21.00|> +<|21.02|> +<|21.04|> +<|21.06|> +<|21.08|> +<|21.10|> +<|21.12|> +<|21.14|> +<|21.16|> +<|21.18|> +<|21.20|> +<|21.22|> +<|21.24|> +<|21.26|> +<|21.28|> +<|21.30|> +<|21.32|> +<|21.34|> +<|21.36|> +<|21.38|> +<|21.40|> +<|21.42|> +<|21.44|> +<|21.46|> +<|21.48|> +<|21.50|> +<|21.52|> +<|21.54|> +<|21.56|> +<|21.58|> +<|21.60|> +<|21.62|> +<|21.64|> +<|21.66|> +<|21.68|> +<|21.70|> +<|21.72|> +<|21.74|> +<|21.76|> +<|21.78|> +<|21.80|> +<|21.82|> +<|21.84|> +<|21.86|> +<|21.88|> +<|21.90|> +<|21.92|> +<|21.94|> +<|21.96|> +<|21.98|> +<|22.00|> +<|22.02|> +<|22.04|> +<|22.06|> +<|22.08|> +<|22.10|> +<|22.12|> +<|22.14|> +<|22.16|> +<|22.18|> +<|22.20|> +<|22.22|> +<|22.24|> +<|22.26|> +<|22.28|> +<|22.30|> +<|22.32|> +<|22.34|> +<|22.36|> +<|22.38|> +<|22.40|> +<|22.42|> +<|22.44|> +<|22.46|> +<|22.48|> +<|22.50|> +<|22.52|> +<|22.54|> +<|22.56|> +<|22.58|> +<|22.60|> +<|22.62|> +<|22.64|> +<|22.66|> +<|22.68|> +<|22.70|> +<|22.72|> +<|22.74|> +<|22.76|> +<|22.78|> +<|22.80|> +<|22.82|> +<|22.84|> +<|22.86|> +<|22.88|> +<|22.90|> +<|22.92|> +<|22.94|> +<|22.96|> +<|22.98|> +<|23.00|> +<|23.02|> +<|23.04|> +<|23.06|> +<|23.08|> +<|23.10|> +<|23.12|> +<|23.14|> +<|23.16|> +<|23.18|> +<|23.20|> +<|23.22|> +<|23.24|> +<|23.26|> +<|23.28|> +<|23.30|> +<|23.32|> +<|23.34|> +<|23.36|> +<|23.38|> +<|23.40|> +<|23.42|> +<|23.44|> +<|23.46|> +<|23.48|> +<|23.50|> +<|23.52|> +<|23.54|> +<|23.56|> +<|23.58|> +<|23.60|> +<|23.62|> +<|23.64|> +<|23.66|> +<|23.68|> +<|23.70|> +<|23.72|> +<|23.74|> +<|23.76|> +<|23.78|> +<|23.80|> +<|23.82|> +<|23.84|> +<|23.86|> +<|23.88|> +<|23.90|> +<|23.92|> +<|23.94|> +<|23.96|> +<|23.98|> +<|24.00|> +<|24.02|> +<|24.04|> +<|24.06|> +<|24.08|> +<|24.10|> +<|24.12|> +<|24.14|> +<|24.16|> +<|24.18|> +<|24.20|> +<|24.22|> +<|24.24|> +<|24.26|> +<|24.28|> +<|24.30|> +<|24.32|> +<|24.34|> +<|24.36|> +<|24.38|> +<|24.40|> +<|24.42|> +<|24.44|> +<|24.46|> +<|24.48|> +<|24.50|> +<|24.52|> +<|24.54|> +<|24.56|> +<|24.58|> +<|24.60|> +<|24.62|> +<|24.64|> +<|24.66|> +<|24.68|> +<|24.70|> +<|24.72|> +<|24.74|> +<|24.76|> +<|24.78|> +<|24.80|> +<|24.82|> +<|24.84|> +<|24.86|> +<|24.88|> +<|24.90|> +<|24.92|> +<|24.94|> +<|24.96|> +<|24.98|> +<|25.00|> +<|25.02|> +<|25.04|> +<|25.06|> +<|25.08|> +<|25.10|> +<|25.12|> +<|25.14|> +<|25.16|> +<|25.18|> +<|25.20|> +<|25.22|> +<|25.24|> +<|25.26|> +<|25.28|> +<|25.30|> +<|25.32|> +<|25.34|> +<|25.36|> +<|25.38|> +<|25.40|> +<|25.42|> +<|25.44|> +<|25.46|> +<|25.48|> +<|25.50|> +<|25.52|> +<|25.54|> +<|25.56|> +<|25.58|> +<|25.60|> +<|25.62|> +<|25.64|> +<|25.66|> +<|25.68|> +<|25.70|> +<|25.72|> +<|25.74|> +<|25.76|> +<|25.78|> +<|25.80|> +<|25.82|> +<|25.84|> +<|25.86|> +<|25.88|> +<|25.90|> +<|25.92|> +<|25.94|> +<|25.96|> +<|25.98|> +<|26.00|> +<|26.02|> +<|26.04|> +<|26.06|> +<|26.08|> +<|26.10|> +<|26.12|> +<|26.14|> +<|26.16|> +<|26.18|> +<|26.20|> +<|26.22|> +<|26.24|> +<|26.26|> +<|26.28|> +<|26.30|> +<|26.32|> +<|26.34|> +<|26.36|> +<|26.38|> +<|26.40|> +<|26.42|> +<|26.44|> +<|26.46|> +<|26.48|> +<|26.50|> +<|26.52|> +<|26.54|> +<|26.56|> +<|26.58|> +<|26.60|> +<|26.62|> +<|26.64|> +<|26.66|> +<|26.68|> +<|26.70|> +<|26.72|> +<|26.74|> +<|26.76|> +<|26.78|> +<|26.80|> +<|26.82|> +<|26.84|> +<|26.86|> +<|26.88|> +<|26.90|> +<|26.92|> +<|26.94|> +<|26.96|> +<|26.98|> +<|27.00|> +<|27.02|> +<|27.04|> +<|27.06|> +<|27.08|> +<|27.10|> +<|27.12|> +<|27.14|> +<|27.16|> +<|27.18|> +<|27.20|> +<|27.22|> +<|27.24|> +<|27.26|> +<|27.28|> +<|27.30|> +<|27.32|> +<|27.34|> +<|27.36|> +<|27.38|> +<|27.40|> +<|27.42|> +<|27.44|> +<|27.46|> +<|27.48|> +<|27.50|> +<|27.52|> +<|27.54|> +<|27.56|> +<|27.58|> +<|27.60|> +<|27.62|> +<|27.64|> +<|27.66|> +<|27.68|> +<|27.70|> +<|27.72|> +<|27.74|> +<|27.76|> +<|27.78|> +<|27.80|> +<|27.82|> +<|27.84|> +<|27.86|> +<|27.88|> +<|27.90|> +<|27.92|> +<|27.94|> +<|27.96|> +<|27.98|> +<|28.00|> +<|28.02|> +<|28.04|> +<|28.06|> +<|28.08|> +<|28.10|> +<|28.12|> +<|28.14|> +<|28.16|> +<|28.18|> +<|28.20|> +<|28.22|> +<|28.24|> +<|28.26|> +<|28.28|> +<|28.30|> +<|28.32|> +<|28.34|> +<|28.36|> +<|28.38|> +<|28.40|> +<|28.42|> +<|28.44|> +<|28.46|> +<|28.48|> +<|28.50|> +<|28.52|> +<|28.54|> +<|28.56|> +<|28.58|> +<|28.60|> +<|28.62|> +<|28.64|> +<|28.66|> +<|28.68|> +<|28.70|> +<|28.72|> +<|28.74|> +<|28.76|> +<|28.78|> +<|28.80|> +<|28.82|> +<|28.84|> +<|28.86|> +<|28.88|> +<|28.90|> +<|28.92|> +<|28.94|> +<|28.96|> +<|28.98|> +<|29.00|> +<|29.02|> +<|29.04|> +<|29.06|> +<|29.08|> +<|29.10|> +<|29.12|> +<|29.14|> +<|29.16|> +<|29.18|> +<|29.20|> +<|29.22|> +<|29.24|> +<|29.26|> +<|29.28|> +<|29.30|> +<|29.32|> +<|29.34|> +<|29.36|> +<|29.38|> +<|29.40|> +<|29.42|> +<|29.44|> +<|29.46|> +<|29.48|> +<|29.50|> +<|29.52|> +<|29.54|> +<|29.56|> +<|29.58|> +<|29.60|> +<|29.62|> +<|29.64|> +<|29.66|> +<|29.68|> +<|29.70|> +<|29.72|> +<|29.74|> +<|29.76|> +<|29.78|> +<|29.80|> +<|29.82|> +<|29.84|> +<|29.86|> +<|29.88|> +<|29.90|> +<|29.92|> +<|29.94|> +<|29.96|> +<|29.98|> +<|30.00|> \ No newline at end of file diff --git a/examples/BuddyWhisper/whisper-main.cpp b/examples/BuddyWhisper/whisper-main.cpp new file mode 100644 index 000000000..7d69ea307 --- /dev/null +++ b/examples/BuddyWhisper/whisper-main.cpp @@ -0,0 +1,183 @@ +//===- whisper-main.cpp ---------------------------------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// +// +// This file implements an example for Whisper Model Inference. +// +// ------------------------------------------------------------------------===// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace buddy; +using namespace dap; + +constexpr size_t ParamsSize = 99148800; +constexpr size_t MaxVocabSize = 51865; +constexpr size_t MaxTokenLength = 448; + +/// Declare Whisper forward function. +extern "C" void _mlir_ciface_forward(MemRef *, MemRef *, + MemRef *, MemRef *); + +// ----------------------------------------------------------------------------- +// Helper Functions +// ----------------------------------------------------------------------------- + +/// Print [Log] label in bold blue format. +void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } + +/// Print information for each iteration. +void printIterInfo(size_t iterIdx, std::string str, double time) { + std::cout << "\033[32;1m[Iteration " << iterIdx << "] \033[0m"; + std::cout << "Token: " << str << " | " + << "Time: " << time << "s" << std::endl; +} + +/// Load parameters into data container. +void loadParameters(const std::string ¶mFilePath, + MemRef ¶ms) { + const auto loadStart = std::chrono::high_resolution_clock::now(); + std::ifstream paramFile(paramFilePath, std::ios::in | std::ios::binary); + if (!paramFile.is_open()) { + throw std::runtime_error("[Error] Failed to open params file!"); + } + printLogLabel(); + std::cout << "Loading params..." << std::endl; + printLogLabel(); + std::cout << "Params file: " << std::filesystem::canonical(paramFilePath) + << std::endl; + paramFile.read(reinterpret_cast(params.getData()), + sizeof(float) * (params.getSize())); + if (paramFile.fail()) { + throw std::runtime_error("Error occurred while reading params file!"); + } + paramFile.close(); + const auto loadEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration loadTime = + loadEnd - loadStart; + printLogLabel(); + std::cout << "Params load time: " << (double)(loadTime.count()) / 1000 + << "s\n" + << std::endl; +} + +/// Conduct audio data preprocess. +void runPreprocess(dap::Audio &rawAudioContainer, + MemRef &audioFeatures) { + printLogLabel(); + std::cout << "Preprocessing audio..." << std::endl; + const auto loadStart = std::chrono::high_resolution_clock::now(); + dap::whisperPreprocess(&rawAudioContainer, &audioFeatures); + const auto loadEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration loadTime = + loadEnd - loadStart; + printLogLabel(); + std::cout << "Audio preprocess time: " << (double)(loadTime.count()) / 1000 + << "s\n" + << std::endl; +} + +/// Find the index of the max value. +int findMaxIndex(const float *start, const float *end) { + return std::distance(start, std::max_element(start, end)); +} + +// ----------------------------------------------------------------------------- +// Whisper Inference Main Entry +// ----------------------------------------------------------------------------- + +int main() { + + /// Print the title of this example. + const std::string title = "Whisper Inference Powered by Buddy Compiler"; + std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; + + /// Define directories of vacabulary and parameter file. + const std::string vocabDir = "../../examples/BuddyWhisper/vocab.txt"; + const std::string paramsDir = "../../examples/BuddyWhisper/arg0.data"; + + /// Initialize data containers + // - Result container + // - Output container. + // - Parameters container. + Text outputContainer; + Audio rawAudioContainer("../../examples/BuddyWhisper/audio.wav"); + MemRef audioInput({1, 80, 3000}); + MemRef resultContainer[2] = { + MemRef({1, 1500, 512}, false, 0), + MemRef({1, 448, MaxVocabSize}, false, 0), + }; + MemRef textContainer({1, MaxTokenLength}, 50258); + MemRef paramsContainer({ParamsSize}); + + /// Fill data into containers + // - Output: register vocabulary. + // - Parameters: load parameters from the `arg0` file into the container. + // - Input: compute audioInput. + outputContainer.loadVocab(vocabDir); + loadParameters(paramsDir, paramsContainer); + runPreprocess(rawAudioContainer, audioInput); + + /// Run Whisper Inference + // - Perform the forward function. + // - Find and append the generated token. + // - Continue iterating until the terminal condition is met. + + for (size_t i = 0; i < MaxTokenLength - 1; i++) { + const auto inferenceStart = std::chrono::high_resolution_clock::now(); + // Execute the forward pass of the model. + _mlir_ciface_forward(resultContainer, ¶msContainer, &audioInput, + &textContainer); + const auto inferenceEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration inferenceTime = + inferenceEnd - inferenceStart; + + // Determine the generated token. + const float *startPtr = resultContainer[1].getData() + i * MaxVocabSize; + const float *endPtr = startPtr + MaxVocabSize; + + int maxIndex = findMaxIndex(startPtr, endPtr); + std::string tok = outputContainer.getStr(maxIndex); + // Print the generated token and inference time. + printIterInfo(i, tok, inferenceTime.count() / 1000); + + // Stop if the end token (50257, <|endoftext|>) is generated. + if (maxIndex == 50257) { + break; + } + // Append the generated token into the output container. + textContainer.getData()[i + 1] = maxIndex; + outputContainer.appendTokenIdx(maxIndex); + + free(resultContainer[0].release()); + free(resultContainer[1].release()); + } + + /// Print the final result + std::cout << "\033[33;1m[Output]\033[0m " << outputContainer.revertWhisper() + << std::endl; + + return 0; +} diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 7ec0d3b4f..3aa1195d1 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -16,6 +16,14 @@ if (BUDDY_LENET_EXAMPLES) add_subdirectory(BuddyLeNet) endif() +if(BUDDY_WHISPER_EXAMPLES) + add_subdirectory(BuddyWhisper) +endif() + +if (BUDDY_MOBILENETV3_EXAMPLES) + add_subdirectory(BuddyMobileNetV3) +endif() + if(BUDDY_DSL_EXAMPLES) add_subdirectory(ToyDSL) endif() @@ -31,6 +39,7 @@ set(BUDDY_EXAMPLES_DEPENDS FileCheck count not buddy-opt buddy-translate + mlir-cpu-runner ) add_lit_testsuite(check-examples "Checking the buddy-mlir examples..." diff --git a/examples/ConvOpt/CMakeLists.txt b/examples/ConvOpt/CMakeLists.txt index 83aa26b68..e01f2b46c 100644 --- a/examples/ConvOpt/CMakeLists.txt +++ b/examples/ConvOpt/CMakeLists.txt @@ -16,14 +16,14 @@ message(STATUS "Spliting size: ${SPLITING_SIZE}") add_custom_command(OUTPUT conv2d.o COMMAND ${CMAKE_BINARY_DIR}/bin/buddy-opt ${BUDDY_EXAMPLES_DIR}/ConvOpt/conv2d.mlir -conv-vectorization="strip-mining=${SPLITING_SIZE}" -lower-affine -convert-scf-to-cf -convert-vector-to-llvm -finalize-memref-to-llvm -llvm-request-c-wrappers -convert-func-to-llvm -reconcile-unrealized-casts | - ${LLVM_MLIR_BINARY_DIR}/mlir-translate --mlir-to-llvmir | - ${LLVM_MLIR_BINARY_DIR}/llc -mtriple=${BUDDY_TARGET_TRIPLE} -mattr=${BUDDY_OPT_ATTR} --filetype=obj -o ${BUDDY_BINARY_DIR}/../examples/ConvOpt/conv2d.o + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate --mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llc -mtriple=${BUDDY_TARGET_TRIPLE} -mattr=${BUDDY_OPT_ATTR} --filetype=obj -o ${BUDDY_BINARY_DIR}/../examples/ConvOpt/conv2d.o DEPENDS buddy-opt) # add_custom_command(OUTPUT conv2d.o -# COMMAND ${LLVM_MLIR_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/ConvOpt/conv2d.mlir -convert-linalg-to-loops -convert-scf-to-cf -convert-linalg-to-llvm -lower-affine -convert-scf-to-cf --finalize-memref-to-llvm -convert-func-to-llvm='emit-c-wrappers=1' -reconcile-unrealized-casts | -# ${LLVM_MLIR_BINARY_DIR}/mlir-translate --mlir-to-llvmir | -# ${LLVM_MLIR_BINARY_DIR}/llc -mtriple=${BUDDY_OPT_TRIPLE} -mattr=${BUDDY_OPT_ATTR} --filetype=obj -o ${BUDDY_BINARY_DIR}/../examples/ConvOpt/conv2d.o +# COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/ConvOpt/conv2d.mlir -convert-linalg-to-loops -convert-scf-to-cf -convert-linalg-to-llvm -lower-affine -convert-scf-to-cf --finalize-memref-to-llvm -convert-func-to-llvm='emit-c-wrappers=1' -reconcile-unrealized-casts | +# ${LLVM_TOOLS_BINARY_DIR}/mlir-translate --mlir-to-llvmir | +# ${LLVM_TOOLS_BINARY_DIR}/llc -mtriple=${BUDDY_OPT_TRIPLE} -mattr=${BUDDY_OPT_ATTR} --filetype=obj -o ${BUDDY_BINARY_DIR}/../examples/ConvOpt/conv2d.o # DEPENDS buddy-opt) add_library(Conv2D STATIC conv2d.o) diff --git a/examples/DAPDialect/CMakeLists.txt b/examples/DAPDialect/CMakeLists.txt index b147d5604..dff9b10ff 100644 --- a/examples/DAPDialect/CMakeLists.txt +++ b/examples/DAPDialect/CMakeLists.txt @@ -20,6 +20,7 @@ add_executable(buddy-fir FIRLowpass.cpp) add_dependencies(buddy-fir buddy-opt) target_link_libraries(buddy-fir BuddyLibDAP + mlir_c_runner_utils ) #------------------------------------------------------------------------------- @@ -30,6 +31,7 @@ add_executable(buddy-biquad biquad.cpp) add_dependencies(buddy-biquad buddy-opt) target_link_libraries(buddy-biquad BuddyLibDAP + mlir_c_runner_utils ) #------------------------------------------------------------------------------- @@ -40,10 +42,23 @@ add_executable(buddy-iir-scalar IIRLowpass.cpp) add_dependencies(buddy-iir-scalar buddy-opt) target_link_libraries(buddy-iir-scalar BuddyLibDAP + mlir_c_runner_utils ) add_executable(buddy-iir-vectorization IIRVectorization.cpp) add_dependencies(buddy-iir-vectorization buddy-opt) target_link_libraries(buddy-iir-vectorization - BuddyLibDAPVectorization + BuddyLibDAP + mlir_c_runner_utils +) + +#------------------------------------------------------------------------------- +# Buddy DAP Dialect WhisperPreprocess Operation +#------------------------------------------------------------------------------- + +add_executable(buddy-whisper-preprocess WhisperPreprocess.cpp) +add_dependencies(buddy-whisper-preprocess buddy-opt) +target_link_libraries(buddy-whisper-preprocess + BuddyLibDAP + mlir_c_runner_utils ) diff --git a/examples/DAPDialect/FIRLowpass.cpp b/examples/DAPDialect/FIRLowpass.cpp index cfce56091..3a8217730 100644 --- a/examples/DAPDialect/FIRLowpass.cpp +++ b/examples/DAPDialect/FIRLowpass.cpp @@ -14,45 +14,76 @@ // //===----------------------------------------------------------------------===// // -// This file implements an end to end example for fir filter in buddy-mlir. It -// generates coefficients for a filter and apply it on a piece of mono audio, -// then saves the audio. -// This file will be linked with the object file generated by mlir to generate -// the executable file. +// An end-to-end example of an FIR (Finite Impulse Response) operation in +// buddy-mlir. // //===----------------------------------------------------------------------===// #include +#include #include using namespace dap; using namespace std; -int main(int argc, char *argv[]) { - string fileName = "../../tests/Interface/core/NASA_Mars.wav"; - ; - string saveFileName = "FIR_NASA_Mars.wav"; - if (argc >= 2) { - fileName = argv[1]; - } - if (argc == 3) { - saveFileName = argv[2]; - } - cout << "Usage: FIRLowpass [loadPath] [savePath]" << endl; - cout << "Current specified path: \n"; - cout << "Load: " << fileName << endl; - cout << "Save: " << saveFileName << endl; +// Print [Log] label in bold blue format. +void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } + +int main() { + // Print the title of this example. + const std::string title = "FIR Operation Powered by Buddy Compiler"; + std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; + + // Generate the kernel for a FIR filter operation. + // Params: + // Input kernel: Stores generated kernel data. + // Type: Specifies the window type from the WINDOW_TYPE enum class. + // Length: The length of the filter. + // Cutoff: The lowpass cutoff frequency. + // Argument: Filter-specific arguments, with size limited by the + // WINDOW_TYPE. intptr_t kernelSize = 100; MemRef kernel(&kernelSize); - dap::firLowpass(kernel, dap::WINDOW_TYPE::BLACKMANHARRIS7, - kernelSize, 0.3, nullptr); - auto aud = dap::Audio(fileName); - aud.getAudioFile().printSummary(); - dap::Audio output; - output.fetchMetadata(aud.getAudioFile()); - output.getAudioFile().setAudioBuffer(nullptr); - dap::fir(&aud.getMemRef(), &kernel, &output.getMemRef()); - cout << "Saving file:" << endl; - cout << (output.save(saveFileName) ? "OK" : "ERROR") << endl; + dap::firLowpass(/*input=*/kernel, + /*type=*/dap::WINDOW_TYPE::BLACKMANHARRIS7, + /*len=*/kernelSize, /*cutoff=*/0.3, + /*args=*/nullptr); + + // Initialize data containers. + // Params: + // Input container: Stores the raw audio data. + // Returns: + // Output memory reference: Provides a MemRef for saving the output. + Audio inputContainer("../../tests/Interface/core/TestAudio.wav"); + intptr_t samplesNum = static_cast(inputContainer.getSamplesNum()); + MemRef outputMemRef(&samplesNum); + + // Apply the FIR filter operation to the audio data. + printLogLabel(); + std::cout << "Running FIR operation..." << std::endl; + const auto loadStart = std::chrono::high_resolution_clock::now(); + dap::fir(&inputContainer, &kernel, &outputMemRef); + const auto loadEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration loadTime = + loadEnd - loadStart; + printLogLabel(); + std::cout << "Audio processing time: " << (double)(loadTime.count()) / 1000 + << "s\n" + << std::endl; + + // Convert a MemRef object to an Audio object and set the metadata. + Audio outputContainer(std::move(outputMemRef)); + outputContainer.setBitDepth(inputContainer.getBitDepth()); + outputContainer.setSamplesNum(inputContainer.getSamplesNum()); + outputContainer.setChannelsNum(inputContainer.getChannelsNum()); + outputContainer.setSampleRate(inputContainer.getSampleRate()); + + // Save the processed data to an audio file. + std::string saveFileName = "FIRTestAudio.wav"; + outputContainer.saveToFile(saveFileName, "wave"); + printLogLabel(); + std::cout << "Processed audio data saved in: " << saveFileName << "\n" + << std::endl; + return 0; } diff --git a/examples/DAPDialect/IIRLowpass.cpp b/examples/DAPDialect/IIRLowpass.cpp index 1b69ec08b..ec5de06c9 100644 --- a/examples/DAPDialect/IIRLowpass.cpp +++ b/examples/DAPDialect/IIRLowpass.cpp @@ -14,52 +14,81 @@ // //===----------------------------------------------------------------------===// // -// This file implements an end to end example for iir filter in buddy-mlir. It -// generates coefficients for a filter and apply it on a piece of mono audio, -// then saves the audio. -// This file will be linked with the object file generated by mlir to generate -// the executable file. +// An end-to-end example of the scalar version IIR (Infinite Impulse Response) +// operation in buddy-mlir. // //===----------------------------------------------------------------------===// #include +#include #include using namespace dap; using namespace std; +// Print [Log] label in bold blue format. +void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } + int main(int argc, char *argv[]) { - string fileName = "../../tests/Interface/core/NASA_Mars.wav"; - string saveFileName = "IIR_LOWPASS_NASA_Mars.wav"; - if (argc >= 2) { - fileName = argv[1]; - } - if (argc == 3) { - saveFileName = argv[2]; - } - cout << "Usage: IIRLowpass [loadPath] [savePath]" << endl; - cout << "Current specified path: \n"; - cout << "Load: " << fileName << endl; - cout << "Save: " << saveFileName << endl; - // Order of butterworth filter + // Print the title of this example. + const std::string title = + "Scalar Version IIR Operation Powered by Buddy Compiler"; + std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; + + // Allocate kernel MemRef for an IIR filter operation. + // Params: + // Order: The order of the butterworth filter. + // Parameter size: Each SOS matrix has 6 parameters. int order = 8; - // Each SOS matrix has 6 paramters. intptr_t kernelSize[2] = {int(order / 2), 6}; MemRef kernel(kernelSize); - // cutoff frequency = 1000, fs = 48000. - dap::iirLowpass(kernel, dap::butterworth(order), 1000, - 48000); - auto aud = dap::Audio(fileName); - aud.getAudioFile().printSummary(); - dap::Audio output; - output.fetchMetadata(aud.getAudioFile()); - output.getAudioFile().setAudioBuffer(nullptr); + // Generate the kernel for an IIR filter operation. + // Params: + // Input kernel: Stores generated kernel data. + // Lowpass filter: Supports butterworth filter upto order 12 for now. + // Lowpass frequency: The lowpass cutoff frequency. + // Sampling frequency: The rate at which the input data is sampled. + dap::iirLowpass(/*kernel=*/kernel, + /*filter=*/dap::butterworth(order), + /*frequency=*/1000, + /*fs=*/48000); + + // Initialize data containers. + // Params: + // Input container: Stores the raw audio data. + // Returns: + // Output memory reference: Provides a MemRef for saving the output. + Audio inputContainer("../../tests/Interface/core/TestAudio.wav"); + intptr_t samplesNum = static_cast(inputContainer.getSamplesNum()); + MemRef outputMemRef(&samplesNum); + + // Apply scalar version IIR operation to the audio data. + printLogLabel(); + std::cout << "Running scalar version IIR operation..." << std::endl; + const auto loadStart = std::chrono::high_resolution_clock::now(); + dap::IIR(&inputContainer, &kernel, &outputMemRef); + const auto loadEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration loadTime = + loadEnd - loadStart; + printLogLabel(); + std::cout << "Audio processing time: " << (double)(loadTime.count()) / 1000 + << "s\n" + << std::endl; - dap::IIR(&aud.getMemRef(), &kernel, &output.getMemRef()); + // Convert a MemRef object to an Audio object and set the metadata. + Audio outputContainer(std::move(outputMemRef)); + outputContainer.setBitDepth(inputContainer.getBitDepth()); + outputContainer.setSamplesNum(inputContainer.getSamplesNum()); + outputContainer.setChannelsNum(inputContainer.getChannelsNum()); + outputContainer.setSampleRate(inputContainer.getSampleRate()); - cout << "Saving file:" << endl; - cout << (output.save(saveFileName) ? "OK" : "ERROR") << endl; + // Save the processed data to an audio file. + std::string saveFileName = "ScalarVersionIIRTestAudio.wav"; + outputContainer.saveToFile(saveFileName, "wave"); + printLogLabel(); + std::cout << "Processed audio data saved in: " << saveFileName << "\n" + << std::endl; return 0; } diff --git a/examples/DAPDialect/IIRVectorization.cpp b/examples/DAPDialect/IIRVectorization.cpp index c7d0c1955..e766c8588 100644 --- a/examples/DAPDialect/IIRVectorization.cpp +++ b/examples/DAPDialect/IIRVectorization.cpp @@ -14,53 +14,82 @@ // //===----------------------------------------------------------------------===// // -// This file implements an end to end example for iir filter in buddy-mlir. It -// generates coefficients for a filter and apply it on a piece of mono audio, -// then saves the audio. -// This file will be linked with the object file which use dap vectorization -// pass to generate the executable file. +// An end-to-end example of the vectorized IIR (Infinite Impulse Response) +// operation in buddy-mlir. // //===----------------------------------------------------------------------===// #include +#include #include using namespace dap; using namespace std; -int main(int argc, char *argv[]) { - string fileName = "../../tests/Interface/core/NASA_Mars.wav"; - string saveFileName = "IIR_VECTORIZATION_PASS_NASA_Mars.wav"; - if (argc >= 2) { - fileName = argv[1]; - } - if (argc == 3) { - saveFileName = argv[2]; - } - cout << "Usage: IIRVectorizationPass [loadPath] [savePath]" << endl; - cout << "Current specified path: \n"; - cout << "Load: " << fileName << endl; - cout << "Save: " << saveFileName << endl; - // Order for butterworth filter. +// Print [Log] label in bold blue format. +void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } + +int main() { + // Print the title of this example. + const std::string title = + "Vectorized IIR Operation Powered by Buddy Compiler"; + std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; + + // Allocate kernel MemRef for an IIR filter operation. + // Params: + // Order: The order of the butterworth filter. + // Parameter size: Each SOS matrix has 6 parameters. int order = 8; - // Each SOS matrix has 6 paramters. intptr_t kernelSize[2] = {int(order / 2), 6}; MemRef kernel(kernelSize); - // cutoff frequency = 1000, fs = 48000. - dap::iirLowpass(kernel, dap::butterworth(order), 1000, - 48000); - auto aud = dap::Audio(fileName); - aud.getAudioFile().printSummary(); - dap::Audio output; - output.fetchMetadata(aud.getAudioFile()); - output.getAudioFile().setAudioBuffer(nullptr); + // Generate the kernel for an IIR filter operation. + // Params: + // Input kernel: Stores generated kernel data. + // Lowpass filter: Supports butterworth filter upto order 12 for now. + // Lowpass frequency: The lowpass cutoff frequency. + // Sampling frequency: The rate at which the input data is sampled. + dap::iirLowpass(/*kernel=*/kernel, + /*filter=*/dap::butterworth(order), + /*frequency=*/1000, + /*fs=*/48000); + + // Initialize data containers. + // Params: + // Input container: Stores the raw audio data. + // Returns: + // Output memory reference: Provides a MemRef for saving the output. + Audio inputContainer("../../tests/Interface/core/TestAudio.wav"); + intptr_t samplesNum = static_cast(inputContainer.getSamplesNum()); + MemRef outputMemRef(&samplesNum); - dap::IIR(&aud.getMemRef(), &kernel, &output.getMemRef(), + // Apply vectorized IIR operation to the audio data. + printLogLabel(); + std::cout << "Running vectorized IIR operation..." << std::endl; + const auto loadStart = std::chrono::high_resolution_clock::now(); + dap::IIR(&inputContainer, &kernel, &outputMemRef, /*isVectorization=*/true); + const auto loadEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration loadTime = + loadEnd - loadStart; + printLogLabel(); + std::cout << "Audio processing time: " << (double)(loadTime.count()) / 1000 + << "s\n" + << std::endl; + + // Convert a MemRef object to an Audio object and set the metadata. + Audio outputContainer(std::move(outputMemRef)); + outputContainer.setBitDepth(inputContainer.getBitDepth()); + outputContainer.setSamplesNum(inputContainer.getSamplesNum()); + outputContainer.setChannelsNum(inputContainer.getChannelsNum()); + outputContainer.setSampleRate(inputContainer.getSampleRate()); - cout << "Saving file:" << endl; - cout << (output.save(saveFileName) ? "OK" : "ERROR") << endl; + // Save the processed data to an audio file. + std::string saveFileName = "VectorizedIIRTestAudio.wav"; + outputContainer.saveToFile(saveFileName, "wave"); + printLogLabel(); + std::cout << "Processed audio data saved in: " << saveFileName << "\n" + << std::endl; return 0; } diff --git a/examples/DAPDialect/WhisperPreprocess.cpp b/examples/DAPDialect/WhisperPreprocess.cpp new file mode 100644 index 000000000..db69ac836 --- /dev/null +++ b/examples/DAPDialect/WhisperPreprocess.cpp @@ -0,0 +1,77 @@ +//===- WhisperPreprocessor.cpp --------------------------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// +// +// An example of the Whisper Preprocessor operation. +// +//===----------------------------------------------------------------------===// + +#include +#include +#include +#include + +using namespace dap; +using namespace std; + +// Print [Log] label in bold blue format. +void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } + +// Write preprocessing results to a text file. +void printResult(MemRef &outputMemRef) { + ofstream fout("whisperPreprocessResult.txt"); + // Print title. + fout << "-----------------------------------------" << std::endl; + fout << "[ Whisper Preprocess Result ]" << std::endl; + fout << "-----------------------------------------" << std::endl; + // Print reuslt data. + for (int i = 0; i < 240000; ++i) { + fout << outputMemRef[i] << std::endl; + } + fout.close(); +} + +int main() { + // Print the title of this example. + const std::string title = "Whisper Preprocess Powered by Buddy Compiler"; + std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; + + // Initialize data containers. + // Params: + // Input container: Stores raw audio data. + // Returns: + // Output memory reference: Features formatted as memref<1x80x3000xf32>. + Audio inputContainer("../../examples/BuddyWhisper/audio.wav"); + float *outputAlign = new float[240000]; + intptr_t outputSizes[3] = {1, 80, 3000}; + MemRef outputMemRef(outputAlign, outputSizes); + + // Compute audio features from raw audio data. + printLogLabel(); + std::cout << "Preprocessing audio..." << std::endl; + const auto loadStart = std::chrono::high_resolution_clock::now(); + dap::whisperPreprocess(&inputContainer, &outputMemRef); + const auto loadEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration loadTime = + loadEnd - loadStart; + printLogLabel(); + std::cout << "Audio preprocess time: " << (double)(loadTime.count()) / 1000 + << "s\n" + << std::endl; + + // printResult(outputMemRef); + + return 0; +} diff --git a/examples/DAPDialect/biquad.cpp b/examples/DAPDialect/biquad.cpp index 14a78084a..e606c2d0e 100644 --- a/examples/DAPDialect/biquad.cpp +++ b/examples/DAPDialect/biquad.cpp @@ -14,45 +14,70 @@ // //===----------------------------------------------------------------------===// // -// This file implements an end to end example for biquad filter in buddy-mlir. -// It generates coefficients for a filter and apply it on a piece of mono audio, -// then saves the audio. -// This file will be linked with the object file generated by mlir to generate -// the executable file. +// An end-to-end example of a biquad operation in buddy-mlir. // //===----------------------------------------------------------------------===// #include +#include #include using namespace dap; using namespace std; -int main(int argc, char *argv[]) { - string fileName = "../../tests/Interface/core/NASA_Mars.wav"; - string saveFileName = "BIQUAD_NASA_Mars.wav"; - if (argc >= 2) { - fileName = argv[1]; - } - if (argc == 3) { - saveFileName = argv[2]; - } - cout << "Usage: BiquadLowpass [loadPath] [savePath]" << endl; - cout << "Current specified path: \n"; - cout << "Load: " << fileName << endl; - cout << "Save: " << saveFileName << endl; +// Print [Log] label in bold blue format. +void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } + +int main() { + // Print the title of this example. + const std::string title = "Biquad Operation Powered by Buddy Compiler"; + std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; + + // Generate the kernel for a biquad filter operation. + // Params: + // Input kernel: Stores generated kernel data. + // Frequency: Normalized frequency (frequency_Hz / samplerate_Hz). + // Quality factor: Defines the filter's bandwidth relative to its + // center frequency. intptr_t kernelSize = 6; MemRef kernel(&kernelSize); - dap::biquadLowpass(kernel, 0.3, -1.0); - auto aud = dap::Audio(fileName); - aud.getAudioFile().printSummary(); - dap::Audio output; - output.fetchMetadata(aud.getAudioFile()); - output.getAudioFile().setAudioBuffer(nullptr); + dap::biquadLowpass(kernel, /*frequency=*/0.3, /*Q=*/-1.0); + + // Initialize data containers. + // Params: + // Input container: Stores the raw audio data. + // Returns: + // Output memory reference: Provides a MemRef for saving the output. + Audio inputContainer("../../tests/Interface/core/TestAudio.wav"); + intptr_t samplesNum = static_cast(inputContainer.getSamplesNum()); + MemRef outputMemRef(&samplesNum); + + // Apply the biquad filter operation to the audio data. + printLogLabel(); + std::cout << "Running biquad operation..." << std::endl; + const auto loadStart = std::chrono::high_resolution_clock::now(); + dap::biquad(&inputContainer, &kernel, &outputMemRef); + const auto loadEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration loadTime = + loadEnd - loadStart; + printLogLabel(); + std::cout << "Audio processing time: " << (double)(loadTime.count()) / 1000 + << "s\n" + << std::endl; + + // Convert a MemRef object to an Audio object and set the metadata. + Audio outputContainer(std::move(outputMemRef)); + outputContainer.setBitDepth(inputContainer.getBitDepth()); + outputContainer.setSamplesNum(inputContainer.getSamplesNum()); + outputContainer.setChannelsNum(inputContainer.getChannelsNum()); + outputContainer.setSampleRate(inputContainer.getSampleRate()); - dap::biquad(&aud.getMemRef(), &kernel, &output.getMemRef()); + // Save the processed data to an audio file. + std::string saveFileName = "BiquadTestAudio.wav"; + outputContainer.saveToFile(saveFileName, "wave"); + printLogLabel(); + std::cout << "Processed audio data saved in: " << saveFileName << "\n" + << std::endl; - cout << "Saving file:" << endl; - cout << (output.save(saveFileName) ? "OK" : "ERROR") << endl; return 0; } diff --git a/examples/MLIRCF/.gitignore b/examples/MLIRCF/.gitignore new file mode 100644 index 000000000..790429d34 --- /dev/null +++ b/examples/MLIRCF/.gitignore @@ -0,0 +1,3 @@ +log* +core +a.out diff --git a/examples/MLIRCF/cf-iteration-exit.mlir b/examples/MLIRCF/cf-iteration-exit.mlir new file mode 100644 index 000000000..89281c9e3 --- /dev/null +++ b/examples/MLIRCF/cf-iteration-exit.mlir @@ -0,0 +1,47 @@ +// RUN: buddy-opt %s \ +// RUN: -convert-vector-to-llvm \ +// RUN: -convert-func-to-llvm \ +// RUN: -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +// The example is equivalent to the following code. +// int main() { +// int val = 0; +// for (int i = 1; i < 5; i++) { +// val += 5; +// if (i == 3) { +// std::cout << val << std::endl; +// return 0; +// } +// } +// return 0; +// } + +module { + func.func @main() { + %c0 = arith.constant 0 : index + %c3 = arith.constant 3 : index + %c5 = arith.constant 5 : index + %c1 = arith.constant 1 : index + %cst_0 = arith.constant 0.000000e+00 : f32 + %cst_5 = arith.constant 5.000000e+00 : f32 + cf.br ^bb1(%c0, %cst_0 : index, f32) + ^bb1(%0: index, %1: f32): + %2 = arith.cmpi slt, %0, %c5 : index + cf.cond_br %2, ^bb2, ^bb4(%1: f32) + ^bb2: + %3 = arith.addf %1, %cst_5 : f32 + %4 = arith.addi %0, %c1 : index + cf.br ^bb3 (%4, %3 : index, f32) + ^bb3(%iter_idx: index, %iter_var: f32): + %eq = arith.cmpi eq, %iter_idx, %c3 : index + cf.cond_br %eq, ^bb4(%iter_var: f32), ^bb1(%iter_idx, %iter_var: index, f32) + ^bb4(%ret_var: f32): + // CHECK: 15 + vector.print %ret_var : f32 + return + } +} diff --git a/examples/MLIRCF/makefile b/examples/MLIRCF/makefile new file mode 100644 index 000000000..5837ebf44 --- /dev/null +++ b/examples/MLIRCF/makefile @@ -0,0 +1,44 @@ +#!/bin/bash +BUDDY_OPT := ../../build/bin/buddy-opt +MLIR_OPT := ../../llvm/build/bin/mlir-opt +MLIR_TRANSLATE := ../../llvm/build/bin/mlir-translate +MLIR_CPU_RUNNER := ../../llvm/build/bin/mlir-cpu-runner +LLC := ../../llvm/build/bin/llc +OPT_FLAG := -O0 +CLANG := ../../llvm/build//bin/clang +MLIR_LIB := ../../llvm/build/lib/ +BUDDY_LIB := ../../build/midend/lib/ + +ifeq ($(shell uname),Linux) +MLIR_RUNNER_UTILS := ../../llvm/build/lib/libmlir_runner_utils.so +MLIR_C_RUNNER_UTILS := ../../llvm/build/lib/libmlir_c_runner_utils.so +MLIR_ASYNC_RUNTIME := ../../llvm/build/lib/libmlir_async_runtime.so +MTRIPLE := x86_64-unknown-linux-gnu +else ifeq ($(shell uname),Darwin) +MLIR_RUNNER_UTILS := ../../llvm/build/lib/libmlir_runner_utils.dylib +MLIR_C_RUNNER_UTILS := ../../llvm/build/lib/libmlir_c_runner_utils.dylib +MLIR_ASYNC_RUNTIME := ./../llvm/build/lib/libmlir_async_runtime.dylib +MTRIPLE := x86_64-apple-darwin +endif + +cf-iteration-exit-lower: + @${MLIR_OPT} ./cf-iteration-exit.mlir \ + -convert-vector-to-llvm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts \ + -o ./log.mlir + +cf-iteration-exit-translate: + @${MLIR_OPT} ./cf-iteration-exit.mlir \ + -convert-vector-to-llvm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_TRANSLATE} --mlir-to-llvmir -o log.ll + +cf-iteration-exit-run: + @${MLIR_OPT} ./cf-iteration-exit.mlir \ + -convert-vector-to-llvm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ + -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} diff --git a/examples/MLIRLinalg/linalg-batch-matmul-dync.mlir b/examples/MLIRLinalg/linalg-batch-matmul-dync.mlir new file mode 100644 index 000000000..1b910e4a3 --- /dev/null +++ b/examples/MLIRLinalg/linalg-batch-matmul-dync.mlir @@ -0,0 +1,67 @@ +// RUN: buddy-opt %s \ +// RUN: -convert-linalg-to-loops -lower-affine -convert-scf-to-cf \ +// RUN: -convert-vector-to-llvm -finalize-memref-to-llvm -convert-arith-to-llvm \ +// RUN: -convert-func-to-llvm -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +module { + func.func private @printMemrefF32(memref<*xf32>) + + // Definition for the batch matrix multiplication function + func.func @buddy_batchmatmul_f32(%A: memref, %B: memref, %C: memref) { + linalg.batch_matmul + ins(%A, %B: memref, memref) + outs(%C: memref) + return + } + + func.func @main(){ + // Set up dims. + %cBatch = arith.constant 10:index + %cM = arith.constant 2 : index + %cN = arith.constant 5 : index + %cK = arith.constant 4 : index + + // Set Init Value. + %cf1 = arith.constant 1.0 : f32 + %cf2 = arith.constant 2.0 : f32 + %c0 = arith.constant 0.0 : f32 + + %A = memref.alloc(%cBatch,%cM, %cK) : memref + %B = memref.alloc(%cBatch,%cK, %cN) : memref + %C = memref.alloc(%cBatch,%cM, %cN) : memref + + linalg.fill + ins(%cf1 : f32) + outs(%A:memref) + + linalg.fill + ins(%cf2 : f32) + outs(%B:memref) + + linalg.fill + ins(%c0 : f32) + outs(%C:memref) + + call @buddy_batchmatmul_f32(%A, %B, %C) : (memref, memref, memref) -> () + + // Print output. + // CHECK: Unranked Memref base@ = {{.*}} rank = 2 offset = 0 sizes = [4, 4] strides = [4, 1] data = + // CHECK-NEXT: [ + // CHECK-SAME: [5, 5, 5, 5], + // CHECK-NEXT: [5, 5, 5, 5], + // CHECK-NEXT: [5, 5, 5, 5], + // CHECK-NEXT: [5, 5, 5, 5] + // CHECK-SAME: ] + %print_C = memref.cast %C : memref to memref<*xf32> + call @printMemrefF32(%print_C) : (memref<*xf32>) -> () + + memref.dealloc %C : memref + memref.dealloc %B : memref + memref.dealloc %A : memref + return + } +} diff --git a/examples/MLIRLinalg/linalg-conv2d_nhwc_fhwc.mlir b/examples/MLIRLinalg/linalg-conv2d_nhwc_fhwc.mlir new file mode 100644 index 000000000..2c8cc171e --- /dev/null +++ b/examples/MLIRLinalg/linalg-conv2d_nhwc_fhwc.mlir @@ -0,0 +1,96 @@ +// RUN: buddy-opt %s \ +// RUN: -convert-linalg-to-loops -lower-affine -convert-scf-to-cf \ +// RUN: -convert-vector-to-llvm -finalize-memref-to-llvm -convert-arith-to-llvm \ +// RUN: -convert-func-to-llvm -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +module { + func.func private @printMemrefF32(memref<*xf32>) + func.func @alloc_2d_filled_f32(%arg0: index, %arg1: index, %arg2: index, %arg3: index, %arg4: f32) -> memref { + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %0 = memref.alloc(%arg0, %arg1, %arg2, %arg3) : memref + scf.for %arg5 = %c0 to %arg0 step %c1 { + scf.for %arg6 = %c0 to %arg1 step %c1 { + scf.for %arg7 = %c0 to %arg2 step %c1 { + scf.for %arg8 = %c0 to %arg3 step %c1 { + %iarg8=arith.index_cast %arg8 : index to i32 + %loopf= arith.sitofp %iarg8 : i32 to f32 + memref.store %loopf, %0[%arg5, %arg6, %arg7, %arg8] : memref + } + } + } + } + return %0 : memref + } + func.func @conv_2d_nhwc_fhwc(%arg0: memref, %arg1: memref, %arg2: memref) { + linalg.conv_2d_nhwc_fhwc ins(%arg0, %arg1 : memref, memref) outs(%arg2 : memref) + return + } + func.func @main() { + // Intput(image, filter) and output value. + %cst = arith.constant 0.500000e+00 : f32 + %cst_0 = arith.constant 0.000000e+00 : f32 + + %current_image_n = arith.constant 2 : index + %current_image_c = arith.constant 18 : index + %current_image_h = arith.constant 8 : index + %current_image_w = arith.constant 8 : index + + %current_filter_f = arith.constant 2 : index + %current_filter_c = arith.constant 18 : index + %current_filter_h = arith.constant 4 : index + %current_filter_w = arith.constant 4 : index + + %current_output_n = arith.constant 2 : index + %current_output_c = arith.constant 2 : index + %current_output_h = arith.constant 5 : index + %current_output_w = arith.constant 5 : index + + // Image. + %image = call @alloc_2d_filled_f32(%current_image_n,%current_image_h, %current_image_w, %current_image_c, %cst) : (index, index, index, index, f32) -> memref + // Filter. + %filter = call @alloc_2d_filled_f32(%current_filter_f, %current_filter_h, %current_filter_w,%current_filter_c, %cst) : (index, index, index, index, f32) -> memref + // Output. + %output = call @alloc_2d_filled_f32(%current_output_n, %current_output_h, %current_output_w,%current_output_c, %cst_0) : (index, index, index, index, f32) -> memref + + call @conv_2d_nhwc_fhwc(%image, %filter, %output) : (memref, memref, memref) -> () + + %3 = memref.cast %output : memref to memref<*xf32> + + // Print output. + // CHECK: Unranked Memref base@ = {{.*}} rank = 4 offset = 0 sizes = [2, 2, 4, 4] strides = [32, 16, 4, 1] data = + // CHECK-NEXT: [ + // CHECK-SAME: [ + // CHECK-SAME: [ + // CHECK-COUNT-3: [32, 32, 32, 32], + // CHECK-NEXT: [32, 32, 32, 32] + // CHECK-SAME: ], + // CHECK-NEXT: [ + // CHECK-COUNT-3: [32, 32, 32, 32], + // CHECK-NEXT: [32, 32, 32, 32] + // CHECK-SAME: ] + // CHECK-SAME: ], + // CHECK-NEXT: [ + // CHECK-SAME: [ + // CHECK-COUNT-3: [32, 32, 32, 32], + // CHECK-NEXT: [32, 32, 32, 32] + // CHECK-SAME: ], + // CHECK-NEXT: [ + // CHECK-COUNT-3: [32, 32, 32, 32], + // CHECK-NEXT: [32, 32, 32, 32] + // CHECK-SAME: ] + // CHECK-SAME: ] + // CHECK-SAME: ] + call @printMemrefF32(%3) : (memref<*xf32>) -> () + + memref.dealloc %output : memref + memref.dealloc %image : memref + memref.dealloc %filter : memref + return + } +} + diff --git a/examples/MLIRLinalg/linalg-depthwise_conv_2d_nhwc_hwc.mlir b/examples/MLIRLinalg/linalg-depthwise_conv_2d_nhwc_hwc.mlir new file mode 100644 index 000000000..4fc2a5fc1 --- /dev/null +++ b/examples/MLIRLinalg/linalg-depthwise_conv_2d_nhwc_hwc.mlir @@ -0,0 +1,77 @@ +// RUN: buddy-opt %s \ +// RUN: -convert-linalg-to-loops -lower-affine -convert-scf-to-cf \ +// RUN: -convert-vector-to-llvm -finalize-memref-to-llvm -convert-arith-to-llvm \ +// RUN: -convert-func-to-llvm -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +module { + func.func private @printMemrefF32(memref<*xf32>) + + func.func @alloc_2d_filled_f32(%arg0: index, %arg1: index, %arg2: index, %arg3: index, %arg4: f32) -> memref { + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %0 = memref.alloc(%arg0, %arg1, %arg2, %arg3) : memref + scf.for %arg5 = %c0 to %arg0 step %c1 { + scf.for %arg6 = %c0 to %arg1 step %c1 { + scf.for %arg7 = %c0 to %arg2 step %c1 { + scf.for %arg8 = %c0 to %arg3 step %c1 { + %iarg8 = arith.index_cast %arg8 : index to i32 + %loopf = arith.sitofp %iarg8 : i32 to f32 + memref.store %loopf, %0[%arg5, %arg6, %arg7, %arg8] : memref + } + } + } + } + return %0 : memref + } + + func.func @depthwise_conv_2d_nhwc_hwc(%arg0: memref, %arg1: memref, %arg2: memref) { + linalg.depthwise_conv_2d_nhwc_hwc + {dilations = dense<[1,1]> : tensor<2xi64>, strides = dense<[1,1]> : tensor<2xi64>} + ins(%arg0, %arg1 : memref, memref) + outs(%arg2 : memref) + return + } + + func.func @main() { + // Constants for input image, filter, and output sizes. + %cst = arith.constant 0.500000e+00 : f32 + %cst_0 = arith.constant 0.000000e+00 : f32 + + %image_n = arith.constant 2 : index + %image_h = arith.constant 8 : index + %image_w = arith.constant 8 : index + %image_c = arith.constant 18 : index + + %filter_h = arith.constant 4 : index + %filter_w = arith.constant 4 : index + %filter_c = arith.constant 18 : index + + %output_n = arith.constant 2 : index + %output_h = arith.constant 5 : index + %output_w = arith.constant 5 : index + %output_c = arith.constant 18 : index + + // Allocate and fill image, filter, and output. + %image = call @alloc_2d_filled_f32(%image_n, %image_h, %image_w, %image_c, %cst) : (index, index, index, index, f32) -> memref + %filter = call @alloc_2d_filled_f32(%filter_h, %filter_w, %filter_c, %cst) : (index, index, index, f32) -> memref + %output = call @alloc_2d_filled_f32(%output_n, %output_h, %output_w, %output_c, %cst_0) : (index, index, index, index, f32) -> memref + + // Call depthwise convolution. + call @depthwise_conv_2d_nhwc_hwc(%image, %filter, %output) : (memref, memref, memref) -> () + + %output_cast = memref.cast %output : memref to memref<*xf32> + + // Print the output. + call @printMemrefF32(%output_cast) : (memref<*xf32>) -> () + + // Deallocate memory. + memref.dealloc %output : memref + memref.dealloc %image : memref + memref.dealloc %filter : memref + return + } +} diff --git a/examples/MLIRLinalg/linalg-matmul-opt-f32.mlir b/examples/MLIRLinalg/linalg-matmul-opt-f32.mlir index 5111b57db..53148b0d0 100644 --- a/examples/MLIRLinalg/linalg-matmul-opt-f32.mlir +++ b/examples/MLIRLinalg/linalg-matmul-opt-f32.mlir @@ -1,4 +1,4 @@ -// RUN: buddy-opt -matmul-paralell-vectorization-optimize -verify-diagnostics -expand-strided-metadata -lower-affine \ +// RUN: buddy-opt -matmul-parallel-vectorization-optimize -verify-diagnostics -expand-strided-metadata -lower-affine \ // RUN: -convert-linalg-to-loops -convert-vector-to-scf -convert-scf-to-cf -convert-vector-to-llvm -finalize-memref-to-llvm \ // RUN: -llvm-request-c-wrappers -convert-func-to-llvm -reconcile-unrealized-casts %s \ // RUN: | mlir-cpu-runner -O0 -e buddy_matmul_f32 -entry-point-result=void \ diff --git a/examples/MLIRLinalg/linalg-matmul-opt-i8.mlir b/examples/MLIRLinalg/linalg-matmul-opt-i8.mlir index 9a7b72e5e..26aa92cbe 100644 --- a/examples/MLIRLinalg/linalg-matmul-opt-i8.mlir +++ b/examples/MLIRLinalg/linalg-matmul-opt-i8.mlir @@ -1,4 +1,4 @@ -// RUN: buddy-opt -matmul-paralell-vectorization-optimize -verify-diagnostics -expand-strided-metadata \ +// RUN: buddy-opt -matmul-parallel-vectorization-optimize -verify-diagnostics -expand-strided-metadata \ // RUN: -lower-affine -convert-vector-to-llvm -finalize-memref-to-llvm -convert-scf-to-cf \ // RUN: -convert-linalg-to-loops -convert-scf-to-cf -llvm-request-c-wrappers -convert-func-to-llvm \ // RUN: -reconcile-unrealized-casts %s \ diff --git a/examples/MLIRLinalg/makefile b/examples/MLIRLinalg/makefile index f214fa7f6..12f639f67 100644 --- a/examples/MLIRLinalg/makefile +++ b/examples/MLIRLinalg/makefile @@ -60,6 +60,37 @@ linalg-conv2d-tiling-run: -convert-func-to-llvm -reconcile-unrealized-casts | \ ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} +linalg-conv2d_nhwc_fhwc-optimize-lower: + @${BUDDY_OPT} linalg-conv2d_nhwc_fhwc.mlir \ + -conv-nhwc-fhwc-optimize="vec-size=16" \ + -o ./log.mlir + +linalg-conv2d_nhwc_fhwc-tile-optimize-lower: + @${BUDDY_OPT} linalg-conv2d_nhwc_fhwc.mlir \ + -conv-nhwc-fhwc-tile-optimize="vec-size=16 tiling-height=2 tiling-width=3" \ + -o ./log.mlir + +linalg-conv2d_nhwc_fhwc-optimize-run: + @${BUDDY_OPT} linalg-conv2d_nhwc_fhwc.mlir ${MLIR_OPT_OPTIONS} \ + -conv-nhwc-fhwc-optimize="vec-size=16" \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm -convert-arith-to-llvm \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} + +linalg-conv2d_nhwc_fhwc-tile-optimize-run: + @${BUDDY_OPT} linalg-conv2d_nhwc_fhwc.mlir ${MLIR_OPT_OPTIONS} \ + -conv-nhwc-fhwc-tile-optimize="vec-size=16 tiling-height=2 tiling-width=3" \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm -convert-arith-to-llvm \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} + +linalg-depthwise_conv_2d_nhwc_hwc-optimize-lower: + @${BUDDY_OPT} linalg-depthwise_conv_2d_nhwc_hwc.mlir \ + -depthwise-conv-nhwc-hwc-optimize="vec-size=16" \ + -o ./log.mlir + linalg-generic-lower: @${MLIR_OPT} ./linalg-generic.mlir \ -convert-linalg-to-loops -lower-affine -convert-scf-to-cf \ @@ -177,6 +208,16 @@ linalg-batch-matmul-optimize-lower: -batchmatmul-optimize="vector-size=64" \ -o ./log.mlir +linalg-batch-matmul-tile-optimize-lower: + @${BUDDY_OPT} linalg-batch-matmul-dync.mlir ${MLIR_OPT_OPTIONS} \ + -batchmatmul-tile-optimize="vec-size=64 kernel-m=4 kernel-n=2" \ + -o ./log.mlir + +linalg-batch-matmul-scf-optimize-lower: + @${BUDDY_OPT} linalg-batch-matmul-dync.mlir ${MLIR_OPT_OPTIONS} \ + -batchmatmul-scf-optimize="vector-size=64" \ + -o ./log.mlir + linalg-batch-matmul-optimize-translate: @${BUDDY_OPT} linalg-batch-matmul-f32.mlir ${MLIR_OPT_OPTIONS} \ -batchmatmul-optimize="vector-size=64" \ @@ -248,7 +289,7 @@ linalg-batch-matmul-i8-optimize-translate: linalg-matmul-parallized-vectorized-optmize-run: @${BUDDY_OPT} linalg-matmul-opt-f32.mlir ${MLIR_OPT_OPTIONS} \ - -matmul-paralell-vectorization-optimize="vector-size=128" \ + -matmul-parallel-vectorization-optimize="vector-size=128" \ -convert-linalg-to-loops \ -expand-strided-metadata \ -lower-affine \ @@ -263,12 +304,12 @@ linalg-matmul-parallized-vectorized-optmize-run: linalg-matmul-parallized-vectorized-optmize-lower: @${BUDDY_OPT} linalg-matmul-opt-f32.mlir ${MLIR_OPT_OPTIONS} \ - -matmul-paralell-vectorization-optimize="vector-size=128" \ + -matmul-parallel-vectorization-optimize="vector-size=128" \ -o ./log.mlir linalg-matmul-parallized-vectorized-optmize-translate: @${BUDDY_OPT} linalg-matmul-opt-f32.mlir ${MLIR_OPT_OPTIONS} \ - -matmul-paralell-vectorization-optimize="vector-size=128" \ + -matmul-parallel-vectorization-optimize="vector-size=128" \ -convert-linalg-to-loops \ -expand-strided-metadata \ -lower-affine \ @@ -282,7 +323,7 @@ linalg-matmul-parallized-vectorized-optmize-translate: linalg-matmul-i8-parallized-vectorized-optmize-run: @${BUDDY_OPT} linalg-matmul-opt-i8.mlir ${MLIR_OPT_OPTIONS} \ - -matmul-paralell-vectorization-optimize="vector-size=128" \ + -matmul-parallel-vectorization-optimize="vector-size=128" \ -convert-linalg-to-loops \ -expand-strided-metadata \ -lower-affine \ @@ -297,12 +338,12 @@ linalg-matmul-i8-parallized-vectorized-optmize-run: linalg-matmul-i8-parallized-vectorized-optmize-lower: @${BUDDY_OPT} linalg-matmul-opt-i8.mlir ${MLIR_OPT_OPTIONS} \ - -matmul-paralell-vectorization-optimize="vector-size=128" \ + -matmul-parallel-vectorization-optimize="vector-size=128" \ -o ./log.mlir linalg-matmul-i8-parallized-vectorized-optmize-translate: @${BUDDY_OPT} linalg-matmul-opt-i8.mlir ${MLIR_OPT_OPTIONS} \ - -matmul-paralell-vectorization-optimize="vector-size=128" \ + -matmul-parallel-vectorization-optimize="vector-size=128" \ -convert-linalg-to-loops \ -expand-strided-metadata \ -lower-affine \ diff --git a/examples/MLIRVector/makefile b/examples/MLIRVector/makefile index 681335c7f..ccc9e9af2 100644 --- a/examples/MLIRVector/makefile +++ b/examples/MLIRVector/makefile @@ -43,17 +43,20 @@ vector-load-run: vector-broadcast-lower: @${MLIR_OPT} ./vector-broadcast.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts -o ./log.mlir vector-broadcast-translate: @${MLIR_OPT} ./vector-broadcast.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir -o log.ll vector-broadcast-asm-x86: @${MLIR_OPT} ./vector-broadcast.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -62,6 +65,7 @@ vector-broadcast-asm-x86: vector-broadcast-asm-rv: @${MLIR_OPT} ./vector-broadcast.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -72,6 +76,7 @@ vector-broadcast-asm-rv: run-targets += vector-broadcast-run vector-broadcast-run: @${MLIR_OPT} ./vector-broadcast.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=i32 \ @@ -79,17 +84,20 @@ vector-broadcast-run: vector-fma-lower: @${MLIR_OPT} ./vector-fma.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts -o ./log.mlir vector-fma-translate: @${MLIR_OPT} ./vector-fma.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir -o log.ll vector-fma-asm-x86: @${MLIR_OPT} ./vector-fma.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -98,6 +106,7 @@ vector-fma-asm-x86: vector-fma-asm-rv: @${MLIR_OPT} ./vector-fma.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -108,6 +117,7 @@ vector-fma-asm-rv: run-targets += vector-fma-run vector-fma-run: @${MLIR_OPT} ./vector-fma.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=i32 \ @@ -115,17 +125,20 @@ vector-fma-run: vector-long-lower: @${MLIR_OPT} ./vector-long.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts -o ./log.mlir vector-long-translate: @${MLIR_OPT} ./vector-long.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir -o log.ll vector-long-asm-x86: @${MLIR_OPT} ./vector-long.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -134,6 +147,7 @@ vector-long-asm-x86: vector-long-asm-rv: @${MLIR_OPT} ./vector-long.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -144,6 +158,7 @@ vector-long-asm-rv: run-targets += vector-long-run vector-long-run: @${MLIR_OPT} ./vector-long.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=i32 \ @@ -187,6 +202,7 @@ vector-shape-cast-translate: run-targets += vector-shape-cast-run vector-shape-cast-run: @${MLIR_OPT} ./vector-shape-cast.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ -split-input-file -verify-diagnostics \ --reconcile-unrealized-casts | \ @@ -209,6 +225,7 @@ vector-type-cast-translate: run-targets += vector-type-cast-run vector-type-cast-run: @${MLIR_OPT} ./vector-type-cast.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ -split-input-file -verify-diagnostics \ --reconcile-unrealized-casts | \ @@ -253,6 +270,7 @@ vector-shuffle-translate: run-targets += vector-shuffle-run vector-shuffle-run: @${MLIR_OPT} ./vector-shuffle.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ -split-input-file -verify-diagnostics \ --reconcile-unrealized-casts | \ @@ -275,6 +293,7 @@ vector-splat-translate: run-targets += vector-splat-run vector-splat-run: @${MLIR_OPT} ./vector-splat.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ -split-input-file -verify-diagnostics \ --reconcile-unrealized-casts | \ @@ -297,6 +316,7 @@ vector-insert-translate: run-targets += vector-insert-run vector-insert-run: @${MLIR_OPT} ./vector-insert.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ -split-input-file -verify-diagnostics \ --reconcile-unrealized-casts | \ @@ -319,6 +339,7 @@ vector-reduction-translate: run-targets += vector-reduction-run vector-reduction-run: @${MLIR_OPT} ./vector-reduction.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ -split-input-file -verify-diagnostics \ --reconcile-unrealized-casts | \ @@ -341,6 +362,7 @@ vector-outerproduct-translate: run-targets += vector-outerproduct-run vector-outerproduct-run: @${MLIR_OPT} ./vector-outerproduct.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ -split-input-file -verify-diagnostics \ --reconcile-unrealized-casts | \ @@ -363,6 +385,7 @@ vector-create-mask-translate: run-targets += vector-create-mask-run vector-create-mask-run: @${MLIR_OPT} ./vector-create-mask.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=i32 \ @@ -384,6 +407,7 @@ vector-extract-translate: run-targets += vector-extract-run vector-extract-run: @${MLIR_OPT} ./vector-extract.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=i32 \ @@ -405,6 +429,7 @@ vector-maskedload-translate: run-targets += vector-maskedload-run vector-maskedload-run: @${MLIR_OPT} ./vector-maskedload.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ -split-input-file -verify-diagnostics \ --reconcile-unrealized-casts | \ @@ -427,6 +452,7 @@ vector-maskedstore-translate: run-targets += vector-maskedstore-run vector-maskedstore-run: @${MLIR_OPT} ./vector-maskedstore.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ -split-input-file -verify-diagnostics \ --reconcile-unrealized-casts | \ @@ -449,6 +475,7 @@ vector-extract-strided-slice-translate: run-targets += vector-extract-strided-slice-run vector-extract-strided-slice-run: @${MLIR_OPT} ./vector-extract-strided-slice.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=i32 \ @@ -470,6 +497,7 @@ vector-constant-mask-translate: run-targets += vector-constant-mask-run vector-constant-mask-run: @${MLIR_OPT} ./vector-constant-mask.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=i32 \ @@ -491,6 +519,7 @@ vector-expandload-translate: run-targets += vector-expandload-run vector-expandload-run: @${MLIR_OPT} ./vector-expandload.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=i32 \ @@ -512,6 +541,7 @@ vector-compressstore-translate: run-targets += vector-compressstore-run vector-compressstore-run: @${MLIR_OPT} ./vector-compressstore.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=i32 \ @@ -533,6 +563,7 @@ vector-insert-strided-slice-translate: run-targets += vector-insert-strided-slice-run vector-insert-strided-slice-run: @${MLIR_OPT} ./vector-insert-strided-slice.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=i32 \ @@ -554,6 +585,7 @@ vector-scatter-translate: run-targets += vector-scatter-run vector-scatter-run: @${MLIR_OPT} ./vector-scatter.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ -split-input-file -verify-diagnostics \ --reconcile-unrealized-casts | \ @@ -576,6 +608,7 @@ vector-gather-translate: run-targets += vector-gather-run vector-gather-run: @${MLIR_OPT} ./vector-gather.mlir \ + -convert-vector-to-scf -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ -split-input-file -verify-diagnostics \ --reconcile-unrealized-casts | \ @@ -598,7 +631,7 @@ vector-transfer-read-translate: run-targets += vector-transfer-read-run vector-transfer-read-run: @${MLIR_OPT} ./vector-transfer-read.mlir \ - --convert-vector-to-scf --lower-affine --convert-scf-to-cf \ + --convert-vector-to-scf --lower-affine --convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=i32 \ @@ -669,3 +702,27 @@ vector-store-run: --reconcile-unrealized-casts | \ ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=i32 \ -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} + +vector-iteration-lower: + @${MLIR_OPT} ./vector-iteration.mlir \ + --lower-affine \ + -convert-vector-to-scf -convert-scf-to-cf \ + --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ + --reconcile-unrealized-casts -o ./log.mlir + +vector-iteration-translate: + @${MLIR_OPT} ./vector-iteration.mlir \ + --lower-affine \ + -convert-vector-to-scf -convert-scf-to-cf \ + --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ + --reconcile-unrealized-casts | \ + ${MLIR_TRANSLATE} --mlir-to-llvmir -o log.ll + +vector-iteration-run: + @${MLIR_OPT} ./vector-iteration.mlir \ + --lower-affine \ + -convert-vector-to-scf -convert-scf-to-cf \ + --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ + --reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=i32 \ + -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} diff --git a/examples/MLIRVector/vector-iteration.mlir b/examples/MLIRVector/vector-iteration.mlir new file mode 100644 index 000000000..22bd42580 --- /dev/null +++ b/examples/MLIRVector/vector-iteration.mlir @@ -0,0 +1,32 @@ +// RUN: buddy-opt %s \ +// RUN: -lower-affine \ +// RUN: -convert-vector-to-scf -convert-scf-to-cf \ +// RUN: -convert-vector-to-llvm -finalize-memref-to-llvm -convert-func-to-llvm \ +// RUN: -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=i32 \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +memref.global "private" @gv : memref<4x4xf32> = dense<[[0. , 1. , 2. , 3. ], + [10., 11., 12., 13.], + [20., 21., 22., 23.], + [30., 31., 32., 33.]]> + +func.func @main() -> i32 { + %mem = memref.get_global @gv : memref<4x4xf32> + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %c2 = arith.constant 2 : index + %sum_0 = arith.constant dense<0.000000e+00> : vector<4xf32> + %sum = affine.for %i = 0 to 3 iter_args(%sum_iter = %sum_0) -> (vector<4xf32>) { + %load_vec1 = vector.load %mem[%c0, %c0] : memref<4x4xf32>, vector<4xf32> + %load_vec2 = vector.load %mem[%i, %c0] : memref<4x4xf32>, vector<4xf32> + %sum_next = vector.fma %load_vec1, %load_vec2, %sum_iter : vector<4xf32> + affine.yield %sum_next : vector<4xf32> + } + // CHECK: ( 0, 33, 72, 117 ) + vector.print %sum : vector<4xf32> + %ret = arith.constant 0 : i32 + return %ret : i32 +} diff --git a/examples/RVVDialect/makefile b/examples/RVVDialect/makefile index d30c64a00..dea63bd25 100644 --- a/examples/RVVDialect/makefile +++ b/examples/RVVDialect/makefile @@ -1,18 +1,48 @@ #!/bin/bash -BUDDY_OPT := ../../build/bin/buddy-opt -BUDDY_TRANSLATE := ../../build/bin/buddy-translate -LLC := ../../llvm/build/bin/llc + +# Build Directories +MLIR_BUILD_DIR := ../../llvm/build/ +BUDDY_MLIR_BUILD_DIR := ../../build/ +CROSS_BUDDY_MLIR_BUILD_DIR := ../../build-cross-rv/ +CROSS_LLVM_BUILD_DIR := ../../llvm/build-cross-clang-rv/ +CROSS_MLIR_BUILD_DIR := ../../llvm/build-cross-mlir-rv/ + +# Buddy MLIR Tools +BUDDY_OPT := ${BUDDY_MLIR_BUILD_DIR}/bin/buddy-opt +BUDDY_TRANSLATE := ${BUDDY_MLIR_BUILD_DIR}/bin/buddy-translate + +# Core LLVM/MLIR Tools +MLIR_OPT := ${MLIR_BUILD_DIR}/bin/mlir-opt +MLIR_TRANSLATE := ${MLIR_BUILD_DIR}/bin/mlir-translate +MLIR_CPU_RUNNER := ${MLIR_BUILD_DIR}/bin/mlir-cpu-runner +LLC := ${MLIR_BUILD_DIR}/bin/llc +LOCAL_CLANG := ${MLIR_BUILD_DIR}/bin/clang + +# RISC-V GNU Toolchain +RISCV_GNU_TOOLCHAIN := ${BUDDY_MLIR_BUILD_DIR}/thirdparty/riscv-gnu-toolchain +RISCV_GNU_TOOLCHAIN_SYSROOT := ${RISCV_GNU_TOOLCHAIN}/sysroot +QEMU := ${RISCV_GNU_TOOLCHAIN}/bin/qemu-riscv64 + +# Cross Compiled Toolchain +CROSS_BUDDY_MLIR_LIB := ${CROSS_BUDDY_MLIR_BUILD_DIR}/lib/ +CROSS_LLI := ${CROSS_LLVM_BUILD_DIR}/bin/lli +CROSS_MLIR_CPU_RUNNER := ${CROSS_MLIR_BUILD_DIR}/bin/mlir-cpu-runner +CROSS_MLIR_C_RUNNER_UTILS := ${CROSS_MLIR_BUILD_DIR}/lib/libmlir_c_runner_utils.so +CROSS_MLIR_RUNNER_UTILS := ${CROSS_MLIR_BUILD_DIR}/lib/libmlir_runner_utils.so +CROSS_MLIR_LIB := ${CROSS_MLIR_BUILD_DIR}/lib + +# Optimization Flag OPT_FLAG := -O0 -RISCV_GNU_TOOLCHAIN := ../../thirdparty/build-riscv-gnu-toolchain -RISCV_GNU_TOOLCHAIN_SYSROOT := ../../thirdparty/build-riscv-gnu-toolchain/sysroot -QEMU := ../../thirdparty/qemu/build/riscv64-linux-user/qemu-riscv64 -LOCAL_CLANG := ../../thirdparty/build-local-clang/bin/clang -CROSS_LLI := ../../thirdparty/build-cross-clang/bin/lli -CROSS_MLIR_CPU_RUNNER := ../../thirdparty/build-cross-mlir/bin/mlir-cpu-runner -CROSS_MLIR_C_RUNNER_UTILS := ../../thirdparty/build-cross-mlir/lib/libmlir_c_runner_utils.so -CROSS_MLIR_RUNNER_UTILS := ../../thirdparty/build-cross-mlir/lib/libmlir_runner_utils.so -CROSS_MLIR_LIB := ../../thirdparty/build-cross-mlir/lib +ifeq ($(shell uname),Linux) +MLIR_RUNNER_UTILS := ${MLIR_BUILD_DIR}/lib/libmlir_runner_utils.so +MLIR_C_RUNNER_UTILS := ${MLIR_BUILD_DIR}//lib/libmlir_c_runner_utils.so +MTRIPLE := x86_64-unknown-linux-gnu +else ifeq ($(shell uname),Darwin) +MLIR_RUNNER_UTILS := ${MLIR_BUILD_DIR}/lib/libmlir_runner_utils.dylib +MLIR_C_RUNNER_UTILS := ${MLIR_BUILD_DIR}/lib/libmlir_c_runner_utils.dylib +MTRIPLE := x86_64-apple-darwin +endif rvv-setvl-lower: @${BUDDY_OPT} ./rvv-setvl.mlir \ @@ -43,7 +73,7 @@ rvv-setvl-128-run: -convert-func-to-llvm \ -reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} -march=riscv64 -mattr=+m,+d,+v \ -dlopen=${CROSS_MLIR_C_RUNNER_UTILS} @@ -56,7 +86,7 @@ rvv-setvl-256-run: -convert-func-to-llvm \ -reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=256 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} -march=riscv64 -mattr=+m,+d,+v \ -dlopen=${CROSS_MLIR_C_RUNNER_UTILS} @@ -87,7 +117,7 @@ rvv-rsqrt-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-mul-add-lower: @${BUDDY_OPT} ./rvv-mul-add.mlir \ @@ -122,7 +152,7 @@ rvv-mul-add-run: -reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} \ - -cpu rv64,x-v=true,vlen=128 \ + -cpu max \ ${CROSS_LLI} -march=riscv64 -mattr=+m,+d,+v \ -dlopen=${CROSS_MLIR_C_RUNNER_UTILS} \ -dlopen=${CROSS_MLIR_RUNNER_UTILS} @@ -132,6 +162,8 @@ rvv-stripmining-lower: -convert-scf-to-cf \ -convert-math-to-llvm \ -lower-rvv \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ -convert-vector-to-llvm \ -finalize-memref-to-llvm \ -convert-func-to-llvm \ @@ -143,6 +175,8 @@ rvv-stripmining-translate: -convert-scf-to-cf \ -convert-math-to-llvm \ -lower-rvv \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ -convert-vector-to-llvm \ -finalize-memref-to-llvm \ -convert-func-to-llvm \ @@ -154,13 +188,15 @@ rvv-stripmining-run: -convert-scf-to-cf \ -convert-math-to-llvm \ -lower-rvv \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ -convert-vector-to-llvm \ -finalize-memref-to-llvm \ -convert-func-to-llvm \ -reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} \ - -cpu rv64,x-v=true,vlen=128 \ + -cpu max \ ${CROSS_LLI} -march=riscv64 -mattr=+m,+d,+v \ -dlopen=${CROSS_MLIR_C_RUNNER_UTILS} \ -dlopen=${CROSS_MLIR_RUNNER_UTILS} @@ -170,6 +206,8 @@ rvv-stripmining-aot: -convert-scf-to-cf \ -convert-math-to-llvm \ -lower-rvv \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ -convert-vector-to-llvm \ -finalize-memref-to-llvm \ -convert-func-to-llvm \ @@ -182,4 +220,4 @@ rvv-stripmining-aot: -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out diff --git a/examples/RVVExperiment/makefile b/examples/RVVExperiment/makefile index ba424d425..6cadb07cd 100644 --- a/examples/RVVExperiment/makefile +++ b/examples/RVVExperiment/makefile @@ -1,25 +1,50 @@ #!/bin/bash -BUDDY_OPT := ../../build/bin/buddy-opt -BUDDY_TRANSLATE := ../../build/bin/buddy-translate -MLIR_OPT := ../../llvm/build/bin/mlir-opt -MLIR_TRANSLATE := ../../llvm/build/bin/mlir-translate -MLIR_CPU_RUNNER := ../../llvm/build/bin/mlir-cpu-runner -LLI := ../../llvm/build/bin/lli -LLC := ../../llvm/build/bin/llc -OPT := ../../llvm/build/bin/opt + +# Build Directories +MLIR_BUILD_DIR := ../../llvm/build/ +BUDDY_MLIR_BUILD_DIR := ../../build/ +CROSS_BUDDY_MLIR_BUILD_DIR := ../../build-cross-rv/ +CROSS_LLVM_BUILD_DIR := ../../llvm/build-cross-clang-rv/ +CROSS_MLIR_BUILD_DIR := ../../llvm/build-cross-mlir-rv/ + +# Buddy MLIR Tools +BUDDY_OPT := ${BUDDY_MLIR_BUILD_DIR}/bin/buddy-opt +BUDDY_TRANSLATE := ${BUDDY_MLIR_BUILD_DIR}/bin/buddy-translate + +# Core LLVM/MLIR Tools +MLIR_OPT := ${MLIR_BUILD_DIR}/bin/mlir-opt +MLIR_TRANSLATE := ${MLIR_BUILD_DIR}/bin/mlir-translate +MLIR_CPU_RUNNER := ${MLIR_BUILD_DIR}/bin/mlir-cpu-runner +LLC := ${MLIR_BUILD_DIR}/bin/llc +LLI := ${MLIR_BUILD_DIR}/bin/lli +OPT := ${MLIR_BUILD_DIR}/bin/opt +LOCAL_CLANG := ${MLIR_BUILD_DIR}/bin/clang + +# RISC-V GNU Toolchain +RISCV_GNU_TOOLCHAIN := ${BUDDY_MLIR_BUILD_DIR}/thirdparty/riscv-gnu-toolchain +RISCV_GNU_TOOLCHAIN_SYSROOT := ${RISCV_GNU_TOOLCHAIN}/sysroot +QEMU := ${RISCV_GNU_TOOLCHAIN}/bin/qemu-riscv64 + +# Cross Compiled Toolchain +CROSS_BUDDY_MLIR_LIB := ${CROSS_BUDDY_MLIR_BUILD_DIR}/lib/ +CROSS_LLI := ${CROSS_LLVM_BUILD_DIR}/bin/lli +CROSS_MLIR_CPU_RUNNER := ${CROSS_MLIR_BUILD_DIR}/bin/mlir-cpu-runner +CROSS_MLIR_C_RUNNER_UTILS := ${CROSS_MLIR_BUILD_DIR}/lib/libmlir_c_runner_utils.so +CROSS_MLIR_RUNNER_UTILS := ${CROSS_MLIR_BUILD_DIR}/lib/libmlir_runner_utils.so +CROSS_MLIR_LIB := ${CROSS_MLIR_BUILD_DIR}/lib + +# Optimization Flag OPT_FLAG := -O3 -MLIR_RUNNER_UTILS := ../../llvm/build/lib/libmlir_runner_utils.so -MLIR_C_RUNNER_UTILS := ../../llvm/build/lib/libmlir_c_runner_utils.so - -RISCV_GNU_TOOLCHAIN := ../../thirdparty/build-riscv-gnu-toolchain -RISCV_GNU_TOOLCHAIN_SYSROOT := ../../thirdparty/build-riscv-gnu-toolchain/sysroot -QEMU := ../../thirdparty/qemu/build/riscv64-linux-user/qemu-riscv64 -LOCAL_CLANG := ../../thirdparty/build-local-clang/bin/clang -CROSS_LLI := ../../thirdparty/build-cross-clang/bin/lli -CROSS_MLIR_CPU_RUNNER := ../../thirdparty/build-cross-mlir/bin/mlir-cpu-runner -CROSS_MLIR_C_RUNNER_UTILS := ../../thirdparty/build-cross-mlir/lib/libmlir_c_runner_utils.so -CROSS_MLIR_RUNNER_UTILS := ../../thirdparty/build-cross-mlir/lib/libmlir_runner_utils.so -CROSS_MLIR_LIB := ../../thirdparty/build-cross-mlir/lib + +ifeq ($(shell uname),Linux) +MLIR_RUNNER_UTILS := ${MLIR_BUILD_DIR}/lib/libmlir_runner_utils.so +MLIR_C_RUNNER_UTILS := ${MLIR_BUILD_DIR}//lib/libmlir_c_runner_utils.so +MTRIPLE := x86_64-unknown-linux-gnu +else ifeq ($(shell uname),Darwin) +MLIR_RUNNER_UTILS := ${MLIR_BUILD_DIR}/lib/libmlir_runner_utils.dylib +MLIR_C_RUNNER_UTILS := ${MLIR_BUILD_DIR}/lib/libmlir_c_runner_utils.dylib +MTRIPLE := x86_64-apple-darwin +endif MLIR_VECTOR_EXAMPLES := ../MLIRVector @@ -53,7 +78,7 @@ rvv-scalable-run-128: --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} @@ -67,16 +92,15 @@ rvv-scalable-aot-128: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out -# Note: this target will trigger an error to show the limitation. -rvv-scalable-run-256-error: +rvv-scalable-run-256: @${BUDDY_OPT} ./rvv-scalable.mlir \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=256 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} @@ -86,12 +110,6 @@ rvv-insert-extract-intrinsics-asm: -mattr=+m,+d,+v -riscv-v-vector-bits-min=256 \ --filetype=asm -o log.s -rvv-insert-extract-intrinsics-asm-error: - @${LLC} ./rvv-insert-extract-intrinsics.ll \ - -mtriple riscv64 -target-abi lp64d \ - -mattr=+m,+d,+v -riscv-v-vector-bits-min=128 \ - --filetype=asm -o log.s - rvv-c-setvl-translate: @${LOCAL_CLANG} -march=rv64gcv --target=riscv64-unknown-linux-gnu \ --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT} --gcc-toolchain=${RISCV_GNU_TOOLCHAIN} \ @@ -107,7 +125,7 @@ rvv-c-setvl-run: @${LOCAL_CLANG} -march=rv64gcv --target=riscv64-unknown-linux-gnu \ --sysroot=${RISCV_GNU_TOOLCHAIN_SYSROOT} --gcc-toolchain=${RISCV_GNU_TOOLCHAIN} \ ./rvv-c-setvl.c -fPIC -S -emit-llvm -o log.ll - @${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + @${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --entry-function=main --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic log.ll rvv-setvl-translate: @@ -131,7 +149,7 @@ rvv-setvl-run: --lower-rvv -convert-vector-to-llvm -convert-arith-to-llvm -convert-func-to-llvm \ -reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} @@ -151,7 +169,7 @@ rvv-vscale-128-run: --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} @@ -161,7 +179,7 @@ rvv-vscale-256-run: --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=256 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} @@ -171,7 +189,7 @@ rvv-vscale-512-run: --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=512 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} @@ -185,7 +203,7 @@ rvv-vscale-128-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vscale-256-aot: @${BUDDY_OPT} ./rvv-vscale.mlir \ @@ -197,7 +215,7 @@ rvv-vscale-256-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=256 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vscale-512-aot: @${BUDDY_OPT} ./rvv-vscale.mlir \ @@ -209,7 +227,7 @@ rvv-vscale-512-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=512 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-loop-mask-asm: @${MLIR_OPT} ./rvv-loop-mask.mlir \ @@ -228,7 +246,7 @@ rvv-loop-mask-run: -convert-vector-to-llvm -finalize-memref-to-llvm -convert-arith-to-llvm \ -convert-func-to-llvm -reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} @@ -240,15 +258,21 @@ rvv-vp-intrinsic-lower: rvv-vp-intrinsic-translate: @${BUDDY_OPT} ./rvv-vp-intrinsic.mlir \ - --convert-scf-to-cf \ - --lower-rvv --lower-bud --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ + -lower-vector-exp \ + --lower-rvv \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ + --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir -o log.ll rvv-vp-intrinsic-asm: @${BUDDY_OPT} ./rvv-vp-intrinsic.mlir \ - --convert-scf-to-cf \ - --lower-rvv --lower-bud --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ + -lower-vector-exp \ + --lower-rvv \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ + --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ ${LLC} ${OPT_FLAG} -mtriple riscv64 -target-abi lp64d \ @@ -257,50 +281,60 @@ rvv-vp-intrinsic-asm: rvv-vp-intrinsic-run: @${BUDDY_OPT} ./rvv-vp-intrinsic.mlir \ - --convert-scf-to-cf \ - --lower-rvv -lower-vector-exp --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ + -lower-vector-exp \ + --lower-rvv \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ + --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} rvv-vp-intrinsic-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic.mlir \ - --convert-scf-to-cf \ - --lower-rvv -lower-vector-exp --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ + -lower-vector-exp \ + --lower-rvv \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ + --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ ${LLC} -mtriple riscv64 -target-abi lp64d -mattr=+m,+d,+v -riscv-v-vector-bits-min=128 --filetype=obj -o log.o @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-sh-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-sh.mlir \ - --convert-scf-to-cf \ - --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ + --lower-rvv \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ + --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ ${LLC} -mtriple riscv64 -mattr=+v -riscv-v-vector-bits-min=128 --filetype=obj -o log.o @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-sh-jit: @${BUDDY_OPT} ./rvv-vp-intrinsic-sh.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+v \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} rvv-vp-intrinsic-add-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-add.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -309,20 +343,22 @@ rvv-vp-intrinsic-add-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-add-jit: @${BUDDY_OPT} ./rvv-vp-intrinsic-add.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} rvv-vp-intrinsic-and-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-and.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -331,20 +367,22 @@ rvv-vp-intrinsic-and-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-and-jit: @${BUDDY_OPT} ./rvv-vp-intrinsic-and.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} rvv-vp-intrinsic-div-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-div.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -353,10 +391,11 @@ rvv-vp-intrinsic-div-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-mul-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-mul.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -365,10 +404,11 @@ rvv-vp-intrinsic-mul-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-sub-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-sub.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -377,10 +417,11 @@ rvv-vp-intrinsic-sub-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-fneg-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-fneg.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -389,10 +430,11 @@ rvv-vp-intrinsic-fneg-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-ext-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-ext.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -401,10 +443,11 @@ rvv-vp-intrinsic-ext-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-to-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-to.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -413,10 +456,11 @@ rvv-vp-intrinsic-to-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-trunc-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-trunc.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -425,10 +469,11 @@ rvv-vp-intrinsic-trunc-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-rem-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-rem.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -437,10 +482,11 @@ rvv-vp-intrinsic-rem-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-fma-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-fma.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -449,10 +495,11 @@ rvv-vp-intrinsic-fma-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-merge-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-merge.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -461,10 +508,11 @@ rvv-vp-intrinsic-merge-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-select-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-select.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -473,10 +521,11 @@ rvv-vp-intrinsic-select-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-or-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-or.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -485,10 +534,11 @@ rvv-vp-intrinsic-or-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-xor-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-xor.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -497,10 +547,11 @@ rvv-vp-intrinsic-xor-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-max-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-max.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -509,10 +560,11 @@ rvv-vp-intrinsic-max-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-min-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-min.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -521,10 +573,12 @@ rvv-vp-intrinsic-min-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out +# TODO: Fix Me rvv-vp-intrinsic-memory-aot: @${BUDDY_OPT} rvv-vp-intrinsic-memory.mlir \ + -convert-vector-to-scf \ -convert-linalg-to-loops -lower-affine -convert-scf-to-cf \ --lower-rvv \ -convert-vector-to-llvm -finalize-memref-to-llvm -convert-arith-to-llvm \ @@ -534,11 +588,14 @@ rvv-vp-intrinsic-memory-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out +# TODO: Fix Me rvv-vp-intrinsic-memory-scalable-aot: @${BUDDY_OPT} rvv-vp-intrinsic-memory-scalable.mlir \ - -convert-linalg-to-loops -lower-affine -convert-scf-to-cf \ + -convert-linalg-to-loops -lower-affine \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --lower-rvv \ -convert-vector-to-llvm -finalize-memref-to-llvm -convert-arith-to-llvm \ -convert-func-to-llvm -reconcile-unrealized-casts | \ @@ -547,10 +604,11 @@ rvv-vp-intrinsic-memory-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-fma-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-fma-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -559,10 +617,11 @@ rvv-vp-intrinsic-fma-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-fneg-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-fneg-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -571,10 +630,11 @@ rvv-vp-intrinsic-fneg-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-sh-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-sh-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -583,10 +643,11 @@ rvv-vp-intrinsic-sh-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-add-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-add-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -595,10 +656,11 @@ rvv-vp-intrinsic-add-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-and-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-and-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -607,10 +669,11 @@ rvv-vp-intrinsic-and-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-div-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-div-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -619,10 +682,11 @@ rvv-vp-intrinsic-div-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-ext-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-ext-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -631,10 +695,11 @@ rvv-vp-intrinsic-ext-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-max-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-max-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -643,10 +708,11 @@ rvv-vp-intrinsic-max-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-merge-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-merge-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -655,10 +721,11 @@ rvv-vp-intrinsic-merge-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-min-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-min-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -667,10 +734,11 @@ rvv-vp-intrinsic-min-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-mul-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-mul-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -679,10 +747,11 @@ rvv-vp-intrinsic-mul-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-or-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-or-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -691,10 +760,11 @@ rvv-vp-intrinsic-or-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-rem-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-rem-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -703,10 +773,11 @@ rvv-vp-intrinsic-rem-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-select-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-select-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -715,10 +786,11 @@ rvv-vp-intrinsic-select-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-sub-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-sub-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -727,10 +799,11 @@ rvv-vp-intrinsic-sub-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-to-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-to-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -739,10 +812,11 @@ rvv-vp-intrinsic-to-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-trunc-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-trunc-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -751,10 +825,11 @@ rvv-vp-intrinsic-trunc-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-xor-scalable-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-xor-scalable.mlir \ + -convert-vector-to-scf \ -convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ @@ -763,10 +838,11 @@ rvv-vp-intrinsic-xor-scalable-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-rem-error: @${BUDDY_OPT} ./rvv-vp-intrinsic-rem-error.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -775,10 +851,11 @@ rvv-vp-intrinsic-rem-error: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-fmul-reduce-error: @${BUDDY_OPT} ./rvv-vp-intrinsic-fmul-reduce-error.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -787,10 +864,11 @@ rvv-vp-intrinsic-fmul-reduce-error: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out rvv-vp-intrinsic-mul-reduce-aot: @${BUDDY_OPT} ./rvv-vp-intrinsic-mul-reduce.mlir \ + -convert-vector-to-scf \ --convert-scf-to-cf \ --lower-rvv --convert-vector-to-llvm --finalize-memref-to-llvm --convert-arith-to-llvm \ --convert-func-to-llvm --reconcile-unrealized-casts | \ @@ -799,7 +877,7 @@ rvv-vp-intrinsic-mul-reduce-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o -mabi=lp64d \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out ################################################################################ # Reuse MLIR Vector Examples @@ -822,12 +900,14 @@ rvv-load-run: --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-broadcast-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-broadcast.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -838,15 +918,19 @@ rvv-broadcast-asm: run-targets += rvv-broadcast-run rvv-broadcast-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-broadcast.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-fma-asm: - @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/rvv-fma.mlir \ + @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-fma.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -857,15 +941,19 @@ rvv-fma-asm: run-targets += rvv-fma-run rvv-fma-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-fma.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-long-asm: - @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/rvv-long.mlir \ + @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-long.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -876,10 +964,12 @@ rvv-long-asm: run-targets += rvv-long-run rvv-long-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-long.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} @@ -900,12 +990,14 @@ rvv-transpose-run: -convert-vector-to-llvm -finalize-memref-to-llvm -convert-func-to-llvm \ -reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-shape-cast-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-shape-cast.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -916,15 +1008,19 @@ rvv-shape-cast-asm: run-targets += rvv-shape-cast-run rvv-shape-cast-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-shape-cast.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-bitcast-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-bitcast.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -935,15 +1031,19 @@ rvv-bitcast-asm: run-targets += rvv-bitcast-run rvv-bitcast-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-bitcast.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-shuffle-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-shuffle.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -954,15 +1054,19 @@ rvv-shuffle-asm: run-targets += rvv-shuffle-run rvv-shuffle-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-shuffle.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-splat-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-splat.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -973,15 +1077,19 @@ rvv-splat-asm: run-targets += rvv-splat-run rvv-splat-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-splat.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-insert-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-insert.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -992,15 +1100,19 @@ rvv-insert-asm: run-targets += rvv-insert-run rvv-insert-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-insert.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-reduction-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-reduction.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -1011,15 +1123,19 @@ rvv-reduction-asm: run-targets += rvv-reduction-run rvv-reduction-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-reduction.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-outerproduct-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-outerproduct.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -1030,15 +1146,19 @@ rvv-outerproduct-asm: run-targets += rvv-outerproduct-run rvv-outerproduct-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-outerproduct.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-createmask-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-createmask.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -1049,15 +1169,19 @@ rvv-createmask-asm: run-targets += rvv-create-mask-run rvv-create-mask-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-create-mask.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-extract-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-extract.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -1068,15 +1192,19 @@ rvv-extract-asm: run-targets += rvv-extract-run rvv-extract-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-extract.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-maskedload-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-maskedload.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -1087,15 +1215,19 @@ rvv-maskedload-asm: run-targets += rvv-maskedload-run rvv-maskedload-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-maskedload.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-maskedstore-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-maskedstore.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -1106,15 +1238,19 @@ rvv-maskedstore-asm: run-targets += rvv-maskedstore-run rvv-maskedstore-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-maskedstore.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} rvv-extract-strided-slice-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-extract-strided-slice.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -1125,15 +1261,19 @@ rvv-extract-strided-slice-asm: run-targets += rvv-extract-strided-slice-run rvv-extract-strided-slice-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-extract-strided-slice.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-constant-mask-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-constant-mask.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -1144,15 +1284,19 @@ rvv-constant-mask-asm: run-targets += rvv-constant-mask-run rvv-constant-mask-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-constant-mask.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-expand-load-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-expandload.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -1163,15 +1307,19 @@ rvv-expand-load-asm: run-targets += rvv-expand-load-run rvv-expand-load-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-expandload.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-compressstore-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-compressstore.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -1182,15 +1330,19 @@ rvv-compressstore-asm: run-targets += rvv-compressstore-run rvv-compressstore-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-compressstore.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} rvv-insert-strided-slice-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-insert-strided-slice.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -1201,15 +1353,19 @@ rvv-insert-strided-slice-asm: run-targets += rvv-insert-strided-slice-run rvv-insert-strided-slice-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-insert-strided-slice.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} rvv-scatter-asm: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-scatter.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ @@ -1220,9 +1376,11 @@ rvv-scatter-asm: run-targets += rvv-scatter-run rvv-scatter-run: @${MLIR_OPT} ${MLIR_VECTOR_EXAMPLES}/vector-scatter.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ --convert-vector-to-llvm --finalize-memref-to-llvm --convert-func-to-llvm \ --reconcile-unrealized-casts | \ ${MLIR_TRANSLATE} --mlir-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} --march=riscv64 -mattr=+m,+d,+v -jit-linker=jitlink -relocation-model=pic \ --dlopen=${CROSS_MLIR_C_RUNNER_UTILS} --dlopen=${CROSS_MLIR_RUNNER_UTILS} diff --git a/examples/RVVExperiment/rvv-c-setvl.c b/examples/RVVExperiment/rvv-c-setvl.c index c8d1ccfbb..4a8489d55 100644 --- a/examples/RVVExperiment/rvv-c-setvl.c +++ b/examples/RVVExperiment/rvv-c-setvl.c @@ -3,7 +3,7 @@ int main() { int avl = 70; - int vl = vsetvl_e32m2(avl); + int vl = __riscv_vsetvl_e32m2(avl); printf("vl: %d\n", vl); return 0; diff --git a/examples/VectorExpDialect/makefile b/examples/VectorExpDialect/makefile index 8d55cc14a..ab85a8a2c 100644 --- a/examples/VectorExpDialect/makefile +++ b/examples/VectorExpDialect/makefile @@ -1,30 +1,46 @@ #!/bin/bash -BUDDY_OPT := ../../build/bin/buddy-opt -BUDDY_TRANSLATE := ../../build/bin/buddy-translate -MLIR_OPT := ../../llvm/build/bin/mlir-opt -MLIR_TRANSLATE := ../../llvm/build/bin/mlir-translate -MLIR_CPU_RUNNER := ../../llvm/build/bin/mlir-cpu-runner -LLC := ../../llvm/build/bin/llc -OPT_FLAG := -O0 -RISCV_GNU_TOOLCHAIN := ../../thirdparty/build-riscv-gnu-toolchain -RISCV_GNU_TOOLCHAIN_SYSROOT := ../../thirdparty/build-riscv-gnu-toolchain/sysroot -QEMU := ../../thirdparty/qemu/build/riscv64-linux-user/qemu-riscv64 -LOCAL_CLANG := ../../thirdparty/build-local-clang/bin/clang -CROSS_LLI := ../../thirdparty/build-cross-clang/bin/lli -CROSS_MLIR_CPU_RUNNER := ../../thirdparty/build-cross-mlir/bin/mlir-cpu-runner -CROSS_MLIR_C_RUNNER_UTILS := ../../thirdparty/build-cross-mlir/lib/libmlir_c_runner_utils.so -CROSS_MLIR_RUNNER_UTILS := ../../thirdparty/build-cross-mlir/lib/libmlir_runner_utils.so -CROSS_MLIR_LIB := ../../thirdparty/build-cross-mlir/lib -CROSS_BUDDY_MLIR_LIB := ../../thirdparty/build-cross-buddy-mlir/lib/ +# Build Directories +MLIR_BUILD_DIR := ../../llvm/build/ +BUDDY_MLIR_BUILD_DIR := ../../build/ +CROSS_BUDDY_MLIR_BUILD_DIR := ../../build-cross-rv/ +CROSS_LLVM_BUILD_DIR := ../../llvm/build-cross-clang-rv/ +CROSS_MLIR_BUILD_DIR := ../../llvm/build-cross-mlir-rv/ + +# Buddy MLIR Tools +BUDDY_OPT := ${BUDDY_MLIR_BUILD_DIR}/bin/buddy-opt +BUDDY_TRANSLATE := ${BUDDY_MLIR_BUILD_DIR}/bin/buddy-translate + +# Core LLVM/MLIR Tools +MLIR_OPT := ${MLIR_BUILD_DIR}/bin/mlir-opt +MLIR_TRANSLATE := ${MLIR_BUILD_DIR}/bin/mlir-translate +MLIR_CPU_RUNNER := ${MLIR_BUILD_DIR}/bin/mlir-cpu-runner +LLC := ${MLIR_BUILD_DIR}/bin/llc +LOCAL_CLANG := ${MLIR_BUILD_DIR}/bin/clang + +# RISC-V GNU Toolchain +RISCV_GNU_TOOLCHAIN := ${BUDDY_MLIR_BUILD_DIR}/thirdparty/riscv-gnu-toolchain +RISCV_GNU_TOOLCHAIN_SYSROOT := ${RISCV_GNU_TOOLCHAIN}/sysroot +QEMU := ${RISCV_GNU_TOOLCHAIN}/bin/qemu-riscv64 + +# Cross Compiled Toolchain +CROSS_BUDDY_MLIR_LIB := ${CROSS_BUDDY_MLIR_BUILD_DIR}/lib/ +CROSS_LLI := ${CROSS_LLVM_BUILD_DIR}/bin/lli +CROSS_MLIR_CPU_RUNNER := ${CROSS_MLIR_BUILD_DIR}/bin/mlir-cpu-runner +CROSS_MLIR_C_RUNNER_UTILS := ${CROSS_MLIR_BUILD_DIR}/lib/libmlir_c_runner_utils.so +CROSS_MLIR_RUNNER_UTILS := ${CROSS_MLIR_BUILD_DIR}/lib/libmlir_runner_utils.so +CROSS_MLIR_LIB := ${CROSS_MLIR_BUILD_DIR}/lib + +# Optimization Flag +OPT_FLAG := -O0 ifeq ($(shell uname),Linux) -MLIR_RUNNER_UTILS := ../../llvm/build/lib/libmlir_runner_utils.so -MLIR_C_RUNNER_UTILS := ../../llvm/build/lib/libmlir_c_runner_utils.so +MLIR_RUNNER_UTILS := ${MLIR_BUILD_DIR}/lib/libmlir_runner_utils.so +MLIR_C_RUNNER_UTILS := ${MLIR_BUILD_DIR}//lib/libmlir_c_runner_utils.so MTRIPLE := x86_64-unknown-linux-gnu else ifeq ($(shell uname),Darwin) -MLIR_RUNNER_UTILS := ../../llvm/build/lib/libmlir_runner_utils.dylib -MLIR_C_RUNNER_UTILS := ../../llvm/build/lib/libmlir_c_runner_utils.dylib +MLIR_RUNNER_UTILS := ${MLIR_BUILD_DIR}/lib/libmlir_runner_utils.dylib +MLIR_C_RUNNER_UTILS := ${MLIR_BUILD_DIR}/lib/libmlir_c_runner_utils.dylib MTRIPLE := x86_64-apple-darwin endif @@ -39,6 +55,8 @@ vector-exp-load-original-lower: vector-exp-load-original-translate: @${BUDDY_OPT} ./vector-exp-load-original.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ -convert-vector-to-llvm \ -finalize-memref-to-llvm \ -convert-func-to-llvm \ @@ -47,6 +65,8 @@ vector-exp-load-original-translate: vector-exp-load-original-asm: @${BUDDY_OPT} ./vector-exp-load-original.mlir \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ -convert-vector-to-llvm \ -finalize-memref-to-llvm \ -convert-func-to-llvm \ @@ -59,6 +79,8 @@ vector-exp-load-original-asm: vector-exp-config-lower: @${BUDDY_OPT} ./vector-exp-predication.mlir \ -lower-vector-exp \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ -convert-vector-to-llvm \ -finalize-memref-to-llvm \ -convert-func-to-llvm \ @@ -68,6 +90,8 @@ vector-exp-config-lower: vector-exp-config-translate: @${BUDDY_OPT} ./vector-exp-predication.mlir \ -lower-vector-exp \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ -convert-vector-to-llvm \ -finalize-memref-to-llvm \ -convert-func-to-llvm \ @@ -77,6 +101,8 @@ vector-exp-config-translate: vector-exp-config-run: @${BUDDY_OPT} ./vector-exp-predication.mlir \ -lower-vector-exp \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ -convert-vector-to-llvm \ -finalize-memref-to-llvm \ -convert-func-to-llvm \ @@ -87,6 +113,8 @@ vector-exp-config-run: vector-exp-predication-memory-lower: @${BUDDY_OPT} ./vector-exp-predication-memory.mlir \ -lower-vector-exp \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ -convert-vector-to-llvm \ -finalize-memref-to-llvm \ -convert-func-to-llvm \ @@ -96,13 +124,14 @@ vector-exp-predication-memory-lower: vector-exp-predication-memory-run: @${BUDDY_OPT} ./vector-exp-predication-memory.mlir \ -lower-vector-exp \ + -convert-vector-to-scf \ + -convert-scf-to-cf \ -convert-vector-to-llvm \ -finalize-memref-to-llvm \ -convert-func-to-llvm \ -reconcile-unrealized-casts |\ ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} \ - -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} -march=riscv64 -mattr=+m,+d,+v \ -dlopen=${CROSS_MLIR_C_RUNNER_UTILS} \ -dlopen=${CROSS_MLIR_RUNNER_UTILS} @@ -119,8 +148,7 @@ vector-exp-predication-matmul-run: -convert-func-to-llvm \ -reconcile-unrealized-casts |\ ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} \ - -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} -march=riscv64 -mattr=+m,+d,+v \ -dlopen=${CROSS_MLIR_C_RUNNER_UTILS} \ -dlopen=${CROSS_MLIR_RUNNER_UTILS} @@ -141,7 +169,7 @@ vector-exp-predication-matmul-aot: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out vector-exp-predication-matmul-elf: @${BUDDY_OPT} ./vector-exp-predication-matmul.mlir \ @@ -212,7 +240,7 @@ vector-exp-add-mask-run: -reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} \ - -cpu rv64,x-v=true,vlen=128 \ + -cpu max \ ${CROSS_LLI} -march=riscv64 -mattr=+m,+d,+v \ -dlopen=${CROSS_MLIR_C_RUNNER_UTILS} \ -dlopen=${CROSS_MLIR_RUNNER_UTILS} @@ -243,8 +271,7 @@ vector-exp-add-predication-run: -convert-func-to-llvm \ -reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ - ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} \ - -cpu rv64,x-v=true,vlen=128 \ + ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max \ ${CROSS_LLI} -march=riscv64 -mattr=+m,+d,+v \ -dlopen=${CROSS_MLIR_C_RUNNER_UTILS} \ -dlopen=${CROSS_MLIR_RUNNER_UTILS} @@ -291,4 +318,4 @@ vector-exp-dynamic-vector-run: @${RISCV_GNU_TOOLCHAIN}/bin/riscv64-unknown-linux-gnu-gcc log.o \ -L${CROSS_MLIR_LIB} -lmlir_runner_utils -lmlir_c_runner_utils \ -o a.out - @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu rv64,x-v=true,vlen=128 a.out + @LD_LIBRARY_PATH=${CROSS_MLIR_LIB} ${QEMU} -L ${RISCV_GNU_TOOLCHAIN_SYSROOT} -cpu max a.out diff --git a/examples/VectorExpDialect/vector-exp-predication-matmul.mlir b/examples/VectorExpDialect/vector-exp-predication-matmul.mlir index 557b38f9e..fc4aee47e 100644 --- a/examples/VectorExpDialect/vector-exp-predication-matmul.mlir +++ b/examples/VectorExpDialect/vector-exp-predication-matmul.mlir @@ -85,8 +85,8 @@ func.func @main() -> i32 { call @matmul(%mem_i32, %mem_i32, %result_mem) : (memref<10x10xi32>, memref<10x10xi32>, memref<10x10xi32>) -> () - // %print_result_mem = memref.cast %result_mem : memref<10x10xi32> to memref<*xi32> - // call @printMemrefI32(%print_result_mem) : (memref<*xi32>) -> () + %print_result_mem = memref.cast %result_mem : memref<10x10xi32> to memref<*xi32> + call @printMemrefI32(%print_result_mem) : (memref<*xi32>) -> () %ret = arith.constant 0 : i32 return %ret : i32 diff --git a/examples/lit.cfg.py b/examples/lit.cfg.py index 91693e444..c1c4c05bd 100644 --- a/examples/lit.cfg.py +++ b/examples/lit.cfg.py @@ -39,8 +39,11 @@ 'BuddyLeNet', 'BuddyBert', 'BuddyLlama', + 'BuddyWhisper', 'BuddyBert', + 'BuddyMobileNetV3', 'BuddyResNet18', + 'BuddyGPU', 'ConvOpt', 'DAPDialect', 'DIPDialect', diff --git a/flake.lock b/flake.lock index 7bdd04677..bd7992239 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1694529238, - "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1699099776, - "narHash": "sha256-X09iKJ27mGsGambGfkKzqvw5esP1L/Rf8H3u3fCqIiU=", + "lastModified": 1722813957, + "narHash": "sha256-IAoYyYnED7P8zrBFMnmp7ydaJfwTnwcnqxUElC1I26Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "85f1ba3e51676fa8cc604a3d863d729026a6b8eb", + "rev": "cb9a96f23c491c081b38eab96d22fa958043c9fa", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 8f94e2aec..c3af6d9d5 100644 --- a/flake.nix +++ b/flake.nix @@ -9,36 +9,17 @@ outputs = { self, nixpkgs, flake-utils }@inputs: let overlay = import ./nix/overlay.nix; - pkgsForSys = system: import nixpkgs { overlays = [ overlay ]; inherit system; }; in flake-utils.lib.eachDefaultSystem (system: let - pkgs = pkgsForSys system; - mkLLVMShell = pkgs.mkShell.override { stdenv = pkgs.llvmPkgs.stdenv; }; + pkgs = import nixpkgs { overlays = [ overlay ]; inherit system; }; in { # Help other use packages in this flake legacyPackages = pkgs; - devShells.default = mkLLVMShell { - buildInputs = with pkgs; [ - # buddy-mlir build tools - cmake - ninja - python3 - llvmPkgs.bintools # For ld.lld - - # buddy-mlir libraries - libjpeg - libpng - zlib-ng - ]; - - postHook = '' - export PATH="${pkgs.clang-tools}/bin:$PATH" - ''; - }; + devShells.default = pkgs.buddy-mlir.devShell; formatter = pkgs.nixpkgs-fmt; }) // diff --git a/frontend/Interfaces/buddy/Core/Container.h b/frontend/Interfaces/buddy/Core/Container.h index db8b66c17..6e3ff18d5 100644 --- a/frontend/Interfaces/buddy/Core/Container.h +++ b/frontend/Interfaces/buddy/Core/Container.h @@ -132,7 +132,7 @@ MemRef::MemRef(intptr_t sizes[N], T init) : MemRef(sizes) { template MemRef::MemRef(intptr_t sizes[N], bool needMalloc, intptr_t offset) - : offset(offset), aligned(nullptr), allocated(nullptr) { + : allocated(nullptr), aligned(nullptr), offset(offset) { for (size_t i = 0; i < N; i++) { this->sizes[i] = sizes[i]; } @@ -152,7 +152,7 @@ MemRef::MemRef(std::vector sizes, T init) : MemRef(sizes) { template MemRef::MemRef(std::vector sizes, bool needMalloc, intptr_t offset) - : offset(offset), aligned(nullptr), allocated(nullptr) { + : allocated(nullptr), aligned(nullptr), offset(offset) { if (sizes.size() != N) { throw std::runtime_error("Invalid number of dimensions."); } diff --git a/frontend/Interfaces/buddy/DAP/AudioContainer.h b/frontend/Interfaces/buddy/DAP/AudioContainer.h index 9bc924574..7c3901e73 100644 --- a/frontend/Interfaces/buddy/DAP/AudioContainer.h +++ b/frontend/Interfaces/buddy/DAP/AudioContainer.h @@ -14,6 +14,13 @@ // //===----------------------------------------------------------------------===// // +// The audio decoding process in this file references the `AudioFile` library, +// which is hereby acknowledged. +// For the license of the `AudioFile` library, +// please see: https://github.com/adamstark/AudioFile/blob/master/LICENSE +// +//===----------------------------------------------------------------------===// +// // Audio container descriptor. // //===----------------------------------------------------------------------===// @@ -21,79 +28,592 @@ #ifndef FRONTEND_INTERFACES_BUDDY_DAP_AUDIOCONTAINER #define FRONTEND_INTERFACES_BUDDY_DAP_AUDIOCONTAINER -#include "AudioFile.h" #include "buddy/Core/Container.h" +#include +#include +#include +#include +#include namespace dap { - -// Audio container. -// - T represents the type of the elements. -// - N represents the number of audio channels (Normally would be 1 or 2). -// If N is smaller than channels from the file, only previous N channels will be -// manipulated. -template class Audio { +template class Audio : public MemRef { public: - Audio() : audioFile(), data(nullptr) {} - explicit Audio(std::string filename) : audioFile(filename), data(nullptr) {} - void fetchMetadata(const AudioFile &aud); - bool save(std::string filename); - AudioFile &getAudioFile() { - moveToAudioFile(); - return audioFile; - } - MemRef &getMemRef() { - moveToMemRef(); - return *data; - } - -protected: - void moveToMemRef(); - void moveToAudioFile(); - AudioFile audioFile; - MemRef *data; + // Constructor to initialize the Audio MemRef object with a file name. + Audio(std::string filename); + // Constructor to convert MemRef object to Audio MemRef object. Member + // variables are initialized with default values. + Audio(MemRef &&memref) noexcept; + + // Retrieve the name of the audio format. + std::string getFormatName() const { + switch (this->audioFormat) { + case AudioFormat::WAV: + return "WAV"; + default: + return "Unsupported format"; + } + } + // Returns the number of bits per sample. + int getBitDepth() const { return static_cast(this->bitsPerSample); } + // Returns the number of samples per channel. + size_t getSamplesNum() const { return this->numSamples; } + // Returns the number of audio channels. + int getChannelsNum() const { return static_cast(this->numChannels); } + // Returns the sampling rate in samples per second. + int getSampleRate() const { return static_cast(this->sampleRate); } + + // Sets the number of bits per sample. + void setBitDepth(int bitDepth) { + this->bitsPerSample = static_cast(bitDepth); + } + // Sets the number of samples per channel. + void setSamplesNum(size_t samplesNum) { this->numSamples = samplesNum; } + // Sets the number of audio channels. + void setChannelsNum(int channelsNum) { + this->numChannels = static_cast(channelsNum); + } + // Sets the sampling rate in samples per second. + void setSampleRate(int sampleRate) { + this->sampleRate = static_cast(sampleRate); + } + + // Create an Audio File with file name and format. + bool saveToFile(std::string filename, std::string format); + +private: + // Sample bit depth. + uint16_t bitsPerSample; + // Number of samples per channel. + size_t numSamples; + // Number of audio channels. + uint16_t numChannels; + // Samples per second (Hz). + uint32_t sampleRate; + // Enum to represent supported audio formats. + enum class AudioFormat { + ERROR, // Represents an error or unsupported format. + WAV, // WAV format. + } audioFormat; + // Enum to represent byte order of data. + enum class Endianness { LittleEndian, BigEndian }; + + // Decoders for multiple audio file formats. + // Decode a WAV file into MemRef format. + bool decodeWaveFile(const std::vector &fileData); + + // Encoders for multiple audio file formats. + // Encode a MemRef into WAV format. + bool EncodeWaveFile(std::vector &fileData); + + // Helper functions for decoding and data manipulation + // Find the index of a specified chunk in the audio file. + size_t getIndexOfChunk(const std::vector &fileData, + const std::string &chunkHeaderID, size_t startIndex, + Endianness endianness = Endianness::LittleEndian); + // Convert four bytes to a 32-bit integer according to byte order of data. + int32_t fourBytesToI32(const std::vector &fileData, + size_t startIndex, + Endianness endianness = Endianness::LittleEndian); + // Convert two bytes to a 16-bit integer according to byte order of data. + int16_t twoBytesToI16(const std::vector &fileData, size_t startIndex, + Endianness endianness = Endianness::LittleEndian); + // Normalize 8-bit unsigned integer sample to a range of -1.0 to 1.0. + T oneByteToSample(uint8_t data) { + return static_cast(data - 128) / static_cast(128.); + } + // Normalize 16-bit signed integer sample to a range of -1.0 to 1.0. + T twoBytesToSample(int16_t data) { + return static_cast(data) / static_cast(32768.); + } + + // Helper functions for encoding and data manipulation. + // Converts each character in the string to a byte. + void stringToBytes(std::vector &fileData, const std::string &str) { + for (size_t i = 0; i < str.size(); i++) + fileData.push_back(static_cast(str[i])); + } + // Converts a 32-bit integer to four bytes according to byte order of data. + void i32ToFourBytes(std::vector &fileData, int32_t num, + Endianness endianness = Endianness::LittleEndian); + // Converts a 16-bit integer to two bytes according to byte order of data. + void i16ToTwoBytes(std::vector &fileData, int16_t num, + Endianness endianness = Endianness::LittleEndian); + // Converts an audio sample to a 8-bit PCM format (one byte). + uint8_t sampleToOneByte(T sample); + // Converts an audio sample to a 16-bit PCM format (two bytes). + int16_t sampleToI16(T sample); }; -template bool Audio::save(std::string filename) { - if (!this->audioFile.samples) { - auto temp = this->data->release(); - if constexpr (std::is_same_v) { - for (int i = 0; i < audioFile.numSamples; i++) { - if (temp[i] != temp[i]) { // To handle NaN values - temp[i] = 0.9999999; - } else { // Clamp the values between -1.0 to 1.0 - temp[i] = std::clamp(temp[i], float(-1.0), float(0.9999999)); - } +// Audio Container Constructor. +// Constructs an audio container object from the audio file path. +template Audio::Audio(std::string filePath) { + // --------------------------------------------------------------------------- + // 1. Read the audio file into a std::vector. + // --------------------------------------------------------------------------- + // Open the file in binary mode and position the file pointer at the end of + // the file. + std::ifstream file(filePath, std::ios::binary | std::ios::ate); + // Check if the file was successfully opened. + if (!file) { + throw std::runtime_error("Error: Unable to open file at " + filePath); + } + // Get the size of the file. + size_t dataLength = file.tellg(); + // Move file pointer to the beginning of the file. + file.seekg(0, std::ios::beg); + // Create a vector to store the data. + std::vector fileData(dataLength); + // Read the data. + if (!file.read(reinterpret_cast(fileData.data()), dataLength)) { + throw std::runtime_error("Error: Unable to read data from " + filePath); + } + // --------------------------------------------------------------------------- + // 2. Determine the audio format and decode the audio data into MemRef. + // --------------------------------------------------------------------------- + std::string header(fileData.begin(), fileData.begin() + 4); + // Check the file header to determine the format. + if (header == "RIFF") { + this->audioFormat = AudioFormat::WAV; + bool success = decodeWaveFile(fileData); + if (!success) { + this->audioFormat = AudioFormat::ERROR; + throw std::runtime_error("Failed to decode WAV file from " + filePath); + }; + } else { + this->audioFormat = AudioFormat::ERROR; + throw std::runtime_error("Unsupported audio format detected in file " + + filePath); + } +} + +// Constructs an audio container object from a MemRef object. Initializes +// metadata with default values. +template +Audio::Audio(MemRef &&memref) noexcept + : MemRef(std::move(memref)), bitsPerSample(0), numSamples(0), + numChannels(0), sampleRate(0) {} + +// Create Audio File. +// Save Audio MemRef to the specified file path using the desired format. +template +bool Audio::saveToFile(std::string filePath, std::string format) { + // --------------------------------------------------------------------------- + // 1. Determine the audio format and encode the MemRef into file data. + // --------------------------------------------------------------------------- + // Convert the string to lowercase before comparison, ensuring that case + // variations are handled without repeating conditions. + std::transform(format.begin(), format.end(), format.begin(), ::tolower); + // Vector for storing bytes in a specific audio format. + std::vector fileData; + // Select encoder. + if (format == "wav" || format == "wave") { + bool success = EncodeWaveFile(fileData); + if (!success) { + std::cerr << "Failed to encode WAVE file." << std::endl; + return false; + } + } else { + std::cerr << "Unsupported: The encoding method for " << format + << " format is not yet supported." << std::endl; + return false; + } + // --------------------------------------------------------------------------- + // 2. Write std::vector into audio file. + // --------------------------------------------------------------------------- + std::ofstream outputFile(filePath, std::ios::binary); + + if (outputFile.is_open()) { + for (size_t i = 0; i < fileData.size(); i++) { + char value = static_cast(fileData[i]); + outputFile.write(&value, sizeof(char)); + } + + outputFile.close(); + + return true; + } + + return false; +} + +// WAV Audio File Decoder +template +bool Audio::decodeWaveFile(const std::vector &fileData) { + // This container class only cares about the data and key information in the + // audio file, so only the format and data chunk are decoded here. + // Find the starting indices of critical chunks within the WAV file. + size_t indexOfFormatChunk = getIndexOfChunk(fileData, "fmt ", 12); + size_t indexOfDataChunk = getIndexOfChunk(fileData, "data", 12); + + // Decode the 'format' chunk to obtain format specifications. + // Format sub-chunk: + // sub-chunk ID: char[4] | 4 bytes | "fmt " + // sub-chunk size: uint32_t | 4 bytes + // audio format: uint16_t | 2 bytes | 1 for PCM + // number of channels: uint16_t | 2 bytes + // sample rate: uint32_t | 4 bytes + // byte rate: uint32_t | 4 bytes + // block align: uint16_t | 2 bytes + // bits per sample: uint16_t | 2 bytes + std::string formatChunkID(fileData.begin() + indexOfFormatChunk, + fileData.begin() + indexOfFormatChunk + 4); + // uint32_t fmtChunkSize = fourBytesToI32(fileData, indexOfFormatChunk + 4); + // uint16_t audioFormat = twoBytesToI16(fileData, indexOfFormatChunk + 8); + this->numChannels = twoBytesToI16(fileData, indexOfFormatChunk + 10); + this->sampleRate = fourBytesToI32(fileData, indexOfFormatChunk + 12); + // byteRate = sampleRate * numChannels * bitsPerSample / 8 + // uint32_t byteRate = fourBytesToI32(fileData, indexOfFormatChunk + 16); + // blockAlign = numChannels * bitsPerSample / 8 + uint16_t blockAlign = twoBytesToI16(fileData, indexOfFormatChunk + 20); + this->bitsPerSample = twoBytesToI16(fileData, indexOfFormatChunk + 22); + uint16_t numBytesPerSample = static_cast(this->bitsPerSample) / 8; + + // Decode `data` chunk. + // Data sub-chunk: + // sub-chunk ID: char[4] | 4 bytes | "data" + // sub-chunk size: uint32_t | 4 bytes + // data | remains + std::string dataChunkID(fileData.begin() + indexOfDataChunk, + fileData.begin() + indexOfDataChunk + 4); + int32_t dataChunkSize = fourBytesToI32(fileData, indexOfDataChunk + 4); + this->numSamples = dataChunkSize / blockAlign; + // size_t numSamplesPerChannels = this->numSamples / this->numChannels; + size_t samplesStartIndex = indexOfDataChunk + 8; + + // Audio MemRef layout defaults to 1 dimension. + // Sample values from multiple channels are stored together. + if (N == 1) { + this->sizes[0] = this->numSamples; + } else if (N == this->numChannels) { + // TODO: add conversion from 1 dimension to multi-dimension + std::cerr << "Unsupported: The MemRef layout of multi-dimensional channels " + "is not yet supported." + << std::endl; + return false; + } else { + std::cerr << "Error: dimension mismatch (audio file channel: " + << this->numChannels << " MemRef layout channel: " << N << ")" + << std::endl; + return false; + } + + // Allocate memory for MemRef. + this->setStrides(); + size_t size = this->product(this->sizes); + this->allocated = (T *)malloc(sizeof(T) * size); + this->aligned = this->allocated; + + // Sample data type: 8 bit + if (this->bitsPerSample == 8) { + size_t memrefIndex = 0; + for (size_t i = 0; i < this->numSamples; i++) { + for (size_t channel = 0; channel < this->numChannels; channel++) { + size_t sampleIndex = + samplesStartIndex + (blockAlign * i) + channel * numBytesPerSample; + this->aligned[memrefIndex] = oneByteToSample(fileData[sampleIndex]); + memrefIndex++; + } + } + } + // Sample data type: 16 bit + else if (this->bitsPerSample == 16) { + size_t memrefIndex = 0; + for (size_t i = 0; i < this->numSamples; i++) { + for (size_t channel = 0; channel < this->numChannels; channel++) { + size_t sampleIndex = + samplesStartIndex + (blockAlign * i) + channel * numBytesPerSample; + int16_t dataTwoBytes = twoBytesToI16(fileData, sampleIndex); + this->aligned[memrefIndex] = twoBytesToSample(dataTwoBytes); + memrefIndex++; + } + } + } + // Other data types are not currently supported. + else { + std::cerr << "Unsupported audio data type." << std::endl; + return false; + } + + return true; +} + +// WAV Audio File Encoder +template +bool Audio::EncodeWaveFile(std::vector &fileData) { + // Encode the 'header' chunk. + // RIFF chunk descriptor + // chunk ID: char[4] | 4 bytes | "RIFF" + // chunk size: uint32_t | 4bytes + // format: char[4] | 4 bytes | "WAVE" + stringToBytes(fileData, "RIFF"); + int16_t audioFormat = this->bitsPerSample == 32 ? 0 : 1; + // Size for 'format' sub-chunk, doesn't include metadata length. + int32_t formatChunkSize = audioFormat == 1 ? 16 : 18; + // Size for 'data' sub-chunk, doesn't include metadata length. + int32_t dataChunkSize = + this->numSamples * this->numChannels * this->bitsPerSample / 8; + // The file size in bytes include header chunk size(4, not counting RIFF and + // WAVE), the format chunk size(formatChunkSize and 8 bytes for metadata), the + // data chunk size(dataChunkSize and 8 bytes for metadata). + int32_t fileSizeInBytes = 4 + formatChunkSize + 8 + dataChunkSize + 8; + i32ToFourBytes(fileData, fileSizeInBytes); + stringToBytes(fileData, "WAVE"); + + // Encode the 'format' chunk. + // Format sub-chunk: + // sub-chunk ID: char[4] | 4 bytes | "fmt " + // sub-chunk size: uint32_t | 4 bytes + // audio format: uint16_t | 2 bytes | 1 for PCM + // number of channels: uint16_t | 2 bytes + // sample rate: uint32_t | 4 bytes + // byte rate: uint32_t | 4 bytes + // block align: uint16_t | 2 bytes + // bits per sample: uint16_t | 2 bytes + stringToBytes(fileData, "fmt "); + i32ToFourBytes(fileData, formatChunkSize); + i16ToTwoBytes(fileData, audioFormat); + i16ToTwoBytes(fileData, static_cast(this->numChannels)); + i32ToFourBytes(fileData, static_cast(this->sampleRate)); + int16_t numBytesPerBlock = + static_cast(dataChunkSize / this->numSamples); + int32_t numBytesPerSecond = + static_cast(this->sampleRate * numBytesPerBlock); + i32ToFourBytes(fileData, numBytesPerSecond); + i16ToTwoBytes(fileData, numBytesPerBlock); + i16ToTwoBytes(fileData, static_cast(this->bitsPerSample)); + + // Encode the 'data' chunk. + // Data sub-chunk: + // sub-chunk ID: char[4] | 4 bytes | "data" + // sub-chunk size: uint32_t | 4 bytes + // data | remains + stringToBytes(fileData, "data"); + i32ToFourBytes(fileData, dataChunkSize); + + // Sample data length: 8 bit + if (this->bitsPerSample == 8) { + size_t memrefIndex = 0; + for (size_t i = 0; i < this->numSamples; i++) { + for (size_t channel = 0; channel < this->numChannels; channel++) { + uint8_t byte = sampleToOneByte(this->aligned[memrefIndex]); + fileData.push_back(byte); + memrefIndex++; + } + } + } + // Sample data length: 16 bit + else if (this->bitsPerSample == 16) { + size_t memrefIndex = 0; + for (size_t i = 0; i < this->numSamples; i++) { + for (size_t channel = 0; channel < this->numChannels; channel++) { + int16_t sampleAsInt = sampleToI16(this->aligned[memrefIndex]); + i16ToTwoBytes(fileData, sampleAsInt); + memrefIndex++; } } - this->audioFile.samples.reset(temp); } - return this->audioFile.save(filename); + // Other data length are not yet supported. + else { + std::cerr << "Unsupported audio data length: " << this->bitsPerSample + << " bit" << std::endl; + return false; + } + + return true; +} + +// Locates the start index of a specific chunk in a WAV file data buffer. +// Params: +// fileData: Vector containing the raw binary data of the WAV file. +// chunkHeaderID: The 4-byte identifier for the chunk (e.g., "fmt ", "data"). +// startIndex: Index to start the search from within the fileData. +// endianness: Byte order used to interpret multi-byte values in the chunk +// size. +// Returns: +// The index of the start of the chunk or 0 if not found. +template +size_t Audio::getIndexOfChunk(const std::vector &fileData, + const std::string &chunkHeaderID, + size_t startIndex, Endianness endianness) { + constexpr int dataLen = 4; + if (chunkHeaderID.size() != dataLen) { + assert(false && "Chunk header ID must be exactly 4 characters long"); + return -1; + } + size_t i = startIndex; + while (i < fileData.size() - dataLen) { + // Check if the current bytes match the chunk header ID + if (memcmp(&fileData[i], chunkHeaderID.data(), dataLen) == 0) { + return i; + } + // Skip to the next chunk: advance by the size of the current chunk + // Move index to the size part of the chunk + i += dataLen; + // Prevent reading beyond vector size + if (i + dataLen > fileData.size()) + break; + // Get the size of the chunk. + auto chunkSize = fourBytesToI32(fileData, i, endianness); + if (chunkSize < 0) { + assert(false && "Invalid chunk size encountered"); + return -1; + } + // Move to the next chunk header + i += (dataLen + chunkSize); + } + // Return 0 if the chunk is not found + return 0; +} + +// Converts four bytes from the file data array to a 32-bit integer based on +// endianness. Params: +// fileData: Vector containing the raw binary data. +// startIndex: Index in fileData where the 4-byte sequence starts. +// endianness: Specifies the byte order (LittleEndian or BigEndian). +// Returns: +// The 32-bit integer converted from the byte sequence. +template +int32_t Audio::fourBytesToI32(const std::vector &fileData, + size_t startIndex, Endianness endianness) { + // Ensure the index is within the bounds to prevent out-of-range access. + if (startIndex + 3 >= fileData.size()) { + throw std::out_of_range("Index out of range for fourBytesToI32"); + } + // Use uint32_t to prevent sign extension and maintain accurate binary + // representation during bit operations. + uint32_t result; + if (endianness == Endianness::LittleEndian) { + result = (static_cast(fileData[startIndex + 3]) << 24) | + (static_cast(fileData[startIndex + 2]) << 16) | + (static_cast(fileData[startIndex + 1]) << 8) | + static_cast(fileData[startIndex]); + } else { + result = (static_cast(fileData[startIndex]) << 24) | + (static_cast(fileData[startIndex + 1]) << 16) | + (static_cast(fileData[startIndex + 2]) << 8) | + static_cast(fileData[startIndex + 3]); + } + // Convert the unsigned result to signed int32_t to match the function's + // return type. + return static_cast(result); +} + +// Converts two bytes from the file data array to a 16-bit integer based on +// endianness. Params: +// fileData: Vector containing the raw binary data. +// startIndex: Index in fileData where the 2-byte sequence starts. +// endianness: Specifies the byte order (LittleEndian or BigEndian). +// Returns: +// The 16-bit integer converted from the byte sequence. +template +int16_t Audio::twoBytesToI16(const std::vector &fileData, + size_t startIndex, Endianness endianness) { + // Ensure the index is within the bounds to prevent out-of-range access. + if (startIndex + 1 >= fileData.size()) { + throw std::out_of_range("Index out of range for twoBytesToI16"); + } + // Use uint16_t to prevent sign extension and maintain accurate binary + // representation during bit operations. + uint16_t result; + if (endianness == Endianness::LittleEndian) { + result = (static_cast(fileData[startIndex + 1]) << 8) | + static_cast(fileData[startIndex]); + } else { + result = (static_cast(fileData[startIndex]) << 8) | + static_cast(fileData[startIndex + 1]); + } + // Convert the unsigned result to signed int16_t to match the function's + // return type. + return static_cast(result); } +// Converts a 32-bit integer to four bytes based on endianness. +// Params: +// fileData: Vector containing the raw binary data. +// num: A 32-bit integer prepared for convertion. +// endianness: Specifies the byte order (LittleEndian or BigEndian). template -void Audio::fetchMetadata(const AudioFile &aud) { - this->audioFile.setBitDepth(aud.getBitDepth()); - this->audioFile.setSampleRate(aud.getSampleRate()); - this->audioFile.numSamples = aud.numSamples; - this->audioFile.numChannels = aud.numChannels; - this->audioFile.setAudioBuffer(nullptr); +void Audio::i32ToFourBytes(std::vector &fileData, int32_t num, + Endianness endianness) { + // Use uint8_t to prevent sign extension and maintain accurate binary + // representation during bit operations. + uint8_t bytes[4]; + if (endianness == Endianness::LittleEndian) { + bytes[3] = static_cast(num >> 24) & 0xFF; + bytes[2] = static_cast(num >> 16) & 0xFF; + bytes[1] = static_cast(num >> 8) & 0xFF; + bytes[0] = static_cast(num) & 0xFF; + } else { + bytes[0] = static_cast(num >> 24) & 0xFF; + bytes[1] = static_cast(num >> 16) & 0xFF; + bytes[2] = static_cast(num >> 8) & 0xFF; + bytes[3] = static_cast(num) & 0xFF; + } + // Append the converted bytes to the fileData vector. + for (size_t i = 0; i < 4; i++) + fileData.push_back(bytes[i]); } -template void Audio::moveToMemRef() { - if (data) - delete data; - intptr_t sizes[N]; - for (size_t i = 0; i < N; ++i) { - sizes[i] = audioFile.numSamples; - } - data = new MemRef(audioFile.samples, sizes); + +// Converts a 16-bit integer to two bytes based on endianness. +// Params: +// fileData: Vector containing the raw binary data. +// num: A 16-bit integer prepared for convertion. +// endianness: Specifies the byte order (LittleEndian or BigEndian). +template +void Audio::i16ToTwoBytes(std::vector &fileData, int16_t num, + Endianness endianness) { + // Use uint8_t to prevent sign extension and maintain accurate binary + // representation during bit operations. + uint8_t bytes[2]; + if (endianness == Endianness::LittleEndian) { + bytes[1] = static_cast(num >> 8) & 0xFF; + bytes[0] = static_cast(num) & 0xFF; + } else { + bytes[0] = static_cast(num >> 8) & 0xFF; + bytes[1] = static_cast(num) & 0xFF; + } + // Append the converted bytes to the fileData vector. + fileData.push_back(bytes[0]); + fileData.push_back(bytes[1]); } -template void Audio::moveToAudioFile() { - if (data) { - auto temp = data->release(); - audioFile.setAudioBuffer(temp); + +// Converts an audio sample to a 8-bit PCM format (one byte). +// Params: +// sample: A floating-point value representing the audio sample. +// Returns: +// An 8-bit unsigned integer representing the sample as one byte. +template uint8_t Audio::sampleToOneByte(T sample) { + if (std::isnan(sample)) { + // Handle corner case for NaN (Not a Number). Reset NaN to 1. + sample = static_cast(1.); + } else { + // Restricts sample value in range [-1.0, 1.0]. + sample = std::min(sample, static_cast(1.)); + sample = std::max(sample, static_cast(-1.)); } + // Converts a normalized floating-point audio sample to the [0, 255] range. + sample = (sample + static_cast(1.)) / static_cast(2.); + return static_cast(sample * 255.); } +// Converts an audio sample to a 16-bit PCM format (two bytes). +// Params: +// sample: A floating-point value representing the audio sample. +// Returns: +// A 16-bit signed integer representing the sample as two bytes. +template int16_t Audio::sampleToI16(T sample) { + if (std::isnan(sample)) { + // Handle corner case for NaN (Not a Number). Reset NaN to 1. + sample = static_cast(1.); + } else { + // Restricts sample value in range [-1.0, 1.0]. + sample = std::min(sample, static_cast(1.)); + sample = std::max(sample, static_cast(-1.)); + } + // Converts a normalized floating-point audio sample to the [-32767, 32767] + // range. + return static_cast(sample * 32767.); +} } // namespace dap #endif // FRONTEND_INTERFACES_BUDDY_DAP_AUDIOCONTAINER diff --git a/frontend/Interfaces/buddy/DAP/DAP.h b/frontend/Interfaces/buddy/DAP/DAP.h index 5f86565cc..48fd2afbf 100644 --- a/frontend/Interfaces/buddy/DAP/DAP.h +++ b/frontend/Interfaces/buddy/DAP/DAP.h @@ -21,10 +21,10 @@ #ifndef FRONTEND_INTERFACES_BUDDY_DAP_DAP #define FRONTEND_INTERFACES_BUDDY_DAP_DAP -#include "AudioFile.h" #include "buddy/DAP/AudioContainer.h" #include "buddy/DAP/DSP/Biquad.h" #include "buddy/DAP/DSP/FIR.h" #include "buddy/DAP/DSP/IIR.h" +#include "buddy/DAP/DSP/WhisperPreprocess.h" #endif // FRONTEND_INTERFACES_BUDDY_DAP_DAP diff --git a/frontend/Interfaces/buddy/DAP/DSP/WhisperPreprocess.h b/frontend/Interfaces/buddy/DAP/DSP/WhisperPreprocess.h new file mode 100644 index 000000000..a6c3ef3b2 --- /dev/null +++ b/frontend/Interfaces/buddy/DAP/DSP/WhisperPreprocess.h @@ -0,0 +1,54 @@ +//===- WhisperPreprocess.h ------------------------------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// +// +// Header file for whisper preprocess operation in DAP dialect. +// +//===----------------------------------------------------------------------===// + +#ifndef FRONTEND_INTERFACES_BUDDY_DAP_DSP_WHISPERPREPROCESS +#define FRONTEND_INTERFACES_BUDDY_DAP_DSP_WHISPERPREPROCESS + +#include "buddy/Core/Container.h" +#include "buddy/DAP/AudioContainer.h" +#include "buddy/DAP/DSP/IIRDesign.h" + +namespace dap { +namespace detail { +// Declare the whisper preprocess C interface. +extern "C" { +// The original MLIR function: +// ```mlir +// func.func @buddy_whisperPreprocess(%in : memref) -> +// memref<1x80x3000xf32> +// ``` +// +// After applying the '-llvm-request-c-wrappers' pass: +// The result of the function (memref<1x80x3000xf32>) is modified to be the +// first operand. +void _mlir_ciface_buddy_whisperPreprocess(MemRef *outputFeatures, + MemRef *inputRawSpeech); +} +} // namespace detail + +// Function for Whisper preprocess +void whisperPreprocess(MemRef *inputRawSpeech, + MemRef *outputFeatures) { + detail::_mlir_ciface_buddy_whisperPreprocess(outputFeatures, inputRawSpeech); +} + +} // namespace dap + +#endif // FRONTEND_INTERFACES_BUDDY_DAP_DSP_WHISPERPREPROCESS diff --git a/frontend/Interfaces/buddy/DIP/ImgContainer.h b/frontend/Interfaces/buddy/DIP/ImgContainer.h new file mode 100644 index 000000000..2ea30648f --- /dev/null +++ b/frontend/Interfaces/buddy/DIP/ImgContainer.h @@ -0,0 +1,254 @@ +//===- ImgContainer.h -----------------------------------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// +// +// Image container descriptor (without OpenCV dependency). +// +//===----------------------------------------------------------------------===// + +#ifndef FRONTEND_INTERFACES_BUDDY_DIP_IMGCONTAINER +#define FRONTEND_INTERFACES_BUDDY_DIP_IMGCONTAINER + +#include "buddy/Core/Container.h" +#include +#include +#include + +namespace dip { +enum ImageModes { + DIP_GRAYSCALE = 0, + DIP_RGB = 1, +}; + +template class Image : public MemRef { +public: + // Constructor initializes the image by loading from a file. + // Params: + // filename: Specifies the path to the image file. + // mode: Specifies the image mode (e.g., DIP_GRAYSCALE, DIP_RGB). + // norm: Indicates whether to normalize pixel values (default is false). + Image(std::string filename, ImageModes mode, bool norm = false); + + // Retrieves the name of the current image format as a string. + std::string getFormatName() const { + switch (this->imageFormat) { + case ImageFormat::BMP: + return "BMP"; + default: + return "Unsupported format"; + } + } + // Returns the width of the image in pixels. + size_t getWidth() const { return this->width; } + // Returns the height of the image in pixels. + size_t getHeight() const { return this->height; } + // Returns the bit depth of the image. + int getBitDepth() const { return this->bitDepth; } + +private: + // Enum to represent supported image formats. + enum class ImageFormat { + ERROR, // Represents an error or unsupported format. + BMP, // BMP file format. + } imageFormat; + // Mode of the image (e.g., DIP_GRAYSCALE, DIP_RGB). + ImageModes imageMode; + // Width of the image in pixels. + size_t width; + // Height of the image in pixels. + size_t height; + // Bit depth of the image. + int bitDepth; + // Normalization flag. + bool isNorm; + // Determines the image format from raw file data. + void determineFormat(const std::vector &fileData); + // Decodes a BMP image from raw file data. + bool decodeBMP(const std::vector &fileData); +}; + +// Image Container Constructor +// Constructs an image container object from the image file path. +template +Image::Image(std::string filePath, ImageModes mode, bool norm) + : imageMode(mode), isNorm(norm) { + // --------------------------------------------------------------------------- + // 1. Read the image file into a std::vector. + // --------------------------------------------------------------------------- + // Open the file in binary mode and position the file pointer at the end of + // the file. + std::ifstream file(filePath, std::ios::binary | std::ios::ate); + // Check if the file was successfully opened. + if (!file) { + throw std::runtime_error("Error: Unable to open file at " + filePath); + } + // Get the size of the file. + size_t dataLength = file.tellg(); + // Move file pointer to the beginning of the file. + file.seekg(0, std::ios::beg); + // Create a vector to store the data. + std::vector fileData(dataLength); + // Read the data. + if (!file.read(reinterpret_cast(fileData.data()), dataLength)) { + throw std::runtime_error("Error: Unable to read data from " + filePath); + } + file.close(); + + // --------------------------------------------------------------------------- + // 2. Determine the image format and decode the image data into MemRef. + // --------------------------------------------------------------------------- + // Determine the image format from the raw file data. + determineFormat(fileData); + if (this->imageFormat == ImageFormat::BMP) { + bool success = decodeBMP(fileData); + if (!success) { + this->imageFormat = ImageFormat::ERROR; + throw std::runtime_error("Failed to decode BMP file from " + filePath); + }; + } else { + throw std::runtime_error("Unsupported image file format."); + } +} + +// Determines the image format by inspecting the header of the file data. +template +void Image::determineFormat(const std::vector &fileData) { + if (fileData.size() > 2 && fileData[0] == 'B' && fileData[1] == 'M') { + this->imageFormat = ImageFormat::BMP; + } else { + this->imageFormat = ImageFormat::ERROR; + } +} + +// BMP Image File Decoder +template +bool Image::decodeBMP(const std::vector &fileData) { + // Check if the provided data is large enough to contain a minimal BMP header + // (54 bytes). + if (fileData.size() < 54) { + throw std::runtime_error("Invalid BMP File: too small to contain header"); + } + + // Extract image information from BMP header + this->width = *reinterpret_cast(&fileData[18]); + this->height = *reinterpret_cast(&fileData[22]); + this->bitDepth = *reinterpret_cast(&fileData[28]); + uint32_t compression = *reinterpret_cast(&fileData[30]); + size_t pixelDataOffset = *reinterpret_cast(&fileData[10]); + + // Currently, only the BI_RGB (value 0) compression method is supported. + if (compression != 0) { + std::cerr << "Unsupported BMP file compression method." << std::endl; + return false; + } + + // Currently, only the NCHW format with 4 dimensions is supported. + if (N == 4) { + if (this->imageMode == ImageModes::DIP_GRAYSCALE) { + // TODO: Add batch setting. + this->sizes[0] = 1; + this->sizes[1] = 1; + this->sizes[2] = this->height; + this->sizes[3] = this->width; + this->setStrides(); + size_t size = this->product(this->sizes); + this->allocated = (T *)malloc(sizeof(T) * size); + this->aligned = this->allocated; + // Fullfill data to memref container. + size_t memrefIndex = 0; + if (this->bitDepth == 32) { + // BMP file is upside-down storage. + for (size_t i = this->height; i > 0; i--) { + for (size_t j = 0; j < this->width; j++) { + // Locate the current pixel. + size_t pixelIndex = + pixelDataOffset + (((i - 1) * this->width) + j) * 4; + // Extract the blue, green, and red value from the current pixel. + int bluePixel = + *reinterpret_cast(&fileData[pixelIndex]); + int greenPixel = + *reinterpret_cast(&fileData[pixelIndex + 1]); + int redPixel = + *reinterpret_cast(&fileData[pixelIndex + 2]); + // Calculate the gray scale value. + int grayScaleValue = static_cast( + 0.299 * redPixel + 0.587 * greenPixel + 0.114 * bluePixel); + // Store the gray scale value into memref container. + this->aligned[memrefIndex] = + this->isNorm ? static_cast(grayScaleValue) / 255 + : static_cast(grayScaleValue); + memrefIndex++; + } + } + } else { + std::cerr << "Unsupported: " << this->bitDepth << "bit depth." + << std::endl; + return false; + } + } else if (this->imageMode == ImageModes::DIP_RGB) { + // TODO: Add batch setting. + this->sizes[0] = 1; + this->sizes[1] = 3; + this->sizes[2] = this->height; + this->sizes[3] = this->width; + this->setStrides(); + size_t size = this->product(this->sizes); + this->allocated = (T *)malloc(sizeof(T) * size); + this->aligned = this->allocated; + // Fullfill data to memref container. + size_t memrefIndex = 0; + size_t colorStride = this->height * this->width; + if (this->bitDepth == 32) { + // BMP file is upside-down storage. + for (size_t i = height; i > 0; i--) { + for (size_t j = 0; j < width; j++) { + // Locate the current pixel. + size_t pixelIndex = pixelDataOffset + (((i - 1) * width) + j) * 4; + // Extract the blue, green, and red value from the current pixel. + int bluePixel = + *reinterpret_cast(&fileData[pixelIndex]); + int greenPixel = + *reinterpret_cast(&fileData[pixelIndex + 1]); + int redPixel = + *reinterpret_cast(&fileData[pixelIndex + 2]); + // Store the values into memref container as RGB order. (BGR -> RGB) + this->aligned[memrefIndex] = this->isNorm + ? static_cast(redPixel) / 255 + : static_cast(redPixel); + this->aligned[memrefIndex + colorStride] = + this->isNorm ? static_cast(greenPixel) / 255 + : static_cast(greenPixel); + this->aligned[memrefIndex + 2 * colorStride] = + this->isNorm ? static_cast(bluePixel) / 255 + : static_cast(bluePixel); + memrefIndex++; + } + } + } else { + std::cerr << "Unsupported: " << this->bitDepth << "bit depth." + << std::endl; + return false; + } + } + } else { + std::cerr << "Unsupported: " << N << " dimension layout." << std::endl; + return false; + } + return true; +} + +} // namespace dip + +#endif // FRONTEND_INTERFACES_BUDDY_DIP_IMGCONTAINER diff --git a/frontend/Interfaces/buddy/LLM/TextContainer.h b/frontend/Interfaces/buddy/LLM/TextContainer.h index 28432b3c1..30adb2742 100644 --- a/frontend/Interfaces/buddy/LLM/TextContainer.h +++ b/frontend/Interfaces/buddy/LLM/TextContainer.h @@ -79,6 +79,7 @@ template class Text : public MemRef { // Tokens are identified by ids and thick underlines are replaced with // whitespaces. std::string revertLlama(); + std::string revertWhisper(); // Get sequence length size_t getTokenCnt() { return this->tokenCnt; } @@ -346,6 +347,39 @@ template std::string Text::revertLlama() { return dst; } +template std::string Text::revertWhisper() { + std::string dst; + + const int PAD_ID = 50257; + const int CLS_ID = 50258; + const int SEP_ID = 50257; + const int TRAN_ID = 50359; + const int NOTIMESTAMPS_ID = 50363; + + for (size_t i = 0; i < this->tokenCnt; i++) { + int id = this->aligned[i]; + // pad / start / type timestamps / language + if (id == PAD_ID || id == CLS_ID || id == TRAN_ID || + id == NOTIMESTAMPS_ID || + (id >= 50259 && id <= 50357)) + continue; + if (id == SEP_ID) + break; + // Replace each "▁" with a space. + std::string token = this->idToTokenVec[id]; + size_t pos = token.find("Ġ"); + while (pos != std::string::npos) { + token.replace(pos, 2, " "); + pos = token.find("Ġ", pos + 1); + } + dst.append(token); + } + if (dst[0] == ' ') { + dst.erase(0, 1); + } + return dst; +} + template void Text::loadVocab(const std::string &vocab) { // TODO-LOW: If in the future, there are more vocab file types to support, diff --git a/frontend/Interfaces/lib/CMakeLists.txt b/frontend/Interfaces/lib/CMakeLists.txt index 9f6f61b29..6a98a18b9 100644 --- a/frontend/Interfaces/lib/CMakeLists.txt +++ b/frontend/Interfaces/lib/CMakeLists.txt @@ -21,13 +21,13 @@ add_custom_command(OUTPUT DIP.o -finalize-memref-to-llvm -convert-func-to-llvm -reconcile-unrealized-casts | - ${LLVM_MLIR_BINARY_DIR}/mlir-translate --mlir-to-llvmir | - ${LLVM_MLIR_BINARY_DIR}/llc + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate --mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llc -mtriple=${BUDDY_TARGET_TRIPLE} -mattr=${BUDDY_OPT_ATTR} --filetype=obj -o ${CMAKE_CURRENT_BINARY_DIR}/DIP.o - DEPENDS buddy-opt + DEPENDS mlir-translate llc buddy-opt ) add_library(BuddyLibDIP STATIC DIP.o) @@ -50,23 +50,42 @@ add_custom_command(OUTPUT DAP.o -llvm-request-c-wrappers -convert-func-to-llvm -reconcile-unrealized-casts | - ${LLVM_MLIR_BINARY_DIR}/mlir-translate --mlir-to-llvmir | - ${LLVM_MLIR_BINARY_DIR}/llc + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate --mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llc -mtriple=${BUDDY_TARGET_TRIPLE} -mattr=${BUDDY_OPT_ATTR} --filetype=obj -o ${CMAKE_CURRENT_BINARY_DIR}/DAP.o - DEPENDS buddy-opt + DEPENDS mlir-translate llc buddy-opt ) -add_library(BuddyLibDAP STATIC DAP.o) - -SET_TARGET_PROPERTIES(BuddyLibDAP PROPERTIES - LINKER_LANGUAGE CXX - ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_DIRECTORY} +add_custom_command(OUTPUT DAP-extend.o + COMMAND ${CMAKE_BINARY_DIR}/bin/buddy-opt ${CMAKE_CURRENT_SOURCE_DIR}/DAP-extend.mlir + -extend-dap + -one-shot-bufferize + -convert-linalg-to-loops + -convert-scf-to-cf + -expand-strided-metadata + -lower-affine + -convert-vector-to-llvm + -memref-expand + -arith-expand + -convert-arith-to-llvm + -finalize-memref-to-llvm + -convert-math-to-llvm + -llvm-request-c-wrappers + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llc + -mtriple=${BUDDY_TARGET_TRIPLE} + -mattr=${BUDDY_OPT_ATTR} + -filetype=obj -relocation-model=pic + -o ${CMAKE_CURRENT_BINARY_DIR}/DAP-extend.o + DEPENDS mlir-translate llc buddy-opt ) - add_custom_command(OUTPUT DAPVectorization.o +add_custom_command(OUTPUT DAPVectorization.o COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/DAP.mlir | sed 's/buddy_fir/buddy_fir_vectorization/' | sed 's/buddy_iir/buddy_iir_vectorization/' | @@ -83,18 +102,22 @@ SET_TARGET_PROPERTIES(BuddyLibDAP PROPERTIES -llvm-request-c-wrappers -convert-func-to-llvm -reconcile-unrealized-casts | - ${LLVM_MLIR_BINARY_DIR}/mlir-translate -mlir-to-llvmir | - ${LLVM_MLIR_BINARY_DIR}/llc + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llc -mtriple=${BUDDY_TARGET_TRIPLE} -mattr=${BUDDY_OPT_ATTR} -filetype=obj -o ${CMAKE_CURRENT_BINARY_DIR}/DAPVectorization.o - DEPENDS buddy-opt + DEPENDS mlir-translate llc buddy-opt ) -add_library(BuddyLibDAPVectorization STATIC DAPVectorization.o) +add_library(BuddyLibDAP STATIC + DAP.o + DAP-extend.o + DAPVectorization.o + ) -SET_TARGET_PROPERTIES(BuddyLibDAPVectorization PROPERTIES +SET_TARGET_PROPERTIES(BuddyLibDAP PROPERTIES LINKER_LANGUAGE CXX ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_DIRECTORY} ) diff --git a/frontend/Interfaces/lib/DAP-extend.mlir b/frontend/Interfaces/lib/DAP-extend.mlir new file mode 100644 index 000000000..c77fe3873 --- /dev/null +++ b/frontend/Interfaces/lib/DAP-extend.mlir @@ -0,0 +1,4 @@ +func.func @buddy_whisperPreprocess(%in : memref) -> memref<1x80x3000xf32> { + %out = dap.whisper_preprocess %in : memref to memref<1x80x3000xf32> + return %out : memref<1x80x3000xf32> +} diff --git a/frontend/Python/frontend.py b/frontend/Python/frontend.py index bd92a8074..f30eb2a28 100644 --- a/frontend/Python/frontend.py +++ b/frontend/Python/frontend.py @@ -158,6 +158,8 @@ def __init__( "where.self": WhereOp, "sqrt.default": SqrtOp, "reciprocal.default": ReciprocalOp, + "clamp_min.default": ClampMinOp, + "clamp_max.default": ClampMaxOp, } @property diff --git a/frontend/Python/graph/operation.py b/frontend/Python/graph/operation.py index 903b12865..14bfbf275 100644 --- a/frontend/Python/graph/operation.py +++ b/frontend/Python/graph/operation.py @@ -469,3 +469,13 @@ class SqrtOp(Op): def __init__(self) -> None: super().__init__() self._op_type = OpType.ElementwiseType + +class ClampMinOp(Op): + def __init__(self) -> None: + super().__init__() + self._op_type = OpType.ElementwiseType + +class ClampMaxOp(Op): + def __init__(self) -> None: + super().__init__() + self._op_type = OpType.ElementwiseType diff --git a/frontend/Python/ops/func.py b/frontend/Python/ops/func.py index ad6e512be..a7dcc5e11 100644 --- a/frontend/Python/ops/func.py +++ b/frontend/Python/ops/func.py @@ -106,7 +106,10 @@ def param_extract( TensorDType.Int64: ir.IntegerType.get_signless(64), } memref_element_type = dtype_mapping[node.tensor_meta["dtype"]] - output_shape = list(node.tensor_meta["shape"]) + if(len(node.tensor_meta['shape'])== 0): + output_shape = [1] + else: + output_shape = list(node.tensor_meta["shape"]) subview_size = functools.reduce(lambda x, y: x * y, output_shape) offset_attr = ir._denseI64ArrayAttr([offset], None) size_attr = ir._denseI64ArrayAttr([subview_size], None) diff --git a/frontend/Python/ops/math.py b/frontend/Python/ops/math.py index 19820c2b3..f1afc2161 100644 --- a/frontend/Python/ops/math.py +++ b/frontend/Python/ops/math.py @@ -28,7 +28,8 @@ def erf_op(node, symbol_table): def sqrt_op(node, symbol_table): input_tensor = symbol_table.get((str(node.args[0]), 0)) - return math.SqrtOp(input_tensor) + op = math.SqrtOp(input_tensor) + return op ops_registry = { diff --git a/frontend/Python/ops/tosa.py b/frontend/Python/ops/tosa.py index e5fe9a4e3..5de51ca56 100644 --- a/frontend/Python/ops/tosa.py +++ b/frontend/Python/ops/tosa.py @@ -21,9 +21,10 @@ import array from typing import Dict, List, Tuple, Union import numpy +import sys import mlir.ir as ir -from mlir.dialects import tensor, tosa +from mlir.dialects import tensor, tosa, arith, linalg from ..graph import TensorDType from ..graph import ( @@ -57,6 +58,8 @@ SigmoidOp, ReciprocalOp, MeanOp, + ClampMinOp, + ClampMaxOp, ) from .utils import * @@ -220,7 +223,7 @@ def addmm_op( def bmm_op(node: BatchMatmulOp, symbol_table) -> ir.Operation: """ Import batch matrix multiplication operation. - From buddy graph ir's `BatchMatmulOp` operator to MLIR TOSA `matmul` + From buddy graph ir's `BatchMatmulOp` operator to MLIR TOSA `matmul` operation. """ input_ = symbol_table.get((str(node.args[0]), 0)) @@ -962,57 +965,56 @@ def maxpool2d_op(node: MaxPool2dOp, symbol_table): ) return op + +# TODO: Rename convolution2d_op -> convolution_op def convolution2d_op(node: Conv2dOp, symbol_table): """ Import the convolution operation. From Buddy Conv2dOp to MLIR TOSA `conv2d` operation. + arg[0]: Tensor input + arg[1]: Tensor weight + arg[2]: Tensor? bias + arg[3]: SymInt[] stride + arg[4]: SymInt[] padding + arg[5]: SymInt[] dilation + arg[6]: bool transposed + arg[7]: SymInt[] output_padding + arg[8]: SymInt groups """ + # Get arguments from convolution node. assert len(node.args) == 9 - input1 = symbol_table.get((str(node.args[0]), 0)) - weight = symbol_table.get((str(node.args[1]), 0)) + input = node.args[0] + weight = node.args[1] + bias = node.args[2] + stride = node.args[3] + input_padding = node.args[4] + dilation = node.args[5] is_kernel_transposed = node.args[6] + out_padding = node.args[7] + groups = node.args[8] + + # Prepare input, weight, and output information. + input_val = symbol_table.get((str(input), 0)) + input_shape = list(ir.RankedTensorType(input_val.type).shape) + weight_val = symbol_table.get((str(weight), 0)) + weight_shape = ir.RankedTensorType(weight_val.type).shape dtype = node.tensor_meta["dtype"] result_element_type = mlir_element_type_get(dtype) - if node._layout.find("NCHW") != -1: - perm_list = [0, 2, 3, 1] - perm_const_op = tosa.ConstOp( - ir.DenseElementsAttr.get(memoryview(array.array("i", perm_list))) - ) - out_shape = list(ir.RankedTensorType(input1.type).shape) - perm_shape = [] - perm_shape.append(out_shape[0]) - perm_shape.append(out_shape[2]) - perm_shape.append(out_shape[3]) - perm_shape.append(out_shape[1]) - permute_result_type = ir.RankedTensorType.get( - perm_shape, result_element_type - ) - input1 = tosa.TransposeOp( - permute_result_type, input1, perm_const_op.results[0] - ).result - if node._layout.find("FCHW") != -1: - perm_list = [0, 2, 3, 1] - perm_const_op = tosa.ConstOp( - ir.DenseElementsAttr.get(memoryview(array.array("i", perm_list))) - ) - out_shape = list(ir.RankedTensorType(weight.type).shape) - perm_shape = [] - perm_shape.append(out_shape[0]) - perm_shape.append(out_shape[2]) - perm_shape.append(out_shape[3]) - perm_shape.append(out_shape[1]) - permute_result_type = ir.RankedTensorType.get( - perm_shape, result_element_type - ) - weight = tosa.TransposeOp( - permute_result_type, weight, perm_const_op.results[0] - ).result + out_shape = node.tensor_meta["shape"] + + # Prepare Depthwise Conv2D information + is_grouped = (list(weight_shape)[1] == 1) and (groups != 1) + is_depthwise = (groups == list(weight_shape)[0]) and is_grouped + + # Prepare input channel and output channel. if is_kernel_transposed: - in_channels = list(ir.RankedTensorType(weight.type).shape)[0] - out_channels = list(ir.RankedTensorType(weight.type).shape)[1] + in_channels = list(weight_shape)[0] + out_channels = list(weight_shape)[1] * groups else: - in_channels = list(ir.RankedTensorType(weight.type).shape)[1] - out_channels = list(ir.RankedTensorType(weight.type).shape)[0] + in_channels = list(weight_shape)[1] * groups + out_channels = list(weight_shape)[0] + + # Prepare bias tensor. if len(node._parents) == 2: new_size_tensor_type = ir.RankedTensorType.get( [out_channels], result_element_type @@ -1023,74 +1025,229 @@ def convolution2d_op(node: Conv2dOp, symbol_table): ) bias_tensor = tosa.ConstOp(new_size_attr).results[0] else: - bias_tensor = symbol_table.get((str(node.args[2]), 0)) - assert input1 != None and weight != None and bias_tensor != None - stride = node.args[3] - input_padding = node.args[4] - if len(input_padding) == 1: - input_padding = [input_padding[0]] * 4 - elif len(input_padding) == 2: - input_padding = [input_padding[0]] * 2 + [input_padding[1]] * 2 - dilation = node.args[5] - groups = node.args[8] - out_shape = node.tensor_meta["shape"] - if node._layout.find("NCHW") != -1: - perm_shape = [] - perm_shape.append(out_shape[0]) - perm_shape.append(out_shape[2]) - perm_shape.append(out_shape[3]) - perm_shape.append(out_shape[1]) - out_shape = perm_shape - output = ir.RankedTensorType.get(out_shape, result_element_type) + bias_tensor = symbol_table.get((str(bias), 0)) + + # Prepare attributes. + dilation_attr = ir._denseI64ArrayAttr(dilation, None) stride_attr = ir._denseI64ArrayAttr(stride, None) - assert groups == 1, 'tosa.conv2d only support one group' - if is_kernel_transposed: - if sum(input_padding) > 0 or sum(dilation) > len(dilation): - raise NotImplementedError - out_padding = node.args[7] - for i in range(len(out_padding), 4): - out_padding = [0] + out_padding - out_padding_attr = ir._denseI64ArrayAttr(out_padding, None) - out_shape_attr = ir._denseI64ArrayAttr(out_shape, None) - op = tosa.TransposeConv2DOp( - output, - input1, - weight, - bias_tensor, - out_padding_attr, - stride_attr, - out_shape_attr, - ) - else: + + # Convolution 2D + if len(weight_shape) == 4: + # Prepare input padding. + if len(input_padding) == 1: + input_padding = [input_padding[0]] * 4 + elif len(input_padding) == 2: + input_padding = [input_padding[0]] * 2 + [input_padding[1]] * 2 + # Prepare input_padding attributes. input_padding_attr = ir._denseI64ArrayAttr(input_padding, None) - dilation_attr = ir._denseI64ArrayAttr(dilation, None) - op = tosa.Conv2DOp( - output, - input1, - weight, - bias_tensor, - input_padding_attr, - stride_attr, - dilation_attr, + # If the input layout is NCHW, then convert to NHWC. + if node._layout.find("NCHW") != -1: + perm_list = [0, 2, 3, 1] + perm_const_op = tosa.ConstOp( + ir.DenseElementsAttr.get( + memoryview(array.array("i", perm_list)) + ) + ) + perm_shape = [] + perm_shape.append(input_shape[0]) + perm_shape.append(input_shape[2]) + perm_shape.append(input_shape[3]) + perm_shape.append(input_shape[1]) + permute_result_type = ir.RankedTensorType.get( + perm_shape, result_element_type + ) + input_val = tosa.TransposeOp( + permute_result_type, input_val, perm_const_op.results[0] + ).result + # If the output layout is NCHW, then convert to NHWC + if node._layout.find("NCHW") != -1: + perm_shape = [] + perm_shape.append(out_shape[0]) + perm_shape.append(out_shape[2]) + perm_shape.append(out_shape[3]) + perm_shape.append(out_shape[1]) + out_shape = perm_shape + output_type = ir.RankedTensorType.get(out_shape, result_element_type) + + # Depthwise Conv2D Operation. + if is_depthwise is True: + # If groups == in_channels,out_channels == in_channels + if node._layout.find("FCHW") != -1: + perm_list = [2, 3, 0, 1] + perm_const_op = tosa.ConstOp( + ir.DenseElementsAttr.get( + memoryview(array.array("i", perm_list)) + ) + ) + perm_shape = [] + perm_shape.append(weight_shape[2]) + perm_shape.append(weight_shape[3]) + perm_shape.append(weight_shape[0]) + perm_shape.append(weight_shape[1]) + permute_result_type = ir.RankedTensorType.get( + perm_shape, result_element_type + ) + weight_depthwise = tosa.TransposeOp( + permute_result_type, weight_val, perm_const_op.results[0] + ).result + op = tosa.DepthwiseConv2DOp( + output_type, + input_val, + weight_depthwise, + bias_tensor, + input_padding_attr, + stride_attr, + dilation_attr, + ) + else: + # Transpose Conv2D Operation. + if is_kernel_transposed: + if sum(input_padding) > 0 or sum(dilation) > len(dilation): + raise NotImplementedError + for i in range(len(out_padding), 4): + out_padding = [0] + out_padding + out_padding_attr = ir._denseI64ArrayAttr(out_padding, None) + out_shape_attr = ir._denseI64ArrayAttr(out_shape, None) + op = tosa.TransposeConv2DOp( + output_type, + input_val, + weight_val, + bias_tensor, + out_padding_attr, + stride_attr, + out_shape_attr, + ) + # Generic Conv2D Operation. + else: + if node._layout.find("FCHW") != -1: + perm_list = [0, 2, 3, 1] + perm_const_op = tosa.ConstOp( + ir.DenseElementsAttr.get( + memoryview(array.array("i", perm_list)) + ) + ) + perm_shape = [] + perm_shape.append(weight_shape[0]) + perm_shape.append(weight_shape[2]) + perm_shape.append(weight_shape[3]) + perm_shape.append(weight_shape[1]) + permute_result_type = ir.RankedTensorType.get( + perm_shape, result_element_type + ) + weight_val = tosa.TransposeOp( + permute_result_type, + weight_val, + perm_const_op.results[0], + ).result + op = tosa.Conv2DOp( + output_type, + input_val, + weight_val, + bias_tensor, + input_padding_attr, + stride_attr, + dilation_attr, + ) + # Output transpose + if node._layout.find("NCHW") != -1: + perm_list = [0, 3, 1, 2] + perm_const_op = tosa.ConstOp( + ir.DenseElementsAttr.get( + memoryview(array.array("i", perm_list)) + ) + ) + perm_shape = [] + perm_shape.append(out_shape[0]) + perm_shape.append(out_shape[3]) + perm_shape.append(out_shape[1]) + perm_shape.append(out_shape[2]) + permute_result_type = ir.RankedTensorType.get( + perm_shape, result_element_type + ) + op = tosa.TransposeOp( + permute_result_type, op.result, perm_const_op.results[0] + ) + # Convolution 1D + elif len(weight_shape) == 3: + # Prepare input with padding. + if input_padding[0] != 0: + input_shape = list(ir.RankedTensorType(input_val.type).shape) + padded_type = ir.RankedTensorType.get( + [ + input_shape[0], + input_shape[1], + input_shape[2] + 2 * input_padding[0], + ], + result_element_type, + ) + pad_values_type = ir.RankedTensorType.get( + [3, 2], ir.IntegerType.get_signless(32) + ) + pad_values = ir.DenseElementsAttr.get( + numpy.array( + [[0, 0], [0, 0], [input_padding[0], input_padding[0]]], + dtype=numpy.int32, + ), + type=pad_values_type, + ) + pad_constant = arith.ConstantOp(pad_values_type, pad_values).result + input_val = tosa.PadOp(padded_type, input_val, pad_constant) + output_type = ir.RankedTensorType.get(out_shape, result_element_type) + output_conv = tensor.EmptyOp(list(out_shape), result_element_type) + assert groups == 1, "only support one group" + # Con1D Operation Without Bias + conv_op = linalg.conv_1d_ncw_fcw( + input_val, + weight_val, + outs=[output_conv], + strides=stride_attr, + dilations=dilation_attr, ) - if node._layout.find("NCHW") != -1: - perm_list = [0, 3, 1, 2] - perm_const_op = tosa.ConstOp( - ir.DenseElementsAttr.get(memoryview(array.array("i", perm_list))) + output = tensor.EmptyOp(list(out_shape), result_element_type) + generic_map = ir.AffineMap.get_permutation( + [i for i in range(len(list(out_shape)))] ) - perm_shape = [] - perm_shape.append(out_shape[0]) - perm_shape.append(out_shape[3]) - perm_shape.append(out_shape[1]) - perm_shape.append(out_shape[2]) - permute_result_type = ir.RankedTensorType.get( - perm_shape, result_element_type + loop_type = [ + ir.Attribute.parse("#linalg.iterator_type") + ] * len(list(out_shape)) + loop_type[1] = ir.Attribute.parse("#linalg.iterator_type") + # Add Bias To Conv2d. + op = linalg.GenericOp( + [output_type], + [conv_op, bias_tensor], + [output], + ir.ArrayAttr.get( + [ + ir.AffineMapAttr.get( + generic_map.get_submap( + [i for i in range(len(list(out_shape)))] + ) + ), + ir.AffineMapAttr.get(generic_map.get_submap([1])), + ir.AffineMapAttr.get( + generic_map.get_submap( + [i for i in range(len(list(out_shape)))] + ) + ), + ] + ), + ir.ArrayAttr.get(loop_type), ) - op = tosa.TransposeOp( - permute_result_type, op.result, perm_const_op.results[0] + block = ir.Block.create_at_start( + op.region, + [ + result_element_type, + ir.RankedTensorType(bias_tensor.type).element_type, + result_element_type, + ], ) + add_op = arith.AddFOp(block.arguments[1], block.arguments[0]) + block.append(add_op) + block.append(linalg.YieldOp([add_op.result])) + return op + def relu_op(node: ReluOp, symbol_table): """ Import the tensor relu operation. @@ -1111,6 +1268,7 @@ def relu_op(node: ReluOp, symbol_table): return op + def iota_op(node: IotaOp, symbol_table): """ Import the tensor iota operation. @@ -1132,6 +1290,7 @@ def iota_op(node: IotaOp, symbol_table): return op + def sigmoid_op(node: SigmoidOp, symbol_table): """ Import the tensor sigmoid operation. @@ -1214,6 +1373,60 @@ def mean_op(node: MeanOp, symbol_table): return ret +def clamp_min_op(node: ClampMinOp, symbol_table): + """ + Creates a TOSA clamp operation to set a minimum value for a tensor. + + Retrieves the input tensor and its minimum clamp value from the symbol table, + setting the maximum clamp value to the highest possible for the data type. + The operation ensures no values are below the specified minimum. + + Parameters: + - node (ClampMinOp): Node with tensor and minimum value details. + - symbol_table (dict): Dictionary mapping identifiers to values or nodes. + + Returns: + - tosa.ClampOp: Configured TOSA clamp operation with minimum clamping. + """ + input1 = symbol_table.get((str(node.args[0]), 0), node.args[0]) + min_value = symbol_table.get((str(node.args[1]), 0), node.args[1]) + tensor_type = input1.type + min_value_int = round(min_value) + min_int = ir.IntegerAttr.get(ir.IntegerType.get_signless(64), min_value_int) + max_int = ir.IntegerAttr.get(ir.IntegerType.get_signless(64), sys.maxsize) + min_fp = ir.FloatAttr.get(ir.F32Type.get(), min_value) + max_fp = ir.FloatAttr.get(ir.F32Type.get(), float("inf")) + op = tosa.ClampOp(tensor_type, input1, min_int, max_int, min_fp, max_fp) + return op + + +def clamp_max_op(node: ClampMaxOp, symbol_table): + """ + Creates a TOSA clamp operation to set a maximum value for a tensor. + + Retrieves the input tensor and its maximum clamp value from the symbol table, + setting the minimum clamp value to the lowest possible for the data type. + The operation ensures no values exceed the specified maximum. + + Parameters: + - node (ClampMaxOp): Node with tensor and maximum value details. + - symbol_table (dict): Dictionary mapping identifiers to values or nodes. + + Returns: + - tosa.ClampOp: Configured TOSA clamp operation with maximum clamping. + """ + input1 = symbol_table.get((str(node.args[0]), 0), node.args[0]) + max_value = symbol_table.get((str(node.args[1]), 0), node.args[1]) + tensor_type = input1.type + min_value_int = round(max_value) + min_int = ir.IntegerAttr.get(ir.IntegerType.get_signless(64), -sys.maxsize) + max_int = ir.IntegerAttr.get(ir.IntegerType.get_signless(64), min_value_int) + min_fp = ir.FloatAttr.get(ir.F32Type.get(), -float("inf")) + max_fp = ir.FloatAttr.get(ir.F32Type.get(), max_value) + op = tosa.ClampOp(tensor_type, input1, min_int, max_int, min_fp, max_fp) + return op + + ops_registry = { "AddOp": add_op, "MulOp": mul_op, @@ -1246,4 +1459,6 @@ def mean_op(node: MeanOp, symbol_table): "SigmoidOp": sigmoid_op, "ReciprocalOp": reciprocal_op, "MeanOp": mean_op, + "ClampMinOp": clamp_min_op, + "ClampMaxOp": clamp_max_op, } diff --git a/midend/include/Dialect/DAP/DAPOps.td b/midend/include/Dialect/DAP/DAPOps.td index 9e7d894b9..70d7a21fe 100644 --- a/midend/include/Dialect/DAP/DAPOps.td +++ b/midend/include/Dialect/DAP/DAPOps.td @@ -50,8 +50,7 @@ def DAP_FirOp : DAP_Op<"fir"> { }]; } -def DAP_BiquadOp : DAP_Op<"biquad"> -{ +def DAP_BiquadOp : DAP_Op<"biquad"> { let summary = [{Biquad filter, a infinite impulse response (IIR) filter. ```mlir @@ -94,4 +93,49 @@ def DAP_IirOp : DAP_Op<"iir"> { }]; } +def DAP_RFFT400Op : DAP_Op<"rfft400"> { + let summary = "RFFT operation for length 400."; + let description = [{ + The RFFT algorithm is designed to handle real-valued input signals. Real + signals exhibit conjugate symmetry in the frequency domain, meaning that + the positive and negative frequency components are complex conjugates of + each other. This symmetry property allows the RFFT algorithm to compute + only half of the frequency spectrum, reducing computational costs. + + Example: + + ```mlir + dap.rfft400 %data : memref<400xf64> + ``` + }]; + + let arguments = (ins AnyRankedOrUnrankedMemRef:$memref); + let assemblyFormat = [{ + $memref attr-dict `:` type($memref) + }]; +} + +def DAP_WhisperPreprocessOp : DAP_Op<"whisper_preprocess"> { + let summary = "preprocessor for Whisper model"; + let description = [{ + Preprocessor for Whisper model, do features extraction for input audio. + Input MemRef stores the raw speech data, Output MemRef contains computed + features with shape memref<1x80x3000xf32>. + + Example: + + ```mlir + %output = dap.whisper_preprocess %input : memref to memref<1x80x3000xf32> + ``` + }]; + + let arguments = (ins Arg:$memrefI); + let results = (outs Res:$memrefO); + let assemblyFormat = [{ + $memrefI attr-dict `:` type($memrefI) `to` type($memrefO) + }]; +} + #endif // DAP_DAPOPS_TD diff --git a/midend/lib/Conversion/CMakeLists.txt b/midend/lib/Conversion/CMakeLists.txt index bd3c7f150..cfe12a8d6 100644 --- a/midend/lib/Conversion/CMakeLists.txt +++ b/midend/lib/Conversion/CMakeLists.txt @@ -3,6 +3,7 @@ add_subdirectory(LowerBud) add_subdirectory(LowerDIP) add_subdirectory(LowerRVV) add_subdirectory(LowerDAP) +add_subdirectory(ExtendDAP) add_subdirectory(DAPVectorization) add_subdirectory(MatMulOptimization) add_subdirectory(TransposeOptimization) @@ -13,3 +14,4 @@ add_subdirectory(LowerLinalgToGemmini) add_subdirectory(SchedulingOnDevices) add_subdirectory(LowerSche) add_subdirectory(FuncBufferize) +add_subdirectory(DepthwiseConvOptimization) diff --git a/midend/lib/Conversion/ConvOptimization/CMakeLists.txt b/midend/lib/Conversion/ConvOptimization/CMakeLists.txt index fc88a92ef..336c95a30 100644 --- a/midend/lib/Conversion/ConvOptimization/CMakeLists.txt +++ b/midend/lib/Conversion/ConvOptimization/CMakeLists.txt @@ -1,3 +1,5 @@ add_mlir_library(ConvOptimization ConvOptimize.cpp + ConvNhwcFhwcOptimize.cpp + ConvNhwcFhwcOptimizeTile.cpp ) diff --git a/midend/lib/Conversion/ConvOptimization/ConvNhwcFhwcOptimize.cpp b/midend/lib/Conversion/ConvOptimization/ConvNhwcFhwcOptimize.cpp new file mode 100644 index 000000000..e4bc67e36 --- /dev/null +++ b/midend/lib/Conversion/ConvOptimization/ConvNhwcFhwcOptimize.cpp @@ -0,0 +1,276 @@ +//====- ConvNhwcFhwcOptimize.cpp----------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// +// +// This file implements the Conv2DNhwcFhwcOp optimize. +// +//===----------------------------------------------------------------------===// + +#include +#include +#include +#include +#include + +using namespace mlir; +using namespace vector; + +//===----------------------------------------------------------------------===// +// Rewrite Pattern +//===----------------------------------------------------------------------===// + +namespace { + +class ConvNhwcFhwcOptimizePattern : public ConversionPattern { +public: + explicit ConvNhwcFhwcOptimizePattern(MLIRContext *context, + int64_t vecSizeParam) + : ConversionPattern(linalg::Conv2DNhwcFhwcOp::getOperationName(), 1, + context) { + vecSize = vecSizeParam; + } + + LogicalResult + matchAndRewrite(Operation *op, ArrayRef /*operands*/, + ConversionPatternRewriter &rewriter) const override { + auto convOp = dyn_cast_or_null(op); + auto loc = op->getLoc(); + + // Some constant we need. + const Value c0 = + rewriter.create(loc, rewriter.getIndexAttr(0)); + const Value c1 = + rewriter.create(loc, rewriter.getIndexAttr(1)); + + const Value vecSizeValue = + rewriter.create(loc, rewriter.getIndexAttr(vecSize)); + const AffineExpr d0 = rewriter.getAffineDimExpr(0); + const AffineExpr d1 = rewriter.getAffineDimExpr(1); + const AffineExpr s0 = rewriter.getAffineSymbolExpr(0); + + Value input = op->getOperand(0); + Value filter = op->getOperand(1); + Value output = op->getOperand(2); + + int strHeight, strWidth, dilHeight, dilWidth; + + // Strides. + if (!convOp.getStrides()) { + strHeight = 1; + strWidth = 1; + } else { + strHeight = convOp.getStrides().getValues()[0]; + strWidth = convOp.getStrides().getValues() + [convOp.getStrides().getValues().size() - 1]; + } + + // Dilations. + if (!convOp.getDilations()) { + dilHeight = 1; + dilWidth = 1; + } else { + dilHeight = convOp.getDilations().getValues()[0]; + dilWidth = convOp.getDilations().getValues() + [convOp.getDilations().getValues().size() - 1]; + } + + ShapedType inputTy = input.getType().cast(); + Type elemTy = inputTy.getElementType(); + VectorType vecTy = VectorType::get(vecSize, elemTy); + + const Value zeroElementType = + rewriter.create(loc, rewriter.getZeroAttr(elemTy)); + + // Dims + Value N = rewriter.create(loc, output, 0); // N + Value OH = rewriter.create(loc, output, 1); // OH + Value OW = rewriter.create(loc, output, 2); // OW + Value OC = rewriter.create(loc, output, 3); // OC + Value IC = rewriter.create(loc, input, 3); // IC + Value FH = rewriter.create(loc, filter, 1); // FH + Value FW = rewriter.create(loc, filter, 2); // FW + + // clang format off + // Step 1: Create outer most loops. + // Create the scf::ForallOp operation For N,OH,OW,OC + auto outputForAllOp = rewriter.create( + loc, SmallVector({N, OH, OW, OC}), ValueRange{}, + std::nullopt, // No mapping specified in this example + [&](OpBuilder &nestedBuilder, Location nestedLoc, + ValueRange loopIndices) { + Value ivN = loopIndices[0]; // Index for the first dimension N + Value ivOH = loopIndices[1]; // Index for the second dimension OH + Value ivOW = loopIndices[2]; // Index for the third dimension OW + Value ivOC = loopIndices[3]; // Index for the third dimension OC + + Value addRes = nestedBuilder.create( + loc, output, ValueRange{ivN, ivOH, ivOW, ivOC}); + // IC + auto forOp = nestedBuilder.create( + nestedLoc, c0, IC, vecSizeValue, ValueRange{addRes}, + [&](OpBuilder &builder, Location loc, Value ivIC, + ValueRange iargs) { + Value tVec; + if (isa(elemTy)) { + tVec = builder.create(loc, vecTy, + zeroElementType); + } else { + tVec = builder.create(loc, vecTy, + zeroElementType); + } + + Value remainLen = builder.create( + loc, + AffineMap::get(2, 1, {-d0 + s0, d1}, builder.getContext()), + ValueRange{ivIC, vecSizeValue, IC}); + Value remainMask = builder.create( + loc, VectorType::get({vecSize}, rewriter.getI1Type()), + ValueRange{remainLen}); + + // FH + auto forOp = builder.create( + loc, c0, FH, c1, ValueRange{tVec}, + [&](OpBuilder &builder, Location loc, Value ivFH, + ValueRange iargs) { + Value rowInput = builder.create( + loc, + AffineMap::get(2, 0, d0 * strHeight + d1 * dilHeight), + ValueRange{ivOH, ivFH}); + Value rowFilter = ivFH; + // FW + auto forOp = builder.create( + loc, c0, FW, c1, ValueRange{iargs[0]}, + [&](OpBuilder &builder, Location loc, Value ivFW, + ValueRange iargs) { + Value columnInput = + builder.create( + loc, + AffineMap::get( + 2, 0, d0 * strWidth + d1 * dilWidth), + ValueRange{ivOW, ivFW}); + Value columnFilter = ivFW; + Value iVec = builder.create( + loc, vecTy, input, + ValueRange{ivN, rowInput, columnInput, ivIC}); + Value fVec = builder.create( + loc, vecTy, filter, + ValueRange{ivOC, rowFilter, columnFilter, + ivIC}); + Value tVecNext; + if (isa(elemTy)) { + Value mulVec = builder.create( + loc, iVec, fVec); + tVecNext = builder.create( + loc, mulVec, iargs[0]); + } else { + tVecNext = builder.create( + loc, vecTy, iVec, fVec, iargs[0]); + } + + builder.create(loc, + ValueRange{tVecNext}); + }); + builder.create( + loc, ValueRange{forOp.getResult(0)}); + }); + auto reduceVecOp = builder.create( + loc, vector::CombiningKind::ADD, forOp.getResult(0)); + auto maskedOp = + cast(mlir::vector::maskOperation( + builder, reduceVecOp, remainMask)); + Value reduceVec = maskedOp->getResult(0); + Value addNext; + if (isa(elemTy)) { + addNext = + builder.create(loc, iargs[0], reduceVec); + } else { + addNext = + builder.create(loc, iargs[0], reduceVec); + } + builder.create(loc, ValueRange{addNext}); + }); + + nestedBuilder.create( + loc, forOp.getResult(0), output, + ValueRange{ivN, ivOH, ivOW, ivOC}); + nestedBuilder.create(nestedLoc); + }); + // clang format on + + rewriter.eraseOp(op); + return success(); + } + +private: + int64_t vecSize; +}; +} // end anonymous namespace + +//===----------------------------------------------------------------------===// +// ConvNhwcFhwcOptimizePass +//===----------------------------------------------------------------------===// + +namespace { +class ConvNhwcFhwcOptimizePass + : public PassWrapper> { +public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(ConvNhwcFhwcOptimizePass) + StringRef getArgument() const final { return "conv-nhwc-fhwc-optimize"; } + StringRef getDescription() const final { + return "Conv2d NHWC FHWC optimize."; + } + ConvNhwcFhwcOptimizePass() = default; + ConvNhwcFhwcOptimizePass(const ConvNhwcFhwcOptimizePass &) {} + explicit ConvNhwcFhwcOptimizePass(int64_t vecSizeParam) { + vecSize = vecSizeParam; + } + + void runOnOperation() override; + + void getDependentDialects(DialectRegistry ®istry) const override { + registry.insert(); + } + + Option vecSize{*this, "vec-size", llvm::cl::desc("Vector size."), + llvm::cl::init(16)}; +}; +} // end anonymous namespace. + +void ConvNhwcFhwcOptimizePass::runOnOperation() { + MLIRContext *context = &getContext(); + ModuleOp module = getOperation(); + + ConversionTarget target(*context); + target + .addLegalDialect(); + target.addLegalOp(); + target.addLegalOp(); + + RewritePatternSet patterns(context); + patterns.add(context, vecSize); + + if (failed(applyPartialConversion(module, target, std::move(patterns)))) + signalPassFailure(); +} + +namespace mlir { +namespace buddy { +void registerConvNhwcFhwcOptimizePass() { + PassRegistration(); +} +} // namespace buddy +} // namespace mlir diff --git a/midend/lib/Conversion/ConvOptimization/ConvNhwcFhwcOptimizeTile.cpp b/midend/lib/Conversion/ConvOptimization/ConvNhwcFhwcOptimizeTile.cpp new file mode 100644 index 000000000..db812aceb --- /dev/null +++ b/midend/lib/Conversion/ConvOptimization/ConvNhwcFhwcOptimizeTile.cpp @@ -0,0 +1,342 @@ +//====- ConvNhwcFhwcOptimizeTile.cpp------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// +// +// This file implements the Conv2DNhwcFhwcOp tile optimize. +// +//===----------------------------------------------------------------------===// + +#include +#include +#include +#include +#include + +using namespace mlir; +using namespace vector; + +//===----------------------------------------------------------------------===// +// Rewrite Pattern +//===----------------------------------------------------------------------===// + +namespace { + +class ConvNhwcFhwcTileOptimizePattern : public ConversionPattern { +public: + explicit ConvNhwcFhwcTileOptimizePattern(MLIRContext *context, + int64_t vecSizeParam, + int64_t tilingOHParam, + int64_t tilingOWParam, + int64_t tilingOCParam) + : ConversionPattern(linalg::Conv2DNhwcFhwcOp::getOperationName(), 1, + context) { + vecSize = vecSizeParam; + tilingOH = tilingOHParam; + tilingOW = tilingOWParam; + tilingOC = tilingOCParam; + } + + LogicalResult + matchAndRewrite(Operation *op, ArrayRef /*operands*/, + ConversionPatternRewriter &rewriter) const override { + auto convOp = dyn_cast_or_null(op); + auto loc = op->getLoc(); + + // Some constant we need. + const Value c0 = + rewriter.create(loc, rewriter.getIndexAttr(0)); + const Value c1 = + rewriter.create(loc, rewriter.getIndexAttr(1)); + + const Value vecSizeValue = + rewriter.create(loc, rewriter.getIndexAttr(vecSize)); + const AffineExpr d0 = rewriter.getAffineDimExpr(0); + const AffineExpr d1 = rewriter.getAffineDimExpr(1); + const AffineExpr s0 = rewriter.getAffineSymbolExpr(0); + + Value input = op->getOperand(0); + Value filter = op->getOperand(1); + Value output = op->getOperand(2); + + int strHeight, strWidth, dilHeight, dilWidth; + + // Strides. + if (!convOp.getStrides()) { + strHeight = 1; + strWidth = 1; + } else { + strHeight = convOp.getStrides().getValues()[0]; + strWidth = convOp.getStrides().getValues() + [convOp.getStrides().getValues().size() - 1]; + } + + // Dilations. + if (!convOp.getDilations()) { + dilHeight = 1; + dilWidth = 1; + } else { + dilHeight = convOp.getDilations().getValues()[0]; + dilWidth = convOp.getDilations().getValues() + [convOp.getDilations().getValues().size() - 1]; + } + + ShapedType inputTy = input.getType().cast(); + Type elemTy = inputTy.getElementType(); + VectorType vecTy = VectorType::get(vecSize, elemTy); + + const Value zeroElementType = + rewriter.create(loc, rewriter.getZeroAttr(elemTy)); + + // Dims + Value N = rewriter.create(loc, output, 0); // N + Value OH = rewriter.create(loc, output, 1); // OH + Value OW = rewriter.create(loc, output, 2); // OW + Value OC = rewriter.create(loc, output, 3); // OC + Value IC = rewriter.create(loc, input, 3); // IC + Value FH = rewriter.create(loc, filter, 1); // FH + Value FW = rewriter.create(loc, filter, 2); // FW + + auto tilingUpperBound = + AffineMap::get(2, 1, {d0 + d1, s0}, rewriter.getContext()); + + Value stepOH = rewriter.create( + loc, AffineMap::get(1, 0, d0.ceilDiv(tilingOH)), OH); + Value stepOW = rewriter.create( + loc, AffineMap::get(1, 0, d0.ceilDiv(tilingOW)), OW); + Value stepOC = rewriter.create( + loc, AffineMap::get(1, 0, d0.ceilDiv(tilingOC)), OC); + + // clang format off + // Step 1: Create outer most loops. + // Create the scf::ForallOp operation For N,OH,OW,OC + rewriter.create( + loc, SmallVector{c0, c0, c0, c0}, + SmallVector({N, OH, OW, OC}), + SmallVector({c1, stepOH, stepOW, stepOC}), + ValueRange{}, + std::nullopt, // No mapping specified in this example + [&](OpBuilder &nestedBuilder, Location nestedLoc, + ValueRange loopIndices) { + Value ivN = loopIndices[0]; // Index for the first dimension N + + Value ubOH = nestedBuilder.create( + loc, tilingUpperBound, + ValueRange{loopIndices[1], stepOH, + OH}); // ub for the second dimension OH + Value ubOW = nestedBuilder.create( + loc, tilingUpperBound, + ValueRange{loopIndices[2], stepOW, + OW}); // ub for the second dimension OW + Value ubOC = nestedBuilder.create( + loc, tilingUpperBound, + ValueRange{loopIndices[3], stepOC, + OC}); // ub for the second dimension OC + + rewriter.create( + loc, + SmallVector{loopIndices[1], loopIndices[2], + loopIndices[3]}, + SmallVector({ubOH, ubOW, ubOC}), + SmallVector({c1, c1, c1}), ValueRange{}, + std::nullopt, // No mapping specified in this example + [&](OpBuilder &nestedBuilder, Location nestedLoc, + ValueRange loopIndices) { + Value ivOH = loopIndices[0]; // Index for the first dimension OH + Value ivOW = loopIndices[1]; // Index for the first dimension OW + Value ivOC = loopIndices[2]; // Index for the first dimension OC + + Value addRes = nestedBuilder.create( + loc, output, ValueRange{ivN, ivOH, ivOW, ivOC}); + // IC + auto forOp = nestedBuilder.create( + nestedLoc, c0, IC, vecSizeValue, ValueRange{addRes}, + [&](OpBuilder &builder, Location loc, Value ivIC, + ValueRange iargs) { + Value tVec; + if (isa(elemTy)) { + tVec = builder.create( + loc, vecTy, zeroElementType); + } else { + tVec = builder.create(loc, vecTy, + zeroElementType); + } + + Value remainLen = builder.create( + loc, + AffineMap::get(2, 1, {-d0 + s0, d1}, + builder.getContext()), + ValueRange{ivIC, vecSizeValue, IC}); + Value remainMask = builder.create( + loc, VectorType::get({vecSize}, rewriter.getI1Type()), + ValueRange{remainLen}); + + // FH + auto forOp = builder.create( + loc, c0, FH, c1, ValueRange{tVec}, + [&](OpBuilder &builder, Location loc, Value ivFH, + ValueRange iargs) { + Value rowInput = + builder.create( + loc, + AffineMap::get( + 2, 0, d0 * strHeight + d1 * dilHeight), + ValueRange{ivOH, ivFH}); + Value rowFilter = ivFH; + // FW + auto forOp = builder.create( + loc, c0, FW, c1, ValueRange{iargs[0]}, + [&](OpBuilder &builder, Location loc, + Value ivFW, ValueRange iargs) { + Value columnInput = + builder.create( + loc, + AffineMap::get(2, 0, + d0 * strWidth + + d1 * dilWidth), + ValueRange{ivOW, ivFW}); + Value columnFilter = + builder.create( + loc, AffineMap::get(1, 0, d0), ivFW); + Value iVec = builder.create( + loc, vecTy, input, + ValueRange{ivN, rowInput, columnInput, + ivIC}); + Value fVec = builder.create( + loc, vecTy, filter, + ValueRange{ivOC, rowFilter, columnFilter, + ivIC}); + Value tVecNext; + if (isa(elemTy)) { + Value mulVec = + builder.create(loc, iVec, + fVec); + tVecNext = builder.create( + loc, mulVec, iargs[0]); + } else { + tVecNext = builder.create( + loc, vecTy, iVec, fVec, iargs[0]); + } + + builder.create( + loc, ValueRange{tVecNext}); + }); + builder.create( + loc, ValueRange{forOp.getResult(0)}); + }); + auto reduceVecOp = builder.create( + loc, vector::CombiningKind::ADD, forOp.getResult(0)); + auto maskedOp = + cast(mlir::vector::maskOperation( + builder, reduceVecOp, remainMask)); + Value reduceVec = maskedOp->getResult(0); + Value addNext; + if (isa(elemTy)) { + addNext = builder.create(loc, iargs[0], + reduceVec); + } else { + addNext = builder.create(loc, iargs[0], + reduceVec); + } + builder.create(loc, ValueRange{addNext}); + }); + + nestedBuilder.create( + loc, forOp.getResult(0), output, + ValueRange{ivN, ivOH, ivOW, ivOC}); + nestedBuilder.create(nestedLoc); + }); + nestedBuilder.create(nestedLoc); + }); + // clang format on + + rewriter.eraseOp(op); + return success(); + } + +private: + int64_t vecSize; + int64_t tilingOH; + int64_t tilingOW; + int64_t tilingOC; +}; +} // end anonymous namespace + +//===----------------------------------------------------------------------===// +// ConvNhwcFhwcTileOptimizePass +//===----------------------------------------------------------------------===// + +namespace { +class ConvNhwcFhwcTileOptimizePass + : public PassWrapper> { +public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(ConvNhwcFhwcTileOptimizePass) + StringRef getArgument() const final { return "conv-nhwc-fhwc-tile-optimize"; } + StringRef getDescription() const final { + return "Conv2d NHWC FHWC optimize with Tile."; + } + ConvNhwcFhwcTileOptimizePass() = default; + ConvNhwcFhwcTileOptimizePass(const ConvNhwcFhwcTileOptimizePass &) {} + explicit ConvNhwcFhwcTileOptimizePass(int64_t vecSizeParam) { + vecSize = vecSizeParam; + } + + void runOnOperation() override; + + void getDependentDialects(DialectRegistry ®istry) const override { + registry.insert(); + } + + Option vecSize{*this, "vec-size", llvm::cl::desc("Vector size."), + llvm::cl::init(16)}; + Option tilingOH{*this, "tiling-height", + llvm::cl::desc("tiling the output height."), + llvm::cl::init(1)}; + Option tilingOW{*this, "tiling-width", + llvm::cl::desc("tiling the output width."), + llvm::cl::init(1)}; + Option tilingOC{*this, "tiling-channel", + llvm::cl::desc("tiling the output channel."), + llvm::cl::init(1)}; +}; +} // end anonymous namespace. + +void ConvNhwcFhwcTileOptimizePass::runOnOperation() { + MLIRContext *context = &getContext(); + ModuleOp module = getOperation(); + + ConversionTarget target(*context); + target + .addLegalDialect(); + target.addLegalOp(); + target.addLegalOp(); + + RewritePatternSet patterns(context); + patterns.add(context, vecSize, tilingOH, + tilingOW, tilingOC); + + if (failed(applyPartialConversion(module, target, std::move(patterns)))) + signalPassFailure(); +} + +namespace mlir { +namespace buddy { +void registerConvNhwcFhwcTileOptimizePass() { + PassRegistration(); +} +} // namespace buddy +} // namespace mlir diff --git a/midend/lib/Conversion/ConvOptimization/ConvOptimize.cpp b/midend/lib/Conversion/ConvOptimization/ConvOptimize.cpp index 043b66498..308bbcf05 100644 --- a/midend/lib/Conversion/ConvOptimization/ConvOptimize.cpp +++ b/midend/lib/Conversion/ConvOptimization/ConvOptimize.cpp @@ -2,7 +2,7 @@ // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. -// You may obtain a copy of the License at +// You may obtain N copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // @@ -35,19 +35,25 @@ namespace { class ConvOptimizePattern : public ConversionPattern { public: - explicit ConvOptimizePattern(MLIRContext *context, int64_t vecSizeParam, int64_t kernelMParam, int64_t kernelNParam) - : ConversionPattern(linalg::Conv2DNchwFchwOp::getOperationName(), 1, context) { + explicit ConvOptimizePattern(MLIRContext *context, int64_t vecSizeParam, + int64_t kernelMParam, int64_t kernelNParam) + : ConversionPattern(linalg::Conv2DNchwFchwOp::getOperationName(), 1, + context) { vecSize = vecSizeParam; kernelM = kernelMParam; kernelN = kernelNParam; } - LogicalResult matchAndRewrite(Operation *op, ArrayRef /*operands*/, ConversionPatternRewriter &rewriter) const override { + LogicalResult + matchAndRewrite(Operation *op, ArrayRef /*operands*/, + ConversionPatternRewriter &rewriter) const override { auto loc = op->getLoc(); // Some constant we need. - const Value c0 = rewriter.create(loc, rewriter.getIndexAttr(0)); - const Value cf0 = rewriter.create(loc, rewriter.getF32FloatAttr(0.)); + const Value c0 = + rewriter.create(loc, rewriter.getIndexAttr(0)); + const Value cf0 = + rewriter.create(loc, rewriter.getF32FloatAttr(0.)); const AffineExpr d0 = rewriter.getAffineDimExpr(0); const AffineExpr d1 = rewriter.getAffineDimExpr(1); @@ -63,88 +69,198 @@ class ConvOptimizePattern : public ConversionPattern { VectorType vecTy = VectorType::get(vecSize, elemTy); // Dims - Value a = rewriter.create(loc, output, 0); - Value b = rewriter.create(loc, output, 1); - Value c = rewriter.create(loc, output, 2); - Value d = rewriter.create(loc, output, 3); - Value e = rewriter.create(loc, input, 1); - Value f = rewriter.create(loc, filter, 2); - Value g = rewriter.create(loc, filter, 3); + Value N = rewriter.create(loc, output, 0); // N + Value OC = rewriter.create(loc, output, 1); // OC + Value OH = rewriter.create(loc, output, 2); // OH + Value OW = rewriter.create(loc, output, 3); // OW + Value IC = rewriter.create(loc, input, 1); // IC + Value FH = rewriter.create(loc, filter, 2); // FH + Value FW = rewriter.create(loc, filter, 3); // FW // memref<1xvector> MemRefType bufferTy = MemRefType::get(1, vecTy); Value buffer = rewriter.create(loc, bufferTy); // Step 1: Create outer most loops. - affine::buildAffineLoopNest(rewriter, loc, c0, a, 1, [&](OpBuilder &, Location loc, ValueRange ivRange) { - Value ivA = ivRange.front(); - affine::buildAffineLoopNest(rewriter, loc, c0, b, 1, [&](OpBuilder &, Location loc, ValueRange ivRange) { - Value ivB = ivRange.front(); - affine::buildAffineLoopNest(rewriter, loc, c0, d, 1, [&](OpBuilder &, Location loc, ValueRange ivRange) { - Value ivD = ivRange.front(); - affine::buildAffineLoopNest(rewriter, loc, c0, c, 1, [&](OpBuilder &builder, Location loc, ValueRange ivRange) { - Value ivC = ivRange.front(); - Value t = builder.create(loc, vecTy, cf0); - builder.create(loc, t, buffer, c0); - affine::buildAffineLoopNest(rewriter, loc, c0, e, 1, [&](OpBuilder &builder, Location loc, ValueRange ivRange) { - Value ivE = ivRange.front(); - - Value fixed = builder.create(loc, AffineMap::get(1, 0, d0.ceilDiv(kernelM) * kernelM), ValueRange{f}); - - affine::buildAffineLoopNest(rewriter, loc, c0, fixed, kernelM, [&]([[maybe_unused]] OpBuilder &builder, Location loc, ValueRange ivRange) { - Value ivF = ivRange.front(); - affine::buildAffineLoopNest(rewriter, loc, c0, g, kernelN * vecSize, [&](OpBuilder &builder, Location loc, ValueRange ivRange) { - Value ivG = ivRange.front(); - - SmallVector iList; - SmallVector fList; - for (int i = 0; i < kernelM; ++i) { - Value rowInput = builder.create(loc, AffineMap::get(2, 0, d0 + i + d1), ValueRange{ivC, ivF}); - Value rowFilter = builder.create(loc, AffineMap::get(1, 0, d0 + i), ivF); - for (int j = 0; j < kernelN; ++j) { - Value columnInput = builder.create(loc, AffineMap::get(2, 0, d0 + d1 + j * vecSize), ValueRange{ivD, ivG}); - Value columnFilter = builder.create(loc, AffineMap::get(1, 0, d0 + j * vecSize), ivG); - - Value i = builder.create(loc, vecTy, input, ValueRange{ivA, ivE, rowInput, columnInput}); - - auto protectedF = - builder.create(loc, vecTy, IntegerSet::get(1, 1, {s0 - 1 - d0}, {false}), ValueRange{rowFilter, f}, true); - - // if row in range, read normally. - auto thenBuilder = protectedF.getThenBodyBuilder(); - Value normalReadVec = thenBuilder.create(loc, vecTy, filter, ValueRange{ivB, ivE, rowFilter, columnFilter}); - thenBuilder.create(loc, normalReadVec); - - // if row out of range, give back a empty vector. - auto elseBuilder = protectedF.getElseBodyBuilder(); - Value emptyVec = elseBuilder.create(loc, vecTy, cf0); - elseBuilder.create(loc, emptyVec); - - iList.push_back(i); - fList.push_back(protectedF->getOpResult(0)); - } - } - Value lastResult = builder.create(loc, buffer, c0); - for (int i = 0; i < kernelM; ++i) { - for (int j = 0; j < kernelN; ++j) { - lastResult = builder.create(loc, vecTy, iList[i * kernelN + j], fList[i * kernelN + j], lastResult); - } - } - - builder.create(loc, lastResult, buffer, c0); - }); + affine::buildAffineLoopNest( + rewriter, loc, c0, N, 1, + [&](OpBuilder &, Location loc, ValueRange ivRange) { + Value ivA = ivRange.front(); + affine::buildAffineLoopNest( + rewriter, loc, c0, OC, 1, + [&](OpBuilder &, Location loc, ValueRange ivRange) { + Value ivB = ivRange.front(); + affine::buildAffineLoopNest( + rewriter, loc, c0, OW, 1, + [&](OpBuilder &, Location loc, ValueRange ivRange) { + Value ivD = ivRange.front(); + affine::buildAffineLoopNest( + rewriter, loc, c0, OH, 1, + [&](OpBuilder &builder, Location loc, + ValueRange ivRange) { + Value ivC = ivRange.front(); + Value t = builder.create(loc, vecTy, cf0); + builder.create(loc, t, buffer, c0); + affine::buildAffineLoopNest( + rewriter, loc, c0, IC, 1, + [&](OpBuilder &builder, Location loc, + ValueRange ivRange) { + Value ivE = ivRange.front(); + + Value fixed = + builder.create( + loc, + AffineMap::get(1, 0, + d0.ceilDiv(kernelM) * + kernelM), + ValueRange{FH}); + + affine::buildAffineLoopNest( + rewriter, loc, c0, fixed, kernelM, + [&]([[maybe_unused]] OpBuilder &builder, + Location loc, ValueRange ivRange) { + Value ivF = ivRange.front(); + affine::buildAffineLoopNest( + rewriter, loc, c0, FW, + kernelN * vecSize, + [&](OpBuilder &builder, + Location loc, + ValueRange ivRange) { + Value ivG = ivRange.front(); + + SmallVector iList; + SmallVector fList; + for (int i = 0; i < kernelM; + ++i) { + Value rowInput = builder.create< + affine::AffineApplyOp>( + loc, + AffineMap::get(2, 0, + d0 + i + d1), + ValueRange{ivC, ivF}); + Value rowFilter = + builder.create< + affine::AffineApplyOp>( + loc, + AffineMap::get(1, 0, + d0 + i), + ivF); + for (int j = 0; j < kernelN; + ++j) { + Value columnInput = + builder.create< + affine:: + AffineApplyOp>( + loc, + AffineMap::get( + 2, 0, + d0 + d1 + + j * vecSize), + ValueRange{ivD, ivG}); + Value columnFilter = + builder.create< + affine:: + AffineApplyOp>( + loc, + AffineMap::get( + 1, 0, + d0 + j * vecSize), + ivG); + + Value i = builder.create< + TransferReadOp>( + loc, vecTy, input, + ValueRange{ivA, ivE, + rowInput, + columnInput}); + + auto protectedF = + builder.create< + affine::AffineIfOp>( + loc, vecTy, + IntegerSet::get( + 1, 1, + {s0 - 1 - d0}, + {false}), + ValueRange{rowFilter, + FH}, + true); + + // if row in range, read + // normally. + auto thenBuilder = + protectedF + .getThenBodyBuilder(); + Value normalReadVec = + thenBuilder.create< + TransferReadOp>( + loc, vecTy, filter, + ValueRange{ + ivB, ivE, + rowFilter, + columnFilter}); + thenBuilder.create< + affine::AffineYieldOp>( + loc, normalReadVec); + + // if row out of range, give + // back N empty vector. + auto elseBuilder = + protectedF + .getElseBodyBuilder(); + Value emptyVec = + elseBuilder + .create( + loc, vecTy, cf0); + elseBuilder.create< + affine::AffineYieldOp>( + loc, emptyVec); + + iList.push_back(i); + fList.push_back( + protectedF->getOpResult( + 0)); + } + } + Value lastResult = + builder + .create( + loc, buffer, c0); + for (int i = 0; i < kernelM; + ++i) { + for (int j = 0; j < kernelN; + ++j) { + lastResult = builder.create< + vector::FMAOp>( + loc, vecTy, + iList[i * kernelN + j], + fList[i * kernelN + j], + lastResult); + } + } + + builder.create( + loc, lastResult, buffer, c0); + }); + }); + }); + + Value reduceVec = + builder.create(loc, buffer, c0); + Value reducedRes = + builder.create( + loc, vector::CombiningKind::ADD, reduceVec); + Value bias = builder.create( + loc, output, ValueRange{ivA, ivB, ivC, ivD}); + Value addRes = builder.create( + loc, bias, reducedRes); + builder.create( + loc, addRes, output, + ValueRange{ivA, ivB, ivC, ivD}); + }); + }); }); - }); - - Value reduceVec = builder.create(loc, buffer, c0); - Value reducedRes = builder.create(loc, vector::CombiningKind::ADD, reduceVec); - Value bias = builder.create(loc, output, ValueRange{ivA, ivB, ivC, ivD}); - Value addRes = builder.create(loc, bias, reducedRes); - builder.create(loc, addRes, output, ValueRange{ivA, ivB, ivC, ivD}); - }); }); - }); - }); rewriter.create(loc, buffer); @@ -164,14 +280,16 @@ class ConvOptimizePattern : public ConversionPattern { //===----------------------------------------------------------------------===// namespace { -class ConvOptimizePass : public PassWrapper> { +class ConvOptimizePass + : public PassWrapper> { public: MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(ConvOptimizePass) StringRef getArgument() const final { return "conv-optimize"; } StringRef getDescription() const final { return "Conv optimize."; } ConvOptimizePass() = default; ConvOptimizePass(const ConvOptimizePass &) {} - explicit ConvOptimizePass(int64_t vecSizeParam, int64_t kernelMParam, int64_t kernelNParam) { + explicit ConvOptimizePass(int64_t vecSizeParam, int64_t kernelMParam, + int64_t kernelNParam) { vecSize = vecSizeParam; kernelM = kernelMParam; kernelN = kernelNParam; @@ -180,14 +298,23 @@ class ConvOptimizePass : public PassWrapper(); + registry.insert(); } - Option vecSize{*this, "vec-size", llvm::cl::desc("Vector size using in kernel."), llvm::cl::init(16)}; + Option vecSize{*this, "vec-size", + llvm::cl::desc("Vector size using in kernel."), + llvm::cl::init(16)}; - Option kernelM{*this, "kernel-m", llvm::cl::desc("Specify how many rows kernel will contain."), llvm::cl::init(4)}; + Option kernelM{ + *this, "kernel-m", + llvm::cl::desc("Specify how many rows kernel will contain."), + llvm::cl::init(4)}; - Option kernelN{*this, "kernel-n", llvm::cl::desc("Specify how many columns kernel will cantain."), llvm::cl::init(2)}; + Option kernelN{ + *this, "kernel-n", + llvm::cl::desc("Specify how many columns kernel will cantain."), + llvm::cl::init(2)}; }; } // end anonymous namespace. @@ -196,7 +323,9 @@ void ConvOptimizePass::runOnOperation() { ModuleOp module = getOperation(); ConversionTarget target(*context); - target.addLegalDialect(); + target + .addLegalDialect(); target.addLegalOp(); target.addLegalOp(); diff --git a/midend/lib/Conversion/ConvVectorization/GEMMPointwiseConv2DNhwcHwcf.cpp b/midend/lib/Conversion/ConvVectorization/GEMMPointwiseConv2DNhwcHwcf.cpp index 55c876dd6..918a1388d 100644 --- a/midend/lib/Conversion/ConvVectorization/GEMMPointwiseConv2DNhwcHwcf.cpp +++ b/midend/lib/Conversion/ConvVectorization/GEMMPointwiseConv2DNhwcHwcf.cpp @@ -122,8 +122,7 @@ class GEMMPointwiseConvPattern : public ConversionPattern { namespace { class PointwiseConvToGemmPass - : public PassWrapper> { + : public PassWrapper> { public: MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(PointwiseConvToGemmPass) StringRef getArgument() const final { return "pointwise-conv-to-gemm"; } @@ -144,14 +143,20 @@ class PointwiseConvToGemmPass void PointwiseConvToGemmPass::runOnOperation() { MLIRContext *context = &getContext(); + ModuleOp module = getOperation(); ConversionTarget target(*context); - target.addLegalDialect(); + target + .addLegalDialect(); target.addLegalOp(); target.addLegalOp(); + + RewritePatternSet patterns(context); + patterns.add(context); + if (failed(applyPartialConversion(module, target, std::move(patterns)))) + signalPassFailure(); } namespace mlir { diff --git a/midend/lib/Conversion/DepthwiseConvOptimization/CMakeLists.txt b/midend/lib/Conversion/DepthwiseConvOptimization/CMakeLists.txt new file mode 100644 index 000000000..8493e2a60 --- /dev/null +++ b/midend/lib/Conversion/DepthwiseConvOptimization/CMakeLists.txt @@ -0,0 +1,3 @@ +add_mlir_library(DepthwiseConvOptimization + DepthwiseConvNhwcHwc.cpp + ) diff --git a/midend/lib/Conversion/DepthwiseConvOptimization/DepthwiseConvNhwcHwc.cpp b/midend/lib/Conversion/DepthwiseConvOptimization/DepthwiseConvNhwcHwc.cpp new file mode 100644 index 000000000..04bf76f76 --- /dev/null +++ b/midend/lib/Conversion/DepthwiseConvOptimization/DepthwiseConvNhwcHwc.cpp @@ -0,0 +1,331 @@ +//====- DepthwiseConvNhwcHwc.cpp +//--------------------------------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// +// +// This file implements the DepthwiseConvNhwcHwc optimize. +// +//===----------------------------------------------------------------------===// + +#include +#include +#include +#include +#include + +using namespace mlir; +using namespace vector; + +//===----------------------------------------------------------------------===// +// Rewrite Pattern +//===----------------------------------------------------------------------===// + +namespace { + +class DepthwiseConv2DNhwcHwcOptimizePattern : public ConversionPattern { +public: + explicit DepthwiseConv2DNhwcHwcOptimizePattern(MLIRContext *context, + int64_t vecSizeParam) + : ConversionPattern(linalg::DepthwiseConv2DNhwcHwcOp::getOperationName(), + 1, context) { + vecSize = vecSizeParam; + } + + LogicalResult + matchAndRewrite(Operation *op, ArrayRef /*operands*/, + ConversionPatternRewriter &rewriter) const override { + auto convOp = dyn_cast_or_null(op); + auto loc = op->getLoc(); + + // Some constant we need. + const Value c0 = + rewriter.create(loc, rewriter.getIndexAttr(0)); + const Value c1 = + rewriter.create(loc, rewriter.getIndexAttr(1)); + + const Value vecSizeValue = + rewriter.create(loc, rewriter.getIndexAttr(vecSize)); + const AffineExpr d0 = rewriter.getAffineDimExpr(0); + const AffineExpr d1 = rewriter.getAffineDimExpr(1); + const AffineExpr s0 = rewriter.getAffineSymbolExpr(0); + + Value input = op->getOperand(0); + Value filter = op->getOperand(1); + Value output = op->getOperand(2); + + int strHeight, strWidth, dilHeight, dilWidth; + + // Strides. + if (!convOp.getStrides()) { + strHeight = 1; + strWidth = 1; + } else { + strHeight = convOp.getStrides().getValues()[0]; + strWidth = convOp.getStrides().getValues() + [convOp.getStrides().getValues().size() - 1]; + } + + // Dilations. + if (!convOp.getDilations()) { + dilHeight = 1; + dilWidth = 1; + } else { + dilHeight = convOp.getDilations().getValues()[0]; + dilWidth = convOp.getDilations().getValues() + [convOp.getDilations().getValues().size() - 1]; + } + + ShapedType inputTy = input.getType().cast(); + Type elemTy = inputTy.getElementType(); + VectorType vecTy = VectorType::get(vecSize, elemTy); + + const Value zeroElementType = + rewriter.create(loc, rewriter.getZeroAttr(elemTy)); + + Value zeroElementTypeVec; + if (isa(elemTy)) { + zeroElementTypeVec = + rewriter.create(loc, vecTy, zeroElementType); + } else { + zeroElementTypeVec = + rewriter.create(loc, vecTy, zeroElementType); + } + // Dims + Value N = rewriter.create(loc, output, 0); // N + Value OH = rewriter.create(loc, output, 1); // OH + Value OW = rewriter.create(loc, output, 2); // OW + Value OC = rewriter.create(loc, output, 3); // OC/FC/IC + + Value applyOC = rewriter.create( + loc, AffineMap::get(1, 0, d0.floorDiv(vecSize) * vecSize), OC); + Value tailLength = rewriter.create( + loc, AffineMap::get(1, 0, d0 % vecSize), ValueRange{OC}); + Value maskVector = rewriter.create( + loc, VectorType::get({vecSize}, rewriter.getI1Type()), + ValueRange{tailLength}); + + Value FH = rewriter.create(loc, filter, 0); // FH + Value FW = rewriter.create(loc, filter, 1); // FW + + // clang format off + // Step 1: Create outer most loops. + // Create the scf::ForallOp operation For N,OH,OW + auto outputForAllOp = rewriter.create( + loc, SmallVector({N, OH, OW}), ValueRange{}, + std::nullopt, // No mapping specified in this example + [&](OpBuilder &nestedBuilder, Location nestedLoc, + ValueRange loopIndices) { + Value ivN = loopIndices[0]; // Index for the first dimension N + Value ivOH = loopIndices[1]; // Index for the second dimension OH + Value ivOW = loopIndices[2]; // Index for the third dimension OW + // OC + nestedBuilder.create( + nestedLoc, c0, applyOC, vecSizeValue, ValueRange{std::nullopt}, + [&](OpBuilder &builder, Location loc, Value ivOC, + ValueRange iargs) { + Value tVec = builder.create( + loc, vecTy, output, ValueRange{ivN, ivOH, ivOW, ivOC}); + + // FH + auto forOp = builder.create( + loc, c0, FH, c1, ValueRange{tVec}, + [&](OpBuilder &builder, Location loc, Value ivFH, + ValueRange iargs) { + Value rowInput = builder.create( + loc, + AffineMap::get(2, 0, d0 * strHeight + d1 * dilHeight), + ValueRange{ivOH, ivFH}); + Value rowFilter = ivFH; + // FW + auto forOp = builder.create( + loc, c0, FW, c1, ValueRange{iargs[0]}, + [&](OpBuilder &builder, Location loc, Value ivFW, + ValueRange iargs) { + Value columnInput = + builder.create( + loc, + AffineMap::get( + 2, 0, d0 * strWidth + d1 * dilWidth), + ValueRange{ivOW, ivFW}); + Value columnFilter = + builder.create( + loc, AffineMap::get(1, 0, d0), ivFW); + Value iVec = builder.create( + loc, vecTy, input, + ValueRange{ivN, rowInput, columnInput, ivOC}); + Value fVec = builder.create( + loc, vecTy, filter, + ValueRange{rowFilter, columnFilter, ivOC}); + Value tVecNext; + if (isa(elemTy)) { + Value mulVec = builder.create( + loc, iVec, fVec); + tVecNext = builder.create( + loc, mulVec, iargs[0]); + } else { + tVecNext = builder.create( + loc, vecTy, iVec, fVec, iargs[0]); + } + + builder.create(loc, + ValueRange{tVecNext}); + }); + builder.create( + loc, ValueRange{forOp.getResult(0)}); + }); + builder.create( + loc, forOp.getResult(0), output, + ValueRange{ivN, ivOH, ivOW, ivOC}); + + builder.create(loc, ValueRange{std::nullopt}); + }); + + // applyOC + Value condition = nestedBuilder.create( + loc, arith::CmpIPredicate::sgt, tailLength, c0); + nestedBuilder.create( + loc, condition, [&](OpBuilder &builder, Location loc) { + Value tVec = builder.create( + loc, vecTy, output, ValueRange{ivN, ivOH, ivOW, applyOC}, + maskVector, zeroElementTypeVec); + // FH + auto forOp = builder.create( + loc, c0, FH, c1, ValueRange{tVec}, + [&](OpBuilder &builder, Location loc, Value ivFH, + ValueRange iargs) { + Value rowInput = builder.create( + loc, + AffineMap::get(2, 0, d0 * strHeight + d1 * dilHeight), + ValueRange{ivOH, ivFH}); + Value rowFilter = ivFH; + // FW + auto forOp = builder.create( + loc, c0, FW, c1, ValueRange{iargs[0]}, + [&](OpBuilder &builder, Location loc, Value ivFW, + ValueRange iargs) { + Value columnInput = + builder.create( + loc, + AffineMap::get( + 2, 0, d0 * strWidth + d1 * dilWidth), + ValueRange{ivOW, ivFW}); + Value columnFilter = + builder.create( + loc, AffineMap::get(1, 0, d0), ivFW); + Value iVec = builder.create( + loc, vecTy, input, + ValueRange{ivN, rowInput, columnInput, applyOC}, + maskVector, zeroElementTypeVec); + Value fVec = builder.create( + loc, vecTy, filter, + ValueRange{rowFilter, columnFilter, applyOC}, + maskVector, zeroElementTypeVec); + Value tVecNext; + if (isa(elemTy)) { + Value mulVec = builder.create( + loc, iVec, fVec); + tVecNext = builder.create( + loc, mulVec, iargs[0]); + } else { + tVecNext = builder.create( + loc, vecTy, iVec, fVec, iargs[0]); + } + + builder.create(loc, + ValueRange{tVecNext}); + }); + builder.create( + loc, ValueRange{forOp.getResult(0)}); + }); + builder.create( + loc, output, ValueRange{ivN, ivOH, ivOW, applyOC}, + maskVector, forOp.getResult(0)); + builder.create(loc, ValueRange{std::nullopt}); + }); + + nestedBuilder.create(nestedLoc); + }); + // clang format on + + rewriter.eraseOp(op); + return success(); + } + +private: + int64_t vecSize; +}; +} // end anonymous namespace + +//===----------------------------------------------------------------------===// +// DepthwiseConv2DNhwcHwcOptimizePass +//===----------------------------------------------------------------------===// + +namespace { +class DepthwiseConv2DNhwcHwcOptimizePass + : public PassWrapper> { +public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID( + DepthwiseConv2DNhwcHwcOptimizePass) + StringRef getArgument() const final { + return "depthwise-conv-nhwc-hwc-optimize"; + } + StringRef getDescription() const final { + return "Depthwise Conv2d NHWC HWC optimize."; + } + DepthwiseConv2DNhwcHwcOptimizePass() = default; + DepthwiseConv2DNhwcHwcOptimizePass( + const DepthwiseConv2DNhwcHwcOptimizePass &) {} + explicit DepthwiseConv2DNhwcHwcOptimizePass(int64_t vecSizeParam) { + vecSize = vecSizeParam; + } + + void runOnOperation() override; + + void getDependentDialects(DialectRegistry ®istry) const override { + registry.insert(); + } + + Option vecSize{*this, "vec-size", llvm::cl::desc("Vector size."), + llvm::cl::init(16)}; +}; +} // end anonymous namespace. + +void DepthwiseConv2DNhwcHwcOptimizePass::runOnOperation() { + MLIRContext *context = &getContext(); + ModuleOp module = getOperation(); + + ConversionTarget target(*context); + target + .addLegalDialect(); + target.addLegalOp(); + target.addLegalOp(); + + RewritePatternSet patterns(context); + patterns.add(context, vecSize); + + if (failed(applyPartialConversion(module, target, std::move(patterns)))) + signalPassFailure(); +} + +namespace mlir { +namespace buddy { +void registerDepthwiseConv2DNhwcHwcOptimizePass() { + PassRegistration(); +} +} // namespace buddy +} // namespace mlir diff --git a/midend/lib/Conversion/ExtendDAP/CMakeLists.txt b/midend/lib/Conversion/ExtendDAP/CMakeLists.txt new file mode 100644 index 000000000..5ecaa64c9 --- /dev/null +++ b/midend/lib/Conversion/ExtendDAP/CMakeLists.txt @@ -0,0 +1,3 @@ +add_mlir_library(ExtendDAPPass + ExtendDAPPass.cpp + ) diff --git a/midend/lib/Conversion/ExtendDAP/ExtendDAPPass.cpp b/midend/lib/Conversion/ExtendDAP/ExtendDAPPass.cpp new file mode 100644 index 000000000..20918fda9 --- /dev/null +++ b/midend/lib/Conversion/ExtendDAP/ExtendDAPPass.cpp @@ -0,0 +1,1637 @@ +//====- ExtendDAPPass.cpp - Extend DAP Dialect Lowering Pass -------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// +// +// This file defines Extend DAP dialect lowering pass. +// +//===----------------------------------------------------------------------===// + +#include "mlir/Dialect/Affine/IR/AffineOps.h" +#include "mlir/Dialect/Bufferization/Transforms/Bufferize.h" +#include "mlir/Dialect/Func/IR/FuncOps.h" +#include "mlir/Dialect/Linalg/IR/Linalg.h" +#include "mlir/Dialect/Linalg/Transforms/Transforms.h" +#include "mlir/Dialect/Math/IR/Math.h" +#include "mlir/Dialect/MemRef/IR/MemRef.h" +#include "mlir/Dialect/Vector/IR/VectorOps.h" +#include "mlir/Pass/Pass.h" + +#include "DAP/DAPDialect.h" +#include "DAP/DAPOps.h" +#include + +using namespace mlir; +using namespace buddy; +using namespace vector; +using namespace mlir::arith; +using namespace mlir::linalg; +using namespace mlir::bufferization; + +//===----------------------------------------------------------------------===// +// Rewrite Pattern +//===----------------------------------------------------------------------===// +Value initMelFilter(PatternRewriter &rewriter, Location loc, Value c0, Value c1, + Value f0) { + FloatType f64Ty = rewriter.getF64Type(); + std::vector data{ + 0.024862593984176087, 0.0019908218880980706, 0.022871772096078023, + 0.003981643776196141, 0.020880950207979945, 0.005972465664294215, + 0.018890128319881874, 0.007963287552392284, 0.016899306431783803, + 0.00995410944049036, 0.014908484543685726, 0.011944931328588433, + 0.012917662655587655, 0.013935753216686492, 0.0109268407674896, + 0.015926575104784558, 0.008936018879391525, 0.017917396992882653, + 0.006945196991293433, 0.019908218880980738, 0.004954375103195362, + 0.021899040769078785, 0.0029635532150973053, 0.02388986265717686, + 0.000972731326999214, 0.025880684545274913, 0.025835325311175383, + 0.0010180905610987637, 0.023844503423077285, 0.003008912449196894, + 0.0218536815349792, 0.004999734337294947, 0.019862859646881146, + 0.00699055622539301, 0.017872037758783092, 0.008981378113491093, + 0.015881215870684983, 0.010972200001589204, 0.013890393982586886, + 0.012963021889687279, 0.011899572094488815, 0.01495384377778533, + 0.009908750206390747, 0.016944665665883398, 0.007917928318292721, + 0.01893548755398142, 0.00592710643019463, 0.020874010059259842, + 0.0040404255283634505, 0.02211421726709443, 0.003318606124028175, + 0.021736724240202378, 0.0036109675065762467, 0.020497701500567712, + 0.0047621938624405336, 0.018486659689787407, 0.00659261778657699, + 0.015856038061722075, 0.00896277117173217, 0.01273876809538182, + 0.011751329556399702, 0.009250369503549623, 0.014853145171184273, + 0.005490841259941731, 0.018177473406255133, 0.0015463665611462304, + 0.0028155461301291296, 0.016329520204672005, 0.0074201889869586046, + 0.011181051149095055, 0.012018863908450889, 0.006065350444974551, + 0.016561277418378373, 0.0010297985194884273, 0.004360878822945124, + 0.012770536755428743, 0.009707189146398206, 0.00698640273562069, + 0.014854299940667337, 0.0014180475372245899, 0.004391219533926463, + 0.011486922519974862, 0.010089744452471235, 0.005411105098683222, + 0.00040022287019040627, 0.01473556574143922, 0.006518189694660876, + 0.008278412940789993, 0.012277561276489102, 0.0021878083895293813, + 0.003967812818254116, 0.01018448003033658, 0.009981875463793392, + 0.0038694348523115605, 0.002286485205918727, 0.011274894758755125, + 0.00846622203459276, 0.00482029386344711, 0.0013397691078130697, + 0.01167825163503901, 0.0076086824024487005, 0.005156961757386885, + 0.0010091040034666294, 0.011507895445653202, 0.007301822420859842, + 0.00498210435635522, 0.00119016554305424, 0.010863499380371759, + 0.007451189902152603, 0.004385921781217367, 0.001791381421388157, + 0.009832492179588035, 0.007973956151288167, 0.003447454713364045, + 0.00273258990979288, 0.008491348038548032, 0.008797688393881514, + 0.00223576473247454, 0.003943828025486854, 0.00690675179681992, + 0.00985924113208423, 0.0008110002442122107, 0.005364237465034378, + 0.005136650837642653, 0.0008692337979845255, 0.009462301431073093, + 0.0069410774768914035, 0.0032312041128928558, 0.0027783994364693502, + 0.0072370497293947405, 0.008628834806348044, 0.0012336377872858904, + 0.004773912819246566, 0.004943322320664174, 0.0009189908321450893, + 0.008653006854042458, 0.006818502698028209, 0.0026164354511310182, + 0.0032485836741847724, 0.006051854749492107, 0.008880466967901061, + 0.0002863667968266877, 0.005574480003847867, 0.0034677978994882394, + 0.0022684930397946727, 0.006649229002149792, 0.007871464954585431, + 0.0009245911230515482, 0.004809896965650232, 0.003870811942679267, + 0.0017483289767150309, 0.006817032762306986, 0.007283343633866355, + 0.00117032890964782, 0.00444812418116144, 0.0038987290660258203, + 0.001612904728456526, 0.006627129222403821, 0.007047320122030166, + 0.001089299240400779, 0.004421714754438077, 0.003615982700014719, + 0.0017961093868459883, 0.006142666159628658, 0.007102936106246769, + 0.000739228059530935, 0.00467144758787073, 0.003079108186777991, + 0.002239959069494691, 0.005418988314025048, 0.007397185776342812, + 0.0001706867135296284, 0.005145462616431531, 0.0023375742945811327, + 0.0028937394565202498, 0.004504461875632637, 0.0006420162966089689, + 0.006671349456684142, 0.005798479593256033, 0.0014345343541053727, + 0.003713231338714718, 0.0034412191129693185, 0.0016279830841734021, + 0.005447903871833263, 0.006591092774765041, 0.0004075043790786325, + 0.004660011565279688, 0.0022658304669981606, 0.002728930355794336, + 0.0041241565549176885, 0.0007978491463089834, 0.0059824826428372165, + 0.005700822451952891, 0.001009910787399597, 0.003912510374718906, + 0.0027308466911522586, 0.0021241982974849216, 0.00445178259490492, + 0.00033588622025093644, 0.006172718498657583, 0.005150905140435021, + 0.001294369078080886, 0.003494806955712255, 0.002888072359801849, + 0.0018387087709894891, 0.004481775641522813, 0.0001826105862667237, + 0.006075478923243776, 0.004886660120436632, 0.0013131388257841057, + 0.0033530009608540383, 0.0027890160764299436, 0.001819341801271444, + 0.004264893327075782, 0.0002856826416888495, 0.00574077057772162, + 0.00485997904767977, 0.0011121684505728251, 0.003439706723569149, + 0.002478930810892349, 0.002019434399458528, 0.003845693171211873, + 0.0005991620753479068, 0.0052124555315313965, 0.005028639927429189, + 0.0007317548848252071, 0.0037133714976539506, 0.001997469461541363, + 0.002398103067878713, 0.0032631840382575193, 0.0010828346381034754, + 0.004528898614973675, 0.005355687096081724, 0.00020713973879943928, + 0.004137659389003323, 0.001379277219478372, 0.002919631681924923, + 0.0025514147001573046, 0.0017016039748465222, 0.0037235521808362372, + 0.0004835762677681217, 0.00489568966151517, 0.004680894973891053, + 0.0006545265135735772, 0.003552918766430338, 0.001740005261220558, + 0.002424942558969623, 0.0028254840088675383, 0.001296966351508908, + 0.003910962756514519, 0.0001689901440481931, 0.0049964415041615, + 0.004270978712160627, 0.0008546266928695816, 0.003226396296503344, + 0.001859853580513147, 0.00218181388084606, 0.002865080468156712, + 0.0011372314651887762, 0.003870307355800277, 9.264904953149247e-05, + 0.004875534243443842, 0.00408313784805493, 0.0008483414885398006, + 0.0031157837355450563, 0.0017792497148243077, 0.0021484296230351824, + 0.002710157941108815, 0.0011810755105253086, 0.003641066167393322, + 0.00021372139801543514, 0.00457197439367783, 0.004079728686464056, + 0.0006716204322456959, 0.0031838932167458007, 0.0015337045412328826, + 0.0022880577470275453, 0.0023957886502200695, 0.0013922222773092897, + 0.0032578727592072563, 0.0004963868075910343, 0.004119956868194443, + 0.004227725348621998, 0.00035597961441710105, 0.003398120989238948, + 0.0011543279262957885, 0.0025685166298558978, 0.0019526762381744762, + 0.0017389122704728477, 0.0027510245500531635, 0.0009093079110897976, + 0.0035493728619318513, 7.970355170674751e-05, 0.004347721173810539, + 0.0037299628548962886, 0.0006682946412839993, 0.0029616929924361443, + 0.001407619285405272, 0.0021934231299760003, 0.002146943929526545, + 0.001425153267515856, 0.0028862685736478176, 0.000656883405055712, + 0.0036255932177690904, 0.004154576575021074, 9.92650919068254e-05, + 0.00344310661360058, 0.0007839298194100073, 0.0027316366521800855, + 0.0014685945469131891, 0.002020166690759591, 0.002153259274416371, + 0.0013086967293390965, 0.002837924001919553, 0.0005972267679186017, + 0.0035225887294227346, 0.00399151753267442, 0.00010181095051366054, + 0.0033326481291776314, 0.0007358568907029797, 0.002673778725680842, + 0.0013699028308922986, 0.002014909322184054, 0.0020039487710816176, + 0.0013560399186872648, 0.002637994711270937, 0.0006971705151904762, + 0.003272040651460256, 3.8301111693687365e-05, 0.0039060865916495753, + 0.0033682563798377797, 0.000553036427908215, 0.0027580986579326967, + 0.0011402059404032124, 0.0021479409360276127, 0.0017273754528982098, + 0.0015377832141225299, 0.002314544965393207, 0.0009276254922174464, + 0.002901714477888205, 0.00031746777031236304, 0.003488883990383202, + 0.0035233401613614045, 0.0002608386658672823, 0.0029582927579996227, + 0.0008045974293106004, 0.0023932453546378412, 0.0013483561927539183, + 0.0018281979512760594, 0.0018921149561972363, 0.0012631505479142777, + 0.0024358737196405545, 0.0006981031445524962, 0.0029796324830838727, + 0.00013305574119071463, 0.003523391246527191, 0.0032513804428682767, + 0.0003849812001174835, 0.0027281082517878774, 0.0008885386678154236, + 0.0022048360607074776, 0.0013920961355133636, 0.0016815638696270783, + 0.0018956536032113034, 0.001158291678546679, 0.002399211070909244, + 0.0006350194874662795, 0.0029027685386071836, 0.0001117472963858801, + 0.003406326006305124, 0.0031327631853624, 0.0003667416797849643, + 0.002648177672131103, 0.0008330700230168817, 0.0021635921588998063, + 0.001299398366248799, 0.00167900664566851, 0.0017657267094807168, + 0.0011944211324372133, 0.002232055052712634, 0.0007098356192059166, + 0.0026983833959445514, 0.00022525010597461998, 0.003164711739176469, + 0.0031413131931234614, 0.002692554165534394, 0.002243795137945327, + 0.0017950361103562596, 0.001346277082767192, 0.0008975180551781247, + 0.0004487590275890572}; + Value melFilterData = rewriter.create( + loc, DenseFPElementsAttr::get(RankedTensorType::get(391, f64Ty), + ArrayRef(data))); + + IndexType idxTy = rewriter.getIndexType(); + std::vector D1Index{ + 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, + 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, + 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, + 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, + 31, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, + 38, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, + 46, 46, 47, 47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52, 53, + 53, 54, 54, 55, 55, 56, 56, 57, 57, 58, 58, 59, 59, 60, 60, + 61, 61, 62, 62, 63, 63, 64, 64, 65, 65, 66, 66, 67, 67, 68, + 68, 69, 69, 70, 70, 71, 71, 72, 72, 73, 73, 74, 74, 75, 75, + 76, 76, 77, 77, 78, 78, 79, 79, 80, 80, 81, 81, 82, 82, 83, + 83, 84, 84, 85, 85, 86, 86, 87, 87, 88, 88, 89, 89, 90, 90, + 91, 91, 92, 92, 93, 93, 94, 94, 95, 95, 96, 96, 97, 97, 98, + 98, 99, 99, 100, 100, 101, 101, 102, 102, 103, 103, 104, 104, 105, 105, + 106, 106, 107, 107, 108, 108, 109, 109, 110, 110, 111, 111, 112, 112, 113, + 113, 114, 114, 115, 115, 116, 116, 117, 117, 118, 118, 119, 119, 120, 120, + 121, 121, 122, 122, 123, 123, 124, 124, 125, 125, 126, 126, 127, 127, 128, + 128, 129, 129, 130, 130, 131, 131, 132, 132, 133, 133, 134, 134, 135, 135, + 136, 136, 137, 137, 138, 138, 139, 139, 140, 140, 141, 141, 142, 142, 143, + 143, 144, 144, 145, 145, 146, 146, 147, 147, 148, 148, 149, 149, 150, 150, + 151, 151, 152, 152, 153, 153, 154, 154, 155, 155, 156, 156, 157, 157, 158, + 158, 159, 159, 160, 160, 161, 161, 162, 162, 163, 163, 164, 164, 165, 165, + 166, 166, 167, 167, 168, 168, 169, 169, 170, 170, 171, 171, 172, 172, 173, + 173, 174, 174, 175, 175, 176, 176, 177, 177, 178, 178, 179, 179, 180, 180, + 181, 181, 182, 182, 183, 183, 184, 184, 185, 185, 186, 186, 187, 187, 188, + 188, 189, 189, 190, 190, 191, 191, 192, 192, 193, 194, 195, 196, 197, 198, + 199}; + Value dim1Index = rewriter.create( + loc, DenseElementsAttr::get(RankedTensorType::get(391, idxTy), + ArrayRef(D1Index))); + + std::vector D2Index{ + 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, + 9, 10, 10, 11, 11, 12, 12, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, + 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, + 28, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 33, 34, 34, 35, 35, 36, + 36, 37, 36, 37, 37, 38, 38, 39, 38, 39, 39, 40, 39, 40, 40, 41, 41, 42, + 41, 42, 42, 43, 42, 43, 43, 44, 43, 44, 44, 45, 44, 45, 45, 46, 45, 46, + 46, 47, 46, 47, 47, 48, 47, 48, 48, 49, 48, 49, 49, 50, 49, 50, 49, 50, + 50, 51, 50, 51, 51, 52, 51, 52, 51, 52, 52, 53, 52, 53, 53, 54, 53, 54, + 53, 54, 54, 55, 54, 55, 54, 55, 55, 56, 55, 56, 55, 56, 56, 57, 56, 57, + 56, 57, 57, 58, 57, 58, 57, 58, 58, 59, 58, 59, 58, 59, 58, 59, 59, 60, + 59, 60, 59, 60, 60, 61, 60, 61, 60, 61, 60, 61, 61, 62, 61, 62, 61, 62, + 61, 62, 62, 63, 62, 63, 62, 63, 62, 63, 63, 64, 63, 64, 63, 64, 63, 64, + 64, 65, 64, 65, 64, 65, 64, 65, 65, 66, 65, 66, 65, 66, 65, 66, 66, 67, + 66, 67, 66, 67, 66, 67, 66, 67, 67, 68, 67, 68, 67, 68, 67, 68, 67, 68, + 68, 69, 68, 69, 68, 69, 68, 69, 68, 69, 69, 70, 69, 70, 69, 70, 69, 70, + 69, 70, 70, 71, 70, 71, 70, 71, 70, 71, 70, 71, 71, 72, 71, 72, 71, 72, + 71, 72, 71, 72, 71, 72, 72, 73, 72, 73, 72, 73, 72, 73, 72, 73, 73, 74, + 73, 74, 73, 74, 73, 74, 73, 74, 73, 74, 74, 75, 74, 75, 74, 75, 74, 75, + 74, 75, 74, 75, 74, 75, 75, 76, 75, 76, 75, 76, 75, 76, 75, 76, 75, 76, + 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 76, 77, 77, 78, 77, 78, + 77, 78, 77, 78, 77, 78, 77, 78, 77, 78, 78, 79, 78, 79, 78, 79, 78, 79, + 78, 79, 78, 79, 78, 79, 79, 79, 79, 79, 79, 79, 79}; + Value dim2Index = rewriter.create( + loc, DenseElementsAttr::get(RankedTensorType::get(391, idxTy), + ArrayRef(D2Index))); + + RankedTensorType melFilterType = RankedTensorType::get({201, 80}, f64Ty); + Value melFilter = rewriter.create(loc, melFilterType, f0); + auto mTp = + MemRefType::get(melFilterType.getShape(), melFilterType.getElementType()); + Value melFilterMemRef = + rewriter.create(loc, mTp, melFilter); + + // TODO : remove tomemref & totensor, and use insert to replace store. !! + Value c391 = rewriter.create(loc, 391); + Value number, d1, d2; + // rewriter.create(loc, c0, c391, c1, std::nullopt, + // [&](OpBuilder &builder, Location loc, Value iv, ValueRange iargs) { + // number = builder.create(loc, melFilterData, iv); + // d1 = builder.create(loc, dim1Index, iv); + // d2 = builder.create(loc, dim2Index, iv); + // builder.create(loc, number, melFilterMemRef, + // ValueRange{d1, d2}); builder.create(loc, std::nullopt); + // }); + auto loopOp = rewriter.create(loc, c0, c391, c1); + rewriter.setInsertionPointToStart(loopOp.getBody()); + + Value iv = loopOp.getInductionVar(); + number = rewriter.create(loc, melFilterData, iv); + d1 = rewriter.create(loc, dim1Index, iv); + d2 = rewriter.create(loc, dim2Index, iv); + rewriter.create(loc, number, melFilterMemRef, + ValueRange{d1, d2}); + + rewriter.setInsertionPointAfter(loopOp); + + Value newMelFilter = rewriter.create( + loc, melFilterMemRef, /*restrict=*/true, /*writable=*/false); + + return newMelFilter; +} + +Value getHanningWindow400(PatternRewriter &rewriter, Location loc) { + FloatType f64Ty = rewriter.getF64Type(); + std::vector hanningWindow400{0.0, + 6.168375916970614e-05, + 0.0002467198171342, + 0.0005550625190150482, + 0.0009866357858642205, + 0.001541333133436018, + 0.002219017698460002, + 0.003019522272410202, + 0.0039426493427611176, + 0.0049881711417212315, + 0.00615582970243117, + 0.007445336922613066, + 0.00885637463565564, + 0.01038859468911707, + 0.012041619030626338, + 0.013815039801161721, + 0.015708419435684517, + 0.017721290771101017, + 0.019853157161528523, + 0.02210349260083494, + 0.024471741852423234, + 0.02695732058622735, + 0.029559615522887273, + 0.03227798458506631, + 0.035111757055874326, + 0.03806023374435674, + 0.04112268715800954, + 0.044298361682277465, + 0.04758647376699032, + 0.05098621211969223, + 0.054496737905816106, + 0.05811718495565327, + 0.06184665997806821, + 0.06568424278090434, + 0.06962898649802812, + 0.07367991782295402, + 0.07783603724899257, + 0.08209631931586497, + 0.08645971286271914, + 0.09092514128748835, + 0.09549150281252633, + 0.10015767075645471, + 0.1049224938121548, + 0.10978479633083521, + 0.11474337861210543, + 0.11979701719998453, + 0.1249444651847702, + 0.1301844525106951, + 0.13551568628929433, + 0.14093685111840565, + 0.14644660940672627, + 0.15204360170384285, + 0.15772644703565564, + 0.1634937432451133, + 0.16934406733817414, + 0.17527597583490823, + 0.18128800512565513, + 0.1873786718321474, + 0.1935464731735117, + 0.19978988733705805, + 0.2061073738537635, + 0.21249737397836072, + 0.21895831107393465, + 0.22548859100093405, + 0.23208660251050156, + 0.2387507176420256, + 0.24547929212481434, + 0.2522706657837962, + 0.2591231629491423, + 0.2660350928697134, + 0.2730047501302266, + 0.2800304150720424, + 0.28711035421746367, + 0.2942428206974456, + 0.30142605468260963, + 0.30865828381745525, + 0.31593772365766115, + 0.3232625781103715, + 0.3306310398773543, + 0.3380412909009253, + 0.34549150281252644, + 0.3529798373838481, + 0.3605044469803854, + 0.36806347501731357, + 0.3756550564175726, + 0.38327731807204724, + 0.39092837930172886, + 0.3986063523217438, + 0.4063093427071377, + 0.41403544986029517, + 0.4217827674798846, + 0.4295493840312088, + 0.4373333832178479, + 0.44513284445447737, + 0.45294584334074284, + 0.4607704521360776, + 0.4686047402353433, + 0.4764467746451787, + 0.48429462046093585, + 0.49214634134408974, + 0.5, + 0.5078536586559104, + 0.5157053795390641, + 0.5235532253548213, + 0.5313952597646567, + 0.5392295478639225, + 0.5470541566592572, + 0.5548671555455227, + 0.5626666167821522, + 0.5704506159687914, + 0.5782172325201155, + 0.5859645501397047, + 0.5936906572928624, + 0.6013936476782563, + 0.6090716206982714, + 0.6167226819279528, + 0.6243449435824273, + 0.6319365249826864, + 0.6394955530196147, + 0.647020162616152, + 0.6545084971874737, + 0.6619587090990747, + 0.6693689601226458, + 0.6767374218896286, + 0.6840622763423391, + 0.6913417161825449, + 0.6985739453173903, + 0.7057571793025544, + 0.7128896457825363, + 0.7199695849279575, + 0.7269952498697734, + 0.7339649071302867, + 0.7408768370508576, + 0.7477293342162038, + 0.7545207078751857, + 0.7612492823579744, + 0.7679133974894983, + 0.7745114089990659, + 0.7810416889260654, + 0.7875026260216393, + 0.7938926261462367, + 0.8002101126629421, + 0.8064535268264883, + 0.8126213281678527, + 0.8187119948743449, + 0.8247240241650918, + 0.8306559326618259, + 0.8365062567548867, + 0.8422735529643444, + 0.8479563982961571, + 0.8535533905932737, + 0.8590631488815944, + 0.8644843137107058, + 0.8698155474893048, + 0.8750555348152298, + 0.8802029828000155, + 0.8852566213878946, + 0.8902152036691648, + 0.8950775061878451, + 0.8998423292435453, + 0.9045084971874737, + 0.9090748587125117, + 0.9135402871372809, + 0.9179036806841352, + 0.9221639627510075, + 0.9263200821770461, + 0.9303710135019718, + 0.9343157572190957, + 0.9381533400219317, + 0.9418828150443468, + 0.9455032620941839, + 0.9490137878803078, + 0.9524135262330098, + 0.9557016383177226, + 0.9588773128419905, + 0.9619397662556434, + 0.9648882429441257, + 0.9677220154149337, + 0.9704403844771128, + 0.9730426794137726, + 0.9755282581475768, + 0.977896507399165, + 0.9801468428384715, + 0.982278709228899, + 0.9842915805643155, + 0.9861849601988383, + 0.9879583809693737, + 0.9896114053108829, + 0.9911436253643444, + 0.9925546630773869, + 0.9938441702975689, + 0.9950118288582788, + 0.996057350657239, + 0.9969804777275899, + 0.99778098230154, + 0.998458666866564, + 0.9990133642141358, + 0.9994449374809851, + 0.9997532801828658, + 0.9999383162408303, + 1.0, + 0.9999383162408303, + 0.9997532801828658, + 0.9994449374809851, + 0.9990133642141358, + 0.998458666866564, + 0.99778098230154, + 0.9969804777275899, + 0.996057350657239, + 0.9950118288582788, + 0.9938441702975689, + 0.9925546630773869, + 0.9911436253643444, + 0.9896114053108829, + 0.9879583809693737, + 0.9861849601988383, + 0.9842915805643155, + 0.982278709228899, + 0.9801468428384715, + 0.977896507399165, + 0.9755282581475768, + 0.9730426794137726, + 0.9704403844771128, + 0.9677220154149337, + 0.9648882429441257, + 0.9619397662556434, + 0.9588773128419905, + 0.9557016383177226, + 0.9524135262330098, + 0.9490137878803078, + 0.9455032620941839, + 0.9418828150443468, + 0.9381533400219317, + 0.9343157572190957, + 0.9303710135019718, + 0.9263200821770461, + 0.9221639627510075, + 0.9179036806841352, + 0.9135402871372809, + 0.9090748587125117, + 0.9045084971874737, + 0.8998423292435453, + 0.8950775061878451, + 0.8902152036691648, + 0.8852566213878946, + 0.8802029828000155, + 0.8750555348152298, + 0.8698155474893048, + 0.8644843137107058, + 0.8590631488815944, + 0.8535533905932737, + 0.8479563982961571, + 0.8422735529643444, + 0.8365062567548867, + 0.8306559326618259, + 0.8247240241650918, + 0.8187119948743449, + 0.8126213281678527, + 0.8064535268264883, + 0.8002101126629421, + 0.7938926261462367, + 0.7875026260216393, + 0.7810416889260654, + 0.7745114089990659, + 0.7679133974894983, + 0.7612492823579744, + 0.7545207078751857, + 0.7477293342162038, + 0.7408768370508576, + 0.7339649071302867, + 0.7269952498697734, + 0.7199695849279575, + 0.7128896457825363, + 0.7057571793025544, + 0.6985739453173903, + 0.6913417161825449, + 0.6840622763423391, + 0.6767374218896286, + 0.6693689601226458, + 0.6619587090990747, + 0.6545084971874737, + 0.647020162616152, + 0.6394955530196147, + 0.6319365249826864, + 0.6243449435824273, + 0.6167226819279528, + 0.6090716206982714, + 0.6013936476782563, + 0.5936906572928624, + 0.5859645501397047, + 0.5782172325201155, + 0.5704506159687914, + 0.5626666167821522, + 0.5548671555455227, + 0.5470541566592572, + 0.5392295478639225, + 0.5313952597646567, + 0.5235532253548213, + 0.5157053795390641, + 0.5078536586559104, + 0.5, + 0.49214634134408974, + 0.48429462046093585, + 0.4764467746451787, + 0.4686047402353433, + 0.4607704521360776, + 0.45294584334074284, + 0.44513284445447737, + 0.4373333832178479, + 0.4295493840312088, + 0.4217827674798846, + 0.41403544986029517, + 0.4063093427071377, + 0.3986063523217438, + 0.39092837930172886, + 0.38327731807204724, + 0.3756550564175726, + 0.36806347501731357, + 0.3605044469803854, + 0.3529798373838481, + 0.34549150281252644, + 0.3380412909009253, + 0.3306310398773543, + 0.3232625781103715, + 0.31593772365766115, + 0.30865828381745525, + 0.30142605468260963, + 0.2942428206974456, + 0.28711035421746367, + 0.2800304150720424, + 0.2730047501302266, + 0.2660350928697134, + 0.2591231629491423, + 0.2522706657837962, + 0.24547929212481434, + 0.2387507176420256, + 0.23208660251050156, + 0.22548859100093405, + 0.21895831107393465, + 0.21249737397836072, + 0.2061073738537635, + 0.19978988733705805, + 0.1935464731735117, + 0.1873786718321474, + 0.18128800512565513, + 0.17527597583490823, + 0.16934406733817414, + 0.1634937432451133, + 0.15772644703565564, + 0.15204360170384285, + 0.14644660940672627, + 0.14093685111840565, + 0.13551568628929433, + 0.1301844525106951, + 0.1249444651847702, + 0.11979701719998453, + 0.11474337861210543, + 0.10978479633083521, + 0.1049224938121548, + 0.10015767075645471, + 0.09549150281252633, + 0.09092514128748835, + 0.08645971286271914, + 0.08209631931586497, + 0.07783603724899257, + 0.07367991782295402, + 0.06962898649802812, + 0.06568424278090434, + 0.06184665997806821, + 0.05811718495565327, + 0.054496737905816106, + 0.05098621211969223, + 0.04758647376699032, + 0.044298361682277465, + 0.04112268715800954, + 0.03806023374435674, + 0.035111757055874326, + 0.03227798458506631, + 0.029559615522887273, + 0.02695732058622735, + 0.024471741852423234, + 0.02210349260083494, + 0.019853157161528523, + 0.017721290771101017, + 0.015708419435684517, + 0.013815039801161721, + 0.012041619030626338, + 0.01038859468911707, + 0.00885637463565564, + 0.007445336922613066, + 0.00615582970243117, + 0.0049881711417212315, + 0.0039426493427611176, + 0.003019522272410202, + 0.002219017698460002, + 0.001541333133436018, + 0.0009866357858642205, + 0.0005550625190150482, + 0.0002467198171342, + 6.168375916970614e-05}; + Value window = rewriter.create( + loc, DenseFPElementsAttr::get(RankedTensorType::get(400, f64Ty), + ArrayRef(hanningWindow400))); + return window; +} + +// Implement numpy reflect padding, low for left padding length, high for right +// padding length +Value padReflect(PatternRewriter &rewriter, Location loc, Value c0, Value c1, + Value input, int64_t low, int64_t high) { + Value lowPadLen = rewriter.create(loc, low); + Value highPadLen = rewriter.create(loc, high); + SmallVector lowValues; + SmallVector highValues; + lowValues.push_back(lowPadLen); + highValues.push_back(c0); + + FloatType f64Ty = rewriter.getF64Type(); + IndexType idxTy = rewriter.getIndexType(); + // Pad left part(low) for input tensor + int64_t inputSize = + llvm::cast(input.getType()).getShape()[0]; + int64_t lowPaddedSize = inputSize + low; + auto padOp1 = rewriter.create( + loc, RankedTensorType::get(lowPaddedSize, f64Ty), input, lowValues, + highValues); + + Region *padOpRegion1 = &padOp1.getRegion(); + int64_t sourceRank1 = llvm::cast(input.getType()).getRank(); + SmallVector blockArgTypes1(sourceRank1, idxTy); + SmallVector blockArgLocs1(sourceRank1, loc); + + // Create Block for padOp1 and insert operations + OpBuilder::InsertPoint ip1(rewriter.saveInsertionPoint()); + rewriter.createBlock(padOpRegion1, padOpRegion1->end(), blockArgTypes1, + blockArgLocs1); + Value iv1 = padOp1.getRegion().front().getArgument(0); + Value idx1 = rewriter.create(loc, lowPadLen, iv1); + Value elem1 = rewriter.create(loc, input, idx1); + rewriter.create(loc, elem1); + rewriter.restoreInsertionPoint(ip1); + lowValues.clear(); + highValues.clear(); + + Value lowPaddedInput = padOp1.getResult(); + + // Pad right part(high) for lowPaddedInput tensor + lowValues.push_back(c0); + highValues.push_back(highPadLen); + int64_t highPaddedSize = lowPaddedSize + high; + Value lowPaddedInputDim = + rewriter.create(loc, lowPaddedInput, c0); + Value symIndex = rewriter.create(loc, lowPaddedInputDim, c1); + auto padOp2 = rewriter.create( + loc, RankedTensorType::get(highPaddedSize, f64Ty), lowPaddedInput, + lowValues, highValues); + Region *padOpRegion2 = &padOp2.getRegion(); + int64_t sourceRank2 = + llvm::cast(lowPaddedInput.getType()).getRank(); + SmallVector blockArgTypes2(sourceRank2, idxTy); + SmallVector blockArgLocs2(sourceRank2, loc); + + OpBuilder::InsertPoint ip2(rewriter.saveInsertionPoint()); + rewriter.createBlock(padOpRegion2, padOpRegion2->end(), blockArgTypes2, + blockArgLocs2); + Value iv2 = padOp2.getRegion().front().getArgument(0); + Value sub = rewriter.create(loc, iv2, symIndex); + Value idx2 = rewriter.create(loc, symIndex, sub); + Value elem2 = rewriter.create(loc, lowPaddedInput, idx2); + rewriter.create(loc, elem2); + rewriter.restoreInsertionPoint(ip2); + lowValues.clear(); + highValues.clear(); + + return padOp2.getResult(); +} + +inline Value WA(OpBuilder &builder, Location loc, Value wa, Value x, Value i, + Value ido, Value c1) { + Value idom1 = builder.create(loc, ido, c1); + Value tmp1 = builder.create(loc, x, idom1); + Value index = builder.create(loc, tmp1, i); + return builder.create(loc, wa, index); +} + +inline Value CC(OpBuilder &builder, Location loc, Value cc, Value a, Value b, + Value c, Value ido, Value l1) { + Value tmp1 = builder.create(loc, l1, c); + Value tmp2 = builder.create(loc, tmp1, b); + Value tmp3 = builder.create(loc, tmp2, ido); + Value index = builder.create(loc, tmp3, a); + return builder.create(loc, cc, index); +} + +inline void CH(OpBuilder &builder, Location loc, Value ch, Value a, Value b, + Value c, Value ido, Value cdim, Value toWrite) { + Value tmp1 = builder.create(loc, cdim, c); + Value tmp2 = builder.create(loc, tmp1, b); + Value tmp3 = builder.create(loc, tmp2, ido); + Value index = builder.create(loc, tmp3, a); + builder.create(loc, toWrite, ch, index); + return; +} + +inline std::vector PM(OpBuilder &builder, Location loc, Value c, + Value d) { + return {builder.create(loc, c, d), + builder.create(loc, c, d)}; +} + +inline std::vector MULPM(OpBuilder &builder, Location loc, Value c, + Value d, Value e, Value f) { + Value tmp1 = builder.create(loc, c, e); + Value tmp2 = builder.create(loc, d, f); + Value tmp3 = builder.create(loc, c, f); + Value tmp4 = builder.create(loc, d, e); + return {builder.create(loc, tmp1, tmp2), + builder.create(loc, tmp3, tmp4)}; +} + +void radf4Extend(OpBuilder &opBuilder, Location loc, Value cc, Value ch, + Value wa, Value ido, Value l1, Value cdim, Value c0, Value c1, + Value c2, Value c3) { + opBuilder.create( + loc, c0, l1, c1, std::nullopt, + [&](OpBuilder &builder, Location loc, Value k, ValueRange kargs) { + builder.create( + loc, c2, ido, c2, std::nullopt, + [&](OpBuilder &b, Location loc, Value i, ValueRange iargs) { + Value ic = b.create(loc, ido, i); + Value icm1 = b.create(loc, ic, c1); + Value im1 = b.create(loc, i, c1); + Value im2 = b.create(loc, i, c2); + + Value wa0im2 = WA(b, loc, wa, c0, im2, ido, c1); + Value wa0im1 = WA(b, loc, wa, c0, im1, ido, c1); + Value ccim1k1 = CC(b, loc, cc, im1, k, c1, ido, l1); + Value ccik1 = CC(b, loc, cc, i, k, c1, ido, l1); + std::vector cr2_ci2 = + MULPM(b, loc, wa0im2, wa0im1, ccim1k1, ccik1); + + Value wa1im2 = WA(b, loc, wa, c1, im2, ido, c1); + Value wa1im1 = WA(b, loc, wa, c1, im1, ido, c1); + Value ccim1k2 = CC(b, loc, cc, im1, k, c2, ido, l1); + Value ccik2 = CC(b, loc, cc, i, k, c2, ido, l1); + std::vector cr3_ci3 = + MULPM(b, loc, wa1im2, wa1im1, ccim1k2, ccik2); + + Value wa2im2 = WA(b, loc, wa, c2, im2, ido, c1); + Value wa2im1 = WA(b, loc, wa, c2, im1, ido, c1); + Value ccim1k3 = CC(b, loc, cc, im1, k, c3, ido, l1); + Value ccik3 = CC(b, loc, cc, i, k, c3, ido, l1); + std::vector cr4_ci4 = + MULPM(b, loc, wa2im2, wa2im1, ccim1k3, ccik3); + + std::vector tr1_tr4 = PM(b, loc, cr4_ci4[0], cr2_ci2[0]); + std::vector ti1_ti4 = PM(b, loc, cr2_ci2[1], cr4_ci4[1]); + Value ccim1k0 = CC(b, loc, cc, im1, k, c0, ido, l1); + std::vector tr2_tr3 = PM(b, loc, ccim1k0, cr3_ci3[0]); + Value ccik0 = CC(b, loc, cc, i, k, c0, ido, l1); + std::vector ti2_ti3 = PM(b, loc, ccik0, cr3_ci3[1]); + + std::vector chtmp0 = PM(b, loc, tr2_tr3[0], tr1_tr4[0]); + CH(b, loc, ch, im1, c0, k, ido, cdim, chtmp0[0]); + CH(b, loc, ch, icm1, c3, k, ido, cdim, chtmp0[1]); + + std::vector chtmp1 = PM(b, loc, ti1_ti4[0], ti2_ti3[0]); + CH(b, loc, ch, i, c0, k, ido, cdim, chtmp1[0]); + CH(b, loc, ch, ic, c3, k, ido, cdim, chtmp1[1]); + + std::vector chtmp2 = PM(b, loc, tr2_tr3[1], ti1_ti4[1]); + CH(b, loc, ch, im1, c2, k, ido, cdim, chtmp2[0]); + CH(b, loc, ch, icm1, c1, k, ido, cdim, chtmp2[1]); + + std::vector chtmp3 = PM(b, loc, tr1_tr4[1], ti2_ti3[1]); + CH(b, loc, ch, i, c2, k, ido, cdim, chtmp3[0]); + CH(b, loc, ch, ic, c1, k, ido, cdim, chtmp3[1]); + + b.create(loc, std::nullopt); + }); + + builder.create(loc, std::nullopt); + }); + + return; +} + +void radf4(OpBuilder &opBuilder, Location loc, Value cc, Value ch, Value wa, + Value ido, Value l1, Value c0, Value c1, Value c2, Value c3) { + FloatType f64Ty = opBuilder.getF64Type(); + Value cdim = opBuilder.create(loc, 4); + Value hsqt2 = opBuilder.create( + loc, APFloat(double(0.70710678118654752440)), f64Ty); + Value idom1 = opBuilder.create(loc, ido, c1); + + opBuilder.create( + loc, c0, l1, c1, std::nullopt, + [&](OpBuilder &builder, Location loc, Value iv, ValueRange iargs) { + Value cc0k3 = CC(builder, loc, cc, c0, iv, c3, ido, l1); + Value cc0k1 = CC(builder, loc, cc, c0, iv, c1, ido, l1); + std::vector tr1_tmp0 = PM(builder, loc, cc0k3, cc0k1); + CH(builder, loc, ch, c0, c2, iv, ido, cdim, tr1_tmp0[1]); + + Value cc0k0 = CC(builder, loc, cc, c0, iv, c0, ido, l1); + Value cc0k2 = CC(builder, loc, cc, c0, iv, c2, ido, l1); + std::vector tr2_tmp1 = PM(builder, loc, cc0k0, cc0k2); + CH(builder, loc, ch, idom1, c1, iv, ido, cdim, tr2_tmp1[1]); + + std::vector tmp2_tmp3 = + PM(builder, loc, tr2_tmp1[0], tr1_tmp0[0]); + CH(builder, loc, ch, c0, c0, iv, ido, cdim, tmp2_tmp3[0]); + CH(builder, loc, ch, idom1, c3, iv, ido, cdim, tmp2_tmp3[1]); + + builder.create(loc, std::nullopt); + }); + + Value reminder = opBuilder.create(loc, ido, c2); + Value condition0 = opBuilder.create( + loc, arith::CmpIPredicate::eq, reminder, c0); + opBuilder.create( + loc, condition0, [&](OpBuilder &builder, Location loc) { + Value negHsqt2 = builder.create( + loc, APFloat(double(-0.70710678118654752440)), f64Ty); + + builder.create( + loc, c0, l1, c1, std::nullopt, + [&](OpBuilder &b, Location loc, Value iv, ValueRange iargs) { + Value ccidom1k1 = CC(b, loc, cc, idom1, iv, c1, ido, l1); + Value ccidom1k3 = CC(b, loc, cc, idom1, iv, c3, ido, l1); + Value tmp0 = b.create(loc, ccidom1k1, ccidom1k3); + Value ti1 = b.create(loc, negHsqt2, tmp0); + + Value tmp1 = b.create(loc, ccidom1k1, ccidom1k3); + Value tr1 = b.create(loc, hsqt2, tmp1); + + Value ccidom1k0 = CC(b, loc, cc, idom1, iv, c0, ido, l1); + std::vector tmp2_tmp3 = PM(b, loc, ccidom1k0, tr1); + CH(b, loc, ch, idom1, c0, iv, ido, cdim, tmp2_tmp3[0]); + CH(b, loc, ch, idom1, c2, iv, ido, cdim, tmp2_tmp3[1]); + + Value ccidom1k2 = CC(b, loc, cc, idom1, iv, c2, ido, l1); + std::vector tmp4_tmp5 = PM(b, loc, ti1, ccidom1k2); + CH(b, loc, ch, c0, c3, iv, ido, cdim, tmp4_tmp5[0]); + CH(b, loc, ch, c0, c1, iv, ido, cdim, tmp4_tmp5[1]); + + b.create(loc, std::nullopt); + }); + + builder.create(loc, std::nullopt); + }); + + Value condition1 = + opBuilder.create(loc, arith::CmpIPredicate::sgt, ido, c2); + opBuilder.create( + loc, condition1, [&](OpBuilder &builder, Location loc) { + radf4Extend(builder, loc, cc, ch, wa, ido, l1, cdim, c0, c1, c2, c3); + builder.create(loc, std::nullopt); + }); + + return; +} + +void radf5Extend(OpBuilder &opBuilder, Location loc, Value cc, Value ch, + Value wa, Value ido, Value l1, Value cdim, Value tr11, + Value tr12, Value ti11, Value ti12, Value c0, Value c1, + Value c2, Value c3, Value c4) { + opBuilder.create( + loc, c0, l1, c1, std::nullopt, + [&](OpBuilder &builder, Location loc, Value k, ValueRange kargs) { + builder.create( + loc, c2, ido, c2, std::nullopt, + [&](OpBuilder &b, Location loc, Value i, ValueRange iargs) { + Value ic = b.create(loc, ido, i); + Value icm1 = b.create(loc, ic, c1); + Value im1 = b.create(loc, i, c1); + Value im2 = b.create(loc, i, c2); + + Value wa0im2 = WA(b, loc, wa, c0, im2, ido, c1); + Value wa0im1 = WA(b, loc, wa, c0, im1, ido, c1); + Value ccim1k1 = CC(b, loc, cc, im1, k, c1, ido, l1); + Value ccik1 = CC(b, loc, cc, i, k, c1, ido, l1); + std::vector dr2_di2 = + MULPM(b, loc, wa0im2, wa0im1, ccim1k1, ccik1); + + Value wa1im2 = WA(b, loc, wa, c1, im2, ido, c1); + Value wa1im1 = WA(b, loc, wa, c1, im1, ido, c1); + Value ccim1k2 = CC(b, loc, cc, im1, k, c2, ido, l1); + Value ccik2 = CC(b, loc, cc, i, k, c2, ido, l1); + std::vector dr3_di3 = + MULPM(b, loc, wa1im2, wa1im1, ccim1k2, ccik2); + + Value wa2im2 = WA(b, loc, wa, c2, im2, ido, c1); + Value wa2im1 = WA(b, loc, wa, c2, im1, ido, c1); + Value ccim1k3 = CC(b, loc, cc, im1, k, c3, ido, l1); + Value ccik3 = CC(b, loc, cc, i, k, c3, ido, l1); + std::vector dr4_di4 = + MULPM(b, loc, wa2im2, wa2im1, ccim1k3, ccik3); + + Value wa3im2 = WA(b, loc, wa, c3, im2, ido, c1); + Value wa3im1 = WA(b, loc, wa, c3, im1, ido, c1); + Value ccim1k4 = CC(b, loc, cc, im1, k, c4, ido, l1); + Value ccik4 = CC(b, loc, cc, i, k, c4, ido, l1); + std::vector dr5_di5 = + MULPM(b, loc, wa3im2, wa3im1, ccim1k4, ccik4); + + std::vector cr2_ci5 = PM(b, loc, dr5_di5[0], dr2_di2[0]); + std::vector ci2_cr5 = PM(b, loc, dr2_di2[1], dr5_di5[1]); + std::vector cr3_ci4 = PM(b, loc, dr4_di4[0], dr3_di3[0]); + std::vector ci3_cr4 = PM(b, loc, dr3_di3[1], dr4_di4[1]); + + Value ccim1k0 = CC(b, loc, cc, im1, k, c0, ido, l1); + Value tmpch0 = b.create(loc, ccim1k0, cr2_ci5[0]); + Value chim10k = b.create(loc, tmpch0, cr3_ci4[0]); + CH(b, loc, ch, im1, c0, k, ido, cdim, chim10k); + + Value ccik0 = CC(b, loc, cc, i, k, c0, ido, l1); + Value tmpch1 = b.create(loc, ccik0, ci2_cr5[0]); + Value chi0k = b.create(loc, tmpch1, ci3_cr4[0]); + CH(b, loc, ch, i, c0, k, ido, cdim, chi0k); + + Value tmp0 = b.create(loc, tr11, cr2_ci5[0]); + Value tmp1 = b.create(loc, ccim1k0, tmp0); + Value tmp2 = b.create(loc, tr12, cr3_ci4[0]); + Value tr2 = b.create(loc, tmp1, tmp2); + + Value tmp3 = b.create(loc, tr11, ci2_cr5[0]); + Value tmp4 = b.create(loc, ccik0, tmp3); + Value tmp5 = b.create(loc, tr12, ci3_cr4[0]); + Value ti2 = b.create(loc, tmp4, tmp5); + + Value tmp6 = b.create(loc, tr12, cr2_ci5[0]); + Value tmp7 = b.create(loc, ccim1k0, tmp6); + Value tmp8 = b.create(loc, tr11, cr3_ci4[0]); + Value tr3 = b.create(loc, tmp7, tmp8); + + Value tmp9 = b.create(loc, tr12, ci2_cr5[0]); + Value tmp10 = b.create(loc, ccik0, tmp9); + Value tmp11 = b.create(loc, tr11, ci3_cr4[0]); + Value ti3 = b.create(loc, tmp10, tmp11); + + std::vector tr5_tr4 = + MULPM(b, loc, ci2_cr5[1], ci3_cr4[1], ti11, ti12); + std::vector ti5_ti4 = + MULPM(b, loc, cr2_ci5[1], cr3_ci4[1], ti11, ti12); + + std::vector chtmp0 = PM(b, loc, tr2, tr5_tr4[0]); + CH(b, loc, ch, im1, c2, k, ido, cdim, chtmp0[0]); + CH(b, loc, ch, icm1, c1, k, ido, cdim, chtmp0[1]); + + std::vector chtmp1 = PM(b, loc, ti5_ti4[0], ti2); + CH(b, loc, ch, i, c2, k, ido, cdim, chtmp1[0]); + CH(b, loc, ch, ic, c1, k, ido, cdim, chtmp1[1]); + + std::vector chtmp2 = PM(b, loc, tr3, tr5_tr4[1]); + CH(b, loc, ch, im1, c4, k, ido, cdim, chtmp2[0]); + CH(b, loc, ch, icm1, c3, k, ido, cdim, chtmp2[1]); + + std::vector chtmp3 = PM(b, loc, ti5_ti4[1], ti3); + CH(b, loc, ch, i, c4, k, ido, cdim, chtmp3[0]); + CH(b, loc, ch, ic, c3, k, ido, cdim, chtmp3[1]); + + b.create(loc, std::nullopt); + }); + + builder.create(loc, std::nullopt); + }); + + return; +} + +void radf5(OpBuilder &builder, Location loc, Value cc, Value ch, Value wa, + Value ido, Value l1, Value c0, Value c1, Value c2, Value c3, + Value c4) { + FloatType f64Ty = builder.getF64Type(); + Value cdim = builder.create(loc, 5); + Value tr11 = builder.create( + loc, APFloat(double(0.3090169943749474241)), f64Ty); + Value tr12 = builder.create( + loc, APFloat(double(-0.8090169943749474241)), f64Ty); + Value ti11 = builder.create( + loc, APFloat(double(0.95105651629515357212)), f64Ty); + Value ti12 = builder.create( + loc, APFloat(double(0.58778525229247312917)), f64Ty); + Value idom1 = builder.create(loc, ido, c1); + + builder.create( + loc, c0, l1, c1, std::nullopt, + [&](OpBuilder &b, Location loc, Value iv, ValueRange iargs) { + Value cc0k4 = CC(b, loc, cc, c0, iv, c4, ido, l1); + Value cc0k1 = CC(b, loc, cc, c0, iv, c1, ido, l1); + std::vector cr2_ci5 = PM(b, loc, cc0k4, cc0k1); + + Value cc0k3 = CC(b, loc, cc, c0, iv, c3, ido, l1); + Value cc0k2 = CC(b, loc, cc, c0, iv, c2, ido, l1); + std::vector cr3_ci4 = PM(b, loc, cc0k3, cc0k2); + + Value cc0k0 = CC(b, loc, cc, c0, iv, c0, ido, l1); + Value tmpch0 = b.create(loc, cc0k0, cr2_ci5[0]); + Value ch0 = b.create(loc, tmpch0, cr3_ci4[0]); + CH(b, loc, ch, c0, c0, iv, ido, cdim, ch0); + + Value tmpch1 = b.create(loc, tr11, cr2_ci5[0]); + Value tmpch2 = b.create(loc, tr12, cr3_ci4[0]); + Value tmpch3 = b.create(loc, cc0k0, tmpch1); + Value ch1 = b.create(loc, tmpch2, tmpch3); + CH(b, loc, ch, idom1, c1, iv, ido, cdim, ch1); + + Value tmpch4 = b.create(loc, ti11, cr2_ci5[1]); + Value tmpch5 = b.create(loc, ti12, cr3_ci4[1]); + Value ch2 = b.create(loc, tmpch4, tmpch5); + CH(b, loc, ch, c0, c2, iv, ido, cdim, ch2); + + Value tmpch6 = b.create(loc, tr12, cr2_ci5[0]); + Value tmpch7 = b.create(loc, tr11, cr3_ci4[0]); + Value tmpch8 = b.create(loc, tmpch6, tmpch7); + Value ch3 = b.create(loc, cc0k0, tmpch8); + CH(b, loc, ch, idom1, c3, iv, ido, cdim, ch3); + + Value tmpch9 = b.create(loc, ti12, cr2_ci5[1]); + Value tmpch10 = b.create(loc, ti11, cr3_ci4[1]); + Value ch4 = b.create(loc, tmpch9, tmpch10); + CH(b, loc, ch, c0, c4, iv, ido, cdim, ch4); + + b.create(loc, std::nullopt); + }); + + Value condition = + builder.create(loc, arith::CmpIPredicate::ne, ido, c1); + builder.create(loc, condition, [&](OpBuilder &b, Location loc) { + radf5Extend(b, loc, cc, ch, wa, ido, l1, cdim, tr11, tr12, ti11, ti12, c0, + c1, c2, c3, c4); + b.create(loc, std::nullopt); + }); + + return; +} + +// Calculate abspower of bufferMem and store result to a specific line in the +// resultMem +void absPower(OpBuilder &builder, Location loc, Value bufferMem, + Value resultMem, Value idx, Value c0, Value c1, Value c2) { + Value c200 = builder.create(loc, 200); + Value c398 = builder.create(loc, 398); + Value c399 = builder.create(loc, 399); + Value power = builder.create(loc, 2); + + Value firstNum = builder.create(loc, bufferMem, c0); + Value firstPow = builder.create(loc, firstNum, power); + builder.create(loc, firstPow, resultMem, + ValueRange{idx, c0}); + + Value lastNum = builder.create(loc, bufferMem, c399); + Value lastPow = builder.create(loc, lastNum, power); + builder.create(loc, lastPow, resultMem, + ValueRange{idx, c200}); + + builder.create( + loc, c1, c398, c2, ValueRange{c1}, + [&](OpBuilder &b, Location loc, Value iv, ValueRange iargs) { + Value j = b.create(loc, iv, c1); + Value num1 = b.create(loc, bufferMem, iv); + Value num2 = b.create(loc, bufferMem, j); + Value pow1 = b.create(loc, num1, power); + Value pow2 = b.create(loc, num2, power); + Value add = b.create(loc, pow1, pow2); + b.create(loc, add, resultMem, + ValueRange{idx, iargs[0]}); + + Value indexNext = b.create(loc, iargs[0], c1); + + b.create(loc, indexNext); + }); + + return; +} + +// Compute Log Mel Spectrogram +Value spectrogram(PatternRewriter &rewriter, Location loc, Value f0, Value c0, + Value c1, Value c2, Value c3, Value c4, Value c5, Value input, + Value window, Value melFilters) { + FloatType f64Ty = rewriter.getF64Type(); + + Value numFrames = rewriter.create(loc, 3001); + Value hopLength = rewriter.create(loc, 160); + Value c400 = rewriter.create(loc, 400); + + MemRefType spectrogramTy = MemRefType::get({3001, 201}, f64Ty); + Value spectrogram = rewriter.create(loc, spectrogramTy); + + RankedTensorType tensorTy0 = RankedTensorType::get({400}, f64Ty); + MemRefType mTp = MemRefType::get({400}, f64Ty); + + // #mulf_trait for 'linalg.generic' operation. + AffineMap mulFIdMap = + AffineMap::getMultiDimIdentityMap(1, rewriter.getContext()); + SmallVector mulFIndexingMaps = {mulFIdMap, mulFIdMap, mulFIdMap}; + SmallVector mulFIteratorTypes = { + utils::IteratorType::parallel}; + + rewriter.create( + loc, c0, numFrames, c1, ValueRange{c0}, + [&](OpBuilder &builder, Location loc, Value iv, ValueRange iargs) { + auto extractSliceOp = rewriter.create( + loc, input, iargs[0], c400, c1); + Value buffer400 = extractSliceOp.getResult(); + Value buffer = + rewriter.create(loc, tensorTy0, buffer400); + + // 'linalg.generic' operation use #mulf_trait. + auto mulfOp = rewriter.create( + loc, /*resultTensorTypes=*/tensorTy0, + /*inputs=*/ValueRange{buffer, window}, + /*outputs=*/ValueRange{buffer}, mulFIndexingMaps, mulFIteratorTypes, + [&](OpBuilder &b, Location loc, ValueRange args) { + Value elem = b.create(loc, args[0], args[1]); + b.create(loc, elem); + }); + Value multiplied = mulfOp.getResult(0); + + Value bufferMem = + builder.create(loc, mTp, multiplied); + + // Compute 'dap.rfft400' operation, result stores in `bufferMem`. + builder.create(loc, bufferMem); + + // Store the result in a single line specified by `iv`. + absPower(builder, loc, bufferMem, spectrogram, iv, c0, c1, c2); + + Value timestepNext = + builder.create(loc, iargs[0], hopLength); + + builder.create(loc, timestepNext); + }); + + // TODO: check alloc and dealloc + // MemRefType melFiltersTransposeTy = MemRefType::get({80, 201}, f64Ty); + // Value alloc0 = rewriter.create(loc, + // melFiltersTransposeTy); Value init0 = + // rewriter.create(loc, alloc0); + Value init0 = + rewriter.create(loc, ArrayRef{80, 201}, f64Ty); + auto transposeOp0 = rewriter.create( + loc, /*input=*/melFilters, + /*init=*/init0, + /*permutation=*/ArrayRef{1, 0}); + Value melFiltersT = transposeOp0.getResult()[0]; + + Value gram = rewriter.create( + loc, spectrogram, /*restrict=*/true, /*writable=*/false); + Value init1 = rewriter.create( + loc, ArrayRef{201, 3001}, f64Ty); + auto transposeOp1 = rewriter.create( + loc, /*input=*/gram, + /*init=*/init1, + /*permutation=*/ArrayRef{1, 0}); + Value spectrogramT = transposeOp1.getResult()[0]; + + rewriter.create(loc, spectrogram); + + Value init2 = + rewriter.create(loc, ArrayRef{80, 3001}, f64Ty); + auto matmulOp = rewriter.create( + loc, /*inputs=*/ValueRange{melFiltersT, spectrogramT}, + /*outputs=*/ValueRange{init2}); + Value matMulResult = matmulOp.getResultTensors()[0]; + + // Initialize a tensor with constant `1e-10`. + RankedTensorType tensorTy1 = RankedTensorType::get({80, 3001}, f64Ty); + Value cMelFloor = rewriter.create( + loc, APFloat(double(0.0000000001)), f64Ty); + Value melFloor = rewriter.create(loc, tensorTy1, cMelFloor); + + auto linalgMaxOp = rewriter.create( + loc, /*input=*/ValueRange{melFloor, matMulResult}, + /*outputs=*/ValueRange{melFloor}); + Value spectrogramMax = linalgMaxOp.getResultTensors()[0]; + + // #log10_trait for 'linalg.generic' operation. + AffineMap log10IdMap = + AffineMap::getMultiDimIdentityMap(2, rewriter.getContext()); + SmallVector log10IndexingMaps = {log10IdMap, log10IdMap}; + SmallVector log10IteratorTypes = { + utils::IteratorType::parallel, utils::IteratorType::parallel}; + + // 'linalg.generic' operation use #log10_trait. + auto log10Op = rewriter.create( + loc, /*resultTensorTypes=*/tensorTy1, + /*inputs=*/ValueRange{spectrogramMax}, + /*outputs=*/ValueRange{spectrogramMax}, log10IndexingMaps, + log10IteratorTypes, [&](OpBuilder &b, Location loc, ValueRange args) { + Value elem = b.create(loc, args[0]); + b.create(loc, elem); + }); + Value spectrogramLog10 = log10Op.getResult(0); + + return spectrogramLog10; +} + +namespace { +class DAPRFFT400Lowering : public OpRewritePattern { +public: + using OpRewritePattern::OpRewritePattern; + + explicit DAPRFFT400Lowering(MLIRContext *context) + : OpRewritePattern(context) {} + + LogicalResult matchAndRewrite(dap::RFFT400Op op, + PatternRewriter &rewriter) const override { + auto loc = op->getLoc(); + auto ctx = op->getContext(); + Value bufferMem = op->getOperand(0); + + Value c0 = rewriter.create(loc, 0); + Value c1 = rewriter.create(loc, 1); + Value c2 = rewriter.create(loc, 2); + Value c3 = rewriter.create(loc, 3); + Value c4 = rewriter.create(loc, 4); + Value c5 = rewriter.create(loc, 5); + + FloatType f64Ty = rewriter.getF64Type(); + Value f0 = + rewriter.create(loc, APFloat(double(0.0)), f64Ty); + int64_t inputLength = 400; + + // Generate ch MemRef + RankedTensorType tensorTy = RankedTensorType::get({inputLength}, f64Ty); + MemRefType m25Ty = MemRefType::get({inputLength}, f64Ty); + Value chTensor = rewriter.create(loc, tensorTy, f0); + Value ch = rewriter.create(loc, m25Ty, chTensor); + + // Generate wa MemRefs + std::vector tw0Vec{ + 0.999877, 0.015707, 0.999507, 0.031411, 0.998890, 0.047106, + 0.998027, 0.062791, 0.996917, 0.078459, 0.995562, 0.094108, + 0.993961, 0.109734, 0.992115, 0.125333, 0.990024, 0.140901, + 0.987688, 0.156434, 0.985109, 0.171929, 0.982287, 0.187381, + 0.979223, 0.202787, 0.975917, 0.218143, 0.972370, 0.233445, + 0.968583, 0.248690, 0.964557, 0.263873, 0.960294, 0.278991, + 0.955793, 0.294040, 0.951057, 0.309017, 0.946085, 0.323917, + 0.940881, 0.338738, 0.935444, 0.353475, 0.929776, 0.368125, + 0.923880, 0.382683, 0.917755, 0.397148, 0.911403, 0.411514, + 0.904827, 0.425779, 0.898028, 0.439939, 0.891007, 0.453990, + 0.883766, 0.467930, 0.876307, 0.481754, 0.868632, 0.495459, + 0.860742, 0.509041, 0.852640, 0.522499, 0.844328, 0.535827, + 0.835807, 0.549023, 0.827081, 0.562083, 0.818150, 0.575005, + 0.809017, 0.587785, 0.799685, 0.600420, 0.790155, 0.612907, + 0.780430, 0.625243, 0.770513, 0.637424, 0.760406, 0.649448, + 0.750111, 0.661312, 0.739631, 0.673013, 0.728969, 0.684547, + 0.718126, 0.695913, 0.000000, 0.999507, 0.031411, 0.998027, + 0.062791, 0.995562, 0.094108, 0.992115, 0.125333, 0.987688, + 0.156434, 0.982287, 0.187381, 0.975917, 0.218143, 0.968583, + 0.248690, 0.960294, 0.278991, 0.951057, 0.309017, 0.940881, + 0.338738, 0.929776, 0.368125, 0.917755, 0.397148, 0.904827, + 0.425779, 0.891007, 0.453990, 0.876307, 0.481754, 0.860742, + 0.509041, 0.844328, 0.535827, 0.827081, 0.562083, 0.809017, + 0.587785, 0.790155, 0.612907, 0.770513, 0.637424, 0.750111, + 0.661312, 0.728969, 0.684547, 0.707107, 0.707107, 0.684547, + 0.728969, 0.661312, 0.750111, 0.637424, 0.770513, 0.612907, + 0.790155, 0.587785, 0.809017, 0.562083, 0.827081, 0.535827, + 0.844328, 0.509041, 0.860742, 0.481754, 0.876307, 0.453990, + 0.891007, 0.425779, 0.904827, 0.397148, 0.917755, 0.368125, + 0.929776, 0.338738, 0.940881, 0.309017, 0.951057, 0.278991, + 0.960294, 0.248690, 0.968583, 0.218143, 0.975917, 0.187381, + 0.982287, 0.156434, 0.987688, 0.125333, 0.992115, 0.094108, + 0.995562, 0.062791, 0.998027, 0.031411, 0.999507, 0.000000, + 0.998890, 0.047106, 0.995562, 0.094108, 0.990024, 0.140901, + 0.982287, 0.187381, 0.972370, 0.233445, 0.960294, 0.278991, + 0.946085, 0.323917, 0.929776, 0.368125, 0.911403, 0.411514, + 0.891007, 0.453990, 0.868632, 0.495459, 0.844328, 0.535827, + 0.818150, 0.575005, 0.790155, 0.612907, 0.760406, 0.649448, + 0.728969, 0.684547, 0.695913, 0.718126, 0.661312, 0.750111, + 0.625243, 0.780430, 0.587785, 0.809017, 0.549023, 0.835807, + 0.509041, 0.860742, 0.467930, 0.883766, 0.425779, 0.904827, + 0.382683, 0.923880, 0.338738, 0.940881, 0.294040, 0.955793, + 0.248690, 0.968583, 0.202787, 0.979223, 0.156434, 0.987688, + 0.109734, 0.993961, 0.062791, 0.998027, 0.015707, 0.999877, + -0.031411, 0.999507, -0.078459, 0.996917, -0.125333, 0.992115, + -0.171929, 0.985109, -0.218143, 0.975917, -0.263873, 0.964557, + -0.309017, 0.951057, -0.353475, 0.935444, -0.397148, 0.917755, + -0.439939, 0.898028, -0.481754, 0.876307, -0.522499, 0.852640, + -0.562083, 0.827081, -0.600420, 0.799685, -0.637424, 0.770513, + -0.673013, 0.739631, 0.000000}; + Value wa0Tensor = rewriter.create( + loc, DenseFPElementsAttr::get(RankedTensorType::get({297}, f64Ty), + ArrayRef(tw0Vec))); + Value wa0 = rewriter.create( + loc, MemRefType::get({297}, f64Ty), wa0Tensor); + + std::vector tw1Vec{ + 0.998027, 0.062791, 0.992115, 0.125333, 0.982287, 0.187381, + 0.968583, 0.248690, 0.951057, 0.309017, 0.929776, 0.368125, + 0.904827, 0.425779, 0.876307, 0.481754, 0.844328, 0.535827, + 0.809017, 0.587785, 0.770513, 0.637424, 0.728969, 0.684547, + 0.992115, 0.125333, 0.968583, 0.248690, 0.929776, 0.368125, + 0.876307, 0.481754, 0.809017, 0.587785, 0.728969, 0.684547, + 0.637424, 0.770513, 0.535827, 0.844328, 0.425779, 0.904827, + 0.309017, 0.951057, 0.187381, 0.982287, 0.062791, 0.998027, + 0.982287, 0.187381, 0.929776, 0.368125, 0.844328, 0.535827, + 0.728969, 0.684547, 0.587785, 0.809017, 0.425779, 0.904827, + 0.248690, 0.968583, 0.062791, 0.998027, -0.125333, 0.992115, + -0.309017, 0.951057, -0.481754, 0.876307, -0.637424, 0.770513}; + Value wa1Tensor = rewriter.create( + loc, DenseFPElementsAttr::get(RankedTensorType::get({72}, f64Ty), + ArrayRef(tw1Vec))); + Value wa1 = rewriter.create( + loc, MemRefType::get({72}, f64Ty), wa1Tensor); + + std::vector tw2Vec{0.968583, 0.248690, 0.876307, 0.481754, + 0.876307, 0.481754, 0.535827, 0.844328, + 0.728969, 0.684547, 0.062791, 0.998027, + 0.535827, 0.844328, -0.425779, 0.904827}; + Value wa2Tensor = rewriter.create( + loc, DenseFPElementsAttr::get(RankedTensorType::get({16}, f64Ty), + ArrayRef(tw2Vec))); + Value wa2 = rewriter.create( + loc, MemRefType::get({16}, f64Ty), wa2Tensor); + + Value c16 = rewriter.create(loc, 16); + Value c25 = rewriter.create(loc, 25); + Value c80 = rewriter.create(loc, 80); + Value c100 = rewriter.create(loc, 100); + + radf5(rewriter, loc, bufferMem, ch, wa2, c1, c80, c0, c1, c2, c3, c4); + radf5(rewriter, loc, ch, bufferMem, wa2, c5, c16, c0, c1, c2, c3, c4); + radf4(rewriter, loc, bufferMem, ch, wa1, c25, c4, c0, c1, c2, c3); + radf4(rewriter, loc, ch, bufferMem, wa0, c100, c1, c0, c1, c2, c3); + + rewriter.eraseOp(op); + return success(); + } +}; + +class DAPWhisperPreprocessLowering + : public OpRewritePattern { +public: + using OpRewritePattern::OpRewritePattern; + + explicit DAPWhisperPreprocessLowering(MLIRContext *context) + : OpRewritePattern(context) {} + + LogicalResult matchAndRewrite(dap::WhisperPreprocessOp op, + PatternRewriter &rewriter) const override { + auto loc = op->getLoc(); + auto ctx = op->getContext(); + Value input = op->getOperand(0); + + Value c0 = rewriter.create(loc, 0); + Value c1 = rewriter.create(loc, 1); + Value c2 = rewriter.create(loc, 2); + Value c3 = rewriter.create(loc, 3); + Value c4 = rewriter.create(loc, 4); + Value c5 = rewriter.create(loc, 5); + Value c80 = rewriter.create(loc, 80); + Value c3000 = rewriter.create(loc, 3000); + Value c480000 = rewriter.create(loc, 480000); + + FloatType f32 = FloatType::getF32(ctx); + FloatType f64 = FloatType::getF64(ctx); + + Value inputFeatures = rewriter.create( + loc, input, /*restrict=*/true, /*writable=*/false); + Value inputFeaturesSize = + rewriter.create(loc, inputFeatures, c0); + Value padConstantHigh = + rewriter.create(loc, c480000, inputFeaturesSize); + + // Pad inputFeatures to MaxLength = 480000 + SmallVector paddedShape; + paddedShape.push_back(480000); + + SmallVector lowValues; + SmallVector highValues; + lowValues.push_back(c0); + highValues.push_back(padConstantHigh); + + Value f0 = + rewriter.create(loc, APFloat(double(0.0)), f64); + auto padConstantOp = rewriter.create( + loc, RankedTensorType::get(paddedShape, f64), inputFeatures, lowValues, + highValues, f0); + Value paddedInput = padConstantOp.getResult(); + + // Generate melFilter with 391 numbers + Value melFilter = initMelFilter(rewriter, loc, c0, c1, f0); + + // Generate hanning window with length 400 + Value window = getHanningWindow400(rewriter, loc); + + // Reflect pad for paddedInput, both left and right part pad with length 200 + Value finalPaddedInput = + padReflect(rewriter, loc, c0, c1, paddedInput, 200, 200); + Value logSpec = spectrogram(rewriter, loc, f0, c0, c1, c2, c3, c4, c5, + finalPaddedInput, window, melFilter); + + auto extractSliceOp = rewriter.create( + loc, /*source=*/logSpec, + /*offsets=*/ValueRange{c0, c0}, + /*sizes=*/ValueRange{c80, c3000}, + /*strides=*/ValueRange{c1, c1}); + Value logSpecCut = extractSliceOp.getResult(); + + Value maxInit = + rewriter.create(loc, APFloat(double(-10.0)), f64); + auto forOp0 = rewriter.create( + loc, c0, c80, c1, maxInit, + [&](OpBuilder &builder, Location loc, Value i, ValueRange iargs0) { + auto forOp1 = builder.create( + loc, c0, c3000, c1, iargs0[0], + [&](OpBuilder &b, Location loc, Value j, ValueRange iargs1) { + Value elem = b.create(loc, logSpecCut, + ValueRange{i, j}); + Value larger = + b.create(loc, elem, iargs1[0]); + b.create(loc, larger); + }); + + Value maxNext = forOp1.getResults()[0]; + builder.create(loc, maxNext); + }); + Value maxNum = forOp0.getResults()[0]; + + Value f8 = rewriter.create(loc, APFloat(double(8.0)), f64); + Value maxNumMinus8 = rewriter.create(loc, maxNum, f8); + Value logSpecFloor = rewriter.create( + loc, RankedTensorType::get({80, 3000}, f64), maxNumMinus8); + + auto linalgMaxOp = rewriter.create( + loc, /*input=*/ValueRange{logSpecCut, logSpecFloor}, + /*outputs=*/ValueRange{logSpecFloor}); + Value logSpecMax = linalgMaxOp.getResultTensors()[0]; + + Value f0F32 = + rewriter.create(loc, APFloat(float(0.0)), f32); + Value f4 = rewriter.create(loc, APFloat(double(4.0)), f64); + RankedTensorType resultTy = RankedTensorType::get({80, 3000}, f32); + Value InputFeaturesF32 = + rewriter.create(loc, resultTy, f0F32); + + // #tail_processing_trait for 'linalg.generic' operation. + AffineMap IdMap = + AffineMap::getMultiDimIdentityMap(2, rewriter.getContext()); + SmallVector IndexingMaps = {IdMap, IdMap}; + SmallVector IteratorTypes = { + utils::IteratorType::parallel, utils::IteratorType::parallel}; + + // 'linalg.generic' operation use #tail_processing_trait. + auto tailProcessOp = rewriter.create( + loc, /*resultTensorTypes=*/resultTy, + /*inputs=*/ValueRange{logSpecMax}, + /*outputs=*/ValueRange{InputFeaturesF32}, IndexingMaps, IteratorTypes, + [&](OpBuilder &b, Location loc, ValueRange args) { + Value add4 = b.create(loc, args[0], f4); + Value div4 = b.create(loc, add4, f4); + Value elem = b.create(loc, f32, div4); + b.create(loc, elem); + }); + Value result = tailProcessOp.getResult(0); + + // Compute reassociation indices [[0, 1], 2] + SmallVector> reassociationIndices( + resultTy.getRank()); + int64_t index = 0; + for (index = 0; index <= 1; index++) { + reassociationIndices[0].push_back(index); + } + reassociationIndices[1].push_back(index); + + RankedTensorType expandTy = RankedTensorType::get({1, 80, 3000}, f32); + + Value resultExpand = rewriter.create( + loc, /*resultType=*/expandTy, /*src=*/result, + /*reassociation=*/reassociationIndices); + + auto resultMemTp = + MemRefType::get(expandTy.getShape(), expandTy.getElementType()); + Value resultMemRef = rewriter.create( + loc, resultMemTp, resultExpand); + + // Replace 'dap.whisper_preprocess' operation with the generated result. The + // replaced op is erased. + rewriter.replaceOp(op, resultMemRef); + return success(); + } +}; + +} // end anonymous namespace + +void populateExtendDAPConversionPatterns(RewritePatternSet &patterns) { + patterns.add(patterns.getContext()); + patterns.add(patterns.getContext()); + // TODO : extract operators +} + +//===----------------------------------------------------------------------===// +// ExtendDAPPass +//===----------------------------------------------------------------------===// + +namespace { +class ExtendDAPPass + : public PassWrapper> { +public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(ExtendDAPPass) + ExtendDAPPass() = default; + ExtendDAPPass(const ExtendDAPPass &) {} + + StringRef getArgument() const final { return "extend-dap"; } + StringRef getDescription() const final { return "Extend DAP Dialect."; } + + void runOnOperation() override; + + void getDependentDialects(DialectRegistry ®istry) const override { + registry.insert(); + registry.insert(); + registry.insert(); + registry.insert(); + registry.insert(); + registry.insert(); + registry.insert(); + registry.insert(); + registry.insert(); + // Buddy Compiler designed dialect + registry.insert(); + } +}; +} // end anonymous namespace. + +void ExtendDAPPass::runOnOperation() { + MLIRContext *context = &getContext(); + ModuleOp module = getOperation(); + + ConversionTarget target(*context); + // Add legal dialects. + target.addLegalDialect(); + target.addLegalDialect(); + target.addLegalDialect(); + target.addLegalDialect(); + target.addLegalDialect(); + target.addLegalDialect(); + target.addLegalDialect(); + target.addLegalDialect(); + target.addLegalDialect(); + // Add legal operations. + target.addLegalOp(); + + RewritePatternSet patterns(context); + populateExtendDAPConversionPatterns(patterns); + + if (failed(applyPartialConversion(module, target, std::move(patterns)))) + signalPassFailure(); +} + +namespace mlir { +namespace buddy { +void registerExtendDAPPass() { PassRegistration(); } +} // namespace buddy +} // namespace mlir diff --git a/midend/lib/Conversion/MatMulOptimization/BatchMatMulOptimize.cpp b/midend/lib/Conversion/MatMulOptimization/BatchMatMulOptimize.cpp index 757ac8ae9..9b81a4748 100644 --- a/midend/lib/Conversion/MatMulOptimization/BatchMatMulOptimize.cpp +++ b/midend/lib/Conversion/MatMulOptimization/BatchMatMulOptimize.cpp @@ -81,8 +81,19 @@ class BatchMatMulOptimizePattern : public ConversionPattern { const Value zeroElementType = rewriter.create( loc, rewriter.getZeroAttr(elementType)); - const Value zeroElementTypeVec = rewriter.create( - loc, VectorType::get({affineVectorSize}, elementType), zeroElementType); + + const Value zeroElementTypeVec = + isa(elementType) + ? rewriter + .create( + loc, VectorType::get({affineVectorSize}, elementType), + zeroElementType) + .getResult() + : rewriter + .create( + loc, VectorType::get({affineVectorSize}, elementType), + zeroElementType) + .getResult(); // Get dimensions of input tensors. Value batch = rewriter.create(loc, A, 0); @@ -90,7 +101,8 @@ class BatchMatMulOptimizePattern : public ConversionPattern { Value bCol = rewriter.create(loc, B, 2); Value bRow = rewriter.create(loc, B, 1); - // Calculate the length of the tail, which might not fit in a vector. + // Calculate the length of the tail, which might not fit in a + // vector. Value tailLength = rewriter.create( loc, AffineMap::get(1, 0, d0 % affineVectorSize), ValueRange{bCol}); @@ -148,14 +160,14 @@ class BatchMatMulOptimizePattern : public ConversionPattern { C.getType().cast().getDimSize(2) % affineVectorSize != 0) { - // Depending on the position, use either full vectors or tail - // vectors. + // Depending on the position, use either full vectors or + // tail vectors. affine::AffineIfOp branchingOp = builder.create( loc, IntegerSet::get( 1, 1, {d0 * -affineVectorSize + s0 - affineVectorSize}, {false}), - ValueRange{loopVarBatchIdx, bCol}, true); + ValueRange{loopVarColOfB, bCol}, true); // Branch handling full vector operations. OpBuilder trueBranchBuilder = branchingOp.getThenBodyBuilder(); @@ -192,9 +204,9 @@ class BatchMatMulOptimizePattern : public ConversionPattern { loopVarColOfB}); Value computedVec; - // Compute the result vector either through integer - // multiplication and addition or fused multiply-add - // based on the element type. + // Compute the result vector either through + // integer multiplication and addition or fused + // multiply-add based on the element type. if (isa(elementType)) { Value mulVec = builder.create(loc, aVec, bVec); @@ -248,9 +260,9 @@ class BatchMatMulOptimizePattern : public ConversionPattern { maskVector, zeroElementTypeVec); Value computedVec; - // Compute the result vector either through integer - // multiplication and addition or fused multiply-add - // based on the element type. + // Compute the result vector either through + // integer multiplication and addition or fused + // multiply-add based on the element type. if (isa(elementType)) { Value mulVec = builder.create(loc, aVec, bVec); @@ -301,9 +313,9 @@ class BatchMatMulOptimizePattern : public ConversionPattern { loopVarColOfB}); Value computedVec; - // Compute the result vector either through integer - // multiplication and addition or fused multiply-add - // based on the element type. + // Compute the result vector either through + // integer multiplication and addition or fused + // multiply-add based on the element type. if (isa(elementType)) { Value mulVec = builder.create(loc, aVec, bVec); diff --git a/midend/lib/Conversion/MatMulOptimization/BatchMatMulSCFOptimize.cpp b/midend/lib/Conversion/MatMulOptimization/BatchMatMulSCFOptimize.cpp new file mode 100644 index 000000000..a3d079be2 --- /dev/null +++ b/midend/lib/Conversion/MatMulOptimization/BatchMatMulSCFOptimize.cpp @@ -0,0 +1,281 @@ +//===- BatchMatMulOptimize.cpp --------------------------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// +// +// This file implements the batchmatmul scf vectorization optimization. +// +//===----------------------------------------------------------------------===// +#include "mlir/Dialect/Arith/IR/Arith.h" +#include "mlir/IR/AffineExpr.h" +#include "mlir/IR/AffineMap.h" +#include "mlir/IR/Attributes.h" +#include "mlir/IR/Builders.h" +#include "mlir/IR/BuiltinAttributes.h" +#include "mlir/IR/BuiltinTypes.h" +#include "mlir/IR/IntegerSet.h" +#include "mlir/IR/ValueRange.h" +#include "llvm/ADT/ArrayRef.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace mlir; +using namespace vector; +using namespace affine; + +//===----------------------------------------------------------------------===// +// Rewrite Pattern +//===----------------------------------------------------------------------===// + +namespace { + +class BatchMatMuSCFOptimizePattern : public ConversionPattern { +private: + int64_t vecSize; + +public: + explicit BatchMatMuSCFOptimizePattern(MLIRContext *context, + int64_t vecSizeParam) + : ConversionPattern(linalg::BatchMatmulOp::getOperationName(), 1, + context) { + vecSize = vecSizeParam; + } + + LogicalResult + matchAndRewrite(Operation *op, ArrayRef /*operands*/, + ConversionPatternRewriter &rewriter) const override { + auto loc = op->getLoc(); + + // Retrieve input tensors A, B, and C. + Value A = op->getOperand(0); + Value B = op->getOperand(1); + Value C = op->getOperand(2); + + // Acquire the element type of input tensors. + Type elementType = A.getType().cast().getElementType(); + + // Define constants. + const Value c0 = + rewriter.create(loc, rewriter.getIndexAttr(0)); + const Value c1 = + rewriter.create(loc, rewriter.getIndexAttr(1)); + const Value cVecSize = + rewriter.create(loc, rewriter.getIndexAttr(vecSize)); + const AffineExpr d0 = rewriter.getAffineDimExpr(0); + const AffineExpr d1 = rewriter.getAffineDimExpr(1); + const AffineExpr d2 = rewriter.getAffineDimExpr(2); + const AffineExpr s0 = rewriter.getAffineSymbolExpr(0); + const AffineExpr zeroAffine = rewriter.getAffineConstantExpr(0); + + const Value zeroElementType = rewriter.create( + loc, rewriter.getZeroAttr(elementType)); + + // Get dimensions of input tensors. + Value batch = rewriter.create(loc, A, 0); + Value aRow = rewriter.create(loc, A, 1); + Value bCol = rewriter.create(loc, B, 2); + Value bRow = rewriter.create(loc, B, 1); + + VectorType vecTy = VectorType::get({vecSize}, elementType); + Value zeroElementTypeVec; + if (isa(elementType)) + zeroElementTypeVec = + rewriter.create(loc, vecTy, zeroElementType); + else + zeroElementTypeVec = + rewriter.create(loc, vecTy, zeroElementType); + // Calculate the length of the tail, which might not fit in a + // vector. + Value tailLength = rewriter.create( + loc, AffineMap::get(1, 0, d0 % vecSize), ValueRange{bCol}); + + // Generate a mask vector based on the tail length. + Value maskVector = rewriter.create( + loc, VectorType::get({vecSize}, rewriter.getI1Type()), + ValueRange{tailLength}); + + Value ApplyBCol = rewriter.create( + loc, AffineMap::get(1, 0, d0.floorDiv(vecSize) * vecSize), bCol); + + rewriter.create( + loc, SmallVector({c0}), + SmallVector({batch}), + SmallVector({c1}), ValueRange{}, + std::nullopt, // No mapping specified in this example + [&](OpBuilder &builder, Location loc, ValueRange loopIndices) { + Value loopVarBatchIdx = loopIndices[0]; + builder.create( + loc, c0, aRow, c1, ValueRange{std::nullopt}, + [&](OpBuilder &builder, Location loc, Value loopVarRowOfA, + ValueRange iargs) { + builder.create( + loc, c0, bRow, c1, ValueRange{std::nullopt}, + [&](OpBuilder &builder, Location loc, Value loopVarRowOfB, + ValueRange iargs) { + Value aElement = builder.create( + loc, A, + ValueRange{loopVarBatchIdx, loopVarRowOfA, + loopVarRowOfB}); + Value aVec = builder.create( + loc, vecTy, aElement); + builder.create( + loc, c0, ApplyBCol, cVecSize, + ValueRange{std::nullopt}, + [&](OpBuilder &builder, Location loc, + Value loopVarColOfB, ValueRange iargs) { + Value bVec = builder.create( + loc, vecTy, B, + ValueRange{loopVarBatchIdx, loopVarRowOfB, + loopVarColOfB}); + + Value cVec = builder.create( + loc, vecTy, C, + ValueRange{loopVarBatchIdx, loopVarRowOfA, + loopVarColOfB}); + Value computedVec; + + if (isa(elementType)) { + Value mulVec = builder.create( + loc, aVec, bVec); + computedVec = builder.create( + loc, mulVec, cVec); + } else { + computedVec = builder.create( + loc, aVec, bVec, cVec); + } + builder.create( + loc, computedVec, C, + ValueRange{loopVarBatchIdx, loopVarRowOfA, + loopVarColOfB}); + builder.create( + loc, ValueRange{std::nullopt}); + }); + Value condition = builder.create( + loc, arith::CmpIPredicate::sgt, tailLength, c0); + builder.create( + loc, condition, + [&](OpBuilder &builder, Location loc) { + Value bVec = builder.create( + loc, vecTy, B, + ValueRange{loopVarBatchIdx, loopVarRowOfB, + ApplyBCol}, + maskVector, zeroElementTypeVec); + + Value cVec = builder.create( + loc, vecTy, C, + ValueRange{loopVarBatchIdx, loopVarRowOfA, + ApplyBCol}, + maskVector, zeroElementTypeVec); + + Value computedVec; + + if (isa(elementType)) { + Value mulVec = builder.create( + loc, aVec, bVec); + computedVec = builder.create( + loc, mulVec, cVec); + } else { + computedVec = builder.create( + loc, aVec, bVec, cVec); + } + + builder.create( + loc, C, + ValueRange{loopVarBatchIdx, loopVarRowOfA, + ApplyBCol}, + maskVector, computedVec); + builder.create(loc); + }); + builder.create(loc, + ValueRange{std::nullopt}); + }); + builder.create(loc, ValueRange{std::nullopt}); + }); + + builder.create(loc); + }); + + rewriter.eraseOp(op); + return success(); + } +}; +} // end anonymous namespace + +//===----------------------------------------------------------------------===// +// BatchMatMuSCFOptimize +//===----------------------------------------------------------------------===// + +/// This is a partial lowering linalg pooling operations to mixture of +/// Affine + Vector operations. +namespace { +class BatchMatMuSCFOptimize + : public PassWrapper> { +public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(BatchMatMuSCFOptimize) + StringRef getArgument() const final { return "batchmatmul-scf-optimize"; } + StringRef getDescription() const final { + return "BatchMatMul SCF Optimization."; + } + BatchMatMuSCFOptimize() = default; + BatchMatMuSCFOptimize(const BatchMatMuSCFOptimize &) {} + explicit BatchMatMuSCFOptimize(int64_t vecSizeParam) { + vecSize = vecSizeParam; + } + + void runOnOperation() override; + + void getDependentDialects(DialectRegistry ®istry) const override { + registry.insert(); + } + + Option vecSize{*this, "vector-size", + llvm::cl::desc("Strip mining size."), + llvm::cl::init(16)}; +}; +} // end anonymous namespace. + +void BatchMatMuSCFOptimize::runOnOperation() { + MLIRContext *context = &getContext(); + ModuleOp module = getOperation(); + + ConversionTarget target(*context); + target + .addLegalDialect(); + target.addLegalOp(); + target.addLegalOp(); + + RewritePatternSet patterns(context); + patterns.add(context, vecSize); + + if (failed(applyPartialConversion(module, target, std::move(patterns)))) + signalPassFailure(); +} +// add to buddy-opt.cpp +namespace mlir { +namespace buddy { +void registerBatchMatMuSCFOptimize() { + PassRegistration(); +} +} // namespace buddy +} // namespace mlir diff --git a/midend/lib/Conversion/MatMulOptimization/BatchMatMulTileOptimize.cpp b/midend/lib/Conversion/MatMulOptimization/BatchMatMulTileOptimize.cpp new file mode 100644 index 000000000..91d10c645 --- /dev/null +++ b/midend/lib/Conversion/MatMulOptimization/BatchMatMulTileOptimize.cpp @@ -0,0 +1,353 @@ +//===- BatchMatMulOptimize.cpp --------------------------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// +// +// This file implements the batchmatmul tile optimization. +// +//===----------------------------------------------------------------------===// +#include "mlir/Dialect/Arith/IR/Arith.h" +#include "mlir/IR/AffineExpr.h" +#include "mlir/IR/AffineMap.h" +#include "mlir/IR/Attributes.h" +#include "mlir/IR/Builders.h" +#include "mlir/IR/BuiltinAttributes.h" +#include "mlir/IR/BuiltinTypes.h" +#include "mlir/IR/IntegerSet.h" +#include "mlir/IR/ValueRange.h" +#include "llvm/ADT/ArrayRef.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace mlir; +using namespace vector; +using namespace affine; + +//===----------------------------------------------------------------------===// +// Rewrite Pattern +//===----------------------------------------------------------------------===// + +namespace { + +class BatchMatMulTileOptimizePattern : public ConversionPattern { +private: + int64_t vecSize, kernelM, kernelN; + +public: + explicit BatchMatMulTileOptimizePattern(MLIRContext *context, + int64_t vecSizeParam, + int64_t kernelMParam, + int64_t kernelNParam) + : ConversionPattern(linalg::BatchMatmulOp::getOperationName(), 1, + context) { + vecSize = vecSizeParam; + kernelM = kernelMParam; + kernelN = kernelNParam; + } + + LogicalResult + matchAndRewrite(Operation *op, ArrayRef /*operands*/, + ConversionPatternRewriter &rewriter) const override { + auto loc = op->getLoc(); + + // Retrieve input tensors A, B, and C. + Value A = op->getOperand(0); + Value B = op->getOperand(1); + Value C = op->getOperand(2); + + // Acquire the element type of input tensors. + Type elementType = A.getType().cast().getElementType(); + ShapedType ATy = A.getType().cast(); + + // Define constants. + const Value c0 = + rewriter.create(loc, rewriter.getIndexAttr(0)); + const Value c1 = + rewriter.create(loc, rewriter.getIndexAttr(1)); + + const AffineExpr d0 = rewriter.getAffineDimExpr(0); + const AffineExpr d1 = rewriter.getAffineDimExpr(1); + const AffineExpr d2 = rewriter.getAffineDimExpr(2); + const AffineExpr s0 = rewriter.getAffineSymbolExpr(0); + const AffineExpr s1 = rewriter.getAffineSymbolExpr(1); + const AffineExpr s2 = rewriter.getAffineSymbolExpr(2); + + const AffineExpr zeroAffine = rewriter.getAffineConstantExpr(0); + + // Get dimensions of input tensors. + Value batch = rewriter.create(loc, A, 0); + Value M = rewriter.create(loc, A, 1); // aRow + Value K = rewriter.create(loc, B, 1); // bRow + Value N = rewriter.create(loc, B, 2); // bCol + + SmallVector reducedValues = llvm::to_vector<4>( + llvm::map_range(ArrayRef{}, + [](const LoopReduction &red) { return red.value; })); + + // Configs + int64_t kNLen = vecSize * kernelN; + + // Create the primary parallel batch level loop. + AffineParallelOp parallelBatchLoop = + rewriter.create( + loc, ValueRange(reducedValues).getTypes(), ValueRange{batch}, + ArrayRef{ + rewriter.getNamedAttr("lowerBoundsGroups", + rewriter.getI32TensorAttr({1})), + rewriter.getNamedAttr("upperBoundsGroups", + rewriter.getI32TensorAttr({1})), + rewriter.getNamedAttr( + "lowerBoundsMap", + AffineMapAttr::get(AffineMap::get(0, 0, {zeroAffine}, + rewriter.getContext()))), + rewriter.getNamedAttr("upperBoundsMap", + AffineMapAttr::get(AffineMap::get( + 1, 0, {d0}, rewriter.getContext()))), + rewriter.getNamedAttr("reductions", rewriter.getArrayAttr({})), + rewriter.getNamedAttr("steps", rewriter.getI64ArrayAttr({1}))}); + + // Create the loop body for the parallel loop. + Block *loopBody = new Block(); + rewriter.setInsertionPointToStart(loopBody); + loopBody->addArgument(rewriter.getIndexType(), loc); + Value loopVarBatchIdx = loopBody->getArguments()[0]; + + // Prefetching data from tensor 'A' for better cache utilization. + rewriter.create( + loc, A, AffineMap::get(3, 0, {d0, d1, d2}, rewriter.getContext()), + ArrayRef{loopVarBatchIdx, M, K}, false, 3, true); + + // build loop body + affine::buildAffineLoopNest( + rewriter, loc, {c0}, {N}, kNLen, + [&](OpBuilder &builder, Location loc, ValueRange ivRange) { + auto ivJ = ivRange.front(); + affine::buildAffineLoopNest( + builder, loc, {c0}, {M}, kernelM, + [&](OpBuilder &builder, Location loc, ValueRange ivRange) { + Value ivI = ivRange.front(); + SmallVector cptrs; + + const VectorType vTy = + VectorType::get(vecSize, ATy.getElementType()); + + for (int i = 0; i < kernelM; i++) { + Value fixedIV = builder.create( + loc, + AffineMap::get(1, 1, {d0 + i, s0 - 1}, + builder.getContext()), + SmallVector{ivI, M}); + MemRefType resTy = MemRefType::get( + ATy.getShape(), ATy.getElementType(), + AffineMap::get(3, 3, d1 * s2 + d0 * s1 + s0 + d2)); + auto cptr = builder.create( + loc, resTy, C, + SmallVector{loopVarBatchIdx, fixedIV, c0}, + SmallVector{c1, c1, N}, + SmallVector{c1, c1, c1}); + cptrs.push_back(cptr); + } + affine::buildAffineLoopNest( + builder, loc, {c0}, {K}, 1, + [&](OpBuilder &builder, Location loc, ValueRange ivRange) { + Value ivK = ivRange.front(); + SmallVector bs; + + for (int j = 0; j < kernelN; j++) { + Value fixedJV = ivJ; + if (j != 0) { + fixedJV = builder.create( + loc, AffineMap::get(1, 0, d0 + j * vecSize), ivJ); + } + bs.push_back(builder.create( + loc, vTy, B, + ValueRange{loopVarBatchIdx, ivK, fixedJV})); + } + + for (int i = 0; i < kernelM; ++i) { + Value fixedIV = ivI; + if (i != 0) { + fixedIV = builder.create( + loc, + AffineMap::get(1, 0, {d0 + i}, + builder.getContext()), + SmallVector{ivI}); + } + affine::AffineIfOp mBranchingOp = + builder.create( + loc, + IntegerSet::get(1, 1, {-d0 + s0 - 1}, {false}), + ValueRange{fixedIV, M}, false); + OpBuilder mTrueBranchBuilder = + mBranchingOp.getThenBodyBuilder(); + Value ksubAElement = + mTrueBranchBuilder.create( + loc, A, + ValueRange{loopVarBatchIdx, fixedIV, ivK}); + + for (int j = 0; j < kernelN; j++) { + Value fixedJV = ivJ; + if (j != 0) { + fixedJV = + mTrueBranchBuilder + .create( + loc, + AffineMap::get(1, 0, d0 + j * vecSize), + ivJ); + } + Value vecC = mTrueBranchBuilder.create( + loc, vTy, cptrs[i], ValueRange{c0, c0, fixedJV}); + if (isa(elementType)) { + Value vecA = + mTrueBranchBuilder.create( + loc, vTy, ksubAElement); + Value vecMul = + mTrueBranchBuilder.create( + loc, vTy, vecA, bs[j]); + vecC = mTrueBranchBuilder.create( + loc, vTy, vecMul, vecC); + } else { + Value vecA = + mTrueBranchBuilder.create( + loc, vTy, ksubAElement); + vecC = mTrueBranchBuilder.create( + loc, vTy, vecA, bs[j], vecC); + } + // store vecC + Value tailLength = + mTrueBranchBuilder.create( + loc, AffineMap::get(2, 0, -d0 + d1), + ValueRange{fixedJV, N}); + affine::AffineIfOp nBranchingOp = + mTrueBranchBuilder.create( + loc, + IntegerSet::get(1, 0, {-vecSize + d0}, + {false}), + ValueRange{tailLength}, true); + // Calculate the length of the tail, which might not + // fit in a vector. + OpBuilder nTrueBranchBuilder = + nBranchingOp.getThenBodyBuilder(); + nTrueBranchBuilder.create( + loc, vecC, cptrs[i], ValueRange{c0, c0, fixedJV}); + OpBuilder nFalseBranchBuilder = + nBranchingOp.getElseBodyBuilder(); + // Generate a mask vector based on the tail length. + Value maskVector = + nFalseBranchBuilder.create( + loc, + VectorType::get({vecSize}, + rewriter.getI1Type()), + ValueRange{tailLength}); + nFalseBranchBuilder.create( + loc, cptrs[i], ValueRange{c0, c0, fixedJV}, + maskVector, vecC); + } + } + }); + }); + }); + + rewriter.create(loc); + + // Finalize the loop and erase the original operation. + parallelBatchLoop.getRegion().push_back(loopBody); + rewriter.setInsertionPointAfter(parallelBatchLoop); + + rewriter.eraseOp(op); + return success(); + } +}; +} // end anonymous namespace + +//===----------------------------------------------------------------------===// +// BatchMatMulTileOptimizePass +//===----------------------------------------------------------------------===// + +/// This is a partial lowering linalg pooling operations to mixture of +/// Affine + Vector operations. +namespace { +class BatchMatMulTileOptimizePass + : public PassWrapper> { +public: + MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(BatchMatMulTileOptimizePass) + StringRef getArgument() const final { return "batchmatmul-tile-optimize"; } + StringRef getDescription() const final { + return "BatchMatMul Tile Optimization."; + } + BatchMatMulTileOptimizePass() = default; + BatchMatMulTileOptimizePass(const BatchMatMulTileOptimizePass &) {} + explicit BatchMatMulTileOptimizePass(int64_t vecSizeParam, + int64_t kernelMParam, + int64_t kernelNParam) { + vecSize = vecSizeParam; + kernelM = kernelMParam; + kernelN = kernelNParam; + } + + void runOnOperation() override; + + void getDependentDialects(DialectRegistry ®istry) const override { + registry.insert(); + } + + Option vecSize{*this, "vec-size", + llvm::cl::desc("Strip mining size."), + llvm::cl::init(16)}; + + Option kernelM{*this, "kernel-m", + llvm::cl::desc("Strip mining size."), + llvm::cl::init(4)}; + + Option kernelN{*this, "kernel-n", + llvm::cl::desc("Strip mining size."), + llvm::cl::init(2)}; +}; +} // end anonymous namespace. + +void BatchMatMulTileOptimizePass::runOnOperation() { + MLIRContext *context = &getContext(); + ModuleOp module = getOperation(); + + ConversionTarget target(*context); + target + .addLegalDialect(); + target.addLegalOp(); + target.addLegalOp(); + + RewritePatternSet patterns(context); + patterns.add(context, vecSize, kernelM, + kernelN); + + if (failed(applyPartialConversion(module, target, std::move(patterns)))) + signalPassFailure(); +} +// add to buddy-opt.cpp +namespace mlir { +namespace buddy { +void registerBatchMatMulTileOptimizePass() { + PassRegistration(); +} +} // namespace buddy +} // namespace mlir diff --git a/midend/lib/Conversion/MatMulOptimization/CMakeLists.txt b/midend/lib/Conversion/MatMulOptimization/CMakeLists.txt index 8e726863e..2803af674 100644 --- a/midend/lib/Conversion/MatMulOptimization/CMakeLists.txt +++ b/midend/lib/Conversion/MatMulOptimization/CMakeLists.txt @@ -1,8 +1,10 @@ add_mlir_library(MatMulOptimization - BatchMatMulOptimize.cpp MatMulOptimize.cpp MatMulVectorization.cpp MatMulParallelVectorization.cpp + BatchMatMulOptimize.cpp + BatchMatMulTileOptimize.cpp + BatchMatMulSCFOptimize.cpp LINK_LIBS PUBLIC BuddyUtils ) @@ -11,6 +13,14 @@ add_mlir_library(BatchMatMulOptimization BatchMatMulOptimize.cpp ) +add_mlir_library(BatchMatMulTileOptimization + BatchMatMulTileOptimize.cpp +) + +add_mlir_library(BatchMatMulSCFOptimization + BatchMatMulSCFOptimize.cpp +) + add_mlir_library(MatMulParallelVectorization MatMulParallelVectorization.cpp ) diff --git a/midend/lib/Conversion/MatMulOptimization/MatMulParallelVectorization.cpp b/midend/lib/Conversion/MatMulOptimization/MatMulParallelVectorization.cpp index d10c80e3a..23d0ef4e7 100644 --- a/midend/lib/Conversion/MatMulOptimization/MatMulParallelVectorization.cpp +++ b/midend/lib/Conversion/MatMulOptimization/MatMulParallelVectorization.cpp @@ -14,7 +14,7 @@ // //===----------------------------------------------------------------------===// // -// This file implements the matmul-paralell-vectorization optimization. +// This file implements the matmul-parallel-vectorization optimization. // //===----------------------------------------------------------------------===// @@ -318,7 +318,7 @@ class MatMulParallelVectorizationPass public: MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(MatMulParallelVectorizationPass) StringRef getArgument() const final { - return "matmul-paralell-vectorization-optimize"; + return "matmul-parallel-vectorization-optimize"; } StringRef getDescription() const final { return "MatMulParallelVectorization Optimization."; diff --git a/nix/buddy-llvm.nix b/nix/buddy-llvm.nix new file mode 100644 index 000000000..af5bc1c86 --- /dev/null +++ b/nix/buddy-llvm.nix @@ -0,0 +1,76 @@ +{ stdenv +, cmake +, ninja +, python3 +, fetchFromGitHub +}: + +let + pythonEnv = python3.withPackages (ps: [ + ps.numpy + ps.pybind11 + ps.pyyaml + ps.ml-dtypes + ]); +in +stdenv.mkDerivation rec { + name = "llvm-for-buddy-mlir"; + version = "6c59f0e1b0fb56c909ad7c9aad4bde37dc006ae0"; + src = fetchFromGitHub { + owner = "llvm"; + repo = "llvm-project"; + rev = version; + hash = "sha256-bMJJ2q1hSh7m0ewclHOmIe7lOHv110rz/P7D3pw8Uiw="; + }; + + requiredSystemFeatures = [ "big-parallel" ]; + + propagatedBuildInputs = [ + pythonEnv + ]; + + nativeBuildInputs = [ + cmake + ninja + ]; + + cmakeDir = "../llvm"; + cmakeFlags = [ + "-DLLVM_ENABLE_PROJECTS=mlir" + "-DLLVM_TARGETS_TO_BUILD=host;RISCV" + "-DLLVM_ENABLE_ASSERTIONS=ON" + "-DCMAKE_BUILD_TYPE=Release" + # required for MLIR python binding + "-DMLIR_ENABLE_BINDINGS_PYTHON=ON" + # required for not, FileCheck... + "-DLLVM_INSTALL_UTILS=ON" + ]; + + outputs = [ "out" "lib" "dev" ]; + + postInstall = '' + # buddy-mlir have custom RVV backend that required LLVM backend, + # and those LLVM backend headers require this config.h header file. + # However for LLVM, this config.h is meant to be used on build phase only, + # so it will not be installed for cmake install. + # We have to do some hack + cp -v "include/llvm/Config/config.h" "$dev/include/llvm/Config/config.h" + + # move llvm-config to $dev to resolve a circular dependency + moveToOutput "bin/llvm-config*" "$dev" + + # move all lib files to $lib except lib/cmake + moveToOutput "lib" "$lib" + moveToOutput "lib/cmake" "$dev" + + # patch configuration files so each path points to the new $lib or $dev paths + substituteInPlace "$dev/lib/cmake/llvm/LLVMConfig.cmake" \ + --replace 'set(LLVM_BINARY_DIR "''${LLVM_INSTALL_PREFIX}")' 'set(LLVM_BINARY_DIR "'"$lib"'")' + substituteInPlace \ + "$dev/lib/cmake/llvm/LLVMExports-release.cmake" \ + "$dev/lib/cmake/mlir/MLIRTargets-release.cmake" \ + --replace "\''${_IMPORT_PREFIX}/lib/lib" "$lib/lib/lib" \ + --replace "\''${_IMPORT_PREFIX}/lib/objects-Release" "$lib/lib/objects-Release" \ + --replace "$out/bin/llvm-config" "$dev/bin/llvm-config" # patch path for llvm-config + ''; +} diff --git a/nix/buddy-mlir.nix b/nix/buddy-mlir.nix index b59d82275..db10c6281 100644 --- a/nix/buddy-mlir.nix +++ b/nix/buddy-mlir.nix @@ -1,51 +1,68 @@ -{ cmake, ninja, python3, llvmPackages_16, fetchFromGitHub, libjpeg, libpng, zlib-ng }: +{ lib +, stdenv +, buddy-llvm +, cmake +, ninja +, llvmPkgs +, libjpeg +, libpng +, zlib-ng +, ccls +}: let - # Using git submodule to obtain the llvm source is really slow. - # So here I use tarball to save time from git index. - llvmSrc = fetchFromGitHub { - owner = "llvm"; - repo = "llvm-project"; - rev = "6c59f0e1b0fb56c909ad7c9aad4bde37dc006ae0"; - sha256 = "sha256-bMJJ2q1hSh7m0ewclHOmIe7lOHv110rz/P7D3pw8Uiw"; - }; -in -# Use clang instead of gcc to build -llvmPackages_16.stdenv.mkDerivation { - pname = "buddy-mlir"; - version = "unstable-2023-11-07+rev=38bfd56"; - - srcs = [ - llvmSrc - ../. - ]; - sourceRoot = "llvm-project"; - unpackPhase = '' - sourceArray=($srcs) - cp -r ''${sourceArray[0]} llvm-project - cp -r ''${sourceArray[1]} buddy-mlir + self = stdenv.mkDerivation { + pname = "buddy-mlir"; + version = "unstable-2024-07-18"; - # Directories copied from nix store are read only - chmod -R u+w llvm-project buddy-mlir - ''; + src = with lib.fileset; toSource { + root = ./..; + fileset = unions [ + ./../backend + ./../cmake + ./../examples + ./../frontend + ./../midend + ./../tests + ./../tools + ./../thirdparty + ./../CMakeLists.txt + ./../flake.lock + ./../flake.nix + ]; + }; - # Tablegen in latest commit have bug. See llvm-projects issue #68166 - prePatch = "pushd $NIX_BUILD_TOP/llvm-project"; - patches = [ ./tblgen.patch ]; - postPatch = "popd"; + nativeBuildInputs = [ + cmake + ninja + llvmPkgs.bintools + ]; - nativeBuildInputs = [ cmake ninja python3 llvmPackages_16.bintools libjpeg libpng zlib-ng ]; + buildInputs = [ + buddy-llvm + ]; - cmakeDir = "../llvm"; - cmakeFlags = [ - "-DCMAKE_BUILD_TYPE=Release" - "-DLLVM_ENABLE_PROJECTS=mlir" - "-DLLVM_TARGETS_TO_BUILD=host;RISCV" - "-DLLVM_ENABLE_ASSERTIONS=ON" - "-DLLVM_USE_LINKER=lld" + cmakeFlags = [ + "-DMLIR_DIR=${buddy-llvm.dev}/lib/cmake/mlir" + "-DLLVM_DIR=${buddy-llvm.dev}/lib/cmake/llvm" + "-DLLVM_MAIN_SRC_DIR=${buddy-llvm.src}/llvm" + "-DBUDDY_MLIR_ENABLE_PYTHON_PACKAGES=ON" + "-DCMAKE_BUILD_TYPE=Release" + ]; - "-DLLVM_EXTERNAL_PROJECTS=buddy-mlir" - "-DLLVM_EXTERNAL_BUDDY_MLIR_SOURCE_DIR=../../buddy-mlir" - ]; + passthru = { + llvm = buddy-llvm; + devShell = self.overrideAttrs (old: { + nativeBuildInputs = old.nativeBuildInputs ++ [ + libjpeg + libpng + zlib-ng + ccls + ]; + }); + }; - checkTarget = "check-mlir check-buddy"; -} + # No need to do check, and it also takes too much time to finish. + doCheck = false; + }; +in +self diff --git a/nix/overlay.nix b/nix/overlay.nix index 19c97fc33..767f23bdd 100644 --- a/nix/overlay.nix +++ b/nix/overlay.nix @@ -1,6 +1,8 @@ final: prev: { # Add an alias here can help future migration - llvmPkgs = final.llvmPackages_16; - buddy-mlir = final.callPackage ./buddy-mlir.nix { }; + llvmPkgs = final.llvmPackages_17; + # Use clang instead of gcc to compile, to avoid gcc13 miscompile issue. + buddy-llvm = final.callPackage ./buddy-llvm.nix { stdenv = final.llvmPkgs.stdenv; }; + buddy-mlir = final.callPackage ./buddy-mlir.nix { stdenv = final.llvmPkgs.stdenv; }; } diff --git a/requirements.txt b/requirements.txt index f2a1232fb..9818b8ec7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,3 +9,6 @@ protobuf pybind11 == 2.11.1 torchvision tabulate +datasets +soundfile +librosa diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2456107a3..3340ed14b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -13,7 +13,9 @@ set(BUDDY_TEST_DEPENDS buddy-translate buddy-container-test buddy-audio-container-test + buddy-new-image-container-test buddy-text-container-test + mlir-cpu-runner ) if(BUDDY_ENABLE_OPENCV) diff --git a/tests/Interface/core/AudioContainerTest.cpp b/tests/Interface/core/AudioContainerTest.cpp index a31c7800f..684584c3a 100644 --- a/tests/Interface/core/AudioContainerTest.cpp +++ b/tests/Interface/core/AudioContainerTest.cpp @@ -20,22 +20,72 @@ // RUN: buddy-audio-container-test 2>&1 | FileCheck %s +#include "AudioFile.h" #include #include using namespace std; int main() { - dap::Audio aud("../../../../tests/Interface/core/NASA_Mars.wav"); - auto &audioFile = aud.getAudioFile(); + // --------------------------------------------------------------------------- + // 1. Print Decoded Reuslts using Buddy Audio Container + // --------------------------------------------------------------------------- + + // Read and decode audio file with Buddy Audio Container. + dap::Audio aud("../../../../tests/Interface/core/TestAudio.wav"); + + // CHECK: WAV + fprintf(stderr, "%s\n", aud.getFormatName().c_str()); + // CHECK: 16 + fprintf(stderr, "%d\n", aud.getBitDepth()); + // CHECK: 77040 + fprintf(stderr, "%lu\n", aud.getSamplesNum()); + // CHECK: 1 + fprintf(stderr, "%d\n", aud.getChannelsNum()); + // CHECK: 16000 + fprintf(stderr, "%d\n", aud.getSampleRate()); + // CHECK: -0.000153 + fprintf(stderr, "%f\n", aud.getData()[3]); + // CHECK: -0.000275 + fprintf(stderr, "%f\n", aud.getData()[4]); + + // --------------------------------------------------------------------------- + // 2. Compare Encoded results using Buddy Audio Container and AudioFile.h + // --------------------------------------------------------------------------- + + // Encode the audio data and save it to a file using the Buddy Audio Container + string filePath = "./buddyEncodeResult.wav"; + aud.saveToFile(filePath, "WAVE"); + + // Print metadata and sample values using the Buddy Audio Container. + dap::Audio audContainer(filePath); + // CHECK: 16 + fprintf(stderr, "%d\n", audContainer.getBitDepth()); + // CHECK: 77040 + fprintf(stderr, "%lu\n", audContainer.getSamplesNum()); + // CHECK: 1 + fprintf(stderr, "%d\n", audContainer.getChannelsNum()); + // CHECK: 16000 + fprintf(stderr, "%d\n", audContainer.getSampleRate()); + // CHECK: -0.000122 + fprintf(stderr, "%f\n", audContainer.getData()[3]); + // CHECK: -0.000244 + fprintf(stderr, "%f\n", audContainer.getData()[4]); + + // Print metadata and sample values using the third-party (AudioFile.h). + AudioFile audFile(filePath); + // CHECK: 16 + fprintf(stderr, "%d\n", audFile.getBitDepth()); + // CHECK: 77040 + fprintf(stderr, "%d\n", audFile.getNumSamplesPerChannel()); // CHECK: 1 - fprintf(stderr, "%u\n", audioFile.getNumChannels()); - // CHECK: 24 - fprintf(stderr, "%u\n", audioFile.getBitDepth()); - // CHECK: 2000000 - fprintf(stderr, "%u\n", audioFile.getNumSamplesPerChannel()); - // CHECK: 100000 - fprintf(stderr, "%u\n", audioFile.getSampleRate()); + fprintf(stderr, "%d\n", audFile.getNumChannels()); + // CHECK: 16000 + fprintf(stderr, "%d\n", audFile.getSampleRate()); + // CHECK: -0.000122 + fprintf(stderr, "%f\n", audFile.getSample(0, 3)); + // CHECK: -0.000244 + fprintf(stderr, "%f\n", audFile.getSample(0, 4)); return 0; } diff --git a/tests/Interface/core/CMakeLists.txt b/tests/Interface/core/CMakeLists.txt index c82cb5a28..f6c6da4c3 100644 --- a/tests/Interface/core/CMakeLists.txt +++ b/tests/Interface/core/CMakeLists.txt @@ -17,10 +17,14 @@ if(BUDDY_MLIR_ENABLE_DIP_LIB OR BUDDY_ENABLE_OPENCV) ) endif() +_add_test_executable(buddy-new-image-container-test + NewImageContainerTest.cpp +) + _add_test_executable(buddy-audio-container-test AudioContainerTest.cpp ) _add_test_executable(buddy-text-container-test TextContainerTest.cpp -) \ No newline at end of file +) diff --git a/tests/Interface/core/NewImageContainerTest.cpp b/tests/Interface/core/NewImageContainerTest.cpp new file mode 100644 index 000000000..87b49804a --- /dev/null +++ b/tests/Interface/core/NewImageContainerTest.cpp @@ -0,0 +1,58 @@ +//===- NewImageContainerTest.cpp ------------------------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// +// +// This is the image container test file. +// +//===----------------------------------------------------------------------===// + +// RUN: buddy-new-image-container-test 2>&1 | FileCheck %s + +#include + +int main() { + //===--------------------------------------------------------------------===// + // Test new image container - bmp format image. + //===--------------------------------------------------------------------===// + // Default Gray Scale + dip::Image bmpGrayDefault( + "../../../../tests/Interface/core/TestImage.bmp", dip::DIP_GRAYSCALE); + // CHECK: BMP + fprintf(stderr, "%s\n", bmpGrayDefault.getFormatName().c_str()); + // CHECK: 28 + fprintf(stderr, "%ld\n", bmpGrayDefault.getWidth()); + // CHECK: 28 + fprintf(stderr, "%ld\n", bmpGrayDefault.getHeight()); + // CHECK: 32 + fprintf(stderr, "%d\n", bmpGrayDefault.getBitDepth()); + // CHECK: 7 + fprintf(stderr, "%f\n", bmpGrayDefault.getData()[0]); + // Gray Scale + Normalization + dip::Image bmpGrayNorm( + "../../../../tests/Interface/core/TestImage.bmp", dip::DIP_GRAYSCALE, + true /* norm */); + // CHECK: BMP + fprintf(stderr, "%s\n", bmpGrayNorm.getFormatName().c_str()); + // CHECK: 28 + fprintf(stderr, "%ld\n", bmpGrayNorm.getWidth()); + // CHECK: 28 + fprintf(stderr, "%ld\n", bmpGrayNorm.getHeight()); + // CHECK: 32 + fprintf(stderr, "%d\n", bmpGrayNorm.getBitDepth()); + // CHECK: 0.027451 + fprintf(stderr, "%f\n", bmpGrayNorm.getData()[0]); + + return 0; +} diff --git a/tests/Interface/core/TestAudio.wav b/tests/Interface/core/TestAudio.wav new file mode 100644 index 0000000000000000000000000000000000000000..069c2329ef65ab9cb3337578b9c48aefedc36a51 GIT binary patch literal 154124 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≥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%0AHZ$ya93P*)UKqogPSPfa-R|5wFO9JtMYyN>? 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