mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
Reapply bottom-up fast-isel, with several fixes for x86-32:
- Check getBytesToPopOnReturn(). - Eschew ST0 and ST1 for return values. - Fix the PIC base register initialization so that it doesn't ever fail to end up the top of the entry block. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108039 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -82,6 +82,13 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf) {
|
||||
MF = &mf;
|
||||
RegInfo = &MF->getRegInfo();
|
||||
|
||||
// Check whether the function can return without sret-demotion.
|
||||
SmallVector<ISD::OutputArg, 4> Outs;
|
||||
GetReturnInfo(Fn->getReturnType(),
|
||||
Fn->getAttributes().getRetAttributes(), Outs, TLI);
|
||||
CanLowerReturn = TLI.CanLowerReturn(Fn->getCallingConv(), Fn->isVarArg(),
|
||||
Outs, Fn->getContext());
|
||||
|
||||
// Create a vreg for each argument register that is not dead and is used
|
||||
// outside of the entry block for the function.
|
||||
for (Function::const_arg_iterator AI = Fn->arg_begin(), E = Fn->arg_end();
|
||||
@@ -174,6 +181,7 @@ void FunctionLoweringInfo::clear() {
|
||||
#endif
|
||||
LiveOutRegInfo.clear();
|
||||
ArgDbgValues.clear();
|
||||
RegFixups.clear();
|
||||
}
|
||||
|
||||
/// CreateReg - Allocate a single virtual register for the given type.
|
||||
|
||||
Reference in New Issue
Block a user