]> granicus.if.org Git - clang/log
clang
7 years ago[CodeGen] Add param info for ctors with ABI args.
George Burgess IV [Wed, 22 Feb 2017 22:38:25 +0000 (22:38 +0000)]
[CodeGen] Add param info for ctors with ABI args.

This fixes a few assertion failures. Please see the added test case.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295894 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[ODRHash] static_cast and Stmt hashing.
Richard Trieu [Wed, 22 Feb 2017 22:22:42 +0000 (22:22 +0000)]
[ODRHash] static_cast and Stmt hashing.

Add support for static_cast in classes.  Add pointer-independent profiling for
Stmt's, sharing most of the logic with Stmt::Profile.  This is the first of the
deep sub-Decl diffing for error messages.

Differential Revision: https://reviews.llvm.org/D21675

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295890 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoPR32034: Evaluate _Atomic(T) in-place when T is a class or array type.
Richard Smith [Wed, 22 Feb 2017 22:09:50 +0000 (22:09 +0000)]
PR32034: Evaluate _Atomic(T) in-place when T is a class or array type.

This is necessary in order for the evaluation of an _Atomic initializer for
those types to have an associated object, which an initializer for class or
array type needs.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295886 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAMDGPU: Add fmed3 half builtin
Matt Arsenault [Wed, 22 Feb 2017 20:55:59 +0000 (20:55 +0000)]
AMDGPU: Add fmed3 half builtin

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295874 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agostop using associative comdats for SEH filter functions
Bob Haarman [Wed, 22 Feb 2017 20:29:39 +0000 (20:29 +0000)]
stop using associative comdats for SEH filter functions

Summary: We implement structured exception handling (SEH) by generating filter functions for functions that use exceptions. Currently, we use associative comdats to ensure that the filter functions are preserved if and only if the functions we generated them for are preserved. This can lead to problems when generating COFF objects - LLVM may decide to inline a function that uses SEH and remove its body, at which point we will end up with a comdat that COFF cannot represent. To avoid running into that situation, this change makes us not use associative comdats for SEH filter functions. We can still get the benefits we used the associative comdats for: we will always preserve filter functions we use, and dead stripping can eliminate the ones we don't use.

Reviewers: rnk, pcc, ruiu

Reviewed By: rnk

Differential Revision: https://reviews.llvm.org/D30117

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295872 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[CodeGen] Note where we add ABI-specific args in ctors. NFC.
George Burgess IV [Wed, 22 Feb 2017 20:28:02 +0000 (20:28 +0000)]
[CodeGen] Note where we add ABI-specific args in ctors. NFC.

Meta: The ultimate goal is to teach ExtParameterInfo about
pass_object_size attributes. This is necessary for that, since our
ExtParameterInfo is a bit buggy in C++. I plan to actually make use of
this Prefix/Suffix info in the near future, but I like small
single-purpose changes. Especially when those changes are hard to
actually test...

At the moment, some of our C++-specific CodeGen pretends that ABIs can
only add arguments to the beginning of a function call. This isn't quite
correct: args can be appended to the end, as well. It hasn't mattered
much until now, since we seem to only use this "number of arguments
added" data when calculating the ExtParameterInfo to use when making a
CGFunctionInfo. Said ExtParameterInfo is currently only used for
ParameterABIs (Swift) and ns_consumed (ObjC).

So, this patch allows ABIs to indicate whether args they added were at
the beginning or end of an argument list. We can use this information to
emit ExtParameterInfos more correctly, though like said, that bit is
coming soon.

No tests since this is theoretically a nop.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295870 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoImprove support for 'decltype(auto)' in template template parameter matching.
Richard Smith [Wed, 22 Feb 2017 20:01:55 +0000 (20:01 +0000)]
Improve support for 'decltype(auto)' in template template parameter matching.

A 'decltype(auto)' parameter can match any other kind of non-type template
parameter, so should be usable in place of any other parameter in a template
template argument. The standard is sadly extremely unclear on how this is
supposed to work, but this seems like the obviously-correct result.

It's less clear whether an 'auto' parameter should be able to match
'decltype(auto)', since the former cannot be used if the latter turns out to be
used for a reference type, but if we disallow that then consistency suggests we
should also disallow 'auto' matching 'T' for the same reason, defeating
intended use cases of the feature.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295866 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[OpenCL] r600 needs OpenCL kernel calling convention
Jan Vesely [Wed, 22 Feb 2017 15:01:42 +0000 (15:01 +0000)]
[OpenCL] r600 needs OpenCL kernel calling convention

Differential Revision: https://reviews.llvm.org/D30236

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295843 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRemove superfluous initializer.
Yaron Keren [Wed, 22 Feb 2017 14:32:39 +0000 (14:32 +0000)]
Remove superfluous initializer.
The following fully-covered switch either sets value to External or exits the function.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295839 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoFix 'control reaches end of non-void function' warning
Simon Pilgrim [Wed, 22 Feb 2017 13:21:24 +0000 (13:21 +0000)]
Fix 'control reaches end of non-void function' warning

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295829 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoFix -Wunused-private-field warning by removing unused ODRHash reference field from...
Simon Pilgrim [Wed, 22 Feb 2017 13:19:24 +0000 (13:19 +0000)]
Fix -Wunused-private-field warning by removing unused ODRHash reference field from ODRDeclVisitor

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295828 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[ODRHash] Avoid dereferencing end() of a SmallVector.
Benjamin Kramer [Wed, 22 Feb 2017 10:19:45 +0000 (10:19 +0000)]
[ODRHash] Avoid dereferencing end() of a SmallVector.

Found by MSAN.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295820 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[OpenMP] Generate better diagnostics for cancel and cancellation point
Jonas Hahnfeld [Wed, 22 Feb 2017 06:49:10 +0000 (06:49 +0000)]
[OpenMP] Generate better diagnostics for cancel and cancellation point

checkNestingOfRegions uses CancelRegion to determine whether cancel and
cancellation point are valid in the given nesting. This leads to unuseful
diagnostics if CancelRegion is invalid. The given test case has produced:
  region cannot be closely nested inside 'parallel' region

As a solution, introduce checkCancelRegion and call it first to get the
expected error:
  one of 'for', 'parallel', 'sections' or 'taskgroup' is expected

Differential Revision: https://reviews.llvm.org/D30135

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295808 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoCall the correct @llvm.objectsize.
George Burgess IV [Wed, 22 Feb 2017 02:35:51 +0000 (02:35 +0000)]
Call the correct @llvm.objectsize.

The following code would crash clang:

void foo(unsigned *const __attribute__((pass_object_size(0))));
void bar(unsigned *i) { foo(i); }

This is because we were always selecting the version of
`@llvm.objectsize` that takes an i8* in CodeGen. Passing an i32* as an
i8* makes LLVM very unhappy.

(Yes, I'm surprised that this remained uncaught for so long, too. :) )

As an added bonus, we'll now also use the appropriate address space when
emitting @llvm.objectsize calls.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295805 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAdd more ODR checking.
Richard Trieu [Wed, 22 Feb 2017 01:11:25 +0000 (01:11 +0000)]
Add more ODR checking.

Add the basics for the ODRHash class, which will only process Decl's from
a whitelist, which currently only has AccessSpecDecl.  Different access
specifiers in merged classes can now be detected.

Differential Revision: https://reviews.llvm.org/D21675

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295800 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoFix assertion failure when generating debug information for a variable
Richard Smith [Wed, 22 Feb 2017 00:13:14 +0000 (00:13 +0000)]
Fix assertion failure when generating debug information for a variable
declaration declared using class template argument deduction.

Patch by Eric Fiselier (who is busy and asked me to commit this on his behalf)!

Differential Revision: https://reviews.llvm.org/D30082

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295794 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[c++1z] Mark constexpr lambdas as done on status page and start advertising
Richard Smith [Tue, 21 Feb 2017 23:58:29 +0000 (23:58 +0000)]
[c++1z] Mark constexpr lambdas as done on status page and start advertising
them via feature test macro __cpp_constexpr.

Thanks to Faisal for implementing this feature!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295791 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoFix deduction of type of pack-expanded non-type template parameter.
Richard Smith [Tue, 21 Feb 2017 23:49:18 +0000 (23:49 +0000)]
Fix deduction of type of pack-expanded non-type template parameter.

We need to look through the PackExpansionType in the parameter type when
deducing, and we need to consider the possibility of deducing arguments for
packs that are not lexically mentioned in the pattern (but are nonetheless
deducible) when figuring out which packs are covered by a pack deduction scope.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295790 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoHook up OpenBSD AArch64 support
Brad Smith [Tue, 21 Feb 2017 23:13:09 +0000 (23:13 +0000)]
Hook up OpenBSD AArch64 support

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295786 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoDeclare lgamma library builtins as never being const
Jacob Gravelle [Tue, 21 Feb 2017 22:37:27 +0000 (22:37 +0000)]
Declare lgamma library builtins as never being const

Summary:
POSIX requires lgamma writes to an external global variable, signgam.
This prevents annotating lgamma with readnone, which is incorrect on
targets that write to signgam.

Reviewers: efriedma, rsmith

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D29778

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295781 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoFix for pr31836 - pp_nonportable_path on absolute paths: broken delimiters
Taewook Oh [Tue, 21 Feb 2017 22:30:55 +0000 (22:30 +0000)]
Fix for pr31836 - pp_nonportable_path on absolute paths: broken delimiters

Summary: This is a patch for PR31836. As the bug replaces the path separators in the included file name with the characters following them, the test script makes sure that there's no "Ccase-insensitive-include-pr31836.h" in the warning message.

Reviewers: rsmith, eric_niebler

Reviewed By: eric_niebler

Subscribers: karies, cfe-commits

Differential Revision: https://reviews.llvm.org/D30000

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295779 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[XRay] Merge xray clang flag tests, and add powerpc64le.
Tim Shen [Tue, 21 Feb 2017 22:30:00 +0000 (22:30 +0000)]
[XRay] Merge xray clang flag tests, and add powerpc64le.

Summary: I'm not sure why they were in different files, but it's kind of harder to maintain. I create this patch partially for initiate a discussion.

Reviewers: dberris

Subscribers: nemanjai, cfe-commits

Differential Revision: https://reviews.llvm.org/D30118

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295778 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoOnly enable AddDiscriminator pass when -fdebug-info-for-profiling is true
Dehao Chen [Tue, 21 Feb 2017 20:36:21 +0000 (20:36 +0000)]
Only enable AddDiscriminator pass when -fdebug-info-for-profiling is true

Summary: AddDiscriminator pass is only useful for sample pgo. This patch restricts AddDiscriminator to -fdebug-info-for-profiling so that it does not introduce unecessary debug size increases for non-sample-pgo builds.

Reviewers: dblaikie, aprantl

Reviewed By: dblaikie

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D30220

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295764 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoFix copy and paste mistake in header comment, NFC.
Erik Pilkington [Tue, 21 Feb 2017 20:31:01 +0000 (20:31 +0000)]
Fix copy and paste mistake in header comment, NFC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295763 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[mips] Define macros related to -mabicalls in the preprocessor
Simon Dardis [Tue, 21 Feb 2017 16:01:00 +0000 (16:01 +0000)]
[mips] Define macros related to -mabicalls in the preprocessor

Summary:
Historically, NetBSD, FreeBSD and OpenBSD have defined the macro ABICALLS in
the preprocessor when -mabicalls is in effect.

Mainline GCC later defined __mips_abicalls when -mabicalls is in effect.

This patch teaches the preprocessor to define these macros when appropriate.

NetBSD does not require the ABICALLS macro.

This resolves PR/31694.

Thanks to Sean Bruno for highlighting this issue!

Reviewers: slthakur, seanbruno

Reviewed By: seanbruno

Subscribers: joerg, brad, emaste, seanbruno, cfe-commits

Differential Revision: https://reviews.llvm.org/D29032

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295728 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[clang-format] Remove unused member variables from BreakableToken
Krasimir Georgiev [Tue, 21 Feb 2017 10:54:50 +0000 (10:54 +0000)]
[clang-format] Remove unused member variables from BreakableToken

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295714 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoFix lookup through injected-class-names in implicit deduction guides in the
Richard Smith [Tue, 21 Feb 2017 08:42:39 +0000 (08:42 +0000)]
Fix lookup through injected-class-names in implicit deduction guides in the
case where the class template has a parameter pack.

Checking of the template arguments expects an "as-written" template argument
list, which in particular does not have any parameter packs. So flatten the
packs into separate arguments before passing them in.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295710 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoWhen deducing an array bound from the length of an initializer list, don't
Richard Smith [Tue, 21 Feb 2017 07:22:31 +0000 (07:22 +0000)]
When deducing an array bound from the length of an initializer list, don't
assume the bound has a non-dependent integral type.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295698 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoPR32010: Fix template argument depth mixup when forming implicit constructor
Richard Smith [Tue, 21 Feb 2017 06:30:38 +0000 (06:30 +0000)]
PR32010: Fix template argument depth mixup when forming implicit constructor
template deduction guides for class template argument deduction.

Ensure that we have a local instantiation scope for tracking the instantiated
parameters. Additionally, unusually, we're substituting at depth 1 and leaving
depth 0 alone; make sure that we don't reduce template parameter depth by 2 for
inner parameters in the process. (This is probably also broken for alias
templates in the case where they're expanded within a dependent context, but
this patch doesn't fix that.)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295696 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAdd template parameter depth and index to -ast-dump output.
Richard Smith [Tue, 21 Feb 2017 02:04:03 +0000 (02:04 +0000)]
Add template parameter depth and index to -ast-dump output.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295689 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoFactor out function to determine whether we're performing a template
Richard Smith [Tue, 21 Feb 2017 01:17:38 +0000 (01:17 +0000)]
Factor out function to determine whether we're performing a template
instantiation.

In preparation for converting the template stack to a more general context
stack (so we can include context notes for other kinds of context).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295686 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoSema: use PropertyDecl for property selector
Saleem Abdulrasool [Mon, 20 Feb 2017 23:45:49 +0000 (23:45 +0000)]
Sema: use PropertyDecl for property selector

Using the constructed name for the class properties with dot syntax may
yield an inappropriate selector (i.e. if it is specified via property
attributes).  Prefer the declaration for the selector, falling back to
the constructed name otherwise.

Patch by David Herzka!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295683 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[Sema][ObjC] perform-selector ARC check should see @selector in parens
Alex Lorenz [Mon, 20 Feb 2017 17:55:15 +0000 (17:55 +0000)]
[Sema][ObjC] perform-selector ARC check should see @selector in parens

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295674 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoclang-format: [JS] Improve line-wrapping behavior of template strings.
Daniel Jasper [Mon, 20 Feb 2017 14:51:16 +0000 (14:51 +0000)]
clang-format: [JS] Improve line-wrapping behavior of template strings.

Specifically, similar to other blocks, clang-format now wraps both
after "${" and before the corresponding "}", if the contained
expression spans multiple lines.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295663 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoclang-format: Prevent weird line-wraps in complex lambda introducers
Daniel Jasper [Mon, 20 Feb 2017 12:43:48 +0000 (12:43 +0000)]
clang-format: Prevent weird line-wraps in complex lambda introducers

Before:
  aaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(
      [aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]() -> ::std::
  unordered_set<aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa> {
    //
  });

After:
  aaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(
      [aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]()
  -> ::std::unordered_set<
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa> {
//
      });

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295659 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoclang-format: [JS/TS] Improve detection for array subscripts in types.
Daniel Jasper [Mon, 20 Feb 2017 12:43:41 +0000 (12:43 +0000)]
clang-format: [JS/TS] Improve detection for array subscripts in types.

Before:
  var someValue = (v as aaaaaaaaaaaaaaaaaaaa<T>[
                  ]).someFunction(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);

After:
  var someValue = (v as aaaaaaaaaaaaaaaaaaaa<T>[])
                      .someFunction(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295658 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[ASTImporter] Support default argument initialization of ParmVarDecls
Aleksei Sidorin [Mon, 20 Feb 2017 11:57:12 +0000 (11:57 +0000)]
[ASTImporter] Support default argument initialization of ParmVarDecls

Patch by Peter Szecsi!

Differential Revision: https://reviews.llvm.org/D29612

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295654 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[ARM] Add regression tests for Cortex-M23 and Cortex-M33
Sanne Wouda [Mon, 20 Feb 2017 10:37:01 +0000 (10:37 +0000)]
[ARM] Add regression tests for Cortex-M23 and Cortex-M33

Reviewers: rengolin, t.p.northover

Reviewed By: t.p.northover

Subscribers: aemerson, llvm-commits

Differential Revision: https://reviews.llvm.org/D30100

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295647 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[analyzer] Do not duplicate call graph nodes for functions that have definition and...
Aleksei Sidorin [Mon, 20 Feb 2017 09:16:48 +0000 (09:16 +0000)]
[analyzer] Do not duplicate call graph nodes for functions that have definition and forward declaration

Patch by Ivan Sidorenko!

Differential Revision: https://reviews.llvm.org/D29643

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295644 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoEnable support for __float128 in Clang on OpenBSD/X86
Brad Smith [Mon, 20 Feb 2017 03:18:15 +0000 (03:18 +0000)]
Enable support for __float128 in Clang on OpenBSD/X86

/usr/local/include/c++/4.9.4/type_traits:279:39: error: __float128 is not
supported on this target

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295635 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoDriver: inline a single caller of a function (NFC)
Saleem Abdulrasool [Sun, 19 Feb 2017 21:50:40 +0000 (21:50 +0000)]
Driver: inline a single caller of a function (NFC)

Inline the addCompilerRT call to the single caller.  NFC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295620 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAlways use --eh-frame-hdr on OpenBSD, even for -static
Brad Smith [Sun, 19 Feb 2017 20:11:48 +0000 (20:11 +0000)]
Always use --eh-frame-hdr on OpenBSD, even for -static

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295614 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoLink static PIE programs against rcrt0.o on OpenBSD
Brad Smith [Sun, 19 Feb 2017 19:33:26 +0000 (19:33 +0000)]
Link static PIE programs against rcrt0.o on OpenBSD

Patch by Stefan Kempf.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295610 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[CUDA] Don't pass -stack-protector to NVPTX compilations.
Justin Lebar [Sun, 19 Feb 2017 19:05:32 +0000 (19:05 +0000)]
[CUDA] Don't pass -stack-protector to NVPTX compilations.

We can't support stack-protector on NVPTX because NVPTX doesn't expose a
stack to the compiler!

Fixes PR32009.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295609 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoclang/CMakeLists.txt: Rework r294954 -- use file(TO_CMAKE_PATH).
NAKAMURA Takumi [Sun, 19 Feb 2017 03:17:31 +0000 (03:17 +0000)]
clang/CMakeLists.txt: Rework r294954 -- use file(TO_CMAKE_PATH).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295592 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[X86][XOP] Fix type conversion warning in vpcmov generic implementations.
Simon Pilgrim [Sat, 18 Feb 2017 23:47:34 +0000 (23:47 +0000)]
[X86][XOP] Fix type conversion warning in vpcmov generic implementations.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295584 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[X86] Replace XOP vpcmov builtins with native vector logical operations.
Craig Topper [Sat, 18 Feb 2017 21:15:30 +0000 (21:15 +0000)]
[X86] Replace XOP vpcmov builtins with native vector logical operations.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295570 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAMDGPU: Add gfx900 and gfx901 processors
Matt Arsenault [Sat, 18 Feb 2017 19:02:41 +0000 (19:02 +0000)]
AMDGPU: Add gfx900 and gfx901 processors

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295556 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[analyzer] Revert 295545. There are buildbot failures.
Daniel Marjamaki [Sat, 18 Feb 2017 16:31:35 +0000 (16:31 +0000)]
[analyzer] Revert 295545. There are buildbot failures.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295548 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[analyzer] Fix crash in CastToStruct when there is no record definition
Daniel Marjamaki [Sat, 18 Feb 2017 11:18:57 +0000 (11:18 +0000)]
[analyzer] Fix crash in CastToStruct when there is no record definition

This crash was reported in https://bugs.llvm.org//show_bug.cgi?id=31173

Differential Revision: https://reviews.llvm.org/D28297

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295545 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoProcess attributes 'ifunc' and 'alias' when checking for redefinition
Serge Pavlov [Sat, 18 Feb 2017 06:04:15 +0000 (06:04 +0000)]
Process attributes 'ifunc' and 'alias' when checking for redefinition

These attributes effectively turn a non-defining declaration into a
definition, so the case when the declaration already has a body must
be diagnosed properly.

Differential Revision: https://reviews.llvm.org/D30032

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295541 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[AVR] Move definition of IsIntegratedAssemblerDefault
Dylan McKay [Sat, 18 Feb 2017 02:42:36 +0000 (02:42 +0000)]
[AVR] Move definition of IsIntegratedAssemblerDefault

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295536 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoPart of adding an improved ODR checker.
Richard Trieu [Sat, 18 Feb 2017 02:09:28 +0000 (02:09 +0000)]
Part of adding an improved ODR checker.

Reserve a spot for ODR hash in CXXRecordDecl and in its modules storage.
Default the hash value to 0 for all classes.

Differential Revision: https://reviews.llvm.org/D21675

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295533 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[profiling] Make a test more explicit. NFC.
Vedant Kumar [Sat, 18 Feb 2017 02:02:55 +0000 (02:02 +0000)]
[profiling] Make a test more explicit. NFC.

The cxx-structors.cpp test checks that some instrumentation doesn't
appear, but it should be more explicit about which instrumentation it
actually expects to appear.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295532 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[profiling] Tighten test cases which refer to "profn" vars. NFC.
Vedant Kumar [Sat, 18 Feb 2017 01:50:14 +0000 (01:50 +0000)]
[profiling] Tighten test cases which refer to "profn" vars. NFC.

The frontend can't see "__profn" profile name variables after IRGen
because llvm throws these away now. Tighten up some test cases which
checked for the non-existence of those variables.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295528 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoReuse a local variable. NFC.
Vedant Kumar [Sat, 18 Feb 2017 01:50:11 +0000 (01:50 +0000)]
Reuse a local variable. NFC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295527 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoCleanup: use range-based for rather than separate calls to begin and end.
Richard Smith [Sat, 18 Feb 2017 01:14:43 +0000 (01:14 +0000)]
Cleanup: use range-based for rather than separate calls to begin and end.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295524 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoHandle deduction guides better in -ast-print.
Richard Smith [Sat, 18 Feb 2017 01:01:48 +0000 (01:01 +0000)]
Handle deduction guides better in -ast-print.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295521 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[modules] Load the ModuleOffsetMap from the module header lazily.
Richard Smith [Sat, 18 Feb 2017 00:32:02 +0000 (00:32 +0000)]
[modules] Load the ModuleOffsetMap from the module header lazily.

If we never need to map any ID within the module to its global ID, we don't
need the module offset map. If a compilation transitively depends on lots of
unused module files, this can result in a modest performance improvement.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295517 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRetry^2: [ubsan] Reduce null checking of C++ object pointers (PR27581)
Vedant Kumar [Fri, 17 Feb 2017 23:22:59 +0000 (23:22 +0000)]
Retry^2: [ubsan] Reduce null checking of C++ object pointers (PR27581)

This patch teaches ubsan to insert exactly one null check for the 'this'
pointer per method/lambda.

Previously, given a load of a member variable from an instance method
('this->x'), ubsan would insert a null check for 'this', and another
null check for '&this->x', before allowing the load to occur.

Similarly, given a call to a method from another method bound to the
same instance ('this->foo()'), ubsan would a redundant null check for
'this'. There is also a redundant null check in the case where the
object pointer is a reference ('Ref.foo()').

This patch teaches ubsan to remove the redundant null checks identified
above.

Testing: check-clang, check-ubsan, and a stage2 ubsan build.

I also compiled X86FastISel.cpp with -fsanitize=null using
patched/unpatched clangs based on r293572. Here are the number of null
checks emitted:

  -------------------------------------
  | Setup          | # of null checks |
  -------------------------------------
  | unpatched, -O0 |            21767 |
  | patched, -O0   |            10758 |
  -------------------------------------

Changes since the initial commit:
- Don't introduce any unintentional object-size or alignment checks.
- Don't rely on IRGen of C labels in the test.

Differential Revision: https://reviews.llvm.org/D29530

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295515 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[ubsan] Pass a set of checks to skip to EmitTypeCheck() (NFC)
Vedant Kumar [Fri, 17 Feb 2017 23:22:55 +0000 (23:22 +0000)]
[ubsan] Pass a set of checks to skip to EmitTypeCheck() (NFC)

CodeGenFunction::EmitTypeCheck accepts a bool flag which controls
whether or not null checks are emitted. Make this a bit more flexible by
changing the bool to a SanitizerSet.

Needed for an upcoming change which deals with a scenario in which we
only want to emit null checks.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295514 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[OpenMP] Prepare Sema for initial implementation for pragma 'distribute parallel...
Carlo Bertolli [Fri, 17 Feb 2017 21:29:13 +0000 (21:29 +0000)]
[OpenMP] Prepare Sema for initial implementation for pragma 'distribute parallel for'

https://reviews.llvm.org/D29922

This patch adds two fields for use in the implementation of 'distribute parallel for':

The increment expression for the distribute loop. As the chunk assigned to a team is executed by multiple threads within the 'parallel for' region, the increment expression has to correspond to the value returned by the related runtime call (for_static_init).
The upper bound of the innermost loop ('for' in 'distribute parallel for') is not the globalUB expression normally used for pragma 'for' when found in isolation. It is instead the upper bound of the chunk assigned to the team ('distribute' loop). In this way, we prevent teams from executing chunks assigned to other teams.
The use of these two fields can be see in a related explanatory patch:
https://reviews.llvm.org/D29508

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295497 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRevert "Retry: [ubsan] Reduce null checking of C++ object pointers (PR27581)"
Vedant Kumar [Fri, 17 Feb 2017 20:59:40 +0000 (20:59 +0000)]
Revert "Retry: [ubsan] Reduce null checking of C++ object pointers (PR27581)"

This reverts commit r295401. It breaks the ubsan self-host. It inserts
object size checks once per C++ method which fire when the structure is
empty.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295494 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAdd an explicit derived class of FunctionDecl to model deduction guides rather
Richard Smith [Fri, 17 Feb 2017 20:05:37 +0000 (20:05 +0000)]
Add an explicit derived class of FunctionDecl to model deduction guides rather
than just treating them as FunctionDecls with a funny name.

No functionality change intended.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295491 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[Test] Make Lit tests C++11 compatible - misc
Charles Li [Fri, 17 Feb 2017 19:36:19 +0000 (19:36 +0000)]
[Test] Make Lit tests C++11 compatible - misc

Updated 5 tests.

Differential Revision: https://reviews.llvm.org/D24812

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295484 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[CMake] Add Fuchsia toolchain CMake cache files
Petr Hosek [Fri, 17 Feb 2017 19:28:54 +0000 (19:28 +0000)]
[CMake] Add Fuchsia toolchain CMake cache files

These cache files can be used to build Fuchsia toolchain. They also
demonstrate the use of multi-target builtins build.

Differential Revision: https://reviews.llvm.org/D26654

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295480 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[OpenMP] Fix cancellation point in task with no cancel
Jonas Hahnfeld [Fri, 17 Feb 2017 18:32:58 +0000 (18:32 +0000)]
[OpenMP] Fix cancellation point in task with no cancel

With tasks, the cancel may happen in another task. This has a different
region info which means that we can't find it here.

Differential Revision: https://reviews.llvm.org/D30091

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295474 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[OpenMP] Remove barriers at cancel and cancellation point
Jonas Hahnfeld [Fri, 17 Feb 2017 18:32:51 +0000 (18:32 +0000)]
[OpenMP] Remove barriers at cancel and cancellation point

This resolves a deadlock with the cancel directive when there is no explicit
cancellation point. In that case, the implicit barrier acts as cancellation
point. After removing the barrier after cancel, the now unmatched barrier for
the explicit cancellation point has to go as well.

This has probably worked before rL255992: With the calls for the explicit
barrier, it was sure that all threads passed a barrier before exiting.

Reported by Simon Convent and Joachim Protze!

Differential Revision: https://reviews.llvm.org/D30088

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295473 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRename DiagnosticInfoWithDebugLoc to WithLocation to match LLVM
Justin Bogner [Fri, 17 Feb 2017 17:34:49 +0000 (17:34 +0000)]
Rename DiagnosticInfoWithDebugLoc to WithLocation to match LLVM

Updates for llvm r295465.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295466 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoclang-format: Don't remove existing spaces between identifier and ::.
Daniel Jasper [Fri, 17 Feb 2017 10:44:07 +0000 (10:44 +0000)]
clang-format: Don't remove existing spaces between identifier and ::.

This can lead to bad behavior with macros that are used to annotate
functions (e.g. ALWAYS_INLINE).

Before, this:
  ALWAYS_INLINE ::std::string getName() ...

was turned into:
  ALWAYS_INLINE::std::string getName() ...

If it turns out that clang-format is failing to clean up a lot of the
existing spaces now, we can add more analyses of the identifier. It
should not currently. Cases where clang-format breaks nested name
specifiers should be fine as clang-format wraps after the "::". Thus, a
line getting longer and then shorter again should lead to the same
original code.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295437 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoUpdate Bugzilla URLs in docs
Ismail Donmez [Fri, 17 Feb 2017 08:26:54 +0000 (08:26 +0000)]
Update Bugzilla URLs in docs

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295433 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRevert r295421, new ODR checker for modules, to fix build bot.
Richard Trieu [Fri, 17 Feb 2017 07:19:24 +0000 (07:19 +0000)]
Revert r295421, new ODR checker for modules, to fix build bot.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295427 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAdd better ODR checking for modules.
Richard Trieu [Fri, 17 Feb 2017 05:54:30 +0000 (05:54 +0000)]
Add better ODR checking for modules.

A slightly weaker form of ODR checking than previous attempts, but hopefully
won't break the modules build bot.  Future work will be needed to catch all
cases.

When objects are imported for modules, there is a chance that a name collision
will cause an ODR violation.  Previously, only a small number of such
violations were detected.  This patch provides a stronger check based on
AST nodes.

The information needed to uniquely identify an object is taken from the AST and
put into a one-dimensional byte stream.  This stream is then hashed to give
a value to represent the object, which is stored with the other object data
in the module.

When modules are loaded, and Decl's are merged, the hash values of the two
Decl's are compared.  Only Decl's with matched hash values will be merged.
Mismatch hashes will generate a module error, and if possible, point to the
first difference between the two objects.

The transform from AST to byte stream is a modified depth first algorithm.
Due to references between some AST nodes, a pure depth first algorithm could
generate loops.  For Stmt nodes, a straight depth first processing occurs.
For Type and Decl nodes, they are replaced with an index number and only on
first visit will these nodes be processed.  As an optimization, boolean
values are saved and stored together in reverse order at the end of the
byte stream to lower the ammount of data that needs to be hashed.

Compile time impact was measured at 1.5-2.0% during module building, and
negligible during builds without module building.

Differential Revision: https://reviews.llvm.org/D21675

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295421 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[index] Improvde how we handle synthesized ObjC properties and the associated ivars.
Argyrios Kyrtzidis [Fri, 17 Feb 2017 04:49:41 +0000 (04:49 +0000)]
[index] Improvde how we handle synthesized ObjC properties and the associated ivars.

Related synthesized properties with the ivar they use with the 'accessor' relation, and make sure
we mark them 'implicit' when appropriate.

Patch by Nathan Hawes!
https://reviews.llvm.org/D30012

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295416 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAdded doxygen comments to smmintrin.h's intrinsics.
Ekaterina Romanova [Fri, 17 Feb 2017 02:49:50 +0000 (02:49 +0000)]
Added doxygen comments to smmintrin.h's intrinsics.

Note: The doxygen comments are automatically generated based on Sony's intrinsic
s document.

I got an OK from Eric Christopher to commit doxygen comments without prior code
review upstream.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295404 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRetry: [ubsan] Reduce null checking of C++ object pointers (PR27581)
Vedant Kumar [Fri, 17 Feb 2017 02:03:51 +0000 (02:03 +0000)]
Retry: [ubsan] Reduce null checking of C++ object pointers (PR27581)

This patch teaches ubsan to insert exactly one null check for the 'this'
pointer per method/lambda.

Previously, given a load of a member variable from an instance method
('this->x'), ubsan would insert a null check for 'this', and another
null check for '&this->x', before allowing the load to occur.

Similarly, given a call to a method from another method bound to the
same instance ('this->foo()'), ubsan would a redundant null check for
'this'. There is also a redundant null check in the case where the
object pointer is a reference ('Ref.foo()').

This patch teaches ubsan to remove the redundant null checks identified
above.

Testing: check-clang and check-ubsan. I also compiled X86FastISel.cpp
with -fsanitize=null using patched/unpatched clangs based on r293572.
Here are the number of null checks emitted:

  -------------------------------------
  | Setup          | # of null checks |
  -------------------------------------
  | unpatched, -O0 |            21767 |
  | patched, -O0   |            10758 |
  -------------------------------------

Changes since the initial commit: don't rely on IRGen of C labels in the
test.

Differential Revision: https://reviews.llvm.org/D29530

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295401 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRevert "[ubsan] Reduce null checking of C++ object pointers (PR27581)"
Vedant Kumar [Fri, 17 Feb 2017 01:42:36 +0000 (01:42 +0000)]
Revert "[ubsan] Reduce null checking of C++ object pointers (PR27581)"

This reverts commit r295391. It breaks this bot:

http://lab.llvm.org:8011/builders/clang-with-thin-lto-ubuntu/builds/1898

I need to not rely on labels in the IR test.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295396 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[ubsan] Reduce null checking of C++ object pointers (PR27581)
Vedant Kumar [Fri, 17 Feb 2017 01:05:42 +0000 (01:05 +0000)]
[ubsan] Reduce null checking of C++ object pointers (PR27581)

This patch teaches ubsan to insert exactly one null check for the 'this'
pointer per method/lambda.

Previously, given a load of a member variable from an instance method
('this->x'), ubsan would insert a null check for 'this', and another
null check for '&this->x', before allowing the load to occur.

Similarly, given a call to a method from another method bound to the
same instance ('this->foo()'), ubsan would a redundant null check for
'this'. There is also a redundant null check in the case where the
object pointer is a reference ('Ref.foo()').

This patch teaches ubsan to remove the redundant null checks identified
above.

Testing: check-clang and check-ubsan. I also compiled X86FastISel.cpp
with -fsanitize=null using patched/unpatched clangs based on r293572.
Here are the number of null checks emitted:

  -------------------------------------
  | Setup          | # of null checks |
  -------------------------------------
  | unpatched, -O0 |            21767 |
  | patched, -O0   |            10758 |
  -------------------------------------

Differential Revision: https://reviews.llvm.org/D29530

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295391 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoUse correct fix-it location for -Wblock-capture-autoreleasing
Alex Lorenz [Thu, 16 Feb 2017 23:15:36 +0000 (23:15 +0000)]
Use correct fix-it location for -Wblock-capture-autoreleasing

The '__autoreleasing' keyword should be inserted after the Objective-C pointer
type.

rdar://30123548

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295381 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoProperly set up the DeclContext for parameters of implicit deduction guides;
Richard Smith [Thu, 16 Feb 2017 21:29:21 +0000 (21:29 +0000)]
Properly set up the DeclContext for parameters of implicit deduction guides;
this is needed for deferred instantiation of default arguments.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295379 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[OpenMP] Teams reduction on the NVPTX device.
Arpith Chacko Jacob [Thu, 16 Feb 2017 16:48:49 +0000 (16:48 +0000)]
[OpenMP] Teams reduction on the NVPTX device.

This patch implements codegen for the reduction clause on
any teams construct for elementary data types.  It builds
on parallel reductions on the GPU.  Subsequently,
the team master writes to a unique location in a global
memory scratchpad.  The last team to do so loads and
reduces this array to calculate the final result.

This patch emits two helper functions that are used by
the OpenMP runtime on the GPU to perform reductions across
teams.

Patch by Tian Jin in collaboration with Arpith Jacob

Reviewers: ABataev
Differential Revision: https://reviews.llvm.org/D29879

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295335 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[OpenMP] Parallel reduction on the NVPTX device.
Arpith Chacko Jacob [Thu, 16 Feb 2017 16:20:16 +0000 (16:20 +0000)]
[OpenMP] Parallel reduction on the NVPTX device.

This patch implements codegen for the reduction clause on
any parallel construct for elementary data types.  An efficient
implementation requires hierarchical reduction within a
warp and a threadblock.  It is complicated by the fact that
variables declared in the stack of a CUDA thread cannot be
shared with other threads.

The patch creates a struct to hold reduction variables and
a number of helper functions.  The OpenMP runtime on the GPU
implements reduction algorithms that uses these helper
functions to perform reductions within a team.  Variables are
shared between CUDA threads using shuffle intrinsics.

An implementation of reductions on the NVPTX device is
substantially different to that of CPUs.  However, this patch
is written so that there are minimal changes to the rest of
OpenMP codegen.

The implemented design allows the compiler and runtime to be
decoupled, i.e., the runtime does not need to know of the
reduction operation(s), the type of the reduction variable(s),
or the number of reductions.  The design also allows reuse of
host codegen, with appropriate specialization for the NVPTX
device.

While the patch does introduce a number of abstractions, the
expected use case calls for inlining of the GPU OpenMP runtime.
After inlining and optimizations in LLVM, these abstractions
are unwound and performance of OpenMP reductions is comparable
to CUDA-canonical code.

Patch by Tian Jin in collaboration with Arpith Jacob

Reviewers: ABataev
Differential Revision: https://reviews.llvm.org/D29758

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295333 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRevert r295319 while investigating buildbot failure.
Arpith Chacko Jacob [Thu, 16 Feb 2017 14:25:35 +0000 (14:25 +0000)]
Revert r295319 while investigating buildbot failure.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295323 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoSilence sign compare warning. NFC.
Benjamin Kramer [Thu, 16 Feb 2017 14:08:41 +0000 (14:08 +0000)]
Silence sign compare warning. NFC.

ExprConstant.cpp:6344:20: warning: comparison of integers of different
signs: 'const size_t' (aka 'const unsigned long') and 'typename
iterator_traits<Expr *const *>::difference_type' (aka 'long')
[-Wsign-compare]

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295320 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[OpenMP] Parallel reduction on the NVPTX device.
Arpith Chacko Jacob [Thu, 16 Feb 2017 14:03:36 +0000 (14:03 +0000)]
[OpenMP] Parallel reduction on the NVPTX device.

This patch implements codegen for the reduction clause on
any parallel construct for elementary data types.  An efficient
implementation requires hierarchical reduction within a
warp and a threadblock.  It is complicated by the fact that
variables declared in the stack of a CUDA thread cannot be
shared with other threads.

The patch creates a struct to hold reduction variables and
a number of helper functions.  The OpenMP runtime on the GPU
implements reduction algorithms that uses these helper
functions to perform reductions within a team.  Variables are
shared between CUDA threads using shuffle intrinsics.

An implementation of reductions on the NVPTX device is
substantially different to that of CPUs.  However, this patch
is written so that there are minimal changes to the rest of
OpenMP codegen.

The implemented design allows the compiler and runtime to be
decoupled, i.e., the runtime does not need to know of the
reduction operation(s), the type of the reduction variable(s),
or the number of reductions.  The design also allows reuse of
host codegen, with appropriate specialization for the NVPTX
device.

While the patch does introduce a number of abstractions, the
expected use case calls for inlining of the GPU OpenMP runtime.
After inlining and optimizations in LLVM, these abstractions
are unwound and performance of OpenMP reductions is comparable
to CUDA-canonical code.

Patch by Tian Jin in collaboration with Arpith Jacob

Reviewers: ABataev
Differential Revision: https://reviews.llvm.org/D29758

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295319 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[OpenCL][Doc] Added OpenCL vendor extension description to user manual doc
Anastasia Stulova [Thu, 16 Feb 2017 12:49:29 +0000 (12:49 +0000)]
[OpenCL][Doc] Added OpenCL vendor extension description to user manual doc

Added description of a new feature that allows to specify
vendor extension in flexible way using compiler pragma instead
of modifying source code directly (committed in clang@r289979).

Review: D29829

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295313 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[clang-format] Align block comment decorations
Krasimir Georgiev [Thu, 16 Feb 2017 12:39:31 +0000 (12:39 +0000)]
[clang-format] Align block comment decorations

Summary:
This patch implements block comment decoration alignment.

source:
```
/* line 1
* line 2
*/
```

result before:
```
/* line 1
* line 2
*/
```

result after:
```
/* line 1
 * line 2
 */
```

Reviewers: djasper, bkramer, klimek

Reviewed By: klimek

Subscribers: mprobst, cfe-commits, klimek

Differential Revision: https://reviews.llvm.org/D29943

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295312 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[OpenCL] Correct ndrange_t implementation
Anastasia Stulova [Thu, 16 Feb 2017 12:27:47 +0000 (12:27 +0000)]
[OpenCL] Correct ndrange_t implementation

Removed ndrange_t as Clang builtin type and added
as a struct type in the OpenCL header.

Use type name to do the Sema checking in enqueue_kernel
and modify IR generation accordingly.

Review: D28058

Patch by Dmitry Borisenkov!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295311 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[OpenCL] Disallow blocks capture other blocks (v2.0, s6.12.5)
Anastasia Stulova [Thu, 16 Feb 2017 11:13:30 +0000 (11:13 +0000)]
[OpenCL] Disallow blocks capture other blocks (v2.0, s6.12.5)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295307 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoCache FileID when translating diagnostics in PCH files
Erik Verbruggen [Thu, 16 Feb 2017 09:49:30 +0000 (09:49 +0000)]
Cache FileID when translating diagnostics in PCH files

Modules/preambles/PCH files can contain diagnostics, which, when used,
are added to the current ASTUnit. For that to work, they are translated
to use the current FileManager's FileIDs. When the entry is not the
main file, all local source locations will be checked by a linear
search. Now this is a problem, when there are lots of diagnostics (say,
25000) and lots of local source locations (say, 440000), and end up
taking seconds when using such a preamble.

The fix is to cache the last FileID, because many subsequent diagnostics
refer to the same file. This reduces the time spent in
ASTUnit::TranslateStoredDiagnostics from seconds to a few milliseconds
for files with many slocs/diagnostics.

This fixes PR31353.
Differential Revision: https://reviews.llvm.org/D29755

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295301 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRevert r295284: Add better ODR checking for modules.
Richard Trieu [Thu, 16 Feb 2017 07:09:18 +0000 (07:09 +0000)]
Revert r295284: Add better ODR checking for modules.

Fix modules build bot.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295293 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[AVX-512] Replace 512-bit masked packss/packus builtins and replace with new unmasked...
Craig Topper [Thu, 16 Feb 2017 06:32:07 +0000 (06:32 +0000)]
[AVX-512] Replace 512-bit masked packss/packus builtins and replace with new unmasked builtins.

These new unmasked builtins will enable us to easily support optimizing these builtins in InstCombine in the backend.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295291 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoLoosen a Type check ODR checking to try to fix the build bot.
Richard Trieu [Thu, 16 Feb 2017 05:48:25 +0000 (05:48 +0000)]
Loosen a Type check ODR checking to try to fix the build bot.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295286 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAdd better ODR checking for modules.
Richard Trieu [Thu, 16 Feb 2017 04:53:40 +0000 (04:53 +0000)]
Add better ODR checking for modules.

Recommit r293585 that was reverted in r293611 with new fixes.  The previous
issue was determined to be an overly aggressive AST visitor from forward
declared objects.  The visitor will now only deeply visit certain Decl's and
only do a shallow information extraction from all other Decl's.

When objects are imported for modules, there is a chance that a name collision
will cause an ODR violation.  Previously, only a small number of such
violations were detected.  This patch provides a stronger check based on
AST nodes.

The information needed to uniquely identify an object is taken from the AST and
put into a one-dimensional byte stream.  This stream is then hashed to give
a value to represent the object, which is stored with the other object data
in the module.

When modules are loaded, and Decl's are merged, the hash values of the two
Decl's are compared.  Only Decl's with matched hash values will be merged.
Mismatch hashes will generate a module error, and if possible, point to the
first difference between the two objects.

The transform from AST to byte stream is a modified depth first algorithm.
Due to references between some AST nodes, a pure depth first algorithm could
generate loops.  For Stmt nodes, a straight depth first processing occurs.
For Type and Decl nodes, they are replaced with an index number and only on
first visit will these nodes be processed.  As an optimization, boolean
values are saved and stored together in reverse order at the end of the
byte stream to lower the ammount of data that needs to be hashed.

Compile time impact was measured at 1.5-2.0% during module building, and
negligible during builds without module building.

Differential Revision: https://reviews.llvm.org/D21675

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295284 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoRevert r295277 to fix buildbot.
Richard Smith [Thu, 16 Feb 2017 04:22:56 +0000 (04:22 +0000)]
Revert r295277 to fix buildbot.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295281 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[cxx1z-constexpr-lambda] Implement captures - thus completing implementation of const...
Faisal Vali [Thu, 16 Feb 2017 04:12:21 +0000 (04:12 +0000)]
[cxx1z-constexpr-lambda] Implement captures - thus completing implementation of constexpr lambdas.

Enable evaluation of captures within constexpr lambdas by using a strategy similar to that used in CodeGen:
  - when starting evaluation of a lambda's call operator, create a map from VarDecl's to a closure's FieldDecls
  - every time a VarDecl (or '*this) that represents a capture is encountered while evaluating the expression via the expression evaluator (specifically the LValueEvaluator) in ExprConstant.cpp - it is replaced by the corresponding FieldDecl LValue (an Lvalue-to-Rvalue conversion on this LValue representation then determines the right rvalue when needed).

Thanks to Richard Smith and Hubert Tong for their review and feedback!

https://reviews.llvm.org/D29748

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295279 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAdd missing "deduced A == A" check for function template partial ordering.
Richard Smith [Thu, 16 Feb 2017 03:49:44 +0000 (03:49 +0000)]
Add missing "deduced A == A" check for function template partial ordering.

This appears to be the only template argument deduction context where we were
missing this check. Surprisingly, other implementations also appear to miss
the check in this case; it may turn out that important code is relying on
the widespread non-conformance here, in which case we'll need to reconsider.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295277 91177308-0d34-0410-b5e6-96231b3b80d8

7 years agoAdd missing regexp quantifiers in a test.
Evgeniy Stepanov [Thu, 16 Feb 2017 01:35:23 +0000 (01:35 +0000)]
Add missing regexp quantifiers in a test.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295267 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[Sema] Add lvalue-to-rvalue cast in direct-list-initialization of enum
Vedant Kumar [Thu, 16 Feb 2017 01:20:00 +0000 (01:20 +0000)]
[Sema] Add lvalue-to-rvalue cast in direct-list-initialization of enum

After r264564, we allowed direct-list-initialization of an enum from an
integral value in C++1z mode, so long as that value can convert to the
enum's underlying type.

In this kind of initialization, we need a lvalue-to-rvalue conversion
for the initializer value if it is not a rvalue. This lets us accept the
following code:

  enum class A : unsigned {};
  A foo(unsigned x) { return A{x}; }

Differential Revision: https://reviews.llvm.org/D29723

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295266 91177308-0d34-0410-b5e6-96231b3b80d8

7 years ago[c++1z] Diagnose non-deducible template parameters in deduction guide templates,...
Richard Smith [Thu, 16 Feb 2017 00:36:47 +0000 (00:36 +0000)]
[c++1z] Diagnose non-deducible template parameters in deduction guide templates, per [temp.param]p11.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295264 91177308-0d34-0410-b5e6-96231b3b80d8