From f8b72fba868bc19df829dbe03220fba7d68d38d6 Mon Sep 17 00:00:00 2001 From: Diego Caballero Date: Tue, 21 Jul 2020 08:34:09 -0700 Subject: [PATCH] [MLIR][EDSC] Add fptrunc and fpext to EDSC Reviewed By: ftynse Differential Revision: https://reviews.llvm.org/D84216 --- .../mlir/Dialect/StandardOps/EDSC/Intrinsics.h | 2 ++ mlir/test/EDSC/builder-api-test.cpp | 38 ++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/mlir/include/mlir/Dialect/StandardOps/EDSC/Intrinsics.h b/mlir/include/mlir/Dialect/StandardOps/EDSC/Intrinsics.h index f654020..b0d649c 100644 --- a/mlir/include/mlir/Dialect/StandardOps/EDSC/Intrinsics.h +++ b/mlir/include/mlir/Dialect/StandardOps/EDSC/Intrinsics.h @@ -29,6 +29,8 @@ using std_divis = ValueBuilder; using std_diviu = ValueBuilder; using std_dim = ValueBuilder; using std_extract_element = ValueBuilder; +using std_fpext = ValueBuilder; +using std_fptrunc = ValueBuilder; using std_im = ValueBuilder; using std_index_cast = ValueBuilder; using std_muli = ValueBuilder; diff --git a/mlir/test/EDSC/builder-api-test.cpp b/mlir/test/EDSC/builder-api-test.cpp index 73f7ade..3fcfcf2 100644 --- a/mlir/test/EDSC/builder-api-test.cpp +++ b/mlir/test/EDSC/builder-api-test.cpp @@ -457,6 +457,44 @@ TEST_FUNC(diviu_op_i32) { f.erase(); } +TEST_FUNC(fpext_f32_f64) { + using namespace edsc::op; + auto f = makeFunction("fpext", {}, {}); + + OpBuilder builder(f.getBody()); + ScopedContext scope(builder, f.getLoc()); + auto f32Type = builder.getF32Type(); + auto f64Type = builder.getF64Type(); + std_fpext(std_constant_float(llvm::APFloat(10.0f), f32Type), f64Type); + + // clang-format off + // CHECK-LABEL: @fpext + // CHECK: {{.*}} = constant 1.0 + // CHECK-NEXT: {{.*}} = fpext + // clang-format on + f.print(llvm::outs()); + f.erase(); +} + +TEST_FUNC(fptrunc_f32_bf16) { + using namespace edsc::op; + auto f = makeFunction("fptrunc", {}, {}); + + OpBuilder builder(f.getBody()); + ScopedContext scope(builder, f.getLoc()); + auto f32Type = builder.getF32Type(); + auto bf16Type = builder.getBF16Type(); + std_fptrunc(std_constant_float(llvm::APFloat(10.0f), f32Type), bf16Type); + + // clang-format off + // CHECK-LABEL: @fptrunc + // CHECK: {{.*}} = constant 1.0 + // CHECK-NEXT: {{.*}} = fptrunc + // clang-format on + f.print(llvm::outs()); + f.erase(); +} + TEST_FUNC(select_op_i32) { using namespace edsc::op; auto i32Type = IntegerType::get(32, &globalContext()); -- 2.7.4