Vendor import of clang RELEASE_360/rc4 tag r229772 (effectively, 3.6.0 RC4):
https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_360/rc4@229772
This commit is contained in:
parent
ff28d95d1f
commit
dfd258880c
@ -1,6 +1,6 @@
|
||||
=====================================
|
||||
Clang 3.6 (In-Progress) Release Notes
|
||||
=====================================
|
||||
=======================
|
||||
Clang 3.6 Release Notes
|
||||
=======================
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
@ -8,12 +8,6 @@ Clang 3.6 (In-Progress) Release Notes
|
||||
|
||||
Written by the `LLVM Team <http://llvm.org/>`_
|
||||
|
||||
.. warning::
|
||||
|
||||
These are in-progress notes for the upcoming Clang 3.6 release. You may
|
||||
prefer the `Clang 3.5 Release Notes
|
||||
<http://llvm.org/releases/3.5.0/tools/clang/docs/ReleaseNotes.html>`_.
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
@ -22,8 +16,8 @@ frontend, part of the LLVM Compiler Infrastructure, release 3.6. Here we
|
||||
describe the status of Clang in some detail, including major
|
||||
improvements from the previous release and new feature work. For the
|
||||
general LLVM release notes, see `the LLVM
|
||||
documentation <http://llvm.org/docs/ReleaseNotes.html>`_. All LLVM
|
||||
releases may be downloaded from the `LLVM releases web
|
||||
documentation <http://llvm.org/releases/3.6.0/docs/ReleaseNotes.html>`_.
|
||||
All LLVM releases may be downloaded from the `LLVM releases web
|
||||
site <http://llvm.org/releases/>`_.
|
||||
|
||||
For more information about Clang or LLVM, including information about
|
||||
@ -31,11 +25,6 @@ the latest release, please check out the main please see the `Clang Web
|
||||
Site <http://clang.llvm.org>`_ or the `LLVM Web
|
||||
Site <http://llvm.org>`_.
|
||||
|
||||
Note that if you are reading this file from a Subversion checkout or the
|
||||
main Clang web page, this document applies to the *next* release, not
|
||||
the current one. To see the release notes for a specific release, please
|
||||
see the `releases page <http://llvm.org/releases/>`_.
|
||||
|
||||
What's New in Clang 3.6?
|
||||
========================
|
||||
|
||||
@ -163,15 +152,15 @@ OpenCL C Language Changes in Clang
|
||||
OpenMP Language Changes in Clang
|
||||
--------------------------------
|
||||
|
||||
Clang 3.6 contains codegen for many individual pragmas for OpenMP but combinations are not completed as yet.
|
||||
We plan to continue codegen code drop aiming for completion for 3.7. Please see this link for up-to-date
|
||||
`status <https://github.com/clang-omp/clang/wiki/Status-of-supported-OpenMP-constructs>_`
|
||||
LLVM’s OpenMP runtime library, originally developed by Intel, has been modified to work on ARM, PowerPC,
|
||||
as well as X86. The Runtime Library's compatibility with GCC 4.9 is improved
|
||||
- missed entry points added, Barrier and fork/join code improved, one more type of barrier enabled.
|
||||
Support for ppc64le architecture is now available and automatically detected when using cmake system.
|
||||
Using makefile the new "ppc64le" arch type is available.
|
||||
Contributors to this work include AMD, Argonne National Lab., IBM, Intel, Texas Instruments, University of Houston and many others.
|
||||
Clang 3.6 contains codegen for many individual OpenMP pragmas, but combinations are not completed as yet.
|
||||
We plan to continue codegen code drop aiming for completion in 3.7. Please see this link for up-to-date
|
||||
`status <https://github.com/clang-omp/clang/wiki/Status-of-supported-OpenMP-constructs>_`.
|
||||
LLVM's OpenMP runtime library, originally developed by Intel, has been modified to work on ARM, PowerPC,
|
||||
as well as X86. The Runtime Library's compatibility with GCC 4.9 is improved
|
||||
- missed entry points added, barrier and fork/join code improved, one more type of barrier enabled.
|
||||
Support for ppc64le architecture is now available and automatically detected when using cmake system.
|
||||
Using makefile the new "ppc64le" arch type is available.
|
||||
Contributors to this work include AMD, Argonne National Lab., IBM, Intel, Texas Instruments, University of Houston and many others.
|
||||
|
||||
Internal API Changes
|
||||
--------------------
|
||||
|
@ -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)){
|
||||
|
@ -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;
|
||||
|
@ -184,6 +184,28 @@ struct v4f32wrapper f27(struct v4f32wrapper X) {
|
||||
return X;
|
||||
}
|
||||
|
||||
// PR22563 - We should unwrap simple structs and arrays to pass
|
||||
// and return them in the appropriate vector registers if possible.
|
||||
|
||||
typedef float v8f32 __attribute__((__vector_size__(32)));
|
||||
struct v8f32wrapper {
|
||||
v8f32 v;
|
||||
};
|
||||
|
||||
struct v8f32wrapper f27a(struct v8f32wrapper X) {
|
||||
// AVX-LABEL: define <8 x float> @f27a(<8 x float> %X.coerce)
|
||||
return X;
|
||||
}
|
||||
|
||||
struct v8f32wrapper_wrapper {
|
||||
v8f32 v[1];
|
||||
};
|
||||
|
||||
struct v8f32wrapper_wrapper f27b(struct v8f32wrapper_wrapper X) {
|
||||
// AVX-LABEL: define <8 x float> @f27b(<8 x float> %X.coerce)
|
||||
return X;
|
||||
}
|
||||
|
||||
// rdar://5711709
|
||||
struct f28c {
|
||||
double x;
|
||||
|
Loading…
Reference in New Issue
Block a user