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