xref: /freebsd/contrib/llvm-project/clang/lib/CodeGen/Targets/PPC.cpp (revision 770cf0a5f02dc8983a89c6568d741fbc25baa999)
1 //===- PPC.cpp ------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "ABIInfoImpl.h"
10 #include "TargetInfo.h"
11 #include "clang/Basic/DiagnosticFrontend.h"
12 
13 using namespace clang;
14 using namespace clang::CodeGen;
15 
16 static RValue complexTempStructure(CodeGenFunction &CGF, Address VAListAddr,
17                                    QualType Ty, CharUnits SlotSize,
18                                    CharUnits EltSize, const ComplexType *CTy) {
19   Address Addr =
20       emitVoidPtrDirectVAArg(CGF, VAListAddr, CGF.Int8Ty, SlotSize * 2,
21                              SlotSize, SlotSize, /*AllowHigher*/ true);
22 
23   Address RealAddr = Addr;
24   Address ImagAddr = RealAddr;
25   if (CGF.CGM.getDataLayout().isBigEndian()) {
26     RealAddr =
27         CGF.Builder.CreateConstInBoundsByteGEP(RealAddr, SlotSize - EltSize);
28     ImagAddr = CGF.Builder.CreateConstInBoundsByteGEP(ImagAddr,
29                                                       2 * SlotSize - EltSize);
30   } else {
31     ImagAddr = CGF.Builder.CreateConstInBoundsByteGEP(RealAddr, SlotSize);
32   }
33 
34   llvm::Type *EltTy = CGF.ConvertTypeForMem(CTy->getElementType());
35   RealAddr = RealAddr.withElementType(EltTy);
36   ImagAddr = ImagAddr.withElementType(EltTy);
37   llvm::Value *Real = CGF.Builder.CreateLoad(RealAddr, ".vareal");
38   llvm::Value *Imag = CGF.Builder.CreateLoad(ImagAddr, ".vaimag");
39 
40   return RValue::getComplex(Real, Imag);
41 }
42 
43 static bool PPC_initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
44                                         llvm::Value *Address, bool Is64Bit,
45                                         bool IsAIX) {
46   // This is calculated from the LLVM and GCC tables and verified
47   // against gcc output.  AFAIK all PPC ABIs use the same encoding.
48 
49   CodeGen::CGBuilderTy &Builder = CGF.Builder;
50 
51   llvm::IntegerType *i8 = CGF.Int8Ty;
52   llvm::Value *Four8 = llvm::ConstantInt::get(i8, 4);
53   llvm::Value *Eight8 = llvm::ConstantInt::get(i8, 8);
54   llvm::Value *Sixteen8 = llvm::ConstantInt::get(i8, 16);
55 
56   // 0-31: r0-31, the 4-byte or 8-byte general-purpose registers
57   AssignToArrayRange(Builder, Address, Is64Bit ? Eight8 : Four8, 0, 31);
58 
59   // 32-63: fp0-31, the 8-byte floating-point registers
60   AssignToArrayRange(Builder, Address, Eight8, 32, 63);
61 
62   // 64-67 are various 4-byte or 8-byte special-purpose registers:
63   // 64: mq
64   // 65: lr
65   // 66: ctr
66   // 67: ap
67   AssignToArrayRange(Builder, Address, Is64Bit ? Eight8 : Four8, 64, 67);
68 
69   // 68-76 are various 4-byte special-purpose registers:
70   // 68-75 cr0-7
71   // 76: xer
72   AssignToArrayRange(Builder, Address, Four8, 68, 76);
73 
74   // 77-108: v0-31, the 16-byte vector registers
75   AssignToArrayRange(Builder, Address, Sixteen8, 77, 108);
76 
77   // 109: vrsave
78   // 110: vscr
79   AssignToArrayRange(Builder, Address, Is64Bit ? Eight8 : Four8, 109, 110);
80 
81   // AIX does not utilize the rest of the registers.
82   if (IsAIX)
83     return false;
84 
85   // 111: spe_acc
86   // 112: spefscr
87   // 113: sfp
88   AssignToArrayRange(Builder, Address, Is64Bit ? Eight8 : Four8, 111, 113);
89 
90   if (!Is64Bit)
91     return false;
92 
93   // TODO: Need to verify if these registers are used on 64 bit AIX with Power8
94   // or above CPU.
95   // 64-bit only registers:
96   // 114: tfhar
97   // 115: tfiar
98   // 116: texasr
99   AssignToArrayRange(Builder, Address, Eight8, 114, 116);
100 
101   return false;
102 }
103 
104 // AIX
105 namespace {
106 /// AIXABIInfo - The AIX XCOFF ABI information.
107 class AIXABIInfo : public ABIInfo {
108   const bool Is64Bit;
109   const unsigned PtrByteSize;
110   CharUnits getParamTypeAlignment(QualType Ty) const;
111 
112 public:
113   AIXABIInfo(CodeGen::CodeGenTypes &CGT, bool Is64Bit)
114       : ABIInfo(CGT), Is64Bit(Is64Bit), PtrByteSize(Is64Bit ? 8 : 4) {}
115 
116   bool isPromotableTypeForABI(QualType Ty) const;
117 
118   ABIArgInfo classifyReturnType(QualType RetTy) const;
119   ABIArgInfo classifyArgumentType(QualType Ty) const;
120 
121   void computeInfo(CGFunctionInfo &FI) const override {
122     if (!getCXXABI().classifyReturnType(FI))
123       FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
124 
125     for (auto &I : FI.arguments())
126       I.info = classifyArgumentType(I.type);
127   }
128 
129   RValue EmitVAArg(CodeGenFunction &CGF, Address VAListAddr, QualType Ty,
130                    AggValueSlot Slot) const override;
131 };
132 
133 class AIXTargetCodeGenInfo : public TargetCodeGenInfo {
134   const bool Is64Bit;
135 
136 public:
137   AIXTargetCodeGenInfo(CodeGen::CodeGenTypes &CGT, bool Is64Bit)
138       : TargetCodeGenInfo(std::make_unique<AIXABIInfo>(CGT, Is64Bit)),
139         Is64Bit(Is64Bit) {}
140   int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const override {
141     return 1; // r1 is the dedicated stack pointer
142   }
143 
144   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
145                                llvm::Value *Address) const override;
146 
147   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
148                            CodeGen::CodeGenModule &M) const override;
149 };
150 } // namespace
151 
152 // Return true if the ABI requires Ty to be passed sign- or zero-
153 // extended to 32/64 bits.
154 bool AIXABIInfo::isPromotableTypeForABI(QualType Ty) const {
155   // Treat an enum type as its underlying type.
156   if (const EnumType *EnumTy = Ty->getAs<EnumType>())
157     Ty = EnumTy->getDecl()->getIntegerType();
158 
159   // Promotable integer types are required to be promoted by the ABI.
160   if (getContext().isPromotableIntegerType(Ty))
161     return true;
162 
163   if (!Is64Bit)
164     return false;
165 
166   // For 64 bit mode, in addition to the usual promotable integer types, we also
167   // need to extend all 32-bit types, since the ABI requires promotion to 64
168   // bits.
169   if (const BuiltinType *BT = Ty->getAs<BuiltinType>())
170     switch (BT->getKind()) {
171     case BuiltinType::Int:
172     case BuiltinType::UInt:
173       return true;
174     default:
175       break;
176     }
177 
178   return false;
179 }
180 
181 ABIArgInfo AIXABIInfo::classifyReturnType(QualType RetTy) const {
182   if (RetTy->isAnyComplexType())
183     return ABIArgInfo::getDirect();
184 
185   if (RetTy->isVectorType())
186     return ABIArgInfo::getDirect();
187 
188   if (RetTy->isVoidType())
189     return ABIArgInfo::getIgnore();
190 
191   if (isAggregateTypeForABI(RetTy))
192     return getNaturalAlignIndirect(RetTy, getDataLayout().getAllocaAddrSpace());
193 
194   return (isPromotableTypeForABI(RetTy) ? ABIArgInfo::getExtend(RetTy)
195                                         : ABIArgInfo::getDirect());
196 }
197 
198 ABIArgInfo AIXABIInfo::classifyArgumentType(QualType Ty) const {
199   Ty = useFirstFieldIfTransparentUnion(Ty);
200 
201   if (Ty->isAnyComplexType())
202     return ABIArgInfo::getDirect();
203 
204   if (Ty->isVectorType())
205     return ABIArgInfo::getDirect();
206 
207   if (isAggregateTypeForABI(Ty)) {
208     // Records with non-trivial destructors/copy-constructors should not be
209     // passed by value.
210     if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI()))
211       return getNaturalAlignIndirect(Ty, getDataLayout().getAllocaAddrSpace(),
212                                      RAA == CGCXXABI::RAA_DirectInMemory);
213 
214     CharUnits CCAlign = getParamTypeAlignment(Ty);
215     CharUnits TyAlign = getContext().getTypeAlignInChars(Ty);
216 
217     return ABIArgInfo::getIndirect(
218         CCAlign, /*AddrSpace=*/getDataLayout().getAllocaAddrSpace(),
219         /*ByVal=*/true,
220         /*Realign=*/TyAlign > CCAlign);
221   }
222 
223   return (isPromotableTypeForABI(Ty)
224               ? ABIArgInfo::getExtend(Ty, CGT.ConvertType(Ty))
225               : ABIArgInfo::getDirect());
226 }
227 
228 CharUnits AIXABIInfo::getParamTypeAlignment(QualType Ty) const {
229   // Complex types are passed just like their elements.
230   if (const ComplexType *CTy = Ty->getAs<ComplexType>())
231     Ty = CTy->getElementType();
232 
233   if (Ty->isVectorType())
234     return CharUnits::fromQuantity(16);
235 
236   // If the structure contains a vector type, the alignment is 16.
237   if (isRecordWithSIMDVectorType(getContext(), Ty))
238     return CharUnits::fromQuantity(16);
239 
240   return CharUnits::fromQuantity(PtrByteSize);
241 }
242 
243 RValue AIXABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
244                              QualType Ty, AggValueSlot Slot) const {
245 
246   auto TypeInfo = getContext().getTypeInfoInChars(Ty);
247   TypeInfo.Align = getParamTypeAlignment(Ty);
248 
249   CharUnits SlotSize = CharUnits::fromQuantity(PtrByteSize);
250 
251   // If we have a complex type and the base type is smaller than the register
252   // size, the ABI calls for the real and imaginary parts to be right-adjusted
253   // in separate words in 32bit mode or doublewords in 64bit mode. However,
254   // Clang expects us to produce a pointer to a structure with the two parts
255   // packed tightly. So generate loads of the real and imaginary parts relative
256   // to the va_list pointer, and store them to a temporary structure. We do the
257   // same as the PPC64ABI here.
258   if (const ComplexType *CTy = Ty->getAs<ComplexType>()) {
259     CharUnits EltSize = TypeInfo.Width / 2;
260     if (EltSize < SlotSize)
261       return complexTempStructure(CGF, VAListAddr, Ty, SlotSize, EltSize, CTy);
262   }
263 
264   return emitVoidPtrVAArg(CGF, VAListAddr, Ty, /*Indirect*/ false, TypeInfo,
265                           SlotSize, /*AllowHigher*/ true, Slot);
266 }
267 
268 bool AIXTargetCodeGenInfo::initDwarfEHRegSizeTable(
269     CodeGen::CodeGenFunction &CGF, llvm::Value *Address) const {
270   return PPC_initDwarfEHRegSizeTable(CGF, Address, Is64Bit, /*IsAIX*/ true);
271 }
272 
273 void AIXTargetCodeGenInfo::setTargetAttributes(
274     const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &M) const {
275   if (!isa<llvm::GlobalVariable>(GV))
276     return;
277 
278   auto *GVar = cast<llvm::GlobalVariable>(GV);
279   auto GVId = GV->getName();
280 
281   // Is this a global variable specified by the user as toc-data?
282   bool UserSpecifiedTOC =
283       llvm::binary_search(M.getCodeGenOpts().TocDataVarsUserSpecified, GVId);
284   // Assumes the same variable cannot be in both TocVarsUserSpecified and
285   // NoTocVars.
286   if (UserSpecifiedTOC ||
287       ((M.getCodeGenOpts().AllTocData) &&
288        !llvm::binary_search(M.getCodeGenOpts().NoTocDataVars, GVId))) {
289     const unsigned long PointerSize =
290         GV->getParent()->getDataLayout().getPointerSizeInBits() / 8;
291     auto *VarD = dyn_cast<VarDecl>(D);
292     assert(VarD && "Invalid declaration of global variable.");
293 
294     ASTContext &Context = D->getASTContext();
295     unsigned Alignment = Context.toBits(Context.getDeclAlign(D)) / 8;
296     const auto *Ty = VarD->getType().getTypePtr();
297     const RecordDecl *RDecl =
298         Ty->isRecordType() ? Ty->getAs<RecordType>()->getDecl() : nullptr;
299 
300     bool EmitDiagnostic = UserSpecifiedTOC && GV->hasExternalLinkage();
301     auto reportUnsupportedWarning = [&](bool ShouldEmitWarning, StringRef Msg) {
302       if (ShouldEmitWarning)
303         M.getDiags().Report(D->getLocation(), diag::warn_toc_unsupported_type)
304             << GVId << Msg;
305     };
306     if (!Ty || Ty->isIncompleteType())
307       reportUnsupportedWarning(EmitDiagnostic, "of incomplete type");
308     else if (RDecl && RDecl->hasFlexibleArrayMember())
309       reportUnsupportedWarning(EmitDiagnostic,
310                                "it contains a flexible array member");
311     else if (VarD->getTLSKind() != VarDecl::TLS_None)
312       reportUnsupportedWarning(EmitDiagnostic, "of thread local storage");
313     else if (PointerSize < Context.getTypeInfo(VarD->getType()).Width / 8)
314       reportUnsupportedWarning(EmitDiagnostic,
315                                "variable is larger than a pointer");
316     else if (PointerSize < Alignment)
317       reportUnsupportedWarning(EmitDiagnostic,
318                                "variable is aligned wider than a pointer");
319     else if (D->hasAttr<SectionAttr>())
320       reportUnsupportedWarning(EmitDiagnostic,
321                                "variable has a section attribute");
322     else if (GV->hasExternalLinkage() ||
323              (M.getCodeGenOpts().AllTocData && !GV->hasLocalLinkage()))
324       GVar->addAttribute("toc-data");
325   }
326 }
327 
328 // PowerPC-32
329 namespace {
330 /// PPC32_SVR4_ABIInfo - The 32-bit PowerPC ELF (SVR4) ABI information.
331 class PPC32_SVR4_ABIInfo : public DefaultABIInfo {
332   bool IsSoftFloatABI;
333   bool IsRetSmallStructInRegABI;
334 
335   CharUnits getParamTypeAlignment(QualType Ty) const;
336 
337 public:
338   PPC32_SVR4_ABIInfo(CodeGen::CodeGenTypes &CGT, bool SoftFloatABI,
339                      bool RetSmallStructInRegABI)
340       : DefaultABIInfo(CGT), IsSoftFloatABI(SoftFloatABI),
341         IsRetSmallStructInRegABI(RetSmallStructInRegABI) {}
342 
343   ABIArgInfo classifyReturnType(QualType RetTy) const;
344 
345   void computeInfo(CGFunctionInfo &FI) const override {
346     if (!getCXXABI().classifyReturnType(FI))
347       FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
348     for (auto &I : FI.arguments())
349       I.info = classifyArgumentType(I.type);
350   }
351 
352   RValue EmitVAArg(CodeGenFunction &CGF, Address VAListAddr, QualType Ty,
353                    AggValueSlot Slot) const override;
354 };
355 
356 class PPC32TargetCodeGenInfo : public TargetCodeGenInfo {
357 public:
358   PPC32TargetCodeGenInfo(CodeGenTypes &CGT, bool SoftFloatABI,
359                          bool RetSmallStructInRegABI)
360       : TargetCodeGenInfo(std::make_unique<PPC32_SVR4_ABIInfo>(
361             CGT, SoftFloatABI, RetSmallStructInRegABI)) {}
362 
363   static bool isStructReturnInRegABI(const llvm::Triple &Triple,
364                                      const CodeGenOptions &Opts);
365 
366   int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const override {
367     // This is recovered from gcc output.
368     return 1; // r1 is the dedicated stack pointer
369   }
370 
371   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
372                                llvm::Value *Address) const override;
373 };
374 }
375 
376 CharUnits PPC32_SVR4_ABIInfo::getParamTypeAlignment(QualType Ty) const {
377   // Complex types are passed just like their elements.
378   if (const ComplexType *CTy = Ty->getAs<ComplexType>())
379     Ty = CTy->getElementType();
380 
381   if (Ty->isVectorType())
382     return CharUnits::fromQuantity(getContext().getTypeSize(Ty) == 128 ? 16
383                                                                        : 4);
384 
385   // For single-element float/vector structs, we consider the whole type
386   // to have the same alignment requirements as its single element.
387   const Type *AlignTy = nullptr;
388   if (const Type *EltType = isSingleElementStruct(Ty, getContext())) {
389     const BuiltinType *BT = EltType->getAs<BuiltinType>();
390     if ((EltType->isVectorType() && getContext().getTypeSize(EltType) == 128) ||
391         (BT && BT->isFloatingPoint()))
392       AlignTy = EltType;
393   }
394 
395   if (AlignTy)
396     return CharUnits::fromQuantity(AlignTy->isVectorType() ? 16 : 4);
397   return CharUnits::fromQuantity(4);
398 }
399 
400 ABIArgInfo PPC32_SVR4_ABIInfo::classifyReturnType(QualType RetTy) const {
401   uint64_t Size;
402 
403   // -msvr4-struct-return puts small aggregates in GPR3 and GPR4.
404   if (isAggregateTypeForABI(RetTy) && IsRetSmallStructInRegABI &&
405       (Size = getContext().getTypeSize(RetTy)) <= 64) {
406     // System V ABI (1995), page 3-22, specified:
407     // > A structure or union whose size is less than or equal to 8 bytes
408     // > shall be returned in r3 and r4, as if it were first stored in the
409     // > 8-byte aligned memory area and then the low addressed word were
410     // > loaded into r3 and the high-addressed word into r4.  Bits beyond
411     // > the last member of the structure or union are not defined.
412     //
413     // GCC for big-endian PPC32 inserts the pad before the first member,
414     // not "beyond the last member" of the struct.  To stay compatible
415     // with GCC, we coerce the struct to an integer of the same size.
416     // LLVM will extend it and return i32 in r3, or i64 in r3:r4.
417     if (Size == 0)
418       return ABIArgInfo::getIgnore();
419     else {
420       llvm::Type *CoerceTy = llvm::Type::getIntNTy(getVMContext(), Size);
421       return ABIArgInfo::getDirect(CoerceTy);
422     }
423   }
424 
425   return DefaultABIInfo::classifyReturnType(RetTy);
426 }
427 
428 // TODO: this implementation is now likely redundant with
429 // DefaultABIInfo::EmitVAArg.
430 RValue PPC32_SVR4_ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAList,
431                                      QualType Ty, AggValueSlot Slot) const {
432   if (getTarget().getTriple().isOSDarwin()) {
433     auto TI = getContext().getTypeInfoInChars(Ty);
434     TI.Align = getParamTypeAlignment(Ty);
435 
436     CharUnits SlotSize = CharUnits::fromQuantity(4);
437     return emitVoidPtrVAArg(CGF, VAList, Ty,
438                             classifyArgumentType(Ty).isIndirect(), TI, SlotSize,
439                             /*AllowHigherAlign=*/true, Slot);
440   }
441 
442   const unsigned OverflowLimit = 8;
443   if (const ComplexType *CTy = Ty->getAs<ComplexType>()) {
444     // TODO: Implement this. For now ignore.
445     (void)CTy;
446     return RValue::getAggregate(Address::invalid()); // FIXME?
447   }
448 
449   // struct __va_list_tag {
450   //   unsigned char gpr;
451   //   unsigned char fpr;
452   //   unsigned short reserved;
453   //   void *overflow_arg_area;
454   //   void *reg_save_area;
455   // };
456 
457   bool isI64 = Ty->isIntegerType() && getContext().getTypeSize(Ty) == 64;
458   bool isInt = !Ty->isFloatingType();
459   bool isF64 = Ty->isFloatingType() && getContext().getTypeSize(Ty) == 64;
460 
461   // All aggregates are passed indirectly?  That doesn't seem consistent
462   // with the argument-lowering code.
463   bool isIndirect = isAggregateTypeForABI(Ty);
464 
465   CGBuilderTy &Builder = CGF.Builder;
466 
467   // The calling convention either uses 1-2 GPRs or 1 FPR.
468   Address NumRegsAddr = Address::invalid();
469   if (isInt || IsSoftFloatABI) {
470     NumRegsAddr = Builder.CreateStructGEP(VAList, 0, "gpr");
471   } else {
472     NumRegsAddr = Builder.CreateStructGEP(VAList, 1, "fpr");
473   }
474 
475   llvm::Value *NumRegs = Builder.CreateLoad(NumRegsAddr, "numUsedRegs");
476 
477   // "Align" the register count when TY is i64.
478   if (isI64 || (isF64 && IsSoftFloatABI)) {
479     NumRegs = Builder.CreateAdd(NumRegs, Builder.getInt8(1));
480     NumRegs = Builder.CreateAnd(NumRegs, Builder.getInt8((uint8_t) ~1U));
481   }
482 
483   llvm::Value *CC =
484       Builder.CreateICmpULT(NumRegs, Builder.getInt8(OverflowLimit), "cond");
485 
486   llvm::BasicBlock *UsingRegs = CGF.createBasicBlock("using_regs");
487   llvm::BasicBlock *UsingOverflow = CGF.createBasicBlock("using_overflow");
488   llvm::BasicBlock *Cont = CGF.createBasicBlock("cont");
489 
490   Builder.CreateCondBr(CC, UsingRegs, UsingOverflow);
491 
492   llvm::Type *DirectTy = CGF.ConvertType(Ty), *ElementTy = DirectTy;
493   if (isIndirect)
494     DirectTy = CGF.UnqualPtrTy;
495 
496   // Case 1: consume registers.
497   Address RegAddr = Address::invalid();
498   {
499     CGF.EmitBlock(UsingRegs);
500 
501     Address RegSaveAreaPtr = Builder.CreateStructGEP(VAList, 4);
502     RegAddr = Address(Builder.CreateLoad(RegSaveAreaPtr), CGF.Int8Ty,
503                       CharUnits::fromQuantity(8));
504     assert(RegAddr.getElementType() == CGF.Int8Ty);
505 
506     // Floating-point registers start after the general-purpose registers.
507     if (!(isInt || IsSoftFloatABI)) {
508       RegAddr = Builder.CreateConstInBoundsByteGEP(RegAddr,
509                                                    CharUnits::fromQuantity(32));
510     }
511 
512     // Get the address of the saved value by scaling the number of
513     // registers we've used by the number of
514     CharUnits RegSize = CharUnits::fromQuantity((isInt || IsSoftFloatABI) ? 4 : 8);
515     llvm::Value *RegOffset =
516         Builder.CreateMul(NumRegs, Builder.getInt8(RegSize.getQuantity()));
517     RegAddr = Address(Builder.CreateInBoundsGEP(
518                           CGF.Int8Ty, RegAddr.emitRawPointer(CGF), RegOffset),
519                       DirectTy,
520                       RegAddr.getAlignment().alignmentOfArrayElement(RegSize));
521 
522     // Increase the used-register count.
523     NumRegs =
524       Builder.CreateAdd(NumRegs,
525                         Builder.getInt8((isI64 || (isF64 && IsSoftFloatABI)) ? 2 : 1));
526     Builder.CreateStore(NumRegs, NumRegsAddr);
527 
528     CGF.EmitBranch(Cont);
529   }
530 
531   // Case 2: consume space in the overflow area.
532   Address MemAddr = Address::invalid();
533   {
534     CGF.EmitBlock(UsingOverflow);
535 
536     Builder.CreateStore(Builder.getInt8(OverflowLimit), NumRegsAddr);
537 
538     // Everything in the overflow area is rounded up to a size of at least 4.
539     CharUnits OverflowAreaAlign = CharUnits::fromQuantity(4);
540 
541     CharUnits Size;
542     if (!isIndirect) {
543       auto TypeInfo = CGF.getContext().getTypeInfoInChars(Ty);
544       Size = TypeInfo.Width.alignTo(OverflowAreaAlign);
545     } else {
546       Size = CGF.getPointerSize();
547     }
548 
549     Address OverflowAreaAddr = Builder.CreateStructGEP(VAList, 3);
550     Address OverflowArea =
551         Address(Builder.CreateLoad(OverflowAreaAddr, "argp.cur"), CGF.Int8Ty,
552                 OverflowAreaAlign);
553     // Round up address of argument to alignment
554     CharUnits Align = CGF.getContext().getTypeAlignInChars(Ty);
555     if (Align > OverflowAreaAlign) {
556       llvm::Value *Ptr = OverflowArea.emitRawPointer(CGF);
557       OverflowArea = Address(emitRoundPointerUpToAlignment(CGF, Ptr, Align),
558                              OverflowArea.getElementType(), Align);
559     }
560 
561     MemAddr = OverflowArea.withElementType(DirectTy);
562 
563     // Increase the overflow area.
564     OverflowArea = Builder.CreateConstInBoundsByteGEP(OverflowArea, Size);
565     Builder.CreateStore(OverflowArea.emitRawPointer(CGF), OverflowAreaAddr);
566     CGF.EmitBranch(Cont);
567   }
568 
569   CGF.EmitBlock(Cont);
570 
571   // Merge the cases with a phi.
572   Address Result = emitMergePHI(CGF, RegAddr, UsingRegs, MemAddr, UsingOverflow,
573                                 "vaarg.addr");
574 
575   // Load the pointer if the argument was passed indirectly.
576   if (isIndirect) {
577     Result = Address(Builder.CreateLoad(Result, "aggr"), ElementTy,
578                      getContext().getTypeAlignInChars(Ty));
579   }
580 
581   return CGF.EmitLoadOfAnyValue(CGF.MakeAddrLValue(Result, Ty), Slot);
582 }
583 
584 bool PPC32TargetCodeGenInfo::isStructReturnInRegABI(
585     const llvm::Triple &Triple, const CodeGenOptions &Opts) {
586   assert(Triple.isPPC32());
587 
588   switch (Opts.getStructReturnConvention()) {
589   case CodeGenOptions::SRCK_Default:
590     break;
591   case CodeGenOptions::SRCK_OnStack: // -maix-struct-return
592     return false;
593   case CodeGenOptions::SRCK_InRegs: // -msvr4-struct-return
594     return true;
595   }
596 
597   if (Triple.isOSBinFormatELF() && !Triple.isOSLinux())
598     return true;
599 
600   return false;
601 }
602 
603 bool
604 PPC32TargetCodeGenInfo::initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
605                                                 llvm::Value *Address) const {
606   return PPC_initDwarfEHRegSizeTable(CGF, Address, /*Is64Bit*/ false,
607                                      /*IsAIX*/ false);
608 }
609 
610 // PowerPC-64
611 
612 namespace {
613 
614 /// PPC64_SVR4_ABIInfo - The 64-bit PowerPC ELF (SVR4) ABI information.
615 class PPC64_SVR4_ABIInfo : public ABIInfo {
616   static const unsigned GPRBits = 64;
617   PPC64_SVR4_ABIKind Kind;
618   bool IsSoftFloatABI;
619 
620 public:
621   PPC64_SVR4_ABIInfo(CodeGen::CodeGenTypes &CGT, PPC64_SVR4_ABIKind Kind,
622                      bool SoftFloatABI)
623       : ABIInfo(CGT), Kind(Kind), IsSoftFloatABI(SoftFloatABI) {}
624 
625   bool isPromotableTypeForABI(QualType Ty) const;
626   CharUnits getParamTypeAlignment(QualType Ty) const;
627 
628   ABIArgInfo classifyReturnType(QualType RetTy) const;
629   ABIArgInfo classifyArgumentType(QualType Ty) const;
630 
631   bool isHomogeneousAggregateBaseType(QualType Ty) const override;
632   bool isHomogeneousAggregateSmallEnough(const Type *Ty,
633                                          uint64_t Members) const override;
634 
635   // TODO: We can add more logic to computeInfo to improve performance.
636   // Example: For aggregate arguments that fit in a register, we could
637   // use getDirectInReg (as is done below for structs containing a single
638   // floating-point value) to avoid pushing them to memory on function
639   // entry.  This would require changing the logic in PPCISelLowering
640   // when lowering the parameters in the caller and args in the callee.
641   void computeInfo(CGFunctionInfo &FI) const override {
642     if (!getCXXABI().classifyReturnType(FI))
643       FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
644     for (auto &I : FI.arguments()) {
645       // We rely on the default argument classification for the most part.
646       // One exception:  An aggregate containing a single floating-point
647       // or vector item must be passed in a register if one is available.
648       const Type *T = isSingleElementStruct(I.type, getContext());
649       if (T) {
650         const BuiltinType *BT = T->getAs<BuiltinType>();
651         if ((T->isVectorType() && getContext().getTypeSize(T) == 128) ||
652             (BT && BT->isFloatingPoint())) {
653           QualType QT(T, 0);
654           I.info = ABIArgInfo::getDirectInReg(CGT.ConvertType(QT));
655           continue;
656         }
657       }
658       I.info = classifyArgumentType(I.type);
659     }
660   }
661 
662   RValue EmitVAArg(CodeGenFunction &CGF, Address VAListAddr, QualType Ty,
663                    AggValueSlot Slot) const override;
664 };
665 
666 class PPC64_SVR4_TargetCodeGenInfo : public TargetCodeGenInfo {
667 
668 public:
669   PPC64_SVR4_TargetCodeGenInfo(CodeGenTypes &CGT, PPC64_SVR4_ABIKind Kind,
670                                bool SoftFloatABI)
671       : TargetCodeGenInfo(
672             std::make_unique<PPC64_SVR4_ABIInfo>(CGT, Kind, SoftFloatABI)) {
673     SwiftInfo =
674         std::make_unique<SwiftABIInfo>(CGT, /*SwiftErrorInRegister=*/false);
675   }
676 
677   int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const override {
678     // This is recovered from gcc output.
679     return 1; // r1 is the dedicated stack pointer
680   }
681 
682   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
683                                llvm::Value *Address) const override;
684   void emitTargetMetadata(CodeGen::CodeGenModule &CGM,
685                           const llvm::MapVector<GlobalDecl, StringRef>
686                               &MangledDeclNames) const override;
687 };
688 
689 class PPC64TargetCodeGenInfo : public TargetCodeGenInfo {
690 public:
691   PPC64TargetCodeGenInfo(CodeGenTypes &CGT)
692       : TargetCodeGenInfo(std::make_unique<DefaultABIInfo>(CGT)) {}
693 
694   int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const override {
695     // This is recovered from gcc output.
696     return 1; // r1 is the dedicated stack pointer
697   }
698 
699   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
700                                llvm::Value *Address) const override;
701 };
702 }
703 
704 // Return true if the ABI requires Ty to be passed sign- or zero-
705 // extended to 64 bits.
706 bool
707 PPC64_SVR4_ABIInfo::isPromotableTypeForABI(QualType Ty) const {
708   // Treat an enum type as its underlying type.
709   if (const EnumType *EnumTy = Ty->getAs<EnumType>())
710     Ty = EnumTy->getDecl()->getIntegerType();
711 
712   // Promotable integer types are required to be promoted by the ABI.
713   if (isPromotableIntegerTypeForABI(Ty))
714     return true;
715 
716   // In addition to the usual promotable integer types, we also need to
717   // extend all 32-bit types, since the ABI requires promotion to 64 bits.
718   if (const BuiltinType *BT = Ty->getAs<BuiltinType>())
719     switch (BT->getKind()) {
720     case BuiltinType::Int:
721     case BuiltinType::UInt:
722       return true;
723     default:
724       break;
725     }
726 
727   if (const auto *EIT = Ty->getAs<BitIntType>())
728     if (EIT->getNumBits() < 64)
729       return true;
730 
731   return false;
732 }
733 
734 /// isAlignedParamType - Determine whether a type requires 16-byte or
735 /// higher alignment in the parameter area.  Always returns at least 8.
736 CharUnits PPC64_SVR4_ABIInfo::getParamTypeAlignment(QualType Ty) const {
737   // Complex types are passed just like their elements.
738   if (const ComplexType *CTy = Ty->getAs<ComplexType>())
739     Ty = CTy->getElementType();
740 
741   auto FloatUsesVector = [this](QualType Ty){
742     return Ty->isRealFloatingType() && &getContext().getFloatTypeSemantics(
743                                            Ty) == &llvm::APFloat::IEEEquad();
744   };
745 
746   // Only vector types of size 16 bytes need alignment (larger types are
747   // passed via reference, smaller types are not aligned).
748   if (Ty->isVectorType()) {
749     return CharUnits::fromQuantity(getContext().getTypeSize(Ty) == 128 ? 16 : 8);
750   } else if (FloatUsesVector(Ty)) {
751     // According to ABI document section 'Optional Save Areas': If extended
752     // precision floating-point values in IEEE BINARY 128 QUADRUPLE PRECISION
753     // format are supported, map them to a single quadword, quadword aligned.
754     return CharUnits::fromQuantity(16);
755   }
756 
757   // For single-element float/vector structs, we consider the whole type
758   // to have the same alignment requirements as its single element.
759   const Type *AlignAsType = nullptr;
760   const Type *EltType = isSingleElementStruct(Ty, getContext());
761   if (EltType) {
762     const BuiltinType *BT = EltType->getAs<BuiltinType>();
763     if ((EltType->isVectorType() && getContext().getTypeSize(EltType) == 128) ||
764         (BT && BT->isFloatingPoint()))
765       AlignAsType = EltType;
766   }
767 
768   // Likewise for ELFv2 homogeneous aggregates.
769   const Type *Base = nullptr;
770   uint64_t Members = 0;
771   if (!AlignAsType && Kind == PPC64_SVR4_ABIKind::ELFv2 &&
772       isAggregateTypeForABI(Ty) && isHomogeneousAggregate(Ty, Base, Members))
773     AlignAsType = Base;
774 
775   // With special case aggregates, only vector base types need alignment.
776   if (AlignAsType) {
777     bool UsesVector = AlignAsType->isVectorType() ||
778                       FloatUsesVector(QualType(AlignAsType, 0));
779     return CharUnits::fromQuantity(UsesVector ? 16 : 8);
780   }
781 
782   // Otherwise, we only need alignment for any aggregate type that
783   // has an alignment requirement of >= 16 bytes.
784   if (isAggregateTypeForABI(Ty) && getContext().getTypeAlign(Ty) >= 128) {
785     return CharUnits::fromQuantity(16);
786   }
787 
788   return CharUnits::fromQuantity(8);
789 }
790 
791 bool PPC64_SVR4_ABIInfo::isHomogeneousAggregateBaseType(QualType Ty) const {
792   // Homogeneous aggregates for ELFv2 must have base types of float,
793   // double, long double, or 128-bit vectors.
794   if (const BuiltinType *BT = Ty->getAs<BuiltinType>()) {
795     if (BT->getKind() == BuiltinType::Float ||
796         BT->getKind() == BuiltinType::Double ||
797         BT->getKind() == BuiltinType::LongDouble ||
798         BT->getKind() == BuiltinType::Ibm128 ||
799         (getContext().getTargetInfo().hasFloat128Type() &&
800          (BT->getKind() == BuiltinType::Float128))) {
801       if (IsSoftFloatABI)
802         return false;
803       return true;
804     }
805   }
806   if (const VectorType *VT = Ty->getAs<VectorType>()) {
807     if (getContext().getTypeSize(VT) == 128)
808       return true;
809   }
810   return false;
811 }
812 
813 bool PPC64_SVR4_ABIInfo::isHomogeneousAggregateSmallEnough(
814     const Type *Base, uint64_t Members) const {
815   // Vector and fp128 types require one register, other floating point types
816   // require one or two registers depending on their size.
817   uint32_t NumRegs =
818       ((getContext().getTargetInfo().hasFloat128Type() &&
819           Base->isFloat128Type()) ||
820         Base->isVectorType()) ? 1
821                               : (getContext().getTypeSize(Base) + 63) / 64;
822 
823   // Homogeneous Aggregates may occupy at most 8 registers.
824   return Members * NumRegs <= 8;
825 }
826 
827 ABIArgInfo
828 PPC64_SVR4_ABIInfo::classifyArgumentType(QualType Ty) const {
829   Ty = useFirstFieldIfTransparentUnion(Ty);
830 
831   if (Ty->isAnyComplexType())
832     return ABIArgInfo::getDirect();
833 
834   // Non-Altivec vector types are passed in GPRs (smaller than 16 bytes)
835   // or via reference (larger than 16 bytes).
836   if (Ty->isVectorType()) {
837     uint64_t Size = getContext().getTypeSize(Ty);
838     if (Size > 128)
839       return getNaturalAlignIndirect(Ty, getDataLayout().getAllocaAddrSpace(),
840                                      /*ByVal=*/false);
841     else if (Size < 128) {
842       llvm::Type *CoerceTy = llvm::IntegerType::get(getVMContext(), Size);
843       return ABIArgInfo::getDirect(CoerceTy);
844     }
845   }
846 
847   if (const auto *EIT = Ty->getAs<BitIntType>())
848     if (EIT->getNumBits() > 128)
849       return getNaturalAlignIndirect(Ty, getDataLayout().getAllocaAddrSpace(),
850                                      /*ByVal=*/true);
851 
852   if (isAggregateTypeForABI(Ty)) {
853     if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI()))
854       return getNaturalAlignIndirect(Ty, getDataLayout().getAllocaAddrSpace(),
855                                      RAA == CGCXXABI::RAA_DirectInMemory);
856 
857     uint64_t ABIAlign = getParamTypeAlignment(Ty).getQuantity();
858     uint64_t TyAlign = getContext().getTypeAlignInChars(Ty).getQuantity();
859 
860     // ELFv2 homogeneous aggregates are passed as array types.
861     const Type *Base = nullptr;
862     uint64_t Members = 0;
863     if (Kind == PPC64_SVR4_ABIKind::ELFv2 &&
864         isHomogeneousAggregate(Ty, Base, Members)) {
865       llvm::Type *BaseTy = CGT.ConvertType(QualType(Base, 0));
866       llvm::Type *CoerceTy = llvm::ArrayType::get(BaseTy, Members);
867       return ABIArgInfo::getDirect(CoerceTy);
868     }
869 
870     // If an aggregate may end up fully in registers, we do not
871     // use the ByVal method, but pass the aggregate as array.
872     // This is usually beneficial since we avoid forcing the
873     // back-end to store the argument to memory.
874     uint64_t Bits = getContext().getTypeSize(Ty);
875     if (Bits > 0 && Bits <= 8 * GPRBits) {
876       llvm::Type *CoerceTy;
877 
878       // Types up to 8 bytes are passed as integer type (which will be
879       // properly aligned in the argument save area doubleword).
880       if (Bits <= GPRBits)
881         CoerceTy =
882             llvm::IntegerType::get(getVMContext(), llvm::alignTo(Bits, 8));
883       // Larger types are passed as arrays, with the base type selected
884       // according to the required alignment in the save area.
885       else {
886         uint64_t RegBits = ABIAlign * 8;
887         uint64_t NumRegs = llvm::alignTo(Bits, RegBits) / RegBits;
888         llvm::Type *RegTy = llvm::IntegerType::get(getVMContext(), RegBits);
889         CoerceTy = llvm::ArrayType::get(RegTy, NumRegs);
890       }
891 
892       return ABIArgInfo::getDirect(CoerceTy);
893     }
894 
895     // All other aggregates are passed ByVal.
896     return ABIArgInfo::getIndirect(
897         CharUnits::fromQuantity(ABIAlign),
898         /*AddrSpace=*/getDataLayout().getAllocaAddrSpace(),
899         /*ByVal=*/true, /*Realign=*/TyAlign > ABIAlign);
900   }
901 
902   return (isPromotableTypeForABI(Ty)
903               ? ABIArgInfo::getExtend(Ty, CGT.ConvertType(Ty))
904               : ABIArgInfo::getDirect());
905 }
906 
907 ABIArgInfo
908 PPC64_SVR4_ABIInfo::classifyReturnType(QualType RetTy) const {
909   if (RetTy->isVoidType())
910     return ABIArgInfo::getIgnore();
911 
912   if (RetTy->isAnyComplexType())
913     return ABIArgInfo::getDirect();
914 
915   // Non-Altivec vector types are returned in GPRs (smaller than 16 bytes)
916   // or via reference (larger than 16 bytes).
917   if (RetTy->isVectorType()) {
918     uint64_t Size = getContext().getTypeSize(RetTy);
919     if (Size > 128)
920       return getNaturalAlignIndirect(RetTy,
921                                      getDataLayout().getAllocaAddrSpace());
922     else if (Size < 128) {
923       llvm::Type *CoerceTy = llvm::IntegerType::get(getVMContext(), Size);
924       return ABIArgInfo::getDirect(CoerceTy);
925     }
926   }
927 
928   if (const auto *EIT = RetTy->getAs<BitIntType>())
929     if (EIT->getNumBits() > 128)
930       return getNaturalAlignIndirect(
931           RetTy, getDataLayout().getAllocaAddrSpace(), /*ByVal=*/false);
932 
933   if (isAggregateTypeForABI(RetTy)) {
934     // ELFv2 homogeneous aggregates are returned as array types.
935     const Type *Base = nullptr;
936     uint64_t Members = 0;
937     if (Kind == PPC64_SVR4_ABIKind::ELFv2 &&
938         isHomogeneousAggregate(RetTy, Base, Members)) {
939       llvm::Type *BaseTy = CGT.ConvertType(QualType(Base, 0));
940       llvm::Type *CoerceTy = llvm::ArrayType::get(BaseTy, Members);
941       return ABIArgInfo::getDirect(CoerceTy);
942     }
943 
944     // ELFv2 small aggregates are returned in up to two registers.
945     uint64_t Bits = getContext().getTypeSize(RetTy);
946     if (Kind == PPC64_SVR4_ABIKind::ELFv2 && Bits <= 2 * GPRBits) {
947       if (Bits == 0)
948         return ABIArgInfo::getIgnore();
949 
950       llvm::Type *CoerceTy;
951       if (Bits > GPRBits) {
952         CoerceTy = llvm::IntegerType::get(getVMContext(), GPRBits);
953         CoerceTy = llvm::StructType::get(CoerceTy, CoerceTy);
954       } else
955         CoerceTy =
956             llvm::IntegerType::get(getVMContext(), llvm::alignTo(Bits, 8));
957       return ABIArgInfo::getDirect(CoerceTy);
958     }
959 
960     // All other aggregates are returned indirectly.
961     return getNaturalAlignIndirect(RetTy, getDataLayout().getAllocaAddrSpace());
962   }
963 
964   return (isPromotableTypeForABI(RetTy) ? ABIArgInfo::getExtend(RetTy)
965                                         : ABIArgInfo::getDirect());
966 }
967 
968 // Based on ARMABIInfo::EmitVAArg, adjusted for 64-bit machine.
969 RValue PPC64_SVR4_ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
970                                      QualType Ty, AggValueSlot Slot) const {
971   auto TypeInfo = getContext().getTypeInfoInChars(Ty);
972   TypeInfo.Align = getParamTypeAlignment(Ty);
973 
974   CharUnits SlotSize = CharUnits::fromQuantity(8);
975 
976   // If we have a complex type and the base type is smaller than 8 bytes,
977   // the ABI calls for the real and imaginary parts to be right-adjusted
978   // in separate doublewords.  However, Clang expects us to produce a
979   // pointer to a structure with the two parts packed tightly.  So generate
980   // loads of the real and imaginary parts relative to the va_list pointer,
981   // and store them to a temporary structure.
982   if (const ComplexType *CTy = Ty->getAs<ComplexType>()) {
983     CharUnits EltSize = TypeInfo.Width / 2;
984     if (EltSize < SlotSize)
985       return complexTempStructure(CGF, VAListAddr, Ty, SlotSize, EltSize, CTy);
986   }
987 
988   // Otherwise, just use the general rule.
989   //
990   // The PPC64 ABI passes some arguments in integer registers, even to variadic
991   // functions. To allow va_list to use the simple "void*" representation,
992   // variadic calls allocate space in the argument area for the integer argument
993   // registers, and variadic functions spill their integer argument registers to
994   // this area in their prologues. When aggregates smaller than a register are
995   // passed this way, they are passed in the least significant bits of the
996   // register, which means that after spilling on big-endian targets they will
997   // be right-aligned in their argument slot. This is uncommon; for a variety of
998   // reasons, other big-endian targets don't end up right-aligning aggregate
999   // types this way, and so right-alignment only applies to fundamental types.
1000   // So on PPC64, we must force the use of right-alignment even for aggregates.
1001   return emitVoidPtrVAArg(CGF, VAListAddr, Ty, /*Indirect*/ false, TypeInfo,
1002                           SlotSize, /*AllowHigher*/ true, Slot,
1003                           /*ForceRightAdjust*/ true);
1004 }
1005 
1006 bool
1007 PPC64_SVR4_TargetCodeGenInfo::initDwarfEHRegSizeTable(
1008   CodeGen::CodeGenFunction &CGF,
1009   llvm::Value *Address) const {
1010   return PPC_initDwarfEHRegSizeTable(CGF, Address, /*Is64Bit*/ true,
1011                                      /*IsAIX*/ false);
1012 }
1013 
1014 void PPC64_SVR4_TargetCodeGenInfo::emitTargetMetadata(
1015     CodeGen::CodeGenModule &CGM,
1016     const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames) const {
1017   if (CGM.getTypes().isLongDoubleReferenced()) {
1018     llvm::LLVMContext &Ctx = CGM.getLLVMContext();
1019     const auto *flt = &CGM.getTarget().getLongDoubleFormat();
1020     if (flt == &llvm::APFloat::PPCDoubleDouble())
1021       CGM.getModule().addModuleFlag(llvm::Module::Error, "float-abi",
1022                                     llvm::MDString::get(Ctx, "doubledouble"));
1023     else if (flt == &llvm::APFloat::IEEEquad())
1024       CGM.getModule().addModuleFlag(llvm::Module::Error, "float-abi",
1025                                     llvm::MDString::get(Ctx, "ieeequad"));
1026     else if (flt == &llvm::APFloat::IEEEdouble())
1027       CGM.getModule().addModuleFlag(llvm::Module::Error, "float-abi",
1028                                     llvm::MDString::get(Ctx, "ieeedouble"));
1029   }
1030 }
1031 
1032 bool
1033 PPC64TargetCodeGenInfo::initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
1034                                                 llvm::Value *Address) const {
1035   return PPC_initDwarfEHRegSizeTable(CGF, Address, /*Is64Bit*/ true,
1036                                      /*IsAIX*/ false);
1037 }
1038 
1039 std::unique_ptr<TargetCodeGenInfo>
1040 CodeGen::createAIXTargetCodeGenInfo(CodeGenModule &CGM, bool Is64Bit) {
1041   return std::make_unique<AIXTargetCodeGenInfo>(CGM.getTypes(), Is64Bit);
1042 }
1043 
1044 std::unique_ptr<TargetCodeGenInfo>
1045 CodeGen::createPPC32TargetCodeGenInfo(CodeGenModule &CGM, bool SoftFloatABI) {
1046   bool RetSmallStructInRegABI = PPC32TargetCodeGenInfo::isStructReturnInRegABI(
1047       CGM.getTriple(), CGM.getCodeGenOpts());
1048   return std::make_unique<PPC32TargetCodeGenInfo>(CGM.getTypes(), SoftFloatABI,
1049                                                   RetSmallStructInRegABI);
1050 }
1051 
1052 std::unique_ptr<TargetCodeGenInfo>
1053 CodeGen::createPPC64TargetCodeGenInfo(CodeGenModule &CGM) {
1054   return std::make_unique<PPC64TargetCodeGenInfo>(CGM.getTypes());
1055 }
1056 
1057 std::unique_ptr<TargetCodeGenInfo> CodeGen::createPPC64_SVR4_TargetCodeGenInfo(
1058     CodeGenModule &CGM, PPC64_SVR4_ABIKind Kind, bool SoftFloatABI) {
1059   return std::make_unique<PPC64_SVR4_TargetCodeGenInfo>(CGM.getTypes(), Kind,
1060                                                         SoftFloatABI);
1061 }
1062