102 return N->getSExtValue();
107 const APInt &Imm =
N->getValueAPF().bitcastToAPInt();
145 return "VE DAG->DAG Pattern Instruction Selection";
149 #include "VEGenDAGISel.inc"
152 SDNode *getGlobalBaseReg();
169 if (matchADDRri(
Addr, LHS, RHS)) {
170 if (matchADDRrr(LHS, Base,
Index)) {
177 if (matchADDRrr(
Addr, LHS, RHS)) {
183 if (isa<FrameIndexSDNode>(RHS))
190 if (matchADDRri(LHS, Base,
Offset)) {
223 if (isa<FrameIndexSDNode>(
Addr))
230 if (
auto *CN = dyn_cast<ConstantSDNode>(
Addr)) {
254 if (isa<FrameIndexSDNode>(
Addr))
261 if (
auto *CN = dyn_cast<ConstantSDNode>(
Addr)) {
273 if (isa<FrameIndexSDNode>(
Addr))
285 if (!CurDAG->haveNoCommonBitsSet(
Addr.getOperand(0),
Addr.getOperand(1)))
295 Base =
Addr.getOperand(0);
301 auto AddrTy =
Addr->getValueType(0);
303 Base = CurDAG->getTargetFrameIndex(FIN->getIndex(), AddrTy);
312 if (CurDAG->isBaseWithConstantOffset(
Addr)) {
316 dyn_cast<FrameIndexSDNode>(
Addr.getOperand(0))) {
318 Base = CurDAG->getTargetFrameIndex(FIN->getIndex(), AddrTy);
320 Base =
Addr.getOperand(0);
332 if (
N->isMachineOpcode()) {
337 switch (
N->getOpcode()) {
339 ReplaceNode(
N, getGlobalBaseReg());
346 SDNode *VEDAGToDAGISel::getGlobalBaseReg() {
349 ->getRegister(
GlobalBaseReg, TLI->getPointerTy(CurDAG->getDataLayout()))
357 return new VEDAGToDAGISel(
TM);