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.