mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-13 23:18:58 +00:00
[X86] Merge the template method selectAddrOfGatherScatterNode into selectVectorAddr. NFCI
Just need to initialize a couple variables differently based on the node type. No need for a whole separate template method. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@317915 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
23bd33afd4
commit
33a8b75763
@ -204,11 +204,6 @@ namespace {
|
||||
bool selectVectorAddr(SDNode *Parent, SDValue N, SDValue &Base,
|
||||
SDValue &Scale, SDValue &Index, SDValue &Disp,
|
||||
SDValue &Segment);
|
||||
template <class GatherScatterSDNode>
|
||||
bool selectAddrOfGatherScatterNode(GatherScatterSDNode *Parent, SDValue N,
|
||||
SDValue &Base, SDValue &Scale,
|
||||
SDValue &Index, SDValue &Disp,
|
||||
SDValue &Segment);
|
||||
bool selectMOV64Imm32(SDValue N, SDValue &Imm);
|
||||
bool selectLEAAddr(SDValue N, SDValue &Base,
|
||||
SDValue &Scale, SDValue &Index, SDValue &Disp,
|
||||
@ -1507,12 +1502,23 @@ bool X86DAGToDAGISel::matchAddressBase(SDValue N, X86ISelAddressMode &AM) {
|
||||
return false;
|
||||
}
|
||||
|
||||
template <class GatherScatterSDNode>
|
||||
bool X86DAGToDAGISel::selectAddrOfGatherScatterNode(
|
||||
GatherScatterSDNode *Mgs, SDValue N, SDValue &Base, SDValue &Scale,
|
||||
SDValue &Index, SDValue &Disp, SDValue &Segment) {
|
||||
bool X86DAGToDAGISel::selectVectorAddr(SDNode *Parent, SDValue N, SDValue &Base,
|
||||
SDValue &Scale, SDValue &Index,
|
||||
SDValue &Disp, SDValue &Segment) {
|
||||
unsigned ScalarSize;
|
||||
if (auto Mgs = dyn_cast<MaskedGatherScatterSDNode>(Parent)) {
|
||||
Base = Mgs->getBasePtr();
|
||||
Index = Mgs->getIndex();
|
||||
ScalarSize = Mgs->getValue().getScalarValueSizeInBits();
|
||||
} else {
|
||||
auto X86Gather = cast<X86MaskedGatherSDNode>(Parent);
|
||||
Base = X86Gather->getBasePtr();
|
||||
Index = X86Gather->getIndex();
|
||||
ScalarSize = X86Gather->getValue().getScalarValueSizeInBits();
|
||||
}
|
||||
|
||||
X86ISelAddressMode AM;
|
||||
unsigned AddrSpace = Mgs->getPointerInfo().getAddrSpace();
|
||||
unsigned AddrSpace = cast<MemSDNode>(Parent)->getPointerInfo().getAddrSpace();
|
||||
// AddrSpace 256 -> GS, 257 -> FS, 258 -> SS.
|
||||
if (AddrSpace == 256)
|
||||
AM.Segment = CurDAG->getRegister(X86::GS, MVT::i16);
|
||||
@ -1522,9 +1528,6 @@ bool X86DAGToDAGISel::selectAddrOfGatherScatterNode(
|
||||
AM.Segment = CurDAG->getRegister(X86::SS, MVT::i16);
|
||||
|
||||
SDLoc DL(N);
|
||||
Base = Mgs->getBasePtr();
|
||||
Index = Mgs->getIndex();
|
||||
unsigned ScalarSize = Mgs->getValue().getScalarValueSizeInBits();
|
||||
Scale = getI8Imm(ScalarSize/8, DL);
|
||||
|
||||
// If Base is 0, the whole address is in index and the Scale is 1
|
||||
@ -1542,18 +1545,6 @@ bool X86DAGToDAGISel::selectAddrOfGatherScatterNode(
|
||||
return true;
|
||||
}
|
||||
|
||||
bool X86DAGToDAGISel::selectVectorAddr(SDNode *Parent, SDValue N, SDValue &Base,
|
||||
SDValue &Scale, SDValue &Index,
|
||||
SDValue &Disp, SDValue &Segment) {
|
||||
if (auto Mgs = dyn_cast<MaskedGatherScatterSDNode>(Parent))
|
||||
return selectAddrOfGatherScatterNode<MaskedGatherScatterSDNode>(
|
||||
Mgs, N, Base, Scale, Index, Disp, Segment);
|
||||
if (auto X86Gather = dyn_cast<X86MaskedGatherSDNode>(Parent))
|
||||
return selectAddrOfGatherScatterNode<X86MaskedGatherSDNode>(
|
||||
X86Gather, N, Base, Scale, Index, Disp, Segment);
|
||||
return false;
|
||||
}
|
||||
|
||||
/// Returns true if it is able to pattern match an addressing mode.
|
||||
/// It returns the operands which make up the maximal addressing mode it can
|
||||
/// match by reference.
|
||||
|
Loading…
Reference in New Issue
Block a user