-
Notifications
You must be signed in to change notification settings - Fork 14.9k
Revert "[MLIR][Math][XeVM] Add MathToXeVM (math-to-xevm
) pass"
#162923
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
)" This reverts commit fabd1c4.
@llvm/pr-subscribers-mlir Author: Md Abdullah Shahneous Bari (mshahneo) ChangesReverts llvm/llvm-project#159878 Patch is 29.18 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/162923.diff 8 Files Affected:
diff --git a/mlir/include/mlir/Conversion/MathToXeVM/MathToXeVM.h b/mlir/include/mlir/Conversion/MathToXeVM/MathToXeVM.h
deleted file mode 100644
index 91d3c92fd6296..0000000000000
--- a/mlir/include/mlir/Conversion/MathToXeVM/MathToXeVM.h
+++ /dev/null
@@ -1,27 +0,0 @@
-//===- MathToXeVM.h - Utils for converting Math to XeVM -------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-#ifndef MLIR_CONVERSION_MATHTOXEVM_MATHTOXEVM_H_
-#define MLIR_CONVERSION_MATHTOXEVM_MATHTOXEVM_H_
-
-#include "mlir/Conversion/LLVMCommon/TypeConverter.h"
-#include "mlir/Dialect/LLVMIR/XeVMDialect.h"
-#include "mlir/IR/PatternMatch.h"
-#include <memory>
-
-namespace mlir {
-class Pass;
-
-#define GEN_PASS_DECL_CONVERTMATHTOXEVM
-#include "mlir/Conversion/Passes.h.inc"
-
-/// Populate the given list with patterns that convert from Math to XeVM calls.
-void populateMathToXeVMConversionPatterns(RewritePatternSet &patterns,
- bool convertArith);
-} // namespace mlir
-
-#endif // MLIR_CONVERSION_MATHTOXEVM_MATHTOXEVM_H_
diff --git a/mlir/include/mlir/Conversion/Passes.h b/mlir/include/mlir/Conversion/Passes.h
index 40d866ec7bf10..da061b269daf7 100644
--- a/mlir/include/mlir/Conversion/Passes.h
+++ b/mlir/include/mlir/Conversion/Passes.h
@@ -49,7 +49,6 @@
#include "mlir/Conversion/MathToLibm/MathToLibm.h"
#include "mlir/Conversion/MathToROCDL/MathToROCDL.h"
#include "mlir/Conversion/MathToSPIRV/MathToSPIRVPass.h"
-#include "mlir/Conversion/MathToXeVM/MathToXeVM.h"
#include "mlir/Conversion/MemRefToEmitC/MemRefToEmitCPass.h"
#include "mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h"
#include "mlir/Conversion/MemRefToSPIRV/MemRefToSPIRVPass.h"
diff --git a/mlir/include/mlir/Conversion/Passes.td b/mlir/include/mlir/Conversion/Passes.td
index 25e9d34f3e653..3c18ecc753d0f 100644
--- a/mlir/include/mlir/Conversion/Passes.td
+++ b/mlir/include/mlir/Conversion/Passes.td
@@ -796,31 +796,6 @@ def ConvertMathToSPIRVPass : Pass<"convert-math-to-spirv"> {
let dependentDialects = ["spirv::SPIRVDialect"];
}
-//===----------------------------------------------------------------------===//
-// MathToXeVM
-//===----------------------------------------------------------------------===//
-
-def ConvertMathToXeVM : Pass<"convert-math-to-xevm", "ModuleOp"> {
- let summary =
- "Convert (fast) math operations to native XeVM/SPIRV equivalents";
- let description = [{
- This pass converts supported math ops marked with the `afn` fastmath flag
- to function calls for OpenCL `native_` math intrinsics: These intrinsics
- are typically mapped directly to native device instructions, often resulting
- in better performance. However, the precision/error of these intrinsics
- are implementation-defined, and thus math ops are only converted when they
- have the `afn` fastmath flag enabled.
- }];
- let options = [Option<
- "convertArith", "convert-arith", "bool", /*default=*/"true",
- "Convert supported Arith ops (e.g. arith.divf) as well.">];
- let dependentDialects = [
- "arith::ArithDialect",
- "xevm::XeVMDialect",
- "LLVM::LLVMDialect",
- ];
-}
-
//===----------------------------------------------------------------------===//
// MathToEmitC
//===----------------------------------------------------------------------===//
diff --git a/mlir/lib/Conversion/CMakeLists.txt b/mlir/lib/Conversion/CMakeLists.txt
index bebf1b8fff3f9..71986f83c4870 100644
--- a/mlir/lib/Conversion/CMakeLists.txt
+++ b/mlir/lib/Conversion/CMakeLists.txt
@@ -40,7 +40,6 @@ add_subdirectory(MathToLibm)
add_subdirectory(MathToLLVM)
add_subdirectory(MathToROCDL)
add_subdirectory(MathToSPIRV)
-add_subdirectory(MathToXeVM)
add_subdirectory(MemRefToEmitC)
add_subdirectory(MemRefToLLVM)
add_subdirectory(MemRefToSPIRV)
diff --git a/mlir/lib/Conversion/MathToXeVM/CMakeLists.txt b/mlir/lib/Conversion/MathToXeVM/CMakeLists.txt
deleted file mode 100644
index 95aaba31a993e..0000000000000
--- a/mlir/lib/Conversion/MathToXeVM/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-add_mlir_conversion_library(MLIRMathToXeVM
- MathToXeVM.cpp
-
- ADDITIONAL_HEADER_DIRS
- ${MLIR_MAIN_INCLUDE_DIR}/mlir/Conversion/MathToXeVM
-
- DEPENDS
- MLIRConversionPassIncGen
-
- LINK_COMPONENTS
- Core
-
- LINK_LIBS PUBLIC
- MLIRMathDialect
- MLIRLLVMCommonConversion
- MLIRPass
- MLIRTransformUtils
- MLIRVectorDialect
- )
diff --git a/mlir/lib/Conversion/MathToXeVM/MathToXeVM.cpp b/mlir/lib/Conversion/MathToXeVM/MathToXeVM.cpp
deleted file mode 100644
index 03053dee5af40..0000000000000
--- a/mlir/lib/Conversion/MathToXeVM/MathToXeVM.cpp
+++ /dev/null
@@ -1,174 +0,0 @@
-//===-- MathToXeVM.cpp - conversion from Math to XeVM ---------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "mlir/Conversion/MathToXeVM/MathToXeVM.h"
-#include "mlir/Conversion/ArithCommon/AttrToLLVMConverter.h"
-#include "mlir/Conversion/GPUCommon/GPUCommonPass.h"
-#include "mlir/Conversion/LLVMCommon/LoweringOptions.h"
-#include "mlir/Conversion/LLVMCommon/TypeConverter.h"
-#include "mlir/Dialect/Func/IR/FuncOps.h"
-#include "mlir/Dialect/LLVMIR/FunctionCallUtils.h"
-#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
-#include "mlir/Dialect/Math/IR/Math.h"
-#include "mlir/Dialect/Vector/IR/VectorOps.h"
-#include "mlir/IR/BuiltinDialect.h"
-#include "mlir/IR/PatternMatch.h"
-#include "mlir/Pass/Pass.h"
-#include "mlir/Transforms/DialectConversion.h"
-#include "llvm/Support/FormatVariadic.h"
-
-namespace mlir {
-#define GEN_PASS_DEF_CONVERTMATHTOXEVM
-#include "mlir/Conversion/Passes.h.inc"
-} // namespace mlir
-
-using namespace mlir;
-
-#define DEBUG_TYPE "math-to-xevm"
-
-/// Convert math ops marked with `fast` (`afn`) to native OpenCL intrinsics.
-template <typename Op>
-struct ConvertNativeFuncPattern final : public OpConversionPattern<Op> {
-
- ConvertNativeFuncPattern(MLIRContext *context, StringRef nativeFunc,
- PatternBenefit benefit = 1)
- : OpConversionPattern<Op>(context, benefit), nativeFunc(nativeFunc) {}
-
- LogicalResult
- matchAndRewrite(Op op, typename Op::Adaptor adaptor,
- ConversionPatternRewriter &rewriter) const override {
- if (!isSPIRVCompatibleFloatOrVec(op.getType()))
- return failure();
-
- arith::FastMathFlags fastFlags = op.getFastmath();
- if (!arith::bitEnumContainsAll(fastFlags, arith::FastMathFlags::afn))
- return rewriter.notifyMatchFailure(op, "not a fastmath `afn` operation");
-
- SmallVector<Type, 1> operandTypes;
- for (auto operand : adaptor.getOperands()) {
- Type opTy = operand.getType();
- // This pass only supports operations on vectors that are already in SPIRV
- // supported vector sizes: Distributing unsupported vector sizes to SPIRV
- // supported vector sizes are done in other blocking optimization passes.
- if (!isSPIRVCompatibleFloatOrVec(opTy))
- return rewriter.notifyMatchFailure(
- op, llvm::formatv("incompatible operand type: '{0}'", opTy));
- operandTypes.push_back(opTy);
- }
-
- auto moduleOp = op->template getParentWithTrait<OpTrait::SymbolTable>();
- auto funcOpRes = LLVM::lookupOrCreateFn(
- rewriter, moduleOp, getMangledNativeFuncName(operandTypes),
- operandTypes, op.getType());
- assert(!failed(funcOpRes));
- LLVM::LLVMFuncOp funcOp = funcOpRes.value();
-
- auto callOp = rewriter.replaceOpWithNewOp<LLVM::CallOp>(
- op, funcOp, adaptor.getOperands());
- // Preserve fastmath flags in our MLIR op when converting to llvm function
- // calls, in order to allow further fastmath optimizations: We thus need to
- // convert arith fastmath attrs into attrs recognized by llvm.
- arith::AttrConvertFastMathToLLVM<Op, LLVM::CallOp> fastAttrConverter(op);
- mlir::NamedAttribute fastAttr = fastAttrConverter.getAttrs()[0];
- callOp->setAttr(fastAttr.getName(), fastAttr.getValue());
- return success();
- }
-
- inline bool isSPIRVCompatibleFloatOrVec(Type type) const {
- if (type.isFloat())
- return true;
- if (auto vecType = dyn_cast<VectorType>(type)) {
- if (!vecType.getElementType().isFloat())
- return false;
- // SPIRV distinguishes between vectors and matrices: OpenCL native math
- // intrsinics are not compatible with matrices.
- ArrayRef<int64_t> shape = vecType.getShape();
- if (shape.size() != 1)
- return false;
- // SPIRV only allows vectors of size 2, 3, 4, 8, 16.
- if (shape[0] == 2 || shape[0] == 3 || shape[0] == 4 || shape[0] == 8 ||
- shape[0] == 16)
- return true;
- }
- return false;
- }
-
- inline std::string
- getMangledNativeFuncName(const ArrayRef<Type> operandTypes) const {
- std::string mangledFuncName =
- "_Z" + std::to_string(nativeFunc.size()) + nativeFunc.str();
-
- auto appendFloatToMangledFunc = [&mangledFuncName](Type type) {
- if (type.isF32())
- mangledFuncName += "f";
- else if (type.isF16())
- mangledFuncName += "Dh";
- else if (type.isF64())
- mangledFuncName += "d";
- };
-
- for (auto type : operandTypes) {
- if (auto vecType = dyn_cast<VectorType>(type)) {
- mangledFuncName += "Dv" + std::to_string(vecType.getShape()[0]) + "_";
- appendFloatToMangledFunc(vecType.getElementType());
- } else
- appendFloatToMangledFunc(type);
- }
-
- return mangledFuncName;
- }
-
- const StringRef nativeFunc;
-};
-
-void mlir::populateMathToXeVMConversionPatterns(RewritePatternSet &patterns,
- bool convertArith) {
- patterns.add<ConvertNativeFuncPattern<math::ExpOp>>(patterns.getContext(),
- "__spirv_ocl_native_exp");
- patterns.add<ConvertNativeFuncPattern<math::CosOp>>(patterns.getContext(),
- "__spirv_ocl_native_cos");
- patterns.add<ConvertNativeFuncPattern<math::Exp2Op>>(
- patterns.getContext(), "__spirv_ocl_native_exp2");
- patterns.add<ConvertNativeFuncPattern<math::LogOp>>(patterns.getContext(),
- "__spirv_ocl_native_log");
- patterns.add<ConvertNativeFuncPattern<math::Log2Op>>(
- patterns.getContext(), "__spirv_ocl_native_log2");
- patterns.add<ConvertNativeFuncPattern<math::Log10Op>>(
- patterns.getContext(), "__spirv_ocl_native_log10");
- patterns.add<ConvertNativeFuncPattern<math::PowFOp>>(
- patterns.getContext(), "__spirv_ocl_native_powr");
- patterns.add<ConvertNativeFuncPattern<math::RsqrtOp>>(
- patterns.getContext(), "__spirv_ocl_native_rsqrt");
- patterns.add<ConvertNativeFuncPattern<math::SinOp>>(patterns.getContext(),
- "__spirv_ocl_native_sin");
- patterns.add<ConvertNativeFuncPattern<math::SqrtOp>>(
- patterns.getContext(), "__spirv_ocl_native_sqrt");
- patterns.add<ConvertNativeFuncPattern<math::TanOp>>(patterns.getContext(),
- "__spirv_ocl_native_tan");
- if (convertArith)
- patterns.add<ConvertNativeFuncPattern<arith::DivFOp>>(
- patterns.getContext(), "__spirv_ocl_native_divide");
-}
-
-namespace {
-struct ConvertMathToXeVMPass
- : public impl::ConvertMathToXeVMBase<ConvertMathToXeVMPass> {
- using Base::Base;
- void runOnOperation() override;
-};
-} // namespace
-
-void ConvertMathToXeVMPass::runOnOperation() {
- RewritePatternSet patterns(&getContext());
- populateMathToXeVMConversionPatterns(patterns, convertArith);
- ConversionTarget target(getContext());
- target.addLegalDialect<BuiltinDialect, LLVM::LLVMDialect>();
- if (failed(
- applyPartialConversion(getOperation(), target, std::move(patterns))))
- signalPassFailure();
-}
diff --git a/mlir/test/Conversion/MathToXeVM/math-to-xevm.mlir b/mlir/test/Conversion/MathToXeVM/math-to-xevm.mlir
deleted file mode 100644
index d76627bb4201c..0000000000000
--- a/mlir/test/Conversion/MathToXeVM/math-to-xevm.mlir
+++ /dev/null
@@ -1,155 +0,0 @@
-// RUN: mlir-opt %s -convert-math-to-xevm \
-// RUN: | FileCheck %s -check-prefixes='CHECK,CHECK-ARITH'
-// RUN: mlir-opt %s -convert-math-to-xevm='convert-arith=false' \
-// RUN: | FileCheck %s -check-prefixes='CHECK,CHECK-NO-ARITH'
-
-module @test_module {
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_expDh(f16) -> f16
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_expf(f32) -> f32
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_expd(f64) -> f64
- //
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_expDv2_d(vector<2xf64>) -> vector<2xf64>
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_expDv3_d(vector<3xf64>) -> vector<3xf64>
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_expDv4_d(vector<4xf64>) -> vector<4xf64>
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_expDv8_d(vector<8xf64>) -> vector<8xf64>
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_expDv16_d(vector<16xf64>) -> vector<16xf64>
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_expDv16_f(vector<16xf32>) -> vector<16xf32>
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_expDv4_Dh(vector<4xf16>) -> vector<4xf16>
- //
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_cosDh(f16) -> f16
- // CHECK-DAG: llvm.func @_Z23__spirv_ocl_native_exp2f(f32) -> f32
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_logDh(f16) -> f16
- // CHECK-DAG: llvm.func @_Z23__spirv_ocl_native_log2f(f32) -> f32
- // CHECK-DAG: llvm.func @_Z24__spirv_ocl_native_log10d(f64) -> f64
- // CHECK-DAG: llvm.func @_Z23__spirv_ocl_native_powrDhDh(f16, f16) -> f16
- // CHECK-DAG: llvm.func @_Z24__spirv_ocl_native_rsqrtd(f64) -> f64
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_sinDh(f16) -> f16
- // CHECK-DAG: llvm.func @_Z23__spirv_ocl_native_sqrtf(f32) -> f32
- // CHECK-DAG: llvm.func @_Z22__spirv_ocl_native_tand(f64) -> f64
- // CHECK-ARITH-DAG: llvm.func @_Z25__spirv_ocl_native_divideff(f32, f32) -> f32
-
- // CHECK-LABEL: func @math_ops
- func.func @math_ops() {
-
- %c1_f16 = arith.constant 1. : f16
- %c1_f32 = arith.constant 1. : f32
- %c1_f64 = arith.constant 1. : f64
-
- // CHECK: math.exp
- %exp_normal_f16 = math.exp %c1_f16 : f16
- // CHECK: math.exp
- %exp_normal_f32 = math.exp %c1_f32 : f32
- // CHECK: math.exp
- %exp_normal_f64 = math.exp %c1_f64 : f64
-
- // Check float operations are converted properly:
-
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expDh(%{{.*}}) {fastmathFlags = #llvm.fastmath<fast>} : (f16) -> f16
- %exp_fast_f16 = math.exp %c1_f16 fastmath<fast> : f16
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expf(%{{.*}}) {fastmathFlags = #llvm.fastmath<fast>} : (f32) -> f32
- %exp_fast_f32 = math.exp %c1_f32 fastmath<fast> : f32
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expd(%{{.*}}) {fastmathFlags = #llvm.fastmath<fast>} : (f64) -> f64
- %exp_fast_f64 = math.exp %c1_f64 fastmath<fast> : f64
-
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expDh(%{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (f16) -> f16
- %exp_afn_f16 = math.exp %c1_f16 fastmath<afn> : f16
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expf(%{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (f32) -> f32
- %exp_afn_f32 = math.exp %c1_f32 fastmath<afn> : f32
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expd(%{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (f64) -> f64
- %exp_afn_f64 = math.exp %c1_f64 fastmath<afn> : f64
-
- // CHECK: math.exp
- %exp_none_f16 = math.exp %c1_f16 fastmath<none> : f16
- // CHECK: math.exp
- %exp_none_f32 = math.exp %c1_f32 fastmath<none> : f32
- // CHECK: math.exp
- %exp_none_f64 = math.exp %c1_f64 fastmath<none> : f64
-
- // Check vector operations:
-
- %v2_c1_f64 = arith.constant dense<1.> : vector<2xf64>
- %v3_c1_f64 = arith.constant dense<1.> : vector<3xf64>
- %v4_c1_f64 = arith.constant dense<1.> : vector<4xf64>
- %v8_c1_f64 = arith.constant dense<1.> : vector<8xf64>
- %v16_c1_f64 = arith.constant dense<1.> : vector<16xf64>
-
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expDv2_d(%{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (vector<2xf64>) -> vector<2xf64>
- %exp_v2_f64 = math.exp %v2_c1_f64 fastmath<afn> : vector<2xf64>
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expDv3_d(%{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (vector<3xf64>) -> vector<3xf64>
- %exp_v3_f64 = math.exp %v3_c1_f64 fastmath<afn> : vector<3xf64>
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expDv4_d(%{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (vector<4xf64>) -> vector<4xf64>
- %exp_v4_f64 = math.exp %v4_c1_f64 fastmath<afn> : vector<4xf64>
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expDv8_d(%{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (vector<8xf64>) -> vector<8xf64>
- %exp_v8_f64 = math.exp %v8_c1_f64 fastmath<afn> : vector<8xf64>
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expDv16_d(%{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (vector<16xf64>) -> vector<16xf64>
- %exp_v16_f64 = math.exp %v16_c1_f64 fastmath<afn> : vector<16xf64>
-
- %v16_c1_f32 = arith.constant dense<1.> : vector<16xf32>
- %v4_c1_f16 = arith.constant dense<1.> : vector<4xf16>
-
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expDv16_f(%{{.*}}) {fastmathFlags = #llvm.fastmath<fast>} : (vector<16xf32>) -> vector<16xf32>
- %exp_v16_f32 = math.exp %v16_c1_f32 fastmath<fast> : vector<16xf32>
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expDv4_Dh(%{{.*}}) {fastmathFlags = #llvm.fastmath<fast>} : (vector<4xf16>) -> vector<4xf16>
- %exp_v4_f16 = math.exp %v4_c1_f16 fastmath<fast> : vector<4xf16>
-
- // Check unsupported vector sizes are not converted:
-
- %v5_c1_f64 = arith.constant dense<1.> : vector<5xf64>
- %v32_c1_f64 = arith.constant dense<1.> : vector<32xf64>
-
- // CHECK: math.exp
- %exp_v5_f64 = math.exp %v5_c1_f64 fastmath<afn> : vector<5xf64>
- // CHECK: math.exp
- %exp_v32_f64 = math.exp %v32_c1_f64 fastmath<afn> : vector<32xf64>
-
- // Check fastmath flags propagate properly:
-
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expDh(%{{.*}}) {fastmathFlags = #llvm.fastmath<fast>} : (f16) -> f16
- %exp_fastmath_all_f16 = math.exp %c1_f16 fastmath<reassoc,nnan,ninf,nsz,arcp,contract,afn> : f16
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expf(%{{.*}}) {fastmathFlags = #llvm.fastmath<nnan, ninf, nsz, arcp, contract, afn>} : (f32) -> f32
- %exp_fastmath_most_f32 = math.exp %c1_f32 fastmath<nnan,ninf,nsz,arcp,contract,afn> : f32
- // CHECK: llvm.call @_Z22__spirv_ocl_native_expf(%{{.*}}) {fastmathFlags = #llvm.fastmath<nnan, afn, reassoc>} : (f32) -> f32
- %exp_afn_reassoc_nnan_f32 = math.exp %c1_f32 fastmath<afn,reassoc,nnan> : f32
-
- // Check all other math operations:
-
- // CHECK: llvm.call @_Z22__spirv_ocl_native_cosDh(%{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (f16) -> f16
- %cos_afn_f16 = math.cos %c1_f16 fastmath<afn> : f16
-
- // CHECK: llvm.call @_Z23__spirv_ocl_native_exp2f(%{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (f32) -> f32
- %exp2_afn_f32 = math.exp2 %c1_f32 fastmath<afn> : f32
-
- // CHECK: llvm.call @_Z22__spirv_ocl_native_logDh(%{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (f16) -> f16
- %log_afn_f16 = math.log %c1_f16 fastmath<afn> : f16
-
- // CHECK: llvm.call @_Z23__spirv_ocl_native_log2f(%{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (f32) -> f32
- %log2_afn_f32 = math.log2 %c1_f32 fastmath<afn> : f32
-
- // CHECK: llvm.call @_Z24__spirv_ocl_native_log10d(%{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (f64) -> f64
- %log10_afn_f64 = math.log10 %c1_f64 fastmath<afn> : f64
-
- // CHECK: llvm.call @_Z23__spirv_ocl_native_powrDhDh(%{{.*}}, %{{.*}}) {fastmathFlags = #llvm.fastmath<afn>} : (f16, f16) -> f16
- %powr_afn_f16 = math.powf %c1_f16, %c1_f16 fastmath<afn>...
[truncated]
|
|
Hi! can we land this revert to unblock the bots? Thanks! |
Landed the revert PR. |
Please always mention the revert reasons in the PR description / commit messages. |
Will do from now on. Thanks, @joker-eph . |
Reverts #159878
Missing CMake dependency.