[PATCH] D72298: Add zero_extendi and sign_extendi to intrinsic namespace

Pruthvi via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 6 12:42:52 PST 2020


pruthviIntel created this revision.
pruthviIntel added reviewers: rriddle, nicolasvasilache.
Herald added subscribers: llvm-commits, lucyrfox, mgester, arpith-jacob, antiagainst, shauheen, burmako, jpienaar, mehdi_amini.
Herald added a project: LLVM.

- update zero_extendi and sign_extendi in edsc/intrinsic namespace
- Builder API test for zero_extendi and sign_extendi


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D72298

Files:
  mlir/include/mlir/EDSC/Intrinsics.h
  mlir/test/EDSC/builder-api-test.cpp


Index: mlir/test/EDSC/builder-api-test.cpp
===================================================================
--- mlir/test/EDSC/builder-api-test.cpp
+++ mlir/test/EDSC/builder-api-test.cpp
@@ -459,6 +459,72 @@
   f.erase();
 }
 
+TEST_FUNC(zeroextendi_op_i1_to_i8) {
+  using namespace edsc;
+  using namespace edsc::intrinsics;
+  using namespace edsc::op;
+  auto i1Type = IntegerType::get(1, &globalContext());
+  auto i8Type = IntegerType::get(8, &globalContext());
+  auto memrefType = MemRefType::get({-1, -1}, i1Type, {}, 0);
+  auto f = makeFunction("zero_extendi_op", {}, {memrefType});
+
+  OpBuilder builder(f.getBody());
+  ScopedContext scope(builder, f.getLoc());
+  // clang-format off
+  ValueHandle zero = constant_index(0), one = constant_index(1);
+  MemRefView vA(f.getArgument(0));
+  IndexedValue A(f.getArgument(0));
+  IndexHandle i, j;
+  AffineLoopNestBuilder({&i, &j}, {zero, zero}, {one, one}, {1, 1})([&]{
+    // This test exercises IndexedValue::operator Value*.
+    // Without it, one must force conversion to ValueHandle as such:
+    // edsc::intrinsics::zero_extendi(ValueHandle(ValueA(i, j), i8Type)
+    edsc::intrinsics::zero_extendi(*A(i, j), i8Type);
+  });
+
+  // CHECK-LABEL: @zero_extendi_op
+  //      CHECK: affine.for %{{.*}} = 0 to 1 {
+  // CHECK-NEXT:   affine.for %{{.*}} = 0 to 1 {
+  // CHECK-NEXT:     %[[SRC:.*]] = affine.load
+  //      CHECK:     zexti %[[SRC]] : i1 to i8
+  // clang-format on
+  f.print(llvm::outs());
+  f.erase();
+}
+
+TEST_FUNC(signextendi_op_i1_to_i8) {
+  using namespace edsc;
+  using namespace edsc::intrinsics;
+  using namespace edsc::op;
+  auto i1Type = IntegerType::get(1, &globalContext());
+  auto i8Type = IntegerType::get(8, &globalContext());
+  auto memrefType = MemRefType::get({-1, -1}, i1Type, {}, 0);
+  auto f = makeFunction("sign_extendi_op", {}, {memrefType});
+
+  OpBuilder builder(f.getBody());
+  ScopedContext scope(builder, f.getLoc());
+  // clang-format off
+  ValueHandle zero = constant_index(0), one = constant_index(1);
+  MemRefView vA(f.getArgument(0));
+  IndexedValue A(f.getArgument(0));
+  IndexHandle i, j;
+  AffineLoopNestBuilder({&i, &j}, {zero, zero}, {one, one}, {1, 1})([&]{
+    // This test exercises IndexedValue::operator Value*.
+    // Without it, one must force conversion to ValueHandle as such:
+    // edsc::intrinsics::sign_extendi(ValueHandle(ValueA(i, j), i8Type)
+    edsc::intrinsics::sign_extendi(*A(i, j), i8Type);
+  });
+
+  // CHECK-LABEL: @sign_extendi_op
+  //      CHECK: affine.for %{{.*}} = 0 to 1 {
+  // CHECK-NEXT:   affine.for %{{.*}} = 0 to 1 {
+  // CHECK-NEXT:     %[[SRC:.*]] = affine.load
+  //      CHECK:     sexti %[[SRC]] : i1 to i8
+  // clang-format on
+  f.print(llvm::outs());
+  f.erase();
+}
+
 TEST_FUNC(select_op_i32) {
   using namespace edsc;
   using namespace edsc::intrinsics;
Index: mlir/include/mlir/EDSC/Intrinsics.h
===================================================================
--- mlir/include/mlir/EDSC/Intrinsics.h
+++ mlir/include/mlir/EDSC/Intrinsics.h
@@ -213,6 +213,8 @@
 using subi = ValueBuilder<SubIOp>;
 using tanh = ValueBuilder<TanhOp>;
 using view = ValueBuilder<ViewOp>;
+using zero_extendi = ValueBuilder<ZeroExtendIOp>;
+using sign_extendi = ValueBuilder<SignExtendIOp>;
 
 /// Branches into the mlir::Block* captured by BlockHandle `b` with `operands`.
 ///


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D72298.236436.patch
Type: text/x-patch
Size: 3368 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200106/076d8bb6/attachment.bin>


More information about the llvm-commits mailing list