Mercurial > hg > CbC > CbC_llvm
comparison lib/Target/MSP430/MSP430ISelDAGToDAG.cpp @ 95:afa8332a0e37 LLVM3.8
LLVM 3.8
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Oct 2015 17:48:58 +0900 |
parents | 60c9769439b8 |
children | 1172e4bd9c6f |
comparison
equal
deleted
inserted
replaced
84:f3e34b893a5f | 95:afa8332a0e37 |
---|---|
102 | 102 |
103 bool MatchAddress(SDValue N, MSP430ISelAddressMode &AM); | 103 bool MatchAddress(SDValue N, MSP430ISelAddressMode &AM); |
104 bool MatchWrapper(SDValue N, MSP430ISelAddressMode &AM); | 104 bool MatchWrapper(SDValue N, MSP430ISelAddressMode &AM); |
105 bool MatchAddressBase(SDValue N, MSP430ISelAddressMode &AM); | 105 bool MatchAddressBase(SDValue N, MSP430ISelAddressMode &AM); |
106 | 106 |
107 bool SelectInlineAsmMemoryOperand(const SDValue &Op, char ConstraintCode, | 107 bool SelectInlineAsmMemoryOperand(const SDValue &Op, unsigned ConstraintID, |
108 std::vector<SDValue> &OutOps) override; | 108 std::vector<SDValue> &OutOps) override; |
109 | 109 |
110 // Include the pieces autogenerated from the target description. | 110 // Include the pieces autogenerated from the target description. |
111 #include "MSP430GenDAGISel.inc" | 111 #include "MSP430GenDAGISel.inc" |
112 | 112 |
252 if (AM.BaseType == MSP430ISelAddressMode::RegBase) { | 252 if (AM.BaseType == MSP430ISelAddressMode::RegBase) { |
253 if (!AM.Base.Reg.getNode()) | 253 if (!AM.Base.Reg.getNode()) |
254 AM.Base.Reg = CurDAG->getRegister(0, VT); | 254 AM.Base.Reg = CurDAG->getRegister(0, VT); |
255 } | 255 } |
256 | 256 |
257 Base = (AM.BaseType == MSP430ISelAddressMode::FrameIndexBase) ? | 257 Base = (AM.BaseType == MSP430ISelAddressMode::FrameIndexBase) |
258 CurDAG->getTargetFrameIndex(AM.Base.FrameIndex, | 258 ? CurDAG->getTargetFrameIndex( |
259 getTargetLowering()->getPointerTy()) : | 259 AM.Base.FrameIndex, |
260 AM.Base.Reg; | 260 getTargetLowering()->getPointerTy(CurDAG->getDataLayout())) |
261 : AM.Base.Reg; | |
261 | 262 |
262 if (AM.GV) | 263 if (AM.GV) |
263 Disp = CurDAG->getTargetGlobalAddress(AM.GV, SDLoc(N), | 264 Disp = CurDAG->getTargetGlobalAddress(AM.GV, SDLoc(N), |
264 MVT::i16, AM.Disp, | 265 MVT::i16, AM.Disp, |
265 0/*AM.SymbolFlags*/); | 266 0/*AM.SymbolFlags*/); |
272 Disp = CurDAG->getTargetJumpTable(AM.JT, MVT::i16, 0/*AM.SymbolFlags*/); | 273 Disp = CurDAG->getTargetJumpTable(AM.JT, MVT::i16, 0/*AM.SymbolFlags*/); |
273 else if (AM.BlockAddr) | 274 else if (AM.BlockAddr) |
274 Disp = CurDAG->getTargetBlockAddress(AM.BlockAddr, MVT::i32, 0, | 275 Disp = CurDAG->getTargetBlockAddress(AM.BlockAddr, MVT::i32, 0, |
275 0/*AM.SymbolFlags*/); | 276 0/*AM.SymbolFlags*/); |
276 else | 277 else |
277 Disp = CurDAG->getTargetConstant(AM.Disp, MVT::i16); | 278 Disp = CurDAG->getTargetConstant(AM.Disp, SDLoc(N), MVT::i16); |
278 | 279 |
279 return true; | 280 return true; |
280 } | 281 } |
281 | 282 |
282 bool MSP430DAGToDAGISel:: | 283 bool MSP430DAGToDAGISel:: |
283 SelectInlineAsmMemoryOperand(const SDValue &Op, char ConstraintCode, | 284 SelectInlineAsmMemoryOperand(const SDValue &Op, unsigned ConstraintID, |
284 std::vector<SDValue> &OutOps) { | 285 std::vector<SDValue> &OutOps) { |
285 SDValue Op0, Op1; | 286 SDValue Op0, Op1; |
286 switch (ConstraintCode) { | 287 switch (ConstraintID) { |
287 default: return true; | 288 default: return true; |
288 case 'm': // memory | 289 case InlineAsm::Constraint_m: // memory |
289 if (!SelectAddr(Op, Op0, Op1)) | 290 if (!SelectAddr(Op, Op0, Op1)) |
290 return true; | 291 return true; |
291 break; | 292 break; |
292 } | 293 } |
293 | 294 |
399 case ISD::FrameIndex: { | 400 case ISD::FrameIndex: { |
400 assert(Node->getValueType(0) == MVT::i16); | 401 assert(Node->getValueType(0) == MVT::i16); |
401 int FI = cast<FrameIndexSDNode>(Node)->getIndex(); | 402 int FI = cast<FrameIndexSDNode>(Node)->getIndex(); |
402 SDValue TFI = CurDAG->getTargetFrameIndex(FI, MVT::i16); | 403 SDValue TFI = CurDAG->getTargetFrameIndex(FI, MVT::i16); |
403 if (Node->hasOneUse()) | 404 if (Node->hasOneUse()) |
404 return CurDAG->SelectNodeTo(Node, MSP430::ADD16ri, MVT::i16, | 405 return CurDAG->SelectNodeTo(Node, MSP430::ADD16ri, MVT::i16, TFI, |
405 TFI, CurDAG->getTargetConstant(0, MVT::i16)); | 406 CurDAG->getTargetConstant(0, dl, MVT::i16)); |
406 return CurDAG->getMachineNode(MSP430::ADD16ri, dl, MVT::i16, | 407 return CurDAG->getMachineNode(MSP430::ADD16ri, dl, MVT::i16, TFI, |
407 TFI, CurDAG->getTargetConstant(0, MVT::i16)); | 408 CurDAG->getTargetConstant(0, dl, MVT::i16)); |
408 } | 409 } |
409 case ISD::LOAD: | 410 case ISD::LOAD: |
410 if (SDNode *ResNode = SelectIndexedLoad(Node)) | 411 if (SDNode *ResNode = SelectIndexedLoad(Node)) |
411 return ResNode; | 412 return ResNode; |
412 // Other cases are autogenerated. | 413 // Other cases are autogenerated. |