summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2017-11-10 19:26:04 +0000
committerCraig Topper <craig.topper@intel.com>2017-11-10 19:26:04 +0000
commitbb001c6ddcc23b06869552b99e22155a0e07cfde (patch)
treebb6b5b6f9f66d568b821c6ef0c8f8f5e7ad2a2cf /llvm
parent84d11cac287513b16ee5c5e1fb10d0652d7d1583 (diff)
downloadbcm5719-llvm-bb001c6ddcc23b06869552b99e22155a0e07cfde.tar.gz
bcm5719-llvm-bb001c6ddcc23b06869552b99e22155a0e07cfde.zip
[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. llvm-svn: 317915
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Target/X86/X86ISelDAGToDAG.cpp41
1 files changed, 16 insertions, 25 deletions
diff --git a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
index 099543240ae..9e1121aebf8 100644
--- a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
+++ b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
@@ -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.
OpenPOWER on IntegriCloud