The OpenACC dialect must coexist with source language dialects (FIR, CIR, etc.) to enable offloading. While type interfaces (`PointerLikeType` and `MappableType`) provide the primary contract for variable mapping, some scenarios require pipeline-specific customization or need to express information that cannot be adequately captured through operation and type interfaces alone. This commit introduces the `OpenACCSupport` analysis, which provides extensible support APIs that can be customized per-pipeline. The analysis follows the Concept-Model pattern used in MLIR's `AliasAnalysis` and is never invalidated, persisting throughout the pass pipeline. The initial API, `getVariableName(Value) -> string`, retrieves variable names from MLIR values by: - Checking for `acc.var_name` attributes - Extracting names from ACC data clause operations (e.g., `acc.copyin`) - Walking through `ViewLikeOpInterface` operations to find the source This will be used in the implicit data mapping pass to automatically generate device mappings with correct user-visible variable names. Usage: Passes call `getAnalysis<OpenACCSupport>()` to get a cached instance with either the default or a previously- registered custom implementation. Custom implementations can be registered in a setup pass by calling `setImplementation()` before the consumer pass runs.
30 lines
1008 B
C++
30 lines
1008 B
C++
//===- TestOpenACC.cpp - OpenACC Test Registration ------------------------===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file contains unified registration for all OpenACC test passes.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
namespace mlir {
|
|
namespace test {
|
|
|
|
// Forward declarations of individual test pass registration functions
|
|
void registerTestPointerLikeTypeInterfacePass();
|
|
void registerTestRecipePopulatePass();
|
|
void registerTestOpenACCSupportPass();
|
|
|
|
// Unified registration function for all OpenACC tests
|
|
void registerTestOpenACC() {
|
|
registerTestPointerLikeTypeInterfacePass();
|
|
registerTestRecipePopulatePass();
|
|
registerTestOpenACCSupportPass();
|
|
}
|
|
|
|
} // namespace test
|
|
} // namespace mlir
|