1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef LIBLLVMBACKEND_UTILS_H 17 #define LIBLLVMBACKEND_UTILS_H 18 19 #include "llvm_ark_interface.h" 20 #include "llvm/IR/IRBuilder.h" 21 #include "llvm/IR/Value.h" 22 23 namespace ark::llvmbackend::utils { 24 25 int64_t GetMethodIdFromAttr(llvm::CallInst *call); 26 bool HasCallsWithDeopt(llvm::Function &func); 27 void CopyDebugLoc(llvm::CallInst *from, llvm::CallInst *to); 28 llvm::SmallVector<llvm::OperandBundleDef> CopyDeoptBundle(llvm::CallInst *from); 29 llvm::Value *CreateLoadClassFromObject(llvm::Value *object, llvm::IRBuilder<> *builder, 30 ark::llvmbackend::LLVMArkInterface *arkInterface); 31 llvm::Value *CreateLoadMethodUsingVTable(llvm::Value *thiz, llvm::Function *caller, size_t methodId, 32 llvm::IRBuilder<> *builder, LLVMArkInterface *arkInterface); 33 34 } // namespace ark::llvmbackend::utils 35 36 #endif // LIBLLVMBACKEND_UTILS_H 37