1061da546Spatrick //===-- RenderScriptExpressionOpts.h ----------------------------*- C++ -*-===// 2061da546Spatrick // 3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6061da546Spatrick // 7061da546Spatrick //===----------------------------------------------------------------------===// 8061da546Spatrick 9dda28197Spatrick #ifndef LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_RENDERSCRIPT_RENDERSCRIPTRUNTIME_RENDERSCRIPTEXPRESSIONOPTS_H 10dda28197Spatrick #define LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_RENDERSCRIPT_RENDERSCRIPTRUNTIME_RENDERSCRIPTEXPRESSIONOPTS_H 11061da546Spatrick 12061da546Spatrick #include "llvm/IR/Module.h" 13*f6aab3d8Srobert #include "llvm/MC/TargetRegistry.h" 14*f6aab3d8Srobert #include "llvm/Pass.h" 15061da546Spatrick #include "llvm/Target/TargetMachine.h" 16061da546Spatrick #include "llvm/Target/TargetOptions.h" 17061da546Spatrick 18061da546Spatrick #include "lldb/Target/LanguageRuntime.h" 19061da546Spatrick #include "lldb/Target/Process.h" 20061da546Spatrick #include "lldb/lldb-private.h" 21061da546Spatrick 22061da546Spatrick #include "RenderScriptRuntime.h" 23061da546Spatrick #include "RenderScriptx86ABIFixups.h" 24061da546Spatrick 25061da546Spatrick // RenderScriptRuntimeModulePass is a simple llvm::ModulesPass that is used 26061da546Spatrick // during expression evaluation to apply RenderScript-specific fixes for 27061da546Spatrick // expression evaluation. In particular this is used to make expression IR 28061da546Spatrick // conformant with the ABI generated by the slang frontend. This ModulePass is 29061da546Spatrick // executed in ClangExpressionParser::PrepareForExecution whenever an 30061da546Spatrick // expression's DWARF language is eLanguageTypeExtRenderscript 31061da546Spatrick 32061da546Spatrick class RenderScriptRuntimeModulePass : public llvm::ModulePass { 33061da546Spatrick public: 34061da546Spatrick static char ID; RenderScriptRuntimeModulePass(const lldb_private::Process * process)35061da546Spatrick RenderScriptRuntimeModulePass(const lldb_private::Process *process) 36061da546Spatrick : ModulePass(ID), m_process_ptr(process) {} 37061da546Spatrick 38061da546Spatrick bool runOnModule(llvm::Module &module) override; 39061da546Spatrick 40061da546Spatrick private: 41061da546Spatrick const lldb_private::Process *m_process_ptr; 42061da546Spatrick }; 43061da546Spatrick 44061da546Spatrick namespace lldb_private { 45061da546Spatrick namespace lldb_renderscript { 46061da546Spatrick struct RSIRPasses : public lldb_private::LLVMUserExpression::IRPasses { 47061da546Spatrick RSIRPasses(lldb_private::Process *process); 48061da546Spatrick 49061da546Spatrick ~RSIRPasses(); 50061da546Spatrick }; 51061da546Spatrick } // namespace lldb_renderscript 52061da546Spatrick } // namespace lldb_private 53061da546Spatrick #endif 54