Home | History | Annotate | Download | only in Sparc

Lines Matching refs:DAG

1 //===-- SparcISelLowering.cpp - Sparc DAG Lowering Implementation ---------===//
11 // selection DAG.
84 DebugLoc dl, SelectionDAG &DAG) const {
86 MachineFunction &MF = DAG.getMachineFunction();
92 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(),
93 DAG.getTarget(), RVLocs, *DAG.getContext());
108 Chain = DAG.getCopyToReg(Chain, dl, VA.getLocReg(),
113 RetOps.push_back(DAG.getRegister(VA.getLocReg(), VA.getLocVT()));
123 SDValue Val = DAG.getCopyFromReg(Chain, dl, Reg, getPointerTy());
124 Chain = DAG.getCopyToReg(Chain, dl, SP::I0, Val, Flag);
126 RetOps.push_back(DAG.getRegister(SP::I0, getPointerTy()));
131 RetOps[1] = DAG.getConstant(RetAddrOffset, MVT::i32);
137 return DAG.getNode(SPISD::RET_FLAG, dl, MVT::Other,
149 DebugLoc dl, SelectionDAG &DAG,
153 MachineFunction &MF = DAG.getMachineFunction();
159 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(),
160 getTargetMachine(), ArgLocs, *DAG.getContext());
171 SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32);
172 SDValue Arg = DAG.getLoad(MVT::i32, dl, Chain, FIPtr,
184 SDValue HiVal = DAG.getCopyFromReg(Chain, dl, VRegHi, MVT::i32);
193 SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32);
194 LoVal = DAG.getLoad(MVT::i32, dl, Chain, FIPtr,
200 LoVal = DAG.getCopyFromReg(Chain, dl, loReg, MVT::i32);
203 DAG.getNode(ISD::BUILD_PAIR, dl, MVT::i64, LoVal, HiVal);
204 WholeValue = DAG.getNode(ISD::BITCAST, dl, MVT::f64, WholeValue);
210 SDValue Arg = DAG.getCopyFromReg(Chain, dl, VReg, MVT::i32);
212 Arg = DAG.getNode(ISD::BITCAST, dl, MVT::f32, Arg);
214 Arg = DAG.getNode(ISD::AssertSext, dl, MVT::i32, Arg,
215 DAG.getValueType(VA.getLocVT()));
216 Arg = DAG.getNode(ISD::TRUNCATE, dl, VA.getLocVT(), Arg);
233 SDValue FIPtr = DAG.getFrameIndex(FI, getPointerTy());
234 SDValue Load = DAG.getLoad(VA.getValVT(), dl, Chain, FIPtr,
244 SDValue FIPtr = DAG.getFrameIndex(FI, getPointerTy());
245 SDValue HiVal = DAG.getLoad(MVT::i32, dl, Chain, FIPtr,
251 SDValue FIPtr2 = DAG.getFrameIndex(FI2, getPointerTy());
253 SDValue LoVal = DAG.getLoad(MVT::i32, dl, Chain, FIPtr2,
258 DAG.getNode(ISD::BUILD_PAIR, dl, MVT::i64, LoVal, HiVal);
259 WholeValue = DAG.getNode(ISD::BITCAST, dl, MVT::f64, WholeValue);
267 SDValue FIPtr = DAG.getFrameIndex(FI, getPointerTy());
270 Load = DAG.getLoad(VA.getValVT(), dl, Chain, FIPtr,
277 FIPtr = DAG.getNode(ISD::ADD, dl, MVT::i32, FIPtr,
278 DAG.getConstant(Offset, MVT::i32));
279 Load = DAG.getExtLoad(LoadOp, dl, MVT::i32, Chain, FIPtr,
282 Load = DAG.getNode(ISD::TRUNCATE, dl, VA.getValVT(), Load);
295 SDValue Copy = DAG.getCopyToReg(DAG.getEntryNode(), dl, Reg, InVals[0]);
296 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Copy, Chain);
322 SDValue Arg = DAG.getCopyFromReg(DAG.getRoot(), dl, VReg, MVT::i32);
326 SDValue FIPtr = DAG.getFrameIndex(FrameIdx, MVT::i32);
328 OutChains.push_back(DAG.getStore(DAG.getRoot(), dl, Arg, FIPtr,
336 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
347 SelectionDAG &DAG = CLI.DAG;
363 CCState CCInfo(CallConv, isVarArg, DAG.getMachineFunction(),
364 DAG.getTarget(), ArgLocs, *DAG.getContext());
373 MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
387 SDValue FIPtr = DAG.getFrameIndex(FI, getPointerTy());
388 SDValue SizeNode = DAG.getConstant(Size, MVT::i32);
390 Chain = DAG.getMemcpy(Chain, dl, FIPtr, Arg, SizeNode, Align,
397 Chain = DAG.getCALLSEQ_START(Chain, DAG.getIntPtrConstant(ArgsSize, true));
422 Arg = DAG.getNode(ISD::SIGN_EXTEND, dl, VA.getLocVT(), Arg);
425 Arg = DAG.getNode(ISD::ZERO_EXTEND, dl, VA.getLocVT(), Arg);
428 Arg = DAG.getNode(ISD::ANY_EXTEND, dl, VA.getLocVT(), Arg);
431 Arg = DAG.getNode(ISD::BITCAST, dl, VA.getLocVT(), Arg);
438 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
439 SDValue PtrOff = DAG.getIntPtrConstant(64);
440 PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff);
441 MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff,
455 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
456 SDValue PtrOff = DAG.getIntPtrConstant(Offset);
457 PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff);
458 MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff,
465 SDValue StackPtr = DAG.CreateStackTemporary(MVT::f64, MVT::i32);
466 SDValue Store = DAG.getStore(DAG.getEntryNode(), dl,
470 SDValue Hi = DAG.getLoad(MVT::i32, dl, Store, StackPtr,
473 StackPtr = DAG.getNode(ISD::ADD, dl, StackPtr.getValueType(), StackPtr,
474 DAG.getIntPtrConstant(4));
476 SDValue Lo = DAG.getLoad(MVT::i32, dl, Store, StackPtr,
488 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
489 SDValue PtrOff = DAG.getIntPtrConstant(Offset);
490 PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff);
491 MemOpChains.push_back(DAG.getStore(Chain, dl, Lo, PtrOff,
498 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
499 SDValue PtrOff = DAG.getIntPtrConstant(Offset);
500 PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff);
501 MemOpChains.push_back(DAG.getStore(Chain, dl, Hi, PtrOff,
505 PtrOff = DAG.getIntPtrConstant(Offset+4);
506 PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff);
507 MemOpChains.push_back(DAG.getStore(Chain, dl, Lo, PtrOff,
521 Arg = DAG.getNode(ISD::BITCAST, dl, MVT::i32, Arg);
529 SDValue StackPtr = DAG.getRegister(SP::O6, MVT::i32);
530 SDValue PtrOff = DAG.getIntPtrConstant(VA.getLocMemOffset()+StackOffset);
531 PtrOff = DAG.getNode(ISD::ADD, dl, MVT::i32, StackPtr, PtrOff);
532 MemOpChains.push_back(DAG.getStore(Chain, dl, Arg, PtrOff,
540 Chain = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
554 Chain = DAG.getCopyToReg(Chain, dl, Reg, RegsToPass[i].second, InFlag);
558 unsigned SRetArgSize = (hasStructRetAttr)? getSRetArgSize(DAG, Callee):0;
564 Callee = DAG.getTargetGlobalAddress(G->getGlobal(), dl, MVT::i32);
566 Callee = DAG.getTargetExternalSymbol(E->getSymbol(), MVT::i32);
569 SDVTList NodeTys = DAG.getVTList(MVT::Other, MVT::Glue);
574 Ops.push_back(DAG.getTargetConstant(SRetArgSize, MVT::i32));
580 Ops.push_back(DAG.getRegister(Reg, RegsToPass[i].second.getValueType()));
585 Chain = DAG.getNode(SPISD::CALL, dl, NodeTys, &Ops[0], Ops.size());
588 Chain = DAG.getCALLSEQ_END(Chain, DAG.getIntPtrConstant(ArgsSize, true),
589 DAG.getIntPtrConstant(0, true), InFlag);
594 CCState RVInfo(CallConv, isVarArg, DAG.getMachineFunction(),
595 DAG.getTarget(), RVLocs, *DAG.getContext());
607 Chain = DAG.getCopyFromReg(Chain, dl, Reg,
617 SparcTargetLowering::getSRetArgSize(SelectionDAG &DAG, SDValue Callee) const
624 const Function *Fn = DAG.getMachineFunction().getFunction();
644 /// IntCondCCodeToICC - Convert a DAG integer condition code to a SPARC ICC
662 /// FPCondCCodeToFCC - Convert a DAG floatingp oint condition code to a SPARC
836 /// be zero. Op is expected to be a target specific node. Used by DAG
841 const SelectionDAG &DAG,
850 DAG.ComputeMaskedBits(Op.getOperand(1), KnownZero, KnownOne, Depth+1);
851 DAG.ComputeMaskedBits(Op.getOperand(0), KnownZero2, KnownOne2, Depth+1);
885 SelectionDAG &DAG) const {
889 SDValue GA = DAG.getTargetGlobalAddress(GV, dl, MVT::i32);
890 SDValue Hi = DAG.getNode(SPISD::Hi, dl, MVT::i32, GA);
891 SDValue Lo = DAG.getNode(SPISD::Lo, dl, MVT::i32, GA);
894 return DAG.getNode(ISD::ADD, dl, MVT::i32, Lo, Hi);
896 SDValue GlobalBase = DAG.getNode(SPISD::GLOBAL_BASE_REG, dl,
898 SDValue RelAddr = DAG.getNode(ISD::ADD, dl, MVT::i32, Lo, Hi);
899 SDValue AbsAddr = DAG.getNode(ISD::ADD, dl, MVT::i32,
901 return DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(),
906 SelectionDAG &DAG) const {
911 SDValue CP = DAG.getTargetConstantPool(C, MVT::i32, N->getAlignment());
912 SDValue Hi = DAG.getNode(SPISD::Hi, dl, MVT::i32, CP);
913 SDValue Lo = DAG.getNode(SPISD::Lo, dl, MVT::i32, CP);
915 return DAG.getNode(ISD::ADD, dl, MVT::i32, Lo, Hi);
917 SDValue GlobalBase = DAG.getNode(SPISD::GLOBAL_BASE_REG, dl,
919 SDValue RelAddr = DAG.getNode(ISD::ADD, dl, MVT::i32, Lo, Hi);
920 SDValue AbsAddr = DAG.getNode(ISD::ADD, dl, MVT::i32,
922 return DAG.getLoad(getPointerTy(), dl, DAG.getEntryNode(),
926 static SDValue LowerFP_TO_SINT(SDValue Op, SelectionDAG &DAG) {
930 Op = DAG.getNode(SPISD::FTOI, dl, MVT::f32, Op.getOperand(0));
931 return DAG.getNode(ISD::BITCAST, dl, MVT::i32, Op);
934 static SDValue LowerSINT_TO_FP(SDValue Op, SelectionDAG &DAG) {
937 SDValue Tmp = DAG.getNode(ISD::BITCAST, dl, MVT::f32, Op.getOperand(0));
939 return DAG.getNode(SPISD::ITOF, dl, Op.getValueType(), Tmp);
942 static SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG) {
960 CompareFlag = DAG.getNode(SPISD::CMPICC, dl, VTs, Ops, 2).getValue(1);
964 CompareFlag = DAG.getNode(SPISD::CMPFCC, dl, MVT::Glue, LHS, RHS);
968 return DAG.getNode(Opc, dl, MVT::Other, Chain, Dest,
969 DAG.getConstant(SPCC, MVT::i32), CompareFlag);
972 static SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) {
990 CompareFlag = DAG.getNode(SPISD::CMPICC, dl, VTs, Ops, 2).getValue(1);
994 CompareFlag = DAG.getNode(SPISD::CMPFCC, dl, MVT::Glue, LHS, RHS);
998 return DAG.getNode(Opc, dl, TrueVal.getValueType(), TrueVal, FalseVal,
999 DAG.getConstant(SPCC, MVT::i32), CompareFlag);
1002 static SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG,
1004 MachineFunction &MF = DAG.getMachineFunction();
1011 DAG.getNode(ISD::ADD, dl, MVT::i32,
1012 DAG.getRegister(SP::I6, MVT::i32),
1013 DAG.getConstant(FuncInfo->getVarArgsFrameOffset(),
1016 return DAG.getStore(Op.getOperand(0), dl, Offset, Op.getOperand(1),
1020 static SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG) {
1027 SDValue VAList = DAG.getLoad(MVT::i32, dl, InChain, VAListPtr,
1030 SDValue NextPtr = DAG.getNode(ISD::ADD, dl, MVT::i32, VAList,
1031 DAG.getConstant(VT.getSizeInBits()/8,
1034 InChain = DAG.getStore(VAList.getValue(1), dl, NextPtr,
1039 return DAG.getLoad(VT, dl, InChain, VAList, MachinePointerInfo(),
1043 SDValue V = DAG.getLoad(MVT::i64, dl, InChain, VAList, MachinePointerInfo(),
1048 DAG.getNode(ISD::BITCAST, dl, MVT::f64, V),
1051 return DAG.getMergeValues(Ops, 2, dl);
1054 static SDValue LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG) {
1060 SDValue SP = DAG.getCopyFromReg(Chain, dl, SPReg, MVT::i32);
1061 SDValue NewSP = DAG.getNode(ISD::SUB, dl, MVT::i32, SP, Size); // Value
1062 Chain = DAG.getCopyToReg(SP.getValue(1), dl, SPReg, NewSP); // Output chain
1066 SDValue NewVal = DAG.getNode(ISD::ADD, dl, MVT::i32, NewSP,
1067 DAG.getConstant(96, MVT::i32));
1069 return DAG.getMergeValues(Ops, 2, dl);
1073 static SDValue getFLUSHW(SDValue Op, SelectionDAG &DAG) {
1075 SDValue Chain = DAG.getNode(SPISD::FLUSHW,
1076 dl, MVT::Other, DAG.getEntryNode());
1080 static SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) {
1081 MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
1092 FrameAddr = DAG.getCopyFromReg(DAG.getEntryNode(), dl, FrameReg, VT);
1095 SDValue Chain = getFLUSHW(Op, DAG);
1096 FrameAddr = DAG.getCopyFromReg(Chain, dl, FrameReg, VT);
1099 SDValue Ptr = DAG.getNode(ISD::ADD,
1101 FrameAddr, DAG.getIntPtrConstant(56));
1102 FrameAddr = DAG.getLoad(MVT::i32, dl,
1111 static SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) {
1112 MachineFrameInfo *MFI = DAG.getMachineFunction().getFrameInfo();
1123 RetAddr = DAG.getCopyFromReg(DAG.getEntryNode(), dl, RetReg, VT);
1126 SDValue Chain = getFLUSHW(Op, DAG);
1127 RetAddr = DAG.getCopyFromReg(Chain, dl, SP::I6, VT);
1130 SDValue Ptr = DAG.getNode(ISD::ADD,
1133 DAG.getIntPtrConstant((i == depth-1)?60:56));
1134 RetAddr = DAG.getLoad(MVT::i32, dl,
1144 LowerOperation(SDValue Op, SelectionDAG &DAG) const {
1147 case ISD::RETURNADDR: return LowerRETURNADDR(Op, DAG);
1148 case ISD::FRAMEADDR: return LowerFRAMEADDR(Op, DAG);
1151 case ISD::GlobalAddress: return LowerGlobalAddress(Op, DAG);
1152 case ISD::ConstantPool: return LowerConstantPool(Op, DAG);
1153 case ISD::FP_TO_SINT: return LowerFP_TO_SINT(Op, DAG);
1154 case ISD::SINT_TO_FP: return LowerSINT_TO_FP(Op, DAG);
1155 case ISD::BR_CC: return LowerBR_CC(Op, DAG);
1156 case ISD::SELECT_CC: return LowerSELECT_CC(Op, DAG);
1157 case ISD::VASTART: return LowerVASTART(Op, DAG, *this);
1158 case ISD::VAARG: return LowerVAARG(Op, DAG);
1159 case ISD::DYNAMIC_STACKALLOC: return LowerDYNAMIC_STACKALLOC(Op, DAG);