Lines Matching refs:llvm

22 #include "llvm/ADT/Triple.h"
23 #include "llvm/IR/DataLayout.h"
24 #include "llvm/IR/Type.h"
25 #include "llvm/Support/raw_ostream.h"
33 llvm::Value *Array,
34 llvm::Value *Value,
39 llvm::Value *Cell = Builder.CreateConstInBoundsGEP1_32(Array, I);
75 llvm::LLVMContext &ABIInfo::getVMContext() const {
79 const llvm::DataLayout &ABIInfo::getDataLayout() const {
88 raw_ostream &OS = llvm::errs();
93 if (llvm::Type *Ty = getCoerceToType())
143 TargetCodeGenInfo::getDependentLibraryOption(llvm::StringRef Lib,
144 llvm::SmallString<24> &Opt) const {
306 // llvm-gcc (checks that all fields are 32-bit or 64-bit primitive types). We
363 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
373 llvm::Value *DefaultABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
420 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
438 llvm::Value *PNaClABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
478 bool IsX86_MMXType(llvm::Type *IRType) {
481 cast<llvm::VectorType>(IRType)->getElementType()->isIntegerTy() &&
485 static llvm::Type* X86AdjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
487 llvm::Type* Ty) {
489 if (cast<llvm::VectorType>(Ty)->getBitWidth() != 64) {
494 return llvm::Type::getX86_MMXTy(CGF.getLLVMContext());
505 /// \brief Similar to llvm::CCState, but for Clang.
553 void addFieldToArgStruct(SmallVector<llvm::Type *, 6> &FrameFields,
560 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
576 const llvm::Triple &Triple, const CodeGenOptions &Opts);
578 void SetTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
588 llvm::Value *Address) const override;
590 llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
592 llvm::Type* Ty) const override {
596 llvm::Constant *
602 return llvm::ConstantInt::get(CGM.Int32Ty, Sig);
682 return ABIArgInfo::getDirect(llvm::VectorType::get(
683 llvm::Type::getInt64Ty(getVMContext()), 2));
689 return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(),
726 return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(),Size));
845 if (State.CC == llvm::CallingConv::X86_FastCall) {
894 llvm::LLVMContext &LLVMContext = getVMContext();
895 llvm::IntegerType *Int32 = llvm::Type::getInt32Ty(LLVMContext);
899 SmallVector<llvm::Type*, 3> Elements(SizeInRegs, Int32);
900 llvm::Type *Result = llvm::StructType::get(LLVMContext, Elements);
903 llvm::IntegerType *PaddingType = NeedsPadding ? Int32 : nullptr;
912 State.CC == llvm::CallingConv::X86_FastCall, PaddingType);
924 return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(),
929 return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(), 64));
953 if (State.CC == llvm::CallingConv::X86_FastCall)
984 X86_32ABIInfo::addFieldToArgStruct(SmallVector<llvm::Type *, 6> &FrameFields,
996 StackOffset = llvm::RoundUpToAlignment(StackOffset, 4U);
999 llvm::Type *Ty = llvm::Type::getInt8Ty(getVMContext());
1000 Ty = llvm::ArrayType::get(Ty, NumBytes);
1009 SmallVector<llvm::Type *, 6> FrameFields;
1024 if (FI.getCallingConvention() == llvm::CallingConv::X86_ThisCall)
1049 FI.setArgStruct(llvm::StructType::get(getVMContext(), FrameFields,
1053 llvm::Value *X86_32ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
1055 llvm::Type *BPP = CGF.Int8PtrPtrTy;
1058 llvm::Value *VAListAddrAsBPP = Builder.CreateBitCast(VAListAddr, BPP,
1060 llvm::Value *Addr = Builder.CreateLoad(VAListAddrAsBPP, "ap.cur");
1068 llvm::Value *Offset =
1069 llvm::ConstantInt::get(CGF.Int32Ty, Align - 1);
1071 llvm::Value *AsInt = CGF.Builder.CreatePtrToInt(Addr,
1073 llvm::Value *Mask = llvm::ConstantInt::get(CGF.Int32Ty, -Align);
1079 llvm::Type *PTy =
1080 llvm::PointerType::getUnqual(CGF.ConvertType(Ty));
1081 llvm::Value *AddrTyped = Builder.CreateBitCast(Addr, PTy);
1084 llvm::RoundUpToAlignment(CGF.getContext().getTypeSize(Ty) / 8, Align);
1085 llvm::Value *NextAddr =
1086 Builder.CreateGEP(Addr, llvm::ConstantInt::get(CGF.Int32Ty, Offset),
1094 const llvm::Triple &Triple, const CodeGenOptions &Opts) {
1095 assert(Triple.getArch() == llvm::Triple::x86);
1110 case llvm::Triple::AuroraUX:
1111 case llvm::Triple::DragonFly:
1112 case llvm::Triple::FreeBSD:
1113 case llvm::Triple::OpenBSD:
1114 case llvm::Triple::Bitrig:
1116 case llvm::Triple::Win32:
1118 case llvm::Triple::UnknownEnvironment:
1119 case llvm::Triple::Cygnus:
1120 case llvm::Triple::GNU:
1121 case llvm::Triple::MSVC:
1132 llvm::GlobalValue *GV,
1137 llvm::Function *Fn = cast<llvm::Function>(GV);
1140 llvm::AttrBuilder B;
1142 Fn->addAttributes(llvm::AttributeSet::FunctionIndex,
1143 llvm::AttributeSet::get(CGM.getLLVMContext(),
1144 llvm::AttributeSet::FunctionIndex,
1152 llvm::Value *Address) const {
1155 llvm::Value *Four8 = llvm::ConstantInt::get(CGF.Int8Ty, 4);
1166 llvm::Value *Sixteen8 = llvm::ConstantInt::get(CGF.Int8Ty, 16);
1177 llvm::Value *Twelve8 = llvm::ConstantInt::get(CGF.Int8Ty, 12);
1257 llvm::Type *GetByteVectorType(QualType Ty) const;
1258 llvm::Type *GetSSETypeAtOffset(llvm::Type *IRType,
1261 llvm::Type *GetINTEGERTypeAtOffset(llvm::Type *IRType,
1312 llvm::Type *ty = info.getCoerceToType();
1313 if (llvm::VectorType *vectorTy = dyn_cast_or_null<llvm::VectorType>(ty))
1321 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
1335 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
1353 llvm::Value *Address) const override {
1354 llvm::Value *Eight8 = llvm::ConstantInt::get(CGF.Int8Ty, 8);
1362 llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
1364 llvm::Type* Ty) const override {
1393 llvm::Constant *
1399 return llvm::ConstantInt::get(CGM.Int32Ty, Sig);
1404 static std::string qualifyWindowsLibrary(llvm::StringRef Lib) {
1419 void getDependentLibraryOption(llvm::StringRef Lib,
1420 llvm::SmallString<24> &Opt) const override {
1425 void getDetectMismatchOption(llvm::StringRef Name,
1426 llvm::StringRef Value,
1427 llvm::SmallString<32> &Opt) const override {
1442 llvm::Value *Address) const override {
1443 llvm::Value *Eight8 = llvm::ConstantInt::get(CGF.Int8Ty, 8);
1451 void getDependentLibraryOption(llvm::StringRef Lib,
1452 llvm::SmallString<24> &Opt) const override {
1457 void getDetectMismatchOption(llvm::StringRef Name,
1458 llvm::StringRef Value,
1459 llvm::SmallString<32> &Opt) const override {
1910 return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(),
1920 llvm::Type *X86_64ABIInfo::GetByteVectorType(QualType Ty) const {
1921 llvm::Type *IRType = CGT.ConvertType(Ty);
1925 llvm::StructType *STy = dyn_cast<llvm::StructType>(IRType);
1928 STy = dyn_cast<llvm::StructType>(IRType);
1932 if (llvm::VectorType *VT = dyn_cast<llvm::VectorType>(IRType)){
1933 llvm::Type *EltTy = VT->getElementType();
1943 return llvm::VectorType::get(llvm::Type::getDoubleTy(getVMContext()), 2);
2034 static bool ContainsFloatAtOffset(llvm::Type *IRType, unsigned IROffset,
2035 const llvm::DataLayout &TD) {
2041 if (llvm::StructType *STy = dyn_cast<llvm::StructType>(IRType)) {
2042 const llvm::StructLayout *SL = TD.getStructLayout(STy);
2049 if (llvm::ArrayType *ATy = dyn_cast<llvm::ArrayType>(IRType)) {
2050 llvm::Type *EltTy = ATy->getElementType();
2062 llvm::Type *X86_64ABIInfo::
2063 GetSSETypeAtOffset(llvm::Type *IRType, unsigned IROffset,
2070 return llvm::Type::getFloatTy(getVMContext());
2077 return llvm::VectorType::get(llvm::Type::getFloatTy(getVMContext()), 2);
2079 return llvm::Type::getDoubleTy(getVMContext());
2097 llvm::Type *X86_64ABIInfo::
2098 GetINTEGERTypeAtOffset(llvm::Type *IRType, unsigned IROffset,
2104 if ((isa<llvm::PointerType>(IRType) && Has64BitPointers) ||
2116 (isa<llvm::PointerType>(IRType) && !Has64BitPointers)) {
2117 unsigned BitWidth = isa<llvm::PointerType>(IRType) ? 32 :
2118 cast<llvm::IntegerType>(IRType)->getBitWidth();
2126 if (llvm::StructType *STy = dyn_cast<llvm::StructType>(IRType)) {
2128 const llvm::StructLayout *SL = getDataLayout().getStructLayout(STy);
2138 if (llvm::ArrayType *ATy = dyn_cast<llvm::ArrayType>(IRType)) {
2139 llvm::Type *EltTy = ATy->getElementType();
2155 return llvm::IntegerType::get(getVMContext(),
2165 static llvm::Type *
2166 GetX86_64ByValArgumentPair(llvm::Type *Lo, llvm::Type *Hi,
2167 const llvm::DataLayout &TD) {
2174 unsigned HiStart = llvm::DataLayout::RoundUpAlignment(LoSize, HiAlign);
2186 Lo = llvm::Type::getDoubleTy(Lo->getContext());
2189 Lo = llvm::Type::getInt64Ty(Lo->getContext());
2193 llvm::StructType *Result = llvm::StructType::get(Lo, Hi, NULL);
2213 llvm::Type *ResType = nullptr;
2240 if (Hi == NoClass && isa<llvm::IntegerType>(ResType)) {
2260 ResType = llvm::Type::getX86_FP80Ty(getVMContext());
2268 ResType = llvm::StructType::get(llvm::Type::getX86_FP80Ty(getVMContext()),
2269 llvm::Type::getX86_FP80Ty(getVMContext()),
2274 llvm::Type *HighPart = nullptr;
2346 llvm::Type *ResType = nullptr;
2384 if (Hi == NoClass && isa<llvm::IntegerType>(ResType)) {
2400 llvm::Type *IRType = CGT.ConvertType(Ty);
2407 llvm::Type *HighPart = nullptr;
2502 static llvm::Value *EmitVAArgFromMemory(llvm::Value *VAListAddr,
2505 llvm::Value *overflow_arg_area_p =
2507 llvm::Value *overflow_arg_area =
2517 llvm::Value *Offset =
2518 llvm::ConstantInt::get(CGF.Int64Ty, Align - 1);
2520 llvm::Value *AsInt = CGF.Builder.CreatePtrToInt(overflow_arg_area,
2522 llvm::Value *Mask = llvm::ConstantInt::get(CGF.Int64Ty, -(uint64_t)Align);
2530 llvm::Type *LTy = CGF.ConvertTypeForMem(Ty);
2531 llvm::Value *Res =
2533 llvm::PointerType::getUnqual(LTy));
2541 llvm::Value *Offset =
2542 llvm::ConstantInt::get(CGF.Int32Ty, (SizeInBytes + 7) & ~7);
2551 llvm::Value *X86_64ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
2582 llvm::Value *InRegs = nullptr;
2583 llvm::Value *gp_offset_p = nullptr, *gp_offset = nullptr;
2584 llvm::Value *fp_offset_p = nullptr, *fp_offset = nullptr;
2588 InRegs = llvm::ConstantInt::get(CGF.Int32Ty, 48 - neededInt * 8);
2595 llvm::Value *FitsInFP =
2596 llvm::ConstantInt::get(CGF.Int32Ty, 176 - neededSSE * 16);
2601 llvm::BasicBlock *InRegBlock = CGF.createBasicBlock("vaarg.in_reg");
2602 llvm::BasicBlock *InMemBlock = CGF.createBasicBlock("vaarg.in_mem");
2603 llvm::BasicBlock *ContBlock = CGF.createBasicBlock("vaarg.end");
2620 llvm::Type *LTy = CGF.ConvertTypeForMem(Ty);
2621 llvm::Value *RegAddr =
2627 llvm::StructType *ST = cast<llvm::StructType>(AI.getCoerceToType());
2628 llvm::Value *Tmp = CGF.CreateMemTemp(Ty);
2631 llvm::Type *TyLo = ST->getElementType(0);
2632 llvm::Type *TyHi = ST->getElementType(1);
2635 llvm::Type *PTyLo = llvm::PointerType::getUnqual(TyLo);
2636 llvm::Type *PTyHi = llvm::PointerType::getUnqual(TyHi);
2637 llvm::Value *GPAddr = CGF.Builder.CreateGEP(RegAddr, gp_offset);
2638 llvm::Value *FPAddr = CGF.Builder.CreateGEP(RegAddr, fp_offset);
2639 llvm::Value *RegLoAddr = TyLo->isFPOrFPVectorTy() ? FPAddr : GPAddr;
2640 llvm::Value *RegHiAddr = TyLo->isFPOrFPVectorTy() ? GPAddr : FPAddr;
2641 llvm::Value *V =
2648 llvm::PointerType::getUnqual(LTy));
2652 llvm::PointerType::getUnqual(LTy));
2660 llvm::Value *Tmp = CGF.CreateMemTemp(Ty);
2667 llvm::PointerType::getUnqual(LTy));
2672 llvm::Value *RegAddrLo = CGF.Builder.CreateGEP(RegAddr, fp_offset);
2673 llvm::Value *RegAddrHi = CGF.Builder.CreateConstGEP1_32(RegAddrLo, 16);
2674 llvm::Type *DoubleTy = CGF.DoubleTy;
2675 llvm::Type *DblPtrTy =
2676 llvm::PointerType::getUnqual(DoubleTy);
2677 llvm::StructType *ST = llvm::StructType::get(DoubleTy, DoubleTy, NULL);
2678 llvm::Value *V, *Tmp = CGF.CreateMemTemp(Ty);
2687 llvm::PointerType::getUnqual(LTy));
2694 llvm::Value *Offset = llvm::ConstantInt::get(CGF.Int32Ty, neededInt * 8);
2699 llvm::Value *Offset = llvm::ConstantInt::get(CGF.Int32Ty, neededSSE * 16);
2708 llvm::Value *MemAddr = EmitVAArgFromMemory(VAListAddr, Ty, CGF);
2713 llvm::PHINode *ResAddr = CGF.Builder.CreatePHI(RegAddr->getType(), 2,
2742 return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(),
2749 llvm::Type *LLTy = CGT.ConvertType(Ty);
2757 if (Size > 64 || !llvm::isPowerOf2_64(Size))
2761 return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(), Size));
2778 llvm::Value *WinX86_64ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
2780 llvm::Type *BPP = CGF.Int8PtrPtrTy;
2783 llvm::Value *VAListAddrAsBPP = Builder.CreateBitCast(VAListAddr, BPP,
2785 llvm::Value *Addr = Builder.CreateLoad(VAListAddrAsBPP, "ap.cur");
2786 llvm::Type *PTy =
2787 llvm::PointerType::getUnqual(CGF.ConvertType(Ty));
2788 llvm::Value *AddrTyped = Builder.CreateBitCast(Addr, PTy);
2791 llvm::RoundUpToAlignment(CGF.getContext().getTypeSize(Ty) / 8, 8);
2792 llvm::Value *NextAddr =
2793 Builder.CreateGEP(Addr, llvm::ConstantInt::get(CGF.Int32Ty, Offset),
2807 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
2829 llvm::Value *NaClX86_64ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
2850 llvm::Value *Address) const override;
2857 llvm::Value *Address) const {
2863 llvm::IntegerType *i8 = CGF.Int8Ty;
2864 llvm::Value *Four8 = llvm::ConstantInt::get(i8, 4);
2865 llvm::Value *Eight8 = llvm::ConstantInt::get(i8, 8);
2866 llvm::Value *Sixteen8 = llvm::ConstantInt::get(i8, 16);
2938 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
2953 llvm::Value *Address) const override;
2966 llvm::Value *Address) const override;
3046 llvm::Type *CoerceTy = llvm::IntegerType::get(getVMContext(), Size);
3080 llvm::Type *CoerceTy = llvm::IntegerType::get(getVMContext(), Size);
3093 llvm::Value *PPC64_SVR4_ABIInfo::EmitVAArg(llvm::Value *VAListAddr,
3096 llvm::Type *BP = CGF.Int8PtrTy;
3097 llvm::Type *BPP = CGF.Int8PtrPtrTy;
3100 llvm::Value *VAListAddrAsBPP = Builder.CreateBitCast(VAListAddr, BPP, "ap");
3101 llvm::Value *Addr = Builder.CreateLoad(VAListAddrAsBPP, "ap.cur");
3105 llvm::Value *AddrAsInt = Builder.CreatePtrToInt(Addr, CGF.Int64Ty);
3126 unsigned Offset = llvm::RoundUpToAlignment(SizeInBytes, 8);
3127 llvm::Value *NextAddr =
3128 Builder.CreateGEP(Addr, llvm::ConstantInt::get(CGF.Int64Ty, Offset),
3139 llvm::Value *RealAddr = Builder.CreatePtrToInt(Addr, CGF.Int64Ty);
3140 llvm::Value *ImagAddr = RealAddr;
3147 llvm::Type *PBaseTy = llvm::PointerType::getUnqual(CGF.ConvertType(BaseTy));
3150 llvm::Value *Real = Builder.CreateLoad(RealAddr, false, ".vareal");
3151 llvm::Value *Imag = Builder.CreateLoad(ImagAddr, false, ".vaimag");
3152 llvm::Value *Ptr = CGF.CreateTempAlloca(CGT.ConvertTypeForMem(Ty),
3154 llvm::Value *RealPtr = Builder.CreateStructGEP(Ptr, 0, ".real");
3155 llvm::Value *ImagPtr = Builder.CreateStructGEP(Ptr, 1, ".imag");
3165 llvm::Value *AddrAsInt = Builder.CreatePtrToInt(Addr, CGF.Int64Ty);
3170 llvm::Type *PTy = llvm::PointerType::getUnqual(CGF.ConvertType(Ty));
3176 llvm::Value *Address) {
3182 llvm::IntegerType *i8 = CGF.Int8Ty;
3183 llvm::Value *Four8 = llvm::ConstantInt::get(i8, 4);
3184 llvm::Value *Eight8 = llvm::ConstantInt::get(i8, 8);
3185 llvm::Value *Sixteen8 = llvm::ConstantInt::get(i8, 16);
3218 llvm::Value *Address) const {
3225 llvm::Value *Address) const {
3299 NumStackSlots = llvm::RoundUpToAlignment(NumStackSlots, 64) / 64;
3301 llvm::Type *CoerceTy = llvm::ArrayType::get(
3302 llvm::Type::getDoubleTy(getVMContext()), NumStackSlots);
3310 llvm::Type *PaddingTy = llvm::ArrayType::get(
3311 llvm::Type::getFloatTy(getVMContext()), NumVFPs - PreAllocation);
3318 llvm::Type *PaddingTy = llvm::ArrayType::get(
3319 llvm::Type::getInt32Ty(getVMContext()), NumGPRs - PreGPR);
3326 llvm::Value *EmitDarwinVAArg(llvm::Value *VAListAddr, QualType Ty,
3329 llvm::Value *EmitAAPCSVAArg(llvm::Value *VAListAddr, QualType Ty,
3332 virtual llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
3369 llvm::Type *ResType = llvm::Type::getInt16Ty(getVMContext());
3374 llvm::Type *ResType = llvm::Type::getInt32Ty(getVMContext());
3379 llvm::Type *ResType =
3380 llvm::VectorType::get(llvm::Type::getInt32Ty(getVMContext()), 2);
3385 llvm::Type *ResType =
3386 llvm::VectorType::get(llvm::Type::getInt32Ty(getVMContext()), 4);
3412 AllocatedGPR = llvm::RoundUpToAlignment(AllocatedGPR, Alignment / 64);
3437 return ABIArgInfo::getDirect(llvm::Type::getInt8Ty(getVMContext()));
3449 llvm::Type *BaseTy = llvm::Type::getDoubleTy(getVMContext());
3450 return ABIArgInfo::getDirect(llvm::ArrayType::get(BaseTy, Size / 64));
3461 AllocatedGPR = llvm::RoundUpToAlignment(AllocatedGPR, Alignment / 64);
3469 llvm::Type *BaseTy = llvm::Type::getInt64Ty(getVMContext());
3470 return ABIArgInfo::getDirect(llvm::ArrayType::get(BaseTy, Size / 64));
3472 return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(), Size));
3509 return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(), Size));
3529 static llvm::Value *EmitAArch64VAArg(llvm::Value *VAListAddr, QualType Ty,
3543 llvm::BasicBlock *MaybeRegBlock = CGF.createBasicBlock("vaarg.maybe_reg");
3544 llvm::BasicBlock *InRegBlock = CGF.createBasicBlock("vaarg.in_reg");
3545 llvm::BasicBlock *OnStackBlock = CGF.createBasicBlock("vaarg.on_stack");
3546 llvm::BasicBlock *ContBlock = CGF.createBasicBlock("vaarg.end");
3549 llvm::Value *reg_offs_p = nullptr, *reg_offs = nullptr;
3576 llvm::Value *UsingStack = nullptr;
3578 reg_offs, llvm::ConstantInt::get(CGF.Int32Ty, 0));
3593 reg_offs, llvm::ConstantInt::get(CGF.Int32Ty, Align - 1),
3596 reg_offs, llvm::ConstantInt::get(CGF.Int32Ty, -Align),
3601 llvm::Value *NewOffset = nullptr;
3603 reg_offs, llvm::ConstantInt::get(CGF.Int32Ty, RegSize), "new_reg_offs");
3608 llvm::Value *InRegs = nullptr;
3610 NewOffset, llvm::ConstantInt::get(CGF.Int32Ty, 0), "inreg");
3622 llvm::Value *reg_top_p = nullptr, *reg_top = nullptr;
3626 llvm::Value *BaseAddr = CGF.Builder.CreateGEP(reg_top, reg_offs);
3627 llvm::Value *RegAddr = nullptr;
3628 llvm::Type *MemTy = llvm::PointerType::getUnqual(CGF.ConvertTypeForMem(Ty));
3633 MemTy = llvm::PointerType::getUnqual(MemTy);
3645 llvm::Type *BaseTy = CGF.ConvertType(QualType(Base, 0));
3646 llvm::Type *HFATy = llvm::ArrayType::get(BaseTy, NumMembers);
3647 llvm::Value *Tmp = CGF.CreateTempAlloca(HFATy);
3653 llvm::Value *BaseOffset =
3654 llvm::ConstantInt::get(CGF.Int32Ty, 16 * i + Offset);
3655 llvm::Value *LoadAddr = CGF.Builder.CreateGEP(BaseAddr, BaseOffset);
3657 LoadAddr, llvm::PointerType::getUnqual(BaseTy));
3658 llvm::Value *StoreAddr = CGF.Builder.CreateStructGEP(Tmp, i);
3660 llvm::Value *Elem = CGF.Builder.CreateLoad(LoadAddr);
3675 BaseAddr, llvm::ConstantInt::get(CGF.Int64Ty, Offset), "align_be");
3690 llvm::Value *stack_p = nullptr, *OnStackAddr = nullptr;
3702 OnStackAddr, llvm::ConstantInt::get(CGF.Int64Ty, Align - 1),
3705 OnStackAddr, llvm::ConstantInt::get(CGF.Int64Ty, -Align),
3718 StackSize = llvm::RoundUpToAlignment(StackSize, 8);
3720 llvm::Value *StackSizeC = llvm::ConstantInt::get(CGF.Int32Ty, StackSize);
3721 llvm::Value *NewStack =
3733 OnStackAddr, llvm::ConstantInt::get(CGF.Int64Ty, Offset), "align_be");
3747 llvm::PHINode *ResAddr = CGF.Builder.CreatePHI(MemTy, 2, "vaarg.addr");
3757 llvm::Value *AArch64ABIInfo::EmitAAPCSVAArg(llvm::Value *VAListAddr, QualType Ty,
3769 llvm::Value *AArch64ABIInfo::EmitDarwinVAArg(llvm::Value *VAListAddr, QualType Ty,
3792 llvm::Type *BP = llvm::Type::getInt8PtrTy(CGF.getLLVMContext());
3793 llvm::Type *BPP = llvm::PointerType::getUnqual(BP);
3796 llvm::Value *VAListAddrAsBPP = Builder.CreateBitCast(VAListAddr, BPP, "ap");
3797 llvm::Value *Addr = Builder.CreateLoad(VAListAddrAsBPP, "ap.cur");
3801 llvm::Type *PTy = llvm::PointerType::getUnqual(CGF.ConvertType(Ty));
3807 llvm::Value *Offset = llvm::ConstantInt::get(CGF.Int32Ty, Align - 1);
3809 llvm::Value *AsInt = Builder.CreatePtrToInt(Addr, CGF.Int64Ty);
3810 llvm::Value *Mask = llvm::ConstantInt::get(CGF.Int64Ty, ~(Align - 1));
3811 llvm::Value *Aligned = Builder.CreateAnd(AsInt, Mask);
3815 uint64_t Offset = llvm::RoundUpToAlignment(Size, MinABIAlign);
3816 llvm::Value *NextAddr = Builder.CreateGEP(
3817 Addr, llvm::ConstantInt::get(CGF.Int32Ty, Offset), "ap.next");
3822 llvm::Type *PTy = llvm::PointerType::getUnqual(CGF.ConvertType(Ty));
3823 llvm::Value *AddrTyped = Builder.CreateBitCast(Addr, PTy);
3859 case llvm::Triple::Android:
3860 case llvm::Triple::EABI:
3861 case llvm::Triple::EABIHF:
3862 case llvm::Triple::GNUEABI:
3863 case llvm::Triple::GNUEABIHF:
3872 case llvm::Triple::EABIHF:
3873 case llvm::Triple::GNUEABIHF:
3890 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
3893 llvm::CallingConv::ID getLLVMDefaultCC() const;
3894 llvm::CallingConv::ID getABIDefaultCC() const;
3920 llvm::Value *Address) const override {
3921 llvm::Value *Four8 = llvm::ConstantInt::get(CGF.Int8Ty, 4);
3933 void SetTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
3953 llvm::Function *Fn = cast<llvm::Function>(GV);
3963 llvm::AttrBuilder B;
3965 Fn->addAttributes(llvm::AttributeSet::FunctionIndex,
3966 llvm::AttributeSet::get(CGM.getLLVMContext(),
3967 llvm::AttributeSet::FunctionIndex,
4007 llvm::Type *PaddingTy = llvm::ArrayType::get(
4008 llvm::Type::getInt32Ty(getVMContext()), NumGPRs - PreAllocationGPRs);
4020 if (FI.getCallingConvention() != llvm::CallingConv::C)
4023 llvm::CallingConv::ID cc = getRuntimeCC();
4024 if (cc != llvm::CallingConv::C)
4029 llvm::CallingConv::ID ARMABIInfo::getLLVMDefaultCC() const {
4032 return llvm::CallingConv::ARM_AAPCS_VFP;
4034 return llvm::CallingConv::ARM_AAPCS;
4036 return llvm::CallingConv::ARM_APCS;
4041 llvm::CallingConv::ID ARMABIInfo::getABIDefaultCC() const {
4043 case APCS: return llvm::CallingConv::ARM_APCS;
4044 case AAPCS: return llvm::CallingConv::ARM_AAPCS;
4045 case AAPCS_VFP: return llvm::CallingConv::ARM_AAPCS_VFP;
4051 assert(getRuntimeCC() == llvm::CallingConv::C);
4055 llvm::CallingConv::ID abiCC = getABIDefaultCC();
4214 llvm::Type *ResType =
4215 llvm::Type::getInt32Ty(getVMContext());
4220 llvm::Type *ResType = llvm::VectorType::get(
4221 llvm::Type::getInt32Ty(getVMContext()), 2);
4231 llvm::Type *ResType = llvm::VectorType::get(
4232 llvm::Type::getInt32Ty(getVMContext()), 4);
4336 llvm::Type* ElemTy;
4341 ElemTy = llvm::Type::getInt32Ty(getVMContext());
4345 ElemTy = llvm::Type::getInt64Ty(getVMContext());
4350 llvm::Type *STy =
4351 llvm::StructType::get(llvm::ArrayType::get(ElemTy, SizeRegs), NULL);
4356 llvm::LLVMContext &VMContext) {
4470 return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(),
4478 return ABIArgInfo::getDirect(llvm::Type::getInt8Ty(getVMContext()));
4480 return ABIArgInfo::getDirect(llvm::Type::getInt16Ty(getVMContext()));
4481 return ABIArgInfo::getDirect(llvm::Type::getInt32Ty(getVMContext()));
4510 return ABIArgInfo::getDirect(llvm::Type::getInt32Ty(getVMContext()));
4514 return ABIArgInfo::getDirect(llvm::Type::getInt8Ty(getVMContext()));
4516 return ABIArgInfo::getDirect(llvm::Type::getInt16Ty(getVMContext()));
4517 return ABIArgInfo::getDirect(llvm::Type::getInt32Ty(getVMContext()));
4536 llvm::Value *ARMABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
4538 llvm::Type *BP = CGF.Int8PtrTy;
4539 llvm::Type *BPP = CGF.Int8PtrPtrTy;
4542 llvm::Value *VAListAddrAsBPP = Builder.CreateBitCast(VAListAddr, BPP, "ap");
4543 llvm::Value *Addr = Builder.CreateLoad(VAListAddrAsBPP, "ap.cur");
4547 llvm::Type *PTy = llvm::PointerType::getUnqual(CGF.ConvertType(Ty));
4573 llvm::Value *AddrAsInt = Builder.CreatePtrToInt(Addr, CGF.Int32Ty);
4580 llvm::RoundUpToAlignment(Size, 4);
4581 llvm::Value *NextAddr =
4582 Builder.CreateGEP(Addr, llvm::ConstantInt::get(CGF.Int32Ty, Offset),
4594 llvm::Type *I8PtrTy = Builder.getInt8PtrTy();
4596 llvm::Value *AlignedTemp = CGF.CreateTempAlloca(CGF.ConvertType(Ty),
4598 llvm::Value *Dst = Builder.CreateBitCast(AlignedTemp, I8PtrTy);
4599 llvm::Value *Src = Builder.CreateBitCast(Addr, I8PtrTy);
4601 llvm::ConstantInt::get(CGF.IntPtrTy, CharSize.getQuantity()),
4605 llvm::Type *PTy =
4606 llvm::PointerType::getUnqual(CGF.ConvertType(Ty));
4607 llvm::Value *AddrTyped = Builder.CreateBitCast(Addr, PTy);
4619 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
4641 llvm::Value *NaClARMABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
4662 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
4671 void SetTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
4676 static void addNVVMMetadata(llvm::Function *F, StringRef Name, int Operand);
4711 if (FI.getCallingConvention() != llvm::CallingConv::C)
4717 llvm::Value *NVPTXABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
4723 SetTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
4728 llvm::Function *F = cast<llvm::Function>(GV);
4739 F->addFnAttr(llvm::Attribute::NoInline);
4769 void NVPTXTargetCodeGenInfo::addNVVMMetadata(llvm::Function *F, StringRef Name,
4771 llvm::Module *M = F->getParent();
4772 llvm::LLVMContext &Ctx = M->getContext();
4775 llvm::NamedMDNode *MD = M->getOrInsertNamedMetadata("nvvm.annotations");
4777 llvm::Value *MDVals[] = {
4778 F, llvm::MDString::get(Ctx, Name),
4779 llvm::ConstantInt::get(llvm::Type::getInt32Ty(Ctx), Operand)};
4781 MD->addOperand(llvm::MDNode::get(Ctx, MDVals));
4809 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
4901 llvm::Value *SystemZABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
4917 llvm::Type *APTy = llvm::PointerType::getUnqual(CGF.ConvertTypeForMem(Ty));
4921 APTy = llvm::PointerType::getUnqual(APTy);
4944 llvm::Value *RegCountPtr =
4946 llvm::Value *RegCount = CGF.Builder.CreateLoad(RegCountPtr, "reg_count");
4947 llvm::Type *IndexTy = RegCount->getType();
4948 llvm::Value *MaxRegsV = llvm::ConstantInt::get(IndexTy, MaxRegs);
4949 llvm::Value *InRegs = CGF.Builder.CreateICmpULT(RegCount, MaxRegsV,
4952 llvm::BasicBlock *InRegBlock = CGF.createBasicBlock("vaarg.in_reg");
4953 llvm::BasicBlock *InMemBlock = CGF.createBasicBlock("vaarg.in_mem");
4954 llvm::BasicBlock *ContBlock = CGF.createBasicBlock("vaarg.end");
4961 llvm::Value *PaddedSizeV = llvm::ConstantInt::get(IndexTy, PaddedSize);
4962 llvm::Value *ScaledRegCount =
4964 llvm::Value *RegBase =
4965 llvm::ConstantInt::get(IndexTy, RegSaveIndex * PaddedSize + RegPadding);
4966 llvm::Value *RegOffset =
4968 llvm::Value *RegSaveAreaPtr =
4970 llvm::Value *RegSaveArea =
4972 llvm::Value *RawRegAddr =
4974 llvm::Value *RegAddr =
4978 llvm::Value *One = llvm::ConstantInt::get(IndexTy, 1);
4979 llvm::Value *NewRegCount =
4988 llvm::Value *OverflowArgAreaPtr =
4990 llvm::Value *OverflowArgArea =
4992 llvm::Value *PaddingV = llvm::ConstantInt::get(IndexTy, Padding);
4993 llvm::Value *RawMemAddr =
4995 llvm::Value *MemAddr =
4999 llvm::Value *NewOverflowArgArea =
5006 llvm::PHINode *ResAddr = CGF.Builder.CreatePHI(APTy, 2, "va_arg.addr");
5048 llvm::Type *PassTy;
5052 PassTy = llvm::Type::getFloatTy(getVMContext());
5054 PassTy = llvm::Type::getDoubleTy(getVMContext());
5056 PassTy = llvm::IntegerType::get(getVMContext(), Size);
5077 void SetTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
5084 llvm::GlobalValue *GV,
5089 llvm::Function *F = cast<llvm::Function>(GV);
5092 F->setCallingConv(llvm::CallingConv::MSP430_INTR);
5095 F->addFnAttr(llvm::Attribute::NoInline);
5099 llvm::GlobalAlias::create(llvm::Function::ExternalLinkage,
5115 SmallVectorImpl<llvm::Type *> &ArgList) const;
5116 llvm::Type* HandleAggregates(QualType Ty, uint64_t TySize) const;
5117 llvm::Type* returnAggregateInRegs(QualType RetTy, uint64_t Size) const;
5118 llvm::Type* getPaddingType(uint64_t Align, uint64_t Offset) const;
5127 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
5142 void SetTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
5146 llvm::Function *Fn = cast<llvm::Function>(GV);
5156 llvm::Value *Address) const override;
5165 SmallVectorImpl<llvm::Type *> &ArgList) const {
5166 llvm::IntegerType *IntTy =
5167 llvm::IntegerType::get(getVMContext(), MinABIStackAlignInBytes * 8);
5177 ArgList.push_back(llvm::IntegerType::get(getVMContext(), R));
5182 llvm::Type* MipsABIInfo::HandleAggregates(QualType Ty, uint64_t TySize) const {
5183 SmallVector<llvm::Type*, 8> ArgList, IntArgList;
5187 return llvm::StructType::get(getVMContext(), ArgList);
5198 return llvm::StructType::get(getVMContext(), ArgList);
5207 llvm::IntegerType *I64 = llvm::IntegerType::get(getVMContext(), 64);
5228 ArgList.push_back(llvm::Type::getDoubleTy(getVMContext()));
5235 return llvm::StructType::get(getVMContext(), ArgList);
5238 llvm::Type *MipsABIInfo::getPaddingType(uint64_t OrigOffset,
5243 return llvm::IntegerType::get(getVMContext(), (Offset - OrigOffset) * 8);
5254 unsigned CurrOffset = llvm::RoundUpToAlignment(Offset, Align);
5255 Offset = CurrOffset + llvm::RoundUpToAlignment(TySize, Align * 8) / 8;
5285 llvm::Type*
5288 SmallVector<llvm::Type*, 8> RTList;
5316 return llvm::StructType::get(getVMContext(), RTList,
5324 return llvm::StructType::get(getVMContext(), RTList);
5369 llvm::Value* MipsABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
5371 llvm::Type *BP = CGF.Int8PtrTy;
5372 llvm::Type *BPP = CGF.Int8PtrPtrTy;
5375 llvm::Value *VAListAddrAsBPP = Builder.CreateBitCast(VAListAddr, BPP, "ap");
5376 llvm::Value *Addr = Builder.CreateLoad(VAListAddrAsBPP, "ap.cur");
5378 llvm::Type *PTy = llvm::PointerType::getUnqual(CGF.ConvertType(Ty));
5379 llvm::Value *AddrTyped;
5381 llvm::IntegerType *IntTy = (PtrWidth == 32) ? CGF.Int32Ty : CGF.Int64Ty;
5384 llvm::Value *AddrAsInt = CGF.Builder.CreatePtrToInt(Addr, IntTy);
5385 llvm::Value *Inc = llvm::ConstantInt::get(IntTy, TypeAlign - 1);
5386 llvm::Value *Mask = llvm::ConstantInt::get(IntTy, -TypeAlign);
5387 llvm::Value *Add = CGF.Builder.CreateAdd(AddrAsInt, Inc);
5388 llvm::Value *And = CGF.Builder.CreateAnd(Add, Mask);
5394 llvm::Value *AlignedAddr = Builder.CreateBitCast(AddrTyped, BP);
5397 llvm::RoundUpToAlignment(CGF.getContext().getTypeSize(Ty) / 8, TypeAlign);
5398 llvm::Value *NextAddr =
5399 Builder.CreateGEP(AlignedAddr, llvm::ConstantInt::get(IntTy, Offset),
5408 llvm::Value *Address) const {
5414 llvm::Value *Four8 = llvm::ConstantInt::get(CGF.Int8Ty, 4);
5447 void SetTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
5452 llvm::GlobalValue *GV,
5457 llvm::Function *F = cast<llvm::Function>(GV);
5462 F->addFnAttr(llvm::Attribute::NoInline);
5466 llvm::LLVMContext &Context = F->getContext();
5467 llvm::NamedMDNode *OpenCLMetadata =
5470 SmallVector<llvm::Value*, 5> Operands;
5473 Operands.push_back(llvm::Constant::getIntegerValue(M.Int32Ty,
5474 llvm::APInt(32, Attr->getXDim())));
5475 Operands.push_back(llvm::Constant::getIntegerValue(M.Int32Ty,
5476 llvm::APInt(32, Attr->getYDim())));
5477 Operands.push_back(llvm::Constant::getIntegerValue(M.Int32Ty,
5478 llvm::APInt(32, Attr->getZDim())));
5483 Operands.push_back(llvm::ConstantInt::getTrue(Context));
5484 OpenCLMetadata->addOperand(llvm::MDNode::get(Context, Operands));
5511 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
5556 return ABIArgInfo::getDirect(llvm::Type::getInt64Ty(getVMContext()));
5558 return ABIArgInfo::getDirect(llvm::Type::getInt32Ty(getVMContext()));
5560 return ABIArgInfo::getDirect(llvm::Type::getInt16Ty(getVMContext()));
5562 return ABIArgInfo::getDirect(llvm::Type::getInt8Ty(getVMContext()));
5591 return ABIArgInfo::getDirect(llvm::Type::getInt8Ty(getVMContext()));
5593 return ABIArgInfo::getDirect(llvm::Type::getInt16Ty(getVMContext()));
5595 return ABIArgInfo::getDirect(llvm::Type::getInt32Ty(getVMContext()));
5596 return ABIArgInfo::getDirect(llvm::Type::getInt64Ty(getVMContext()));
5602 llvm::Value *HexagonABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
5605 llvm::Type *BPP = CGF.Int8PtrPtrTy;
5608 llvm::Value *VAListAddrAsBPP = Builder.CreateBitCast(VAListAddr, BPP,
5610 llvm::Value *Addr = Builder.CreateLoad(VAListAddrAsBPP, "ap.cur");
5611 llvm::Type *PTy =
5612 llvm::PointerType::getUnqual(CGF.ConvertType(Ty));
5613 llvm::Value *AddrTyped = Builder.CreateBitCast(Addr, PTy);
5616 llvm::RoundUpToAlignment(CGF.getContext().getTypeSize(Ty) / 8, 4);
5617 llvm::Value *NextAddr =
5618 Builder.CreateGEP(Addr, llvm::ConstantInt::get(CGF.Int32Ty, Offset),
5660 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
5675 llvm::LLVMContext &Context;
5676 const llvm::DataLayout &DL;
5677 SmallVector<llvm::Type*, 8> Elems;
5681 CoerceBuilder(llvm::LLVMContext &c, const llvm::DataLayout &dl)
5691 uint64_t Aligned = llvm::RoundUpToAlignment(Size, 64);
5693 Elems.push_back(llvm::IntegerType::get(Context, Aligned - Size));
5699 Elems.push_back(llvm::Type::getInt64Ty(Context));
5705 Elems.push_back(llvm::IntegerType::get(Context, ToSize - Size));
5711 void addFloat(uint64_t Offset, llvm::Type *Ty, unsigned Bits) {
5724 void addStruct(uint64_t Offset, llvm::StructType *StrTy) {
5725 const llvm::StructLayout *Layout = DL.getStructLayout(StrTy);
5727 llvm::Type *ElemTy = StrTy->getElementType(i);
5730 case llvm::Type::StructTyID:
5731 addStruct(ElemOffset, cast<llvm::StructType>(ElemTy));
5733 case llvm::Type::FloatTyID:
5736 case llvm::Type::DoubleTyID:
5739 case llvm::Type::FP128TyID:
5742 case llvm::Type::PointerTyID:
5756 bool isUsableType(llvm::StructType *Ty) const {
5766 llvm::Type *getType() const {
5770 return llvm::StructType::get(Context, Elems);
5807 llvm::StructType *StrTy = dyn_cast<llvm::StructType>(CGT.ConvertType(Ty));
5813 CB.pad(llvm::RoundUpToAlignment(CB.DL.getTypeSizeInBits(StrTy), 64));
5816 llvm::Type *CoerceTy = CB.isUsableType(StrTy) ? StrTy : CB.getType();
5824 llvm::Value *SparcV9ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
5827 llvm::Type *ArgTy = CGT.ConvertType(Ty);
5831 llvm::Type *BPP = CGF.Int8PtrPtrTy;
5833 llvm::Value *VAListAddrAsBPP = Builder.CreateBitCast(VAListAddr, BPP, "ap");
5834 llvm::Value *Addr = Builder.CreateLoad(VAListAddrAsBPP, "ap.cur");
5835 llvm::Type *ArgPtrTy = llvm::PointerType::getUnqual(ArgTy);
5836 llvm::Value *ArgAddr;
5859 llvm::PointerType::getUnqual(ArgPtrTy),
5865 return llvm::UndefValue::get(ArgPtrTy);
5892 llvm::Value *Address) const override;
5898 llvm::Value *Address) const {
5904 llvm::IntegerType *i8 = CGF.Int8Ty;
5905 llvm::Value *Four8 = llvm::ConstantInt::get(i8, 4);
5906 llvm::Value *Eight8 = llvm::ConstantInt::get(i8, 8);
5939 typedef llvm::SmallString<128> SmallStringEnc;
6032 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
6041 void emitTargetMD(const Decl *D, llvm::GlobalValue *GV,
6047 llvm::Value *XCoreABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
6052 llvm::Value *VAListAddrAsBPP = Builder.CreateBitCast(VAListAddr,
6054 llvm::Value *AP = Builder.CreateLoad(VAListAddrAsBPP);
6058 llvm::Type *ArgTy = CGT.ConvertType(Ty);
6061 llvm::Type *ArgPtrTy = llvm::PointerType::getUnqual(ArgTy);
6062 llvm::Value *Val;
6069 Val = llvm::UndefValue::get(ArgPtrTy);
6080 llvm::Value *ArgAddr;
6081 ArgAddr = Builder.CreateBitCast(AP, llvm::PointerType::getUnqual(ArgPtrTy));
6090 llvm::Value *APN = Builder.CreateConstGEP1_32(AP, ArgSize);
6203 void XCoreTargetCodeGenInfo::emitTargetMD(const Decl *D, llvm::GlobalValue *GV,
6207 llvm::LLVMContext &Ctx = CGM.getModule().getContext();
6208 llvm::SmallVector<llvm::Value *, 2> MDVals;
6210 MDVals.push_back(llvm::MDString::get(Ctx, Enc.str()));
6211 llvm::NamedMDNode *MD =
6213 MD->addOperand(llvm::MDNode::get(Ctx, MDVals));
6235 llvm::raw_svector_ostream OS(Enc);
6559 const llvm::Triple &Triple = getTarget().getTriple();
6564 case llvm::Triple::le32:
6566 case llvm::Triple::mips:
6567 case llvm::Triple::mipsel:
6570 case llvm::Triple::mips64:
6571 case llvm::Triple::mips64el:
6574 case llvm::Triple::aarch64:
6575 case llvm::Triple::aarch64_be:
6576 case llvm::Triple::arm64:
6577 case llvm::Triple::arm64_be: {
6585 case llvm::Triple::arm:
6586 case llvm::Triple::armeb:
6587 case llvm::Triple::thumb:
6588 case llvm::Triple::thumbeb:
6595 Triple.getEnvironment() == llvm::Triple::GNUEABIHF))
6599 case llvm::Triple::NaCl:
6608 case llvm::Triple::ppc:
6610 case llvm::Triple::ppc64:
6615 case llvm::Triple::ppc64le:
6619 case llvm::Triple::nvptx:
6620 case llvm::Triple::nvptx64:
6623 case llvm::Triple::msp430:
6626 case llvm::Triple::systemz:
6629 case llvm::Triple::tce:
6632 case llvm::Triple::x86: {
6638 if (Triple.getOS() == llvm::Triple::Win32) {
6653 case llvm::Triple::x86_64: {
6657 case llvm::Triple::Win32:
6659 case llvm::Triple::NaCl:
6667 case llvm::Triple::hexagon:
6669 case llvm::Triple::sparcv9:
6671 case llvm::Triple::xcore: