mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 02:06:06 +00:00

In section 3.4.2, some example of illegal data transfer using expression are given. One of it is when multiple device objects are part of an expression in the rhs. Current implementation allow a single device object in such case. This patch adds a similar restriction.
53 lines
1.4 KiB
C++
53 lines
1.4 KiB
C++
//===-- lib/Semantics/check-cuda.h ------------------------------*- C++ -*-===//
|
|
//
|
|
// 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 FORTRAN_SEMANTICS_CHECK_CUDA_H_
|
|
#define FORTRAN_SEMANTICS_CHECK_CUDA_H_
|
|
|
|
#include "flang/Semantics/semantics.h"
|
|
#include <list>
|
|
|
|
namespace Fortran::parser {
|
|
struct Program;
|
|
class Messages;
|
|
struct Name;
|
|
class CharBlock;
|
|
struct AssignmentStmt;
|
|
struct ExecutionPartConstruct;
|
|
struct ExecutableConstruct;
|
|
struct ActionStmt;
|
|
struct IfConstruct;
|
|
struct CUFKernelDoConstruct;
|
|
struct SubroutineSubprogram;
|
|
struct FunctionSubprogram;
|
|
struct SeparateModuleSubprogram;
|
|
} // namespace Fortran::parser
|
|
|
|
namespace Fortran::semantics {
|
|
|
|
class SemanticsContext;
|
|
|
|
class CUDAChecker : public virtual BaseChecker {
|
|
public:
|
|
explicit CUDAChecker(SemanticsContext &c) : context_{c} {}
|
|
void Enter(const parser::SubroutineSubprogram &);
|
|
void Enter(const parser::FunctionSubprogram &);
|
|
void Enter(const parser::SeparateModuleSubprogram &);
|
|
void Enter(const parser::CUFKernelDoConstruct &);
|
|
void Enter(const parser::AssignmentStmt &);
|
|
|
|
private:
|
|
SemanticsContext &context_;
|
|
};
|
|
|
|
bool CanonicalizeCUDA(parser::Program &);
|
|
|
|
} // namespace Fortran::semantics
|
|
|
|
#endif // FORTRAN_SEMANTICS_CHECK_CUDA_H_
|