1d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao/* 2d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao * Copyright (C) 2012 The Android Open Source Project 3d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao * 4d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License"); 5d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao * you may not use this file except in compliance with the License. 6d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao * You may obtain a copy of the License at 7d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao * 8d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao * http://www.apache.org/licenses/LICENSE-2.0 9d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao * 10d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao * Unless required by applicable law or agreed to in writing, software 11d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS, 12d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao * See the License for the specific language governing permissions and 14d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao * limitations under the License. 15d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao */ 16d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 17fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#ifndef ART_COMPILER_LLVM_COMPILER_LLVM_H_ 18fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#define ART_COMPILER_LLVM_COMPILER_LLVM_H_ 19d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 20700a402244a1a423da4f3ba8032459f4b65fa18fIan Rogers#include <memory> 21700a402244a1a423da4f3ba8032459f4b65fa18fIan Rogers#include <string> 22700a402244a1a423da4f3ba8032459f4b65fa18fIan Rogers#include <utility> 23700a402244a1a423da4f3ba8032459f4b65fa18fIan Rogers#include <vector> 24700a402244a1a423da4f3ba8032459f4b65fa18fIan Rogers 25761600567d73b23324ae0251e871c15d6849ffd8Elliott Hughes#include "base/macros.h" 26d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao#include "dex_file.h" 277940e44f4517de5e2634a7e07d58d0fb26160513Brian Carlstrom#include "driver/compiler_driver.h" 280f3c55331439970e01af67f80ac117c473bc04cfElliott Hughes#include "instruction_set.h" 292dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers#include "mirror/object.h" 30d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 31d1fec81868a3567560a3868350e0a945248e925bShih-wei Liaonamespace art { 32d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao class CompiledMethod; 331212a022fa5f8ef9585d765b1809521812af882cIan Rogers class CompilerDriver; 3489756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers class DexCompilationUnit; 352dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers namespace mirror { 36ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom class ArtMethod; 372dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers class ClassLoader; 382dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers } // namespace mirror 392dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers} // namespace art 40d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 41d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 42d1fec81868a3567560a3868350e0a945248e925bShih-wei Liaonamespace llvm { 43d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao class Function; 44d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao class LLVMContext; 45d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao class Module; 46d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao class PointerType; 47d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao class StructType; 48d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao class Type; 492dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers} // namespace llvm 50d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 51d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 52d1fec81868a3567560a3868350e0a945248e925bShih-wei Liaonamespace art { 534c1c283a7410784e9cab309f868248690b788a9cIan Rogersnamespace llvm { 54d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 55641ce0371c2f0dc95d26be02d8366124c8b66653Brian Carlstromclass LlvmCompilationUnit; 56d1fec81868a3567560a3868350e0a945248e925bShih-wei Liaoclass IRBuilder; 57d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 58d1fec81868a3567560a3868350e0a945248e925bShih-wei Liaoclass CompilerLLVM { 59d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao public: 601212a022fa5f8ef9585d765b1809521812af882cIan Rogers CompilerLLVM(CompilerDriver* driver, InstructionSet insn_set); 61d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 62d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao ~CompilerLLVM(); 63d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 641212a022fa5f8ef9585d765b1809521812af882cIan Rogers CompilerDriver* GetCompiler() const { 651212a022fa5f8ef9585d765b1809521812af882cIan Rogers return compiler_driver_; 66d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao } 67d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 68d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao InstructionSet GetInstructionSet() const { 69d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao return insn_set_; 70d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao } 71d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 723d504075f7c1204d581923460754bf6d3714b13fIan Rogers void SetBitcodeFileName(const std::string& filename) { 738b977d38483aaa08abcbdaa5fa888076c1142169Logan Chien bitcode_filename_ = filename; 74d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao } 75d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 7689756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers CompiledMethod* CompileDexMethod(DexCompilationUnit* dex_compilation_unit, 77bb33f2fa8e462937574a8cd1b744b86c2f762571Shih-wei Liao InvokeType invoke_type); 78bb33f2fa8e462937574a8cd1b744b86c2f762571Shih-wei Liao 7989756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers CompiledMethod* CompileGBCMethod(DexCompilationUnit* dex_compilation_unit, std::string* func); 80d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 8189756f21c107d96e6d1bbc75811bd33078c8ceeeIan Rogers CompiledMethod* CompileNativeMethod(DexCompilationUnit* dex_compilation_unit); 8288894ee835411de72025cd8a5d8d111a6f2a004aLogan Chien 83d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao private: 84641ce0371c2f0dc95d26be02d8366124c8b66653Brian Carlstrom LlvmCompilationUnit* AllocateCompilationUnit(); 858b977d38483aaa08abcbdaa5fa888076c1142169Logan Chien 860d94eb659387bb797498918ac7e1a41f14b4a11bIan Rogers CompilerDriver* const compiler_driver_; 87d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 880d94eb659387bb797498918ac7e1a41f14b4a11bIan Rogers const InstructionSet insn_set_; 89d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 90265091e581c9f643b37e7966890911f09e223269Brian Carlstrom Mutex next_cunit_id_lock_ DEFAULT_MUTEX_ACQUIRED_AFTER; 91265091e581c9f643b37e7966890911f09e223269Brian Carlstrom size_t next_cunit_id_ GUARDED_BY(next_cunit_id_lock_); 92d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 938b977d38483aaa08abcbdaa5fa888076c1142169Logan Chien std::string bitcode_filename_; 94d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 95d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao DISALLOW_COPY_AND_ASSIGN(CompilerLLVM); 96d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao}; 97d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 98d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 997934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom} // namespace llvm 1007934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom} // namespace art 101d1fec81868a3567560a3868350e0a945248e925bShih-wei Liao 102fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#endif // ART_COMPILER_LLVM_COMPILER_LLVM_H_ 103