diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2015-02-19 20:57:58 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2015-02-19 20:57:58 +0000 |
| commit | bda3d407185047106bde6af5367ddab7d3a3142f (patch) | |
| tree | b0d1eaed14959a7722ff246ffa303348922e9fb5 /lib | |
| parent | ec12bbe359799efc32df6bde5e872cb2713c0b19 (diff) | |
Vendor import of clang RELEASE_360/rc4 tag r229772 (effectively, 3.6.0 RC4):vendor/clang/clang-release_360-r229772
Notes
svn path=/vendor/clang/dist/; revision=279021
svn path=/vendor/clang/clang-release_360-r229772/; revision=279022; tag=vendor/clang/clang-release_360-r229772
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/CodeGen/TargetInfo.cpp | 18 | ||||
| -rw-r--r-- | lib/Driver/ToolChains.cpp | 3 |
2 files changed, 9 insertions, 12 deletions
diff --git a/lib/CodeGen/TargetInfo.cpp b/lib/CodeGen/TargetInfo.cpp index 6ad349515769..39cc7e5d99c4 100644 --- a/lib/CodeGen/TargetInfo.cpp +++ b/lib/CodeGen/TargetInfo.cpp @@ -2134,19 +2134,15 @@ ABIArgInfo X86_64ABIInfo::getIndirectResult(QualType Ty, return ABIArgInfo::getIndirect(Align); } -/// GetByteVectorType - The ABI specifies that a value should be passed in an -/// full vector XMM/YMM register. Pick an LLVM IR type that will be passed as a -/// vector register. +/// The ABI specifies that a value should be passed in a full vector XMM/YMM +/// register. Pick an LLVM IR type that will be passed as a vector register. llvm::Type *X86_64ABIInfo::GetByteVectorType(QualType Ty) const { - llvm::Type *IRType = CGT.ConvertType(Ty); + // Wrapper structs/arrays that only contain vectors are passed just like + // vectors; strip them off if present. + if (const Type *InnerTy = isSingleElementStruct(Ty, getContext())) + Ty = QualType(InnerTy, 0); - // Wrapper structs that just contain vectors are passed just like vectors, - // strip them off if present. - llvm::StructType *STy = dyn_cast<llvm::StructType>(IRType); - while (STy && STy->getNumElements() == 1) { - IRType = STy->getElementType(0); - STy = dyn_cast<llvm::StructType>(IRType); - } + llvm::Type *IRType = CGT.ConvertType(Ty); // If the preferred type is a 16-byte vector, prefer to pass it. if (llvm::VectorType *VT = dyn_cast<llvm::VectorType>(IRType)){ diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index 4d97ab3bf485..f789fd55598f 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -3154,7 +3154,8 @@ void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs, SmallVector<StringRef, 5> dirs; CIncludeDirs.split(dirs, ":"); for (StringRef dir : dirs) { - StringRef Prefix = llvm::sys::path::is_absolute(dir) ? SysRoot : ""; + StringRef Prefix = + llvm::sys::path::is_absolute(dir) ? StringRef(SysRoot) : ""; addExternCSystemInclude(DriverArgs, CC1Args, Prefix + dir); } return; |
