Skip to content

Commit

Permalink
[FastISel] NFC: Clean up unnecessary bookkeeping
Browse files Browse the repository at this point in the history
Now that we flush the local value map for every instruction, we don't
need any extra flushes for specific cases.  Also, LastFlushPoint is
not used for anything.  Follow-ups to #c161665 (D91734).

This reapplies #3fd39d3.

Differential Revision: https://reviews.llvm.org/D92338
  • Loading branch information
pogo59 committed Jan 11, 2021
1 parent 171771e commit 1f9c292
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 35 deletions.
4 changes: 0 additions & 4 deletions llvm/include/llvm/CodeGen/FastISel.h
Original file line number Diff line number Diff line change
Expand Up @@ -224,10 +224,6 @@ class FastISel {
/// makes sense (for example, on function calls)
MachineInstr *EmitStartPt;

/// Last local value flush point. On a subsequent flush, no local value will
/// sink past this point.
MachineBasicBlock::iterator LastFlushPoint;

public:
virtual ~FastISel();

Expand Down
31 changes: 0 additions & 31 deletions llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,6 @@ void FastISel::flushLocalValueMap() {
LastLocalValue = EmitStartPt;
recomputeInsertPt();
SavedInsertPt = FuncInfo.InsertPt;
LastFlushPoint = FuncInfo.InsertPt;
}

bool FastISel::hasTrivialKill(const Value *V) {
Expand Down Expand Up @@ -458,8 +457,6 @@ void FastISel::removeDeadCode(MachineBasicBlock::iterator I,
assert(I.isValid() && E.isValid() && std::distance(I, E) > 0 &&
"Invalid iterator!");
while (I != E) {
if (LastFlushPoint == I)
LastFlushPoint = E;
if (SavedInsertPt == I)
SavedInsertPt = E;
if (EmitStartPt == I)
Expand Down Expand Up @@ -1210,11 +1207,6 @@ bool FastISel::selectCall(const User *I) {

// Handle simple inline asms.
if (const InlineAsm *IA = dyn_cast<InlineAsm>(Call->getCalledOperand())) {
// If the inline asm has side effects, then make sure that no local value
// lives across by flushing the local value map.
if (IA->hasSideEffects())
flushLocalValueMap();

// Don't attempt to handle constraints.
if (!IA->getConstraintString().empty())
return false;
Expand Down Expand Up @@ -1244,15 +1236,6 @@ bool FastISel::selectCall(const User *I) {
if (const auto *II = dyn_cast<IntrinsicInst>(Call))
return selectIntrinsicCall(II);

// Usually, it does not make sense to initialize a value,
// make an unrelated function call and use the value, because
// it tends to be spilled on the stack. So, we move the pointer
// to the last local value to the beginning of the block, so that
// all the values which have already been materialized,
// appear after the call. It also makes sense to skip intrinsics
// since they tend to be inlined.
flushLocalValueMap();

return lowerCall(Call);
}

Expand Down Expand Up @@ -1409,20 +1392,6 @@ bool FastISel::selectIntrinsicCall(const IntrinsicInst *II) {
return selectXRayCustomEvent(II);
case Intrinsic::xray_typedevent:
return selectXRayTypedEvent(II);

case Intrinsic::memcpy:
case Intrinsic::memcpy_element_unordered_atomic:
case Intrinsic::memcpy_inline:
case Intrinsic::memmove:
case Intrinsic::memmove_element_unordered_atomic:
case Intrinsic::memset:
case Intrinsic::memset_element_unordered_atomic:
// Flush the local value map just like we do for regular calls,
// to avoid excessive spills and reloads.
// These intrinsics mostly turn into library calls at O0; and
// even memcpy_inline should be treated like one for this purpose.
flushLocalValueMap();
break;
}

return fastLowerIntrinsicCall(II);
Expand Down

0 comments on commit 1f9c292

Please sign in to comment.