Lines Matching refs:Addr

171   bool isBaseWithConstantOffset64(SDValue Addr, SDValue &LHS,
181 virtual bool SelectADDRVTX_READ(SDValue Addr, SDValue &Base, SDValue &Offset);
182 virtual bool SelectADDRIndirect(SDValue Addr, SDValue &Base, SDValue &Offset);
193 bool SelectMUBUF(SDValue Addr, SDValue &SRsrc, SDValue &VAddr,
196 bool SelectMUBUFAddr64(SDValue Addr, SDValue &SRsrc, SDValue &VAddr,
199 SDValue Addr, SDValue &RSrc, SDValue &VAddr,
202 SDValue Addr, SDValue &SRsrc, SDValue &Soffset,
205 bool SelectMUBUFOffset(SDValue Addr, SDValue &SRsrc, SDValue &Soffset,
208 bool SelectFlatOffsetImpl(SDNode *N, SDValue Addr, SDValue &VAddr,
210 bool SelectFlatOffset(SDNode *N, SDValue Addr, SDValue &VAddr,
212 bool SelectGlobalOffset(SDNode *N, SDValue Addr, SDValue &VAddr,
214 bool SelectScratchOffset(SDNode *N, SDValue Addr, SDValue &VAddr,
216 bool SelectGlobalSAddr(SDNode *N, SDValue Addr, SDValue &SAddr,
218 bool SelectScratchSAddr(SDNode *N, SDValue Addr, SDValue &SAddr,
223 SDValue Expand32BitAddress(SDValue Addr) const;
224 bool SelectSMRD(SDValue Addr, SDValue &SBase, SDValue &Offset,
226 bool SelectSMRDImm(SDValue Addr, SDValue &SBase, SDValue &Offset) const;
227 bool SelectSMRDImm32(SDValue Addr, SDValue &SBase, SDValue &Offset) const;
228 bool SelectSMRDSgpr(SDValue Addr, SDValue &SBase, SDValue &Offset) const;
229 bool SelectSMRDBufferImm(SDValue Addr, SDValue &Offset) const;
230 bool SelectSMRDBufferImm32(SDValue Addr, SDValue &Offset) const;
293 bool SelectGlobalValueConstantOffset(SDValue Addr, SDValue& IntPtr);
294 bool SelectGlobalValueVariableOffset(SDValue Addr, SDValue &BaseReg,
302 bool SelectADDRIndirect(SDValue Addr, SDValue &Base,
304 bool SelectADDRVTX_READ(SDValue Addr, SDValue &Base,
984 static bool getBaseWithOffsetUsingSplitOR(SelectionDAG &DAG, SDValue Addr, in getBaseWithOffsetUsingSplitOR() argument
986 if (Addr.getValueType() == MVT::i64 && Addr.getOpcode() == ISD::BITCAST && in getBaseWithOffsetUsingSplitOR()
987 Addr.getOperand(0).getOpcode() == ISD::BUILD_VECTOR) { in getBaseWithOffsetUsingSplitOR()
992 SDValue Lo = Addr.getOperand(0).getOperand(0); in getBaseWithOffsetUsingSplitOR()
995 SDValue BaseHi = Addr.getOperand(0).getOperand(1); in getBaseWithOffsetUsingSplitOR()
1015 bool AMDGPUDAGToDAGISel::isBaseWithConstantOffset64(SDValue Addr, SDValue &LHS, in isBaseWithConstantOffset64() argument
1017 if (CurDAG->isBaseWithConstantOffset(Addr)) { in isBaseWithConstantOffset64()
1018 LHS = Addr.getOperand(0); in isBaseWithConstantOffset64()
1019 RHS = Addr.getOperand(1); in isBaseWithConstantOffset64()
1023 if (getBaseWithOffsetUsingSplitOR(*CurDAG, Addr, LHS, RHS)) { in isBaseWithConstantOffset64()
1039 bool AMDGPUDAGToDAGISel::SelectADDRVTX_READ(SDValue Addr, SDValue &Base, in SelectADDRVTX_READ() argument
1044 bool AMDGPUDAGToDAGISel::SelectADDRIndirect(SDValue Addr, SDValue &Base, in SelectADDRIndirect() argument
1047 SDLoc DL(Addr); in SelectADDRIndirect()
1049 if ((C = dyn_cast<ConstantSDNode>(Addr))) { in SelectADDRIndirect()
1052 } else if ((Addr.getOpcode() == AMDGPUISD::DWORDADDR) && in SelectADDRIndirect()
1053 (C = dyn_cast<ConstantSDNode>(Addr.getOperand(0)))) { in SelectADDRIndirect()
1056 } else if ((Addr.getOpcode() == ISD::ADD || Addr.getOpcode() == ISD::OR) && in SelectADDRIndirect()
1057 (C = dyn_cast<ConstantSDNode>(Addr.getOperand(1)))) { in SelectADDRIndirect()
1058 Base = Addr.getOperand(0); in SelectADDRIndirect()
1061 Base = Addr; in SelectADDRIndirect()
1272 bool AMDGPUDAGToDAGISel::SelectDS1Addr1Offset(SDValue Addr, SDValue &Base, in SelectDS1Addr1Offset() argument
1274 SDLoc DL(Addr); in SelectDS1Addr1Offset()
1275 if (CurDAG->isBaseWithConstantOffset(Addr)) { in SelectDS1Addr1Offset()
1276 SDValue N0 = Addr.getOperand(0); in SelectDS1Addr1Offset()
1277 SDValue N1 = Addr.getOperand(1); in SelectDS1Addr1Offset()
1285 } else if (Addr.getOpcode() == ISD::SUB) { in SelectDS1Addr1Offset()
1287 if (const ConstantSDNode *C = dyn_cast<ConstantSDNode>(Addr.getOperand(0))) { in SelectDS1Addr1Offset()
1296 Zero, Addr.getOperand(1)); in SelectDS1Addr1Offset()
1301 Opnds.push_back(Addr.getOperand(1)); in SelectDS1Addr1Offset()
1320 } else if (const ConstantSDNode *CAddr = dyn_cast<ConstantSDNode>(Addr)) { in SelectDS1Addr1Offset()
1326 SDLoc DL(Addr); in SelectDS1Addr1Offset()
1339 Base = Addr; in SelectDS1Addr1Offset()
1340 Offset = CurDAG->getTargetConstant(0, SDLoc(Addr), MVT::i16); in SelectDS1Addr1Offset()
1362 bool AMDGPUDAGToDAGISel::SelectDS64Bit4ByteAligned(SDValue Addr, SDValue &Base, in SelectDS64Bit4ByteAligned() argument
1365 return SelectDSReadWrite2(Addr, Base, Offset0, Offset1, 4); in SelectDS64Bit4ByteAligned()
1368 bool AMDGPUDAGToDAGISel::SelectDS128Bit8ByteAligned(SDValue Addr, SDValue &Base, in SelectDS128Bit8ByteAligned() argument
1371 return SelectDSReadWrite2(Addr, Base, Offset0, Offset1, 8); in SelectDS128Bit8ByteAligned()
1374 bool AMDGPUDAGToDAGISel::SelectDSReadWrite2(SDValue Addr, SDValue &Base, in SelectDSReadWrite2() argument
1377 SDLoc DL(Addr); in SelectDSReadWrite2()
1379 if (CurDAG->isBaseWithConstantOffset(Addr)) { in SelectDSReadWrite2()
1380 SDValue N0 = Addr.getOperand(0); in SelectDSReadWrite2()
1381 SDValue N1 = Addr.getOperand(1); in SelectDSReadWrite2()
1393 } else if (Addr.getOpcode() == ISD::SUB) { in SelectDSReadWrite2()
1396 dyn_cast<ConstantSDNode>(Addr.getOperand(0))) { in SelectDSReadWrite2()
1401 SDLoc DL(Addr); in SelectDSReadWrite2()
1408 CurDAG->getNode(ISD::SUB, DL, MVT::i32, Zero, Addr.getOperand(1)); in SelectDSReadWrite2()
1413 Opnds.push_back(Addr.getOperand(1)); in SelectDSReadWrite2()
1431 } else if (const ConstantSDNode *CAddr = dyn_cast<ConstantSDNode>(Addr)) { in SelectDSReadWrite2()
1448 Base = Addr; in SelectDSReadWrite2()
1454 bool AMDGPUDAGToDAGISel::SelectMUBUF(SDValue Addr, SDValue &Ptr, SDValue &VAddr, in SelectMUBUF() argument
1463 SDLoc DL(Addr); in SelectMUBUF()
1471 SDValue N0 = Addr; in SelectMUBUF()
1472 if (CurDAG->isBaseWithConstantOffset(Addr)) { in SelectMUBUF()
1473 C1 = cast<ConstantSDNode>(Addr.getOperand(1)); in SelectMUBUF()
1475 N0 = Addr.getOperand(0); in SelectMUBUF()
1539 bool AMDGPUDAGToDAGISel::SelectMUBUFAddr64(SDValue Addr, SDValue &SRsrc, in SelectMUBUFAddr64() argument
1549 if (!SelectMUBUF(Addr, Ptr, VAddr, SOffset, Offset, Offen, Idxen, Addr64)) in SelectMUBUFAddr64()
1554 SDLoc DL(Addr); in SelectMUBUFAddr64()
1581 SDValue Addr, SDValue &Rsrc, in SelectMUBUFScratchOffen() argument
1585 SDLoc DL(Addr); in SelectMUBUFScratchOffen()
1591 if (ConstantSDNode *CAddr = dyn_cast<ConstantSDNode>(Addr)) { in SelectMUBUFScratchOffen()
1608 if (CurDAG->isBaseWithConstantOffset(Addr)) { in SelectMUBUFScratchOffen()
1611 SDValue N0 = Addr.getOperand(0); in SelectMUBUFScratchOffen()
1612 SDValue N1 = Addr.getOperand(1); in SelectMUBUFScratchOffen()
1640 std::tie(VAddr, SOffset) = foldFrameIndex(Addr); in SelectMUBUFScratchOffen()
1654 SDValue Addr, in SelectMUBUFScratchOffset() argument
1662 SDLoc DL(Addr); in SelectMUBUFScratchOffset()
1665 if (IsCopyFromSGPR(*TRI, Addr)) { in SelectMUBUFScratchOffset()
1667 SOffset = Addr; in SelectMUBUFScratchOffset()
1673 if (Addr.getOpcode() == ISD::ADD) { in SelectMUBUFScratchOffset()
1675 CAddr = dyn_cast<ConstantSDNode>(Addr.getOperand(1)); in SelectMUBUFScratchOffset()
1678 if (!IsCopyFromSGPR(*TRI, Addr.getOperand(0))) in SelectMUBUFScratchOffset()
1681 SOffset = Addr.getOperand(0); in SelectMUBUFScratchOffset()
1682 } else if ((CAddr = dyn_cast<ConstantSDNode>(Addr)) && in SelectMUBUFScratchOffset()
1696 bool AMDGPUDAGToDAGISel::SelectMUBUFOffset(SDValue Addr, SDValue &SRsrc, in SelectMUBUFOffset() argument
1703 if (!SelectMUBUF(Addr, Ptr, VAddr, SOffset, Offset, Offen, Idxen, Addr64)) in SelectMUBUFOffset()
1711 SDLoc DL(Addr); in SelectMUBUFOffset()
1736 bool AMDGPUDAGToDAGISel::SelectFlatOffsetImpl(SDNode *N, SDValue Addr, in SelectFlatOffsetImpl() argument
1750 if (isBaseWithConstantOffset64(Addr, N0, N1)) { in SelectFlatOffsetImpl()
1755 Addr = N0; in SelectFlatOffsetImpl()
1778 if (Addr.getValueType().getSizeInBits() == 32) { in SelectFlatOffsetImpl()
1787 Addr = SDValue(CurDAG->getMachineNode(AddOp, DL, MVT::i32, Opnds), 0); in SelectFlatOffsetImpl()
1816 Addr = SDValue(CurDAG->getMachineNode(AMDGPU::REG_SEQUENCE, DL, in SelectFlatOffsetImpl()
1824 VAddr = Addr; in SelectFlatOffsetImpl()
1829 bool AMDGPUDAGToDAGISel::SelectFlatOffset(SDNode *N, SDValue Addr, in SelectFlatOffset() argument
1832 return SelectFlatOffsetImpl(N, Addr, VAddr, Offset, SIInstrFlags::FLAT); in SelectFlatOffset()
1835 bool AMDGPUDAGToDAGISel::SelectGlobalOffset(SDNode *N, SDValue Addr, in SelectGlobalOffset() argument
1838 return SelectFlatOffsetImpl(N, Addr, VAddr, Offset, SIInstrFlags::FlatGlobal); in SelectGlobalOffset()
1841 bool AMDGPUDAGToDAGISel::SelectScratchOffset(SDNode *N, SDValue Addr, in SelectScratchOffset() argument
1844 return SelectFlatOffsetImpl(N, Addr, VAddr, Offset, in SelectScratchOffset()
1859 SDValue Addr, in SelectGlobalSAddr() argument
1869 if (isBaseWithConstantOffset64(Addr, LHS, RHS)) { in SelectGlobalSAddr()
1875 Addr = LHS; in SelectGlobalSAddr()
1912 if (Addr.getOpcode() == ISD::ADD) { in SelectGlobalSAddr()
1913 LHS = Addr.getOperand(0); in SelectGlobalSAddr()
1914 RHS = Addr.getOperand(1); in SelectGlobalSAddr()
1938 if (Addr->isDivergent() || Addr.getOpcode() == ISD::UNDEF || in SelectGlobalSAddr()
1939 isa<ConstantSDNode>(Addr)) in SelectGlobalSAddr()
1944 SAddr = Addr; in SelectGlobalSAddr()
1946 CurDAG->getMachineNode(AMDGPU::V_MOV_B32_e32, SDLoc(Addr), MVT::i32, in SelectGlobalSAddr()
1972 bool AMDGPUDAGToDAGISel::SelectScratchSAddr(SDNode *Parent, SDValue Addr, in SelectScratchSAddr() argument
1975 if (Addr->isDivergent()) in SelectScratchSAddr()
1978 SDLoc DL(Addr); in SelectScratchSAddr()
1982 if (CurDAG->isBaseWithConstantOffset(Addr)) { in SelectScratchSAddr()
1983 COffsetVal = cast<ConstantSDNode>(Addr.getOperand(1))->getSExtValue(); in SelectScratchSAddr()
1984 SAddr = Addr.getOperand(0); in SelectScratchSAddr()
1986 SAddr = Addr; in SelectScratchSAddr()
2066 SDValue AMDGPUDAGToDAGISel::Expand32BitAddress(SDValue Addr) const { in Expand32BitAddress()
2067 if (Addr.getValueType() != MVT::i32) in Expand32BitAddress()
2068 return Addr; in Expand32BitAddress()
2071 SDLoc SL(Addr); in Expand32BitAddress()
2080 Addr, in Expand32BitAddress()
2091 bool AMDGPUDAGToDAGISel::SelectSMRD(SDValue Addr, SDValue &SBase, in SelectSMRD() argument
2093 SDLoc SL(Addr); in SelectSMRD()
2097 if ((Addr.getValueType() != MVT::i32 || in SelectSMRD()
2098 Addr->getFlags().hasNoUnsignedWrap())) { in SelectSMRD()
2101 if (CurDAG->isBaseWithConstantOffset(Addr) || in SelectSMRD()
2102 Addr.getOpcode() == ISD::ADD) { in SelectSMRD()
2103 N0 = Addr.getOperand(0); in SelectSMRD()
2104 N1 = Addr.getOperand(1); in SelectSMRD()
2105 } else if (getBaseWithOffsetUsingSplitOR(*CurDAG, Addr, N0, N1)) { in SelectSMRD()
2115 SBase = Expand32BitAddress(Addr); in SelectSMRD()
2121 bool AMDGPUDAGToDAGISel::SelectSMRDImm(SDValue Addr, SDValue &SBase, in SelectSMRDImm() argument
2124 return SelectSMRD(Addr, SBase, Offset, Imm) && Imm; in SelectSMRDImm()
2127 bool AMDGPUDAGToDAGISel::SelectSMRDImm32(SDValue Addr, SDValue &SBase, in SelectSMRDImm32() argument
2133 if (!SelectSMRD(Addr, SBase, Offset, Imm)) in SelectSMRDImm32()
2139 bool AMDGPUDAGToDAGISel::SelectSMRDSgpr(SDValue Addr, SDValue &SBase, in SelectSMRDSgpr() argument
2142 return SelectSMRD(Addr, SBase, Offset, Imm) && !Imm && in SelectSMRDSgpr()
2146 bool AMDGPUDAGToDAGISel::SelectSMRDBufferImm(SDValue Addr, in SelectSMRDBufferImm() argument
2148 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Addr)) { in SelectSMRDBufferImm()
2152 Offset = CurDAG->getTargetConstant(*Imm, SDLoc(Addr), MVT::i32); in SelectSMRDBufferImm()
2160 bool AMDGPUDAGToDAGISel::SelectSMRDBufferImm32(SDValue Addr, in SelectSMRDBufferImm32() argument
2164 if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Addr)) { in SelectSMRDBufferImm32()
2167 Offset = CurDAG->getTargetConstant(*Imm, SDLoc(Addr), MVT::i32); in SelectSMRDBufferImm32()
3130 bool R600DAGToDAGISel::SelectGlobalValueConstantOffset(SDValue Addr, in SelectGlobalValueConstantOffset() argument
3132 if (ConstantSDNode *Cst = dyn_cast<ConstantSDNode>(Addr)) { in SelectGlobalValueConstantOffset()
3133 IntPtr = CurDAG->getIntPtrConstant(Cst->getZExtValue() / 4, SDLoc(Addr), in SelectGlobalValueConstantOffset()
3140 bool R600DAGToDAGISel::SelectGlobalValueVariableOffset(SDValue Addr, in SelectGlobalValueVariableOffset() argument
3142 if (!isa<ConstantSDNode>(Addr)) { in SelectGlobalValueVariableOffset()
3143 BaseReg = Addr; in SelectGlobalValueVariableOffset()
3144 Offset = CurDAG->getIntPtrConstant(0, SDLoc(Addr), true); in SelectGlobalValueVariableOffset()
3187 bool R600DAGToDAGISel::SelectADDRIndirect(SDValue Addr, SDValue &Base, in SelectADDRIndirect() argument
3190 SDLoc DL(Addr); in SelectADDRIndirect()
3192 if ((C = dyn_cast<ConstantSDNode>(Addr))) { in SelectADDRIndirect()
3195 } else if ((Addr.getOpcode() == AMDGPUISD::DWORDADDR) && in SelectADDRIndirect()
3196 (C = dyn_cast<ConstantSDNode>(Addr.getOperand(0)))) { in SelectADDRIndirect()
3199 } else if ((Addr.getOpcode() == ISD::ADD || Addr.getOpcode() == ISD::OR) && in SelectADDRIndirect()
3200 (C = dyn_cast<ConstantSDNode>(Addr.getOperand(1)))) { in SelectADDRIndirect()
3201 Base = Addr.getOperand(0); in SelectADDRIndirect()
3204 Base = Addr; in SelectADDRIndirect()
3211 bool R600DAGToDAGISel::SelectADDRVTX_READ(SDValue Addr, SDValue &Base, in SelectADDRVTX_READ() argument
3215 if (Addr.getOpcode() == ISD::ADD in SelectADDRVTX_READ()
3216 && (IMMOffset = dyn_cast<ConstantSDNode>(Addr.getOperand(1))) in SelectADDRVTX_READ()
3219 Base = Addr.getOperand(0); in SelectADDRVTX_READ()
3220 Offset = CurDAG->getTargetConstant(IMMOffset->getZExtValue(), SDLoc(Addr), in SelectADDRVTX_READ()
3224 } else if ((IMMOffset = dyn_cast<ConstantSDNode>(Addr)) in SelectADDRVTX_READ()
3229 Offset = CurDAG->getTargetConstant(IMMOffset->getZExtValue(), SDLoc(Addr), in SelectADDRVTX_READ()
3235 Base = Addr; in SelectADDRVTX_READ()
3236 Offset = CurDAG->getTargetConstant(0, SDLoc(Addr), MVT::i32); in SelectADDRVTX_READ()