mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-04 05:31:51 +00:00
Sink a function that refers to the SelectionDAG into that library in the
one file where it is called as a static function. Nuke the declaration and the definition in lib/CodeGen, along with the include of SelectionDAG.h from this file. There is no dependency edge from lib/CodeGen to lib/CodeGen/SelectionDAG, so it isn't valid for a routine in lib/CodeGen to reference the DAG. There is a dependency from lib/CodeGen/SelectionDAG on lib/CodeGen. This breaks one violation of this layering. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171842 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ef24963cbc
commit
40b2c32475
@ -89,9 +89,6 @@ ISD::CondCode getICmpCondCode(ICmpInst::Predicate Pred);
|
||||
bool isInTailCallPosition(ImmutableCallSite CS, Attribute CalleeRetAttr,
|
||||
const TargetLowering &TLI);
|
||||
|
||||
bool isInTailCallPosition(SelectionDAG &DAG, SDNode *Node,
|
||||
SDValue &Chain, const TargetLowering &TLI);
|
||||
|
||||
} // End llvm namespace
|
||||
|
||||
#endif
|
||||
|
@ -14,7 +14,6 @@
|
||||
#include "llvm/CodeGen/Analysis.h"
|
||||
#include "llvm/Analysis/ValueTracking.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
#include "llvm/CodeGen/SelectionDAG.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/Function.h"
|
||||
@ -348,23 +347,3 @@ bool llvm::isInTailCallPosition(ImmutableCallSite CS, Attribute CalleeRetAttr,
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool llvm::isInTailCallPosition(SelectionDAG &DAG, SDNode *Node,
|
||||
SDValue &Chain, const TargetLowering &TLI) {
|
||||
const Function *F = DAG.getMachineFunction().getFunction();
|
||||
|
||||
// Conservatively require the attributes of the call to match those of
|
||||
// the return. Ignore noalias because it doesn't affect the call sequence.
|
||||
Attribute CallerRetAttr = F->getAttributes().getRetAttributes();
|
||||
if (AttrBuilder(CallerRetAttr)
|
||||
.removeAttribute(Attribute::NoAlias).hasAttributes())
|
||||
return false;
|
||||
|
||||
// It's not safe to eliminate the sign / zero extension of the return value.
|
||||
if (CallerRetAttr.hasAttribute(Attribute::ZExt) ||
|
||||
CallerRetAttr.hasAttribute(Attribute::SExt))
|
||||
return false;
|
||||
|
||||
// Check if the only use is a function return node.
|
||||
return TLI.isUsedByReturnOnly(Node, Chain);
|
||||
}
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/Function.h"
|
||||
#include "llvm/IR/LLVMContext.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
@ -1840,6 +1841,26 @@ SDValue SelectionDAGLegalize::ExpandBUILD_VECTOR(SDNode *Node) {
|
||||
return ExpandVectorBuildThroughStack(Node);
|
||||
}
|
||||
|
||||
static bool isInTailCallPosition(SelectionDAG &DAG, SDNode *Node,
|
||||
SDValue &Chain, const TargetLowering &TLI) {
|
||||
const Function *F = DAG.getMachineFunction().getFunction();
|
||||
|
||||
// Conservatively require the attributes of the call to match those of
|
||||
// the return. Ignore noalias because it doesn't affect the call sequence.
|
||||
Attribute CallerRetAttr = F->getAttributes().getRetAttributes();
|
||||
if (AttrBuilder(CallerRetAttr)
|
||||
.removeAttribute(Attribute::NoAlias).hasAttributes())
|
||||
return false;
|
||||
|
||||
// It's not safe to eliminate the sign / zero extension of the return value.
|
||||
if (CallerRetAttr.hasAttribute(Attribute::ZExt) ||
|
||||
CallerRetAttr.hasAttribute(Attribute::SExt))
|
||||
return false;
|
||||
|
||||
// Check if the only use is a function return node.
|
||||
return TLI.isUsedByReturnOnly(Node, Chain);
|
||||
}
|
||||
|
||||
// ExpandLibCall - Expand a node into a call to a libcall. If the result value
|
||||
// does not fit into a register, return the lo part and set the hi part to the
|
||||
// by-reg argument. If it does fit into a single register, return the result
|
||||
|
Loading…
x
Reference in New Issue
Block a user