diff options
Diffstat (limited to 'mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp')
| -rw-r--r-- | mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp | 13 | 
1 files changed, 8 insertions, 5 deletions
| diff --git a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp index ca46629..35eba72 100644 --- a/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp +++ b/mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp @@ -50,11 +50,11 @@ static void attachVarNameAttr(Operation *op, OpBuilder &builder,    }  } +template <typename T>  struct MemRefPointerLikeModel -    : public PointerLikeType::ExternalModel<MemRefPointerLikeModel, -                                            MemRefType> { +    : public PointerLikeType::ExternalModel<MemRefPointerLikeModel<T>, T> {    Type getElementType(Type pointer) const { -    return cast<MemRefType>(pointer).getElementType(); +    return cast<T>(pointer).getElementType();    }    mlir::acc::VariableTypeCategory @@ -63,7 +63,7 @@ struct MemRefPointerLikeModel      if (auto mappableTy = dyn_cast<MappableType>(varType)) {        return mappableTy.getTypeCategory(varPtr);      } -    auto memrefTy = cast<MemRefType>(pointer); +    auto memrefTy = cast<T>(pointer);      if (!memrefTy.hasRank()) {        // This memref is unranked - aka it could have any rank, including a        // rank of 0 which could mean scalar. For now, return uncategorized. @@ -296,7 +296,10 @@ void OpenACCDialect::initialize() {    // By attaching interfaces here, we make the OpenACC dialect dependent on    // the other dialects. This is probably better than having dialects like LLVM    // and memref be dependent on OpenACC. -  MemRefType::attachInterface<MemRefPointerLikeModel>(*getContext()); +  MemRefType::attachInterface<MemRefPointerLikeModel<MemRefType>>( +      *getContext()); +  UnrankedMemRefType::attachInterface< +      MemRefPointerLikeModel<UnrankedMemRefType>>(*getContext());    LLVM::LLVMPointerType::attachInterface<LLVMPointerPointerLikeModel>(        *getContext());  } | 
