mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
Fall back to selection DAG isel for calls to builtin functions.
Fast isel doesn't currently have support for translating builtin function calls to target instructions. For embedded environments where the library functions are not available, this is a matter of correctness and not just optimization. Most of this patch is just arranging to make the TargetLibraryInfo available in fast isel. <rdar://problem/12008746> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161232 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -55,6 +55,7 @@
|
||||
#include "llvm/Analysis/Loads.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
#include "llvm/Target/TargetInstrInfo.h"
|
||||
#include "llvm/Target/TargetLibraryInfo.h"
|
||||
#include "llvm/Target/TargetLowering.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
@@ -789,6 +790,18 @@ FastISel::SelectInstruction(const Instruction *I) {
|
||||
|
||||
MachineBasicBlock::iterator SavedInsertPt = FuncInfo.InsertPt;
|
||||
|
||||
// As a special case, don't even try to handle calls to builtin library
|
||||
// functions so that calls to builtin functions get translated to
|
||||
// instructions when supported by the target.
|
||||
if (const CallInst *Call = dyn_cast<CallInst>(I)) {
|
||||
const Function *F = Call->getCalledFunction();
|
||||
LibFunc::Func Func;
|
||||
if (F && !F->hasLocalLinkage() && F->hasName() &&
|
||||
LibInfo->getLibFunc(F->getName(), Func) &&
|
||||
LibInfo->has(Func))
|
||||
return false;
|
||||
}
|
||||
|
||||
// First, try doing target-independent selection.
|
||||
if (SelectOperator(I, I->getOpcode())) {
|
||||
++NumFastIselSuccessIndependent;
|
||||
@@ -1040,7 +1053,8 @@ FastISel::SelectOperator(const User *I, unsigned Opcode) {
|
||||
}
|
||||
}
|
||||
|
||||
FastISel::FastISel(FunctionLoweringInfo &funcInfo)
|
||||
FastISel::FastISel(FunctionLoweringInfo &funcInfo,
|
||||
const TargetLibraryInfo *libInfo)
|
||||
: FuncInfo(funcInfo),
|
||||
MRI(FuncInfo.MF->getRegInfo()),
|
||||
MFI(*FuncInfo.MF->getFrameInfo()),
|
||||
@@ -1049,7 +1063,8 @@ FastISel::FastISel(FunctionLoweringInfo &funcInfo)
|
||||
TD(*TM.getTargetData()),
|
||||
TII(*TM.getInstrInfo()),
|
||||
TLI(*TM.getTargetLowering()),
|
||||
TRI(*TM.getRegisterInfo()) {
|
||||
TRI(*TM.getRegisterInfo()),
|
||||
LibInfo(libInfo) {
|
||||
}
|
||||
|
||||
FastISel::~FastISel() {}
|
||||
|
Reference in New Issue
Block a user