From 06978666f5545e2d1b4334a5483e5645cb3f4dd4 Mon Sep 17 00:00:00 2001 From: zhanghb97 Date: Sun, 14 Jul 2024 17:41:34 +0000 Subject: [PATCH] [examples] Add vector iteration example. --- examples/MLIRVector/makefile | 59 ++++++++++++++++++++++- examples/MLIRVector/vector-iteration.mlir | 32 ++++++++++++ 2 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 examples/MLIRVector/vector-iteration.mlir diff --git a/examples/MLIRVector/makefile b/examples/MLIRVector/makefile index 681335c7fd..ccc9e9af24 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 0000000000..22bd425807 --- /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 +}