Lines Matching defs:DAG
34 static SDValue createMemMemNode(SelectionDAG &DAG, const SDLoc &DL, unsigned Op,
37 SDVTList VTs = Op == SystemZISD::CLC ? DAG.getVTList(MVT::i32, MVT::Other)
38 : DAG.getVTList(MVT::Other);
44 return DAG.getNode(Op, DL, VTs, Ops);
51 static SDValue emitMemMemImm(SelectionDAG &DAG, const SDLoc &DL, unsigned Op,
56 SDValue LenAdj = DAG.getConstant(Size - Adj, DL, Dst.getValueType());
57 return createMemMemNode(DAG, DL, Op, Chain, Dst, Src, LenAdj, Byte);
60 static SDValue emitMemMemReg(SelectionDAG &DAG, const SDLoc &DL, unsigned Op,
64 SDValue LenAdj = DAG.getNode(ISD::ADD, DL, MVT::i64,
65 DAG.getZExtOrTrunc(Size, DL, MVT::i64),
66 DAG.getSignedConstant(0 - Adj, DL, MVT::i64));
67 return createMemMemNode(DAG, DL, Op, Chain, Dst, Src, LenAdj, Byte);
71 SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Dst, SDValue Src,
78 return emitMemMemImm(DAG, DL, SystemZISD::MVC, Chain, Dst, Src,
81 return emitMemMemReg(DAG, DL, SystemZISD::MVC, Chain, Dst, Src, Size);
87 static SDValue memsetStore(SelectionDAG &DAG, const SDLoc &DL, SDValue Chain,
93 return DAG.getStore(
94 Chain, DL, DAG.getConstant(StoreVal, DL, MVT::getIntegerVT(Size * 8)),
99 SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Dst,
123 SDValue Chain1 = memsetStore(DAG, DL, Chain, Dst, ByteVal, Size1,
127 Dst = DAG.getNode(ISD::ADD, DL, PtrVT, Dst,
128 DAG.getConstant(Size1, DL, PtrVT));
131 memsetStore(DAG, DL, Chain, Dst, ByteVal, Size2,
133 return DAG.getNode(ISD::TokenFactor, DL, MVT::Other, Chain1, Chain2);
139 DAG.getStore(Chain, DL, Byte, Dst, DstPtrInfo, Alignment);
142 SDValue Dst2 = DAG.getNode(ISD::ADD, DL, PtrVT, Dst,
143 DAG.getConstant(1, DL, PtrVT));
144 SDValue Chain2 = DAG.getStore(Chain, DL, Byte, Dst2,
146 return DAG.getNode(ISD::TokenFactor, DL, MVT::Other, Chain1, Chain2);
153 return emitMemMemImm(DAG, DL, SystemZISD::XC, Chain, Dst, Dst, Bytes);
155 return emitMemMemImm(DAG, DL, SystemZISD::MEMSET_MVC, Chain, Dst, SDValue(),
156 Bytes, DAG.getAnyExtOrTrunc(Byte, DL, MVT::i32));
162 return emitMemMemReg(DAG, DL, SystemZISD::XC, Chain, Dst, Dst, Size);
164 return emitMemMemReg(DAG, DL, SystemZISD::MEMSET_MVC, Chain, Dst, SDValue(),
165 Size, DAG.getAnyExtOrTrunc(Byte, DL, MVT::i32));
173 SelectionDAG &DAG) {
174 SDValue IPM = DAG.getNode(SystemZISD::IPM, DL, MVT::i32, CCReg);
175 SDValue SHL = DAG.getNode(ISD::SHL, DL, MVT::i32, IPM,
176 DAG.getConstant(30 - SystemZ::IPM_CC, DL, MVT::i32));
177 SDValue SRA = DAG.getNode(ISD::SRA, DL, MVT::i32, SHL,
178 DAG.getConstant(30, DL, MVT::i32));
183 SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Src1,
191 CCReg = emitMemMemImm(DAG, DL, SystemZISD::CLC, Chain, Src2, Src1, Bytes);
193 CCReg = emitMemMemReg(DAG, DL, SystemZISD::CLC, Chain, Src2, Src1, Size);
195 return std::make_pair(addIPMSequence(DL, CCReg, DAG), Chain);
199 SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Src,
203 SDVTList VTs = DAG.getVTList(PtrVT, MVT::i32, MVT::Other);
204 Length = DAG.getZExtOrTrunc(Length, DL, PtrVT);
205 Char = DAG.getZExtOrTrunc(Char, DL, MVT::i32);
206 Char = DAG.getNode(ISD::AND, DL, MVT::i32, Char,
207 DAG.getConstant(255, DL, MVT::i32));
208 SDValue Limit = DAG.getNode(ISD::ADD, DL, PtrVT, Src, Length);
209 SDValue End = DAG.getNode(SystemZISD::SEARCH_STRING, DL, VTs, Chain,
217 End, DAG.getConstant(0, DL, PtrVT),
218 DAG.getTargetConstant(SystemZ::CCMASK_SRST, DL, MVT::i32),
219 DAG.getTargetConstant(SystemZ::CCMASK_SRST_FOUND, DL, MVT::i32), CCReg};
220 End = DAG.getNode(SystemZISD::SELECT_CCMASK, DL, PtrVT, Ops);
225 SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Dest,
228 SDVTList VTs = DAG.getVTList(Dest.getValueType(), MVT::Other);
229 SDValue EndDest = DAG.getNode(SystemZISD::STPCPY, DL, VTs, Chain, Dest, Src,
230 DAG.getConstant(0, DL, MVT::i32));
235 SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Src1,
238 SDVTList VTs = DAG.getVTList(Src1.getValueType(), MVT::i32, MVT::Other);
240 SDValue Unused = DAG.getNode(SystemZISD::STRCMP, DL, VTs, Chain, Src2, Src1,
241 DAG.getConstant(0, DL, MVT::i32));
244 return std::make_pair(addIPMSequence(DL, CCReg, DAG), Chain);
252 static std::pair<SDValue, SDValue> getBoundedStrlen(SelectionDAG &DAG,
257 SDVTList VTs = DAG.getVTList(PtrVT, MVT::i32, MVT::Other);
258 SDValue End = DAG.getNode(SystemZISD::SEARCH_STRING, DL, VTs, Chain,
259 Limit, Src, DAG.getConstant(0, DL, MVT::i32));
261 SDValue Len = DAG.getNode(ISD::SUB, DL, PtrVT, End, Src);
266 SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Src,
269 return getBoundedStrlen(DAG, DL, Chain, Src, DAG.getConstant(0, DL, PtrVT));
273 SelectionDAG &DAG, const SDLoc &DL, SDValue Chain, SDValue Src,
276 MaxLength = DAG.getZExtOrTrunc(MaxLength, DL, PtrVT);
277 SDValue Limit = DAG.getNode(ISD::ADD, DL, PtrVT, Src, MaxLength);
278 return getBoundedStrlen(DAG, DL, Chain, Src, Limit);