[PATCH] D75869: [mlir][spirv] Use larger range for target environment lookup function
Lei Zhang via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 12 16:52:01 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG66c378d66e93: [mlir][spirv] Use larger range for target environment lookup function (authored by antiagainst).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D75869/new/
https://reviews.llvm.org/D75869
Files:
mlir/docs/Dialects/SPIR-V.md
mlir/include/mlir/Dialect/SPIRV/TargetAndABI.h
mlir/lib/Dialect/SPIRV/TargetAndABI.cpp
Index: mlir/lib/Dialect/SPIRV/TargetAndABI.cpp
===================================================================
--- mlir/lib/Dialect/SPIRV/TargetAndABI.cpp
+++ mlir/lib/Dialect/SPIRV/TargetAndABI.cpp
@@ -11,6 +11,7 @@
#include "mlir/IR/Builders.h"
#include "mlir/IR/FunctionSupport.h"
#include "mlir/IR/Operation.h"
+#include "mlir/IR/SymbolTable.h"
using namespace mlir;
@@ -294,8 +295,18 @@
}
spirv::TargetEnvAttr spirv::lookupTargetEnvOrDefault(Operation *op) {
- if (auto attr = op->getAttrOfType<spirv::TargetEnvAttr>(
- spirv::getTargetEnvAttrName()))
- return attr;
+ Operation *symTable = op;
+ while (symTable) {
+ symTable = SymbolTable::getNearestSymbolTable(symTable);
+ if (!symTable)
+ break;
+
+ if (auto attr = symTable->getAttrOfType<spirv::TargetEnvAttr>(
+ spirv::getTargetEnvAttrName()))
+ return attr;
+
+ symTable = symTable->getParentOp();
+ }
+
return getDefaultTargetEnv(op->getContext());
}
Index: mlir/include/mlir/Dialect/SPIRV/TargetAndABI.h
===================================================================
--- mlir/include/mlir/Dialect/SPIRV/TargetAndABI.h
+++ mlir/include/mlir/Dialect/SPIRV/TargetAndABI.h
@@ -174,9 +174,9 @@
/// and no extra extensions.
TargetEnvAttr getDefaultTargetEnv(MLIRContext *context);
-/// Queries the target environment from the given `op` or returns the default
-/// target environment (SPIR-V 1.0 with Shader capability and no extra
-/// extensions) if not provided.
+/// Queries the target environment recursively from enclosing symbol table ops
+/// containing the given `op` or returns the default target environment as
+/// returned by getDefaultTargetEnv() if not provided.
TargetEnvAttr lookupTargetEnvOrDefault(Operation *op);
} // namespace spirv
Index: mlir/docs/Dialects/SPIR-V.md
===================================================================
--- mlir/docs/Dialects/SPIR-V.md
+++ mlir/docs/Dialects/SPIR-V.md
@@ -792,9 +792,11 @@
} { ... }
```
-Dialect conversion framework will utilize the information in `spv.target_env`
-to properly filter out patterns and ops not available in the target execution
-environment.
+Dialect conversion framework will utilize the information in `spv.target_env` to
+properly filter out patterns and ops not available in the target execution
+environment. When targeting SPIR-V, one needs to create a
+[`SPIRVConversionTarget`](#spirvconversiontarget) by providing such an
+attribute.
## Shader interface (ABI)
@@ -931,6 +933,10 @@
proper hooks to check the dynamic legality of SPIR-V ops. Users can further
register other legality constraints into the returned `SPIRVConversionTarget`.
+`spirv::lookupTargetEnvOrDefault()` is a handy utility function to query an
+`spv.target_env` attached in the input IR or use the feault to construct a
+`SPIRVConversionTarget`.
+
### `SPIRVTypeConverter`
The `mlir::SPIRVTypeConverter` derives from `mlir::TypeConverter` and provides
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D75869.250095.patch
Type: text/x-patch
Size: 2978 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200312/8ba498b7/attachment.bin>
More information about the llvm-commits
mailing list