@@ -221,120 +221,119 @@ void CallingConvEmitter::emitAction(const Record *Action, indent Indent,
221
221
O << " ) {\n " ;
222
222
emitAction (Action->getValueAsDef (" SubAction" ), Indent + 2 , O);
223
223
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 " ;
334
287
} 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 " ;
337
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 " ;
334
+ } else {
335
+ errs () << *Action;
336
+ PrintFatalError (Action->getLoc (), " Unknown CCAction!" );
338
337
}
339
338
}
340
339
0 commit comments