Remove the code for special-casing byval for fast-isel. SelectionDAG

handles argument lowering anyway, so there's no need for special
casing here.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@102828 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2010-05-01 02:44:23 +00:00
parent 4781e30b7b
commit d725f04ff8
2 changed files with 3 additions and 21 deletions

View File

@ -59,9 +59,7 @@ static bool isUsedOutsideOfDefiningBlock(const Instruction *I) {
static bool isOnlyUsedInEntryBlock(const Argument *A, bool EnableFastISel) {
// With FastISel active, we may be splitting blocks, so force creation
// of virtual registers for all non-dead arguments.
// Don't force virtual registers for byval arguments though, because
// fast-isel can't handle those in all cases.
if (EnableFastISel && !A->hasByValAttr())
if (EnableFastISel)
return A->use_empty();
const BasicBlock *Entry = A->getParent()->begin();

View File

@ -732,31 +732,15 @@ void SelectionDAGISel::SelectAllBasicBlocks(const Function &Fn) {
BasicBlock::const_iterator BI = Begin;
// Lower any arguments needed in this block if this is the entry block.
bool SuppressFastISel = false;
if (LLVMBB == &Fn.getEntryBlock()) {
if (LLVMBB == &Fn.getEntryBlock())
LowerArguments(LLVMBB);
// If any of the arguments has the byval attribute, forgo
// fast-isel in the entry block.
if (FastIS) {
unsigned j = 1;
for (Function::const_arg_iterator I = Fn.arg_begin(), E = Fn.arg_end();
I != E; ++I, ++j)
if (Fn.paramHasAttr(j, Attribute::ByVal)) {
if (EnableFastISelVerbose || EnableFastISelAbort)
dbgs() << "FastISel skips entry block due to byval argument\n";
SuppressFastISel = true;
break;
}
}
}
// Setup an EH landing-pad block.
if (BB->isLandingPad())
PrepareEHLandingPad(BB);
// Before doing SelectionDAG ISel, see if FastISel has been requested.
if (FastIS && !SuppressFastISel) {
if (FastIS) {
// Emit code for any incoming arguments. This must happen before
// beginning FastISel on the entry block.
if (LLVMBB == &Fn.getEntryBlock()) {