@@ -221,120 +221,119 @@ void CallingConvEmitter::emitAction(const Record *Action, indent Indent,
221221 O << " ) {\n " ;
222222 emitAction (Action->getValueAsDef (" SubAction" ), Indent + 2 , O);
223223 O << Indent << " }\n " ;
224- } else {
225- if (Action->isSubClassOf (" CCDelegateTo" )) {
226- const Record *CC = Action->getValueAsDef (" CC" );
227- O << Indent << " if (!" << CC->getName ()
228- << " (ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))\n "
229- << Indent + 2 << " return false;\n " ;
230- DelegateToMap[CurrentAction].insert (CC->getName ().str ());
231- } else if (Action->isSubClassOf (" CCAssignToReg" ) ||
232- Action->isSubClassOf (" CCAssignToRegTuple" ) ||
233- Action->isSubClassOf (" CCAssignToRegAndStack" )) {
234- const ListInit *RegList = Action->getValueAsListInit (" RegList" );
235- for (unsigned I = 0 , E = RegList->size (); I != E; ++I) {
236- std::string Name = getQualifiedRegisterName (RegList->getElement (I));
237- if (SwiftAction)
238- AssignedSwiftRegsMap[CurrentAction].insert (std::move (Name));
239- else
240- AssignedRegsMap[CurrentAction].insert (std::move (Name));
241- }
242- EmitAllocateReg ({RegList}, {" RegList" });
243-
244- if (Action->isSubClassOf (" CCAssignToRegAndStack" ))
245- EmitAllocateStack ();
246-
247- O << Indent << " return false;\n " ;
248- O << Indent << " }\n " ;
249- } else if (Action->isSubClassOf (" CCAssignToRegWithShadow" )) {
250- const ListInit *RegList = Action->getValueAsListInit (" RegList" );
251- const ListInit *ShadowRegList =
252- Action->getValueAsListInit (" ShadowRegList" );
253- if (!ShadowRegList->empty () && ShadowRegList->size () != RegList->size ())
254- PrintFatalError (Action->getLoc (),
255- " Invalid length of list of shadowed registers" );
256-
257- EmitAllocateReg ({RegList, ShadowRegList}, {" RegList" , " RegList" });
258-
259- O << Indent << " return false;\n " ;
260- O << Indent << " }\n " ;
261- } else if (Action->isSubClassOf (" CCAssignToStack" )) {
262- EmitAllocateStack (/* EmitOffset=*/ true );
263- O << Indent << " State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset"
264- << Counter << " , LocVT, LocInfo));\n " ;
265- O << Indent << " return false;\n " ;
266- } else if (Action->isSubClassOf (" CCAssignToStackWithShadow" )) {
267- int Size = Action->getValueAsInt (" Size" );
268- int Align = Action->getValueAsInt (" Align" );
269- const ListInit *ShadowRegList =
270- Action->getValueAsListInit (" ShadowRegList" );
271-
272- unsigned ShadowRegListNumber = ++Counter;
273- EmitRegList (ShadowRegList, " ShadowRegList" + utostr (ShadowRegListNumber));
274-
275- O << Indent << " int64_t Offset" << ++Counter << " = State.AllocateStack("
276- << Size << " , Align(" << Align << " ), "
277- << " ShadowRegList" << ShadowRegListNumber << " );\n " ;
278- O << Indent << " State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset"
279- << Counter << " , LocVT, LocInfo));\n " ;
280- O << Indent << " return false;\n " ;
281- } else if (Action->isSubClassOf (" CCPromoteToType" )) {
282- const Record *DestTy = Action->getValueAsDef (" DestTy" );
283- MVT::SimpleValueType DestVT = getValueType (DestTy);
284- O << Indent << " LocVT = " << getEnumName (DestVT) << " ;\n " ;
285- if (MVT (DestVT).isFloatingPoint ()) {
286- O << Indent << " LocInfo = CCValAssign::FPExt;\n " ;
287- } else {
288- O << Indent << " if (ArgFlags.isSExt())\n "
289- << Indent << " LocInfo = CCValAssign::SExt;\n "
290- << Indent << " else if (ArgFlags.isZExt())\n "
291- << Indent << " LocInfo = CCValAssign::ZExt;\n "
292- << Indent << " else\n "
293- << Indent << " LocInfo = CCValAssign::AExt;\n " ;
294- }
295- } else if (Action->isSubClassOf (" CCPromoteToUpperBitsInType" )) {
296- const Record *DestTy = Action->getValueAsDef (" DestTy" );
297- MVT::SimpleValueType DestVT = getValueType (DestTy);
298- O << Indent << " LocVT = " << getEnumName (DestVT) << " ;\n " ;
299- if (MVT (DestVT).isFloatingPoint ()) {
300- PrintFatalError (Action->getLoc (),
301- " CCPromoteToUpperBitsInType does not handle floating "
302- " point" );
303- } else {
304- O << Indent << " if (ArgFlags.isSExt())\n "
305- << Indent << " LocInfo = CCValAssign::SExtUpper;\n "
306- << Indent << " else if (ArgFlags.isZExt())\n "
307- << Indent << " LocInfo = CCValAssign::ZExtUpper;\n "
308- << Indent << " else\n "
309- << Indent << " LocInfo = CCValAssign::AExtUpper;\n " ;
310- }
311- } else if (Action->isSubClassOf (" CCBitConvertToType" )) {
312- const Record *DestTy = Action->getValueAsDef (" DestTy" );
313- O << Indent << " LocVT = " << getEnumName (getValueType (DestTy)) << " ;\n " ;
314- O << Indent << " LocInfo = CCValAssign::BCvt;\n " ;
315- } else if (Action->isSubClassOf (" CCTruncToType" )) {
316- const Record *DestTy = Action->getValueAsDef (" DestTy" );
317- O << Indent << " LocVT = " << getEnumName (getValueType (DestTy)) << " ;\n " ;
318- O << Indent << " LocInfo = CCValAssign::Trunc;\n " ;
319- } else if (Action->isSubClassOf (" CCPassIndirect" )) {
320- const Record *DestTy = Action->getValueAsDef (" DestTy" );
321- O << Indent << " LocVT = " << getEnumName (getValueType (DestTy)) << " ;\n " ;
322- O << Indent << " LocInfo = CCValAssign::Indirect;\n " ;
323- } else if (Action->isSubClassOf (" CCPassByVal" )) {
324- int Size = Action->getValueAsInt (" Size" );
325- int Align = Action->getValueAsInt (" Align" );
326- O << Indent << " State.HandleByVal(ValNo, ValVT, LocVT, LocInfo, " << Size
327- << " , Align(" << Align << " ), ArgFlags);\n " ;
328- O << Indent << " return false;\n " ;
329- } else if (Action->isSubClassOf (" CCCustom" )) {
330- O << Indent << " if (" << Action->getValueAsString (" FuncName" )
331- << " (ValNo, ValVT, "
332- << " LocVT, LocInfo, ArgFlags, State))\n " ;
333- O << Indent << " return false;\n " ;
224+ return ;
225+ }
226+
227+ if (Action->isSubClassOf (" CCDelegateTo" )) {
228+ const Record *CC = Action->getValueAsDef (" CC" );
229+ O << Indent << " if (!" << CC->getName ()
230+ << " (ValNo, ValVT, LocVT, LocInfo, ArgFlags, State))\n "
231+ << Indent + 2 << " return false;\n " ;
232+ DelegateToMap[CurrentAction].insert (CC->getName ().str ());
233+ } else if (Action->isSubClassOf (" CCAssignToReg" ) ||
234+ Action->isSubClassOf (" CCAssignToRegTuple" ) ||
235+ Action->isSubClassOf (" CCAssignToRegAndStack" )) {
236+ const ListInit *RegList = Action->getValueAsListInit (" RegList" );
237+ for (unsigned I = 0 , E = RegList->size (); I != E; ++I) {
238+ std::string Name = getQualifiedRegisterName (RegList->getElement (I));
239+ if (SwiftAction)
240+ AssignedSwiftRegsMap[CurrentAction].insert (std::move (Name));
241+ else
242+ AssignedRegsMap[CurrentAction].insert (std::move (Name));
243+ }
244+ EmitAllocateReg ({RegList}, {" RegList" });
245+
246+ if (Action->isSubClassOf (" CCAssignToRegAndStack" ))
247+ EmitAllocateStack ();
248+
249+ O << Indent << " return false;\n " ;
250+ O << Indent << " }\n " ;
251+ } else if (Action->isSubClassOf (" CCAssignToRegWithShadow" )) {
252+ const ListInit *RegList = Action->getValueAsListInit (" RegList" );
253+ const ListInit *ShadowRegList = Action->getValueAsListInit (" ShadowRegList" );
254+ if (!ShadowRegList->empty () && ShadowRegList->size () != RegList->size ())
255+ PrintFatalError (Action->getLoc (),
256+ " Invalid length of list of shadowed registers" );
257+
258+ EmitAllocateReg ({RegList, ShadowRegList}, {" RegList" , " RegList" });
259+
260+ O << Indent << " return false;\n " ;
261+ O << Indent << " }\n " ;
262+ } else if (Action->isSubClassOf (" CCAssignToStack" )) {
263+ EmitAllocateStack (/* EmitOffset=*/ true );
264+ O << Indent << " State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset"
265+ << Counter << " , LocVT, LocInfo));\n " ;
266+ O << Indent << " return false;\n " ;
267+ } else if (Action->isSubClassOf (" CCAssignToStackWithShadow" )) {
268+ int Size = Action->getValueAsInt (" Size" );
269+ int Align = Action->getValueAsInt (" Align" );
270+ const ListInit *ShadowRegList = Action->getValueAsListInit (" ShadowRegList" );
271+
272+ unsigned ShadowRegListNumber = ++Counter;
273+ EmitRegList (ShadowRegList, " ShadowRegList" + utostr (ShadowRegListNumber));
274+
275+ O << Indent << " int64_t Offset" << ++Counter << " = State.AllocateStack("
276+ << Size << " , Align(" << Align << " ), "
277+ << " ShadowRegList" << ShadowRegListNumber << " );\n " ;
278+ O << Indent << " State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset"
279+ << Counter << " , LocVT, LocInfo));\n " ;
280+ O << Indent << " return false;\n " ;
281+ } else if (Action->isSubClassOf (" CCPromoteToType" )) {
282+ const Record *DestTy = Action->getValueAsDef (" DestTy" );
283+ MVT::SimpleValueType DestVT = getValueType (DestTy);
284+ O << Indent << " LocVT = " << getEnumName (DestVT) << " ;\n " ;
285+ if (MVT (DestVT).isFloatingPoint ()) {
286+ O << Indent << " LocInfo = CCValAssign::FPExt;\n " ;
334287 } else {
335- errs () << *Action;
336- PrintFatalError (Action->getLoc (), " Unknown CCAction!" );
288+ O << Indent << " if (ArgFlags.isSExt())\n "
289+ << Indent << " LocInfo = CCValAssign::SExt;\n "
290+ << Indent << " else if (ArgFlags.isZExt())\n "
291+ << Indent << " LocInfo = CCValAssign::ZExt;\n "
292+ << Indent << " else\n "
293+ << Indent << " LocInfo = CCValAssign::AExt;\n " ;
294+ }
295+ } else if (Action->isSubClassOf (" CCPromoteToUpperBitsInType" )) {
296+ const Record *DestTy = Action->getValueAsDef (" DestTy" );
297+ MVT::SimpleValueType DestVT = getValueType (DestTy);
298+ O << Indent << " LocVT = " << getEnumName (DestVT) << " ;\n " ;
299+ if (MVT (DestVT).isFloatingPoint ()) {
300+ PrintFatalError (Action->getLoc (),
301+ " CCPromoteToUpperBitsInType does not handle floating "
302+ " point" );
303+ } else {
304+ O << Indent << " if (ArgFlags.isSExt())\n "
305+ << Indent << " LocInfo = CCValAssign::SExtUpper;\n "
306+ << Indent << " else if (ArgFlags.isZExt())\n "
307+ << Indent << " LocInfo = CCValAssign::ZExtUpper;\n "
308+ << Indent << " else\n "
309+ << Indent << " LocInfo = CCValAssign::AExtUpper;\n " ;
337310 }
311+ } else if (Action->isSubClassOf (" CCBitConvertToType" )) {
312+ const Record *DestTy = Action->getValueAsDef (" DestTy" );
313+ O << Indent << " LocVT = " << getEnumName (getValueType (DestTy)) << " ;\n " ;
314+ O << Indent << " LocInfo = CCValAssign::BCvt;\n " ;
315+ } else if (Action->isSubClassOf (" CCTruncToType" )) {
316+ const Record *DestTy = Action->getValueAsDef (" DestTy" );
317+ O << Indent << " LocVT = " << getEnumName (getValueType (DestTy)) << " ;\n " ;
318+ O << Indent << " LocInfo = CCValAssign::Trunc;\n " ;
319+ } else if (Action->isSubClassOf (" CCPassIndirect" )) {
320+ const Record *DestTy = Action->getValueAsDef (" DestTy" );
321+ O << Indent << " LocVT = " << getEnumName (getValueType (DestTy)) << " ;\n " ;
322+ O << Indent << " LocInfo = CCValAssign::Indirect;\n " ;
323+ } else if (Action->isSubClassOf (" CCPassByVal" )) {
324+ int Size = Action->getValueAsInt (" Size" );
325+ int Align = Action->getValueAsInt (" Align" );
326+ O << Indent << " State.HandleByVal(ValNo, ValVT, LocVT, LocInfo, " << Size
327+ << " , Align(" << Align << " ), ArgFlags);\n " ;
328+ O << Indent << " return false;\n " ;
329+ } else if (Action->isSubClassOf (" CCCustom" )) {
330+ O << Indent << " if (" << Action->getValueAsString (" FuncName" )
331+ << " (ValNo, ValVT, "
332+ << " LocVT, LocInfo, ArgFlags, State))\n " ;
333+ O << Indent << " return false;\n " ;
334+ } else {
335+ errs () << *Action;
336+ PrintFatalError (Action->getLoc (), " Unknown CCAction!" );
338337 }
339338}
340339
0 commit comments