1*0b57cec5SDimitry Andric //===-- RenderScriptExpressionOpts.h ----------------------------*- C++ -*-===//
2*0b57cec5SDimitry Andric //
3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0b57cec5SDimitry Andric //
7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
8*0b57cec5SDimitry Andric 
9*0b57cec5SDimitry Andric #ifndef LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_RENDERSCRIPT_RENDERSCRIPTRUNTIME_RENDERSCRIPTEXPRESSIONOPTS_H
10*0b57cec5SDimitry Andric #define LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_RENDERSCRIPT_RENDERSCRIPTRUNTIME_RENDERSCRIPTEXPRESSIONOPTS_H
11*0b57cec5SDimitry Andric 
12*0b57cec5SDimitry Andric #include "llvm/IR/Module.h"
13*0b57cec5SDimitry Andric #include "llvm/Support/TargetRegistry.h"
14*0b57cec5SDimitry Andric #include "llvm/Target/TargetMachine.h"
15*0b57cec5SDimitry Andric #include "llvm/Target/TargetOptions.h"
16*0b57cec5SDimitry Andric 
17*0b57cec5SDimitry Andric #include "lldb/Target/LanguageRuntime.h"
18*0b57cec5SDimitry Andric #include "lldb/Target/Process.h"
19*0b57cec5SDimitry Andric #include "lldb/lldb-private.h"
20*0b57cec5SDimitry Andric 
21*0b57cec5SDimitry Andric #include "RenderScriptRuntime.h"
22*0b57cec5SDimitry Andric #include "RenderScriptx86ABIFixups.h"
23*0b57cec5SDimitry Andric 
24*0b57cec5SDimitry Andric // RenderScriptRuntimeModulePass is a simple llvm::ModulesPass that is used
25*0b57cec5SDimitry Andric // during expression evaluation to apply RenderScript-specific fixes for
26*0b57cec5SDimitry Andric // expression evaluation. In particular this is used to make expression IR
27*0b57cec5SDimitry Andric // conformant with the ABI generated by the slang frontend. This ModulePass is
28*0b57cec5SDimitry Andric // executed in ClangExpressionParser::PrepareForExecution whenever an
29*0b57cec5SDimitry Andric // expression's DWARF language is eLanguageTypeExtRenderscript
30*0b57cec5SDimitry Andric 
31*0b57cec5SDimitry Andric class RenderScriptRuntimeModulePass : public llvm::ModulePass {
32*0b57cec5SDimitry Andric public:
33*0b57cec5SDimitry Andric   static char ID;
RenderScriptRuntimeModulePass(const lldb_private::Process * process)34*0b57cec5SDimitry Andric   RenderScriptRuntimeModulePass(const lldb_private::Process *process)
35*0b57cec5SDimitry Andric       : ModulePass(ID), m_process_ptr(process) {}
36*0b57cec5SDimitry Andric 
37*0b57cec5SDimitry Andric   bool runOnModule(llvm::Module &module) override;
38*0b57cec5SDimitry Andric 
39*0b57cec5SDimitry Andric private:
40*0b57cec5SDimitry Andric   const lldb_private::Process *m_process_ptr;
41*0b57cec5SDimitry Andric };
42*0b57cec5SDimitry Andric 
43*0b57cec5SDimitry Andric namespace lldb_private {
44*0b57cec5SDimitry Andric namespace lldb_renderscript {
45*0b57cec5SDimitry Andric struct RSIRPasses : public lldb_private::LLVMUserExpression::IRPasses {
46*0b57cec5SDimitry Andric   RSIRPasses(lldb_private::Process *process);
47*0b57cec5SDimitry Andric 
48*0b57cec5SDimitry Andric   ~RSIRPasses();
49*0b57cec5SDimitry Andric };
50*0b57cec5SDimitry Andric } // namespace lldb_renderscript
51*0b57cec5SDimitry Andric } // namespace lldb_private
52*0b57cec5SDimitry Andric #endif
53