slang_rs_foreach_lowering.h revision fb40ee2a90f37967bf4a40a18dec7f60e5c580d8
1fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni/*
2fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni * Copyright 2015, The Android Open Source Project
3fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni *
4fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni * Licensed under the Apache License, Version 2.0 (the "License");
5fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni * you may not use this file except in compliance with the License.
6fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni * You may obtain a copy of the License at
7fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni *
8fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni *     http://www.apache.org/licenses/LICENSE-2.0
9fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni *
10fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni * Unless required by applicable law or agreed to in writing, software
11fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni * distributed under the License is distributed on an "AS IS" BASIS,
12fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni * See the License for the specific language governing permissions and
14fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni * limitations under the License.
15fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni */
16fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni
17fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni#ifndef _FRAMEWORKS_COMPILE_SLANG_RS_FOREACH_LOWERING_H
18fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni#define _FRAMEWORKS_COMPILE_SLANG_RS_FOREACH_LOWERING_H
19fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni
20fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni#include "clang/AST/StmtVisitor.h"
21fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni
22fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ninamespace clang {
23fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni  class ASTContext;
24fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni  class CallExpr;
25fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni  class Expr;
26fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni  class FunctionDecl;
27fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni}
28fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni
29fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ninamespace slang {
30fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni
31fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Niclass RSContext;
32fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni
33fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Niclass RSForEachLowering : public clang::StmtVisitor<RSForEachLowering> {
34fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni public:
35fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni  RSForEachLowering(RSContext* ctxt);
36fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni
37fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni  void VisitCallExpr(clang::CallExpr *CE);
38fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni  void VisitStmt(clang::Stmt *S);
39fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni
40fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni private:
41fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni  RSContext* mCtxt;
42fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni  clang::ASTContext& mASTCtxt;
43fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni
44fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni  const clang::FunctionDecl* matchFunctionDesignator(clang::Expr* expr);
45fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni  const clang::FunctionDecl* matchKernelLaunchCall(clang::CallExpr* CE);
46fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni  clang::FunctionDecl* CreateForEachInternalFunctionDecl();
47fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni  clang::Expr* CreateCalleeExprForInternalForEach();
48fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni};  // RSForEachLowering
49fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni
50fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni}  // namespace slang
51fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni
52fb40ee2a90f37967bf4a40a18dec7f60e5c580d8Yang Ni#endif  // _FRAMEWORKS_COMPILE_SLANG_RS_FOREACH_LOWERING_H
53