Commit Graph

815 Commits

Author SHA1 Message Date
Alexey Bataev 61d27f11f3 [OPENMP] Parsing and sema analysis for 'omp parallel sections' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212516 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-08 08:12:03 +00:00
Alexey Samsonov 36ed90908a [Sanitizer] Remove brittle cache variable and slightly simplify blacklisting code.
Now CodeGenFunction is responsible for looking at sanitizer blacklist
(in CodeGenFunction::StartFunction) and turning off instrumentation,
if necessary.

No functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212501 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-07 23:59:57 +00:00
Alexey Bataev 36046a82fc [OPENMP] Added initial support for 'omp parallel for'.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212453 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-07 13:01:15 +00:00
Nico Weber 2a5e840d9f Add an AST node for __leave statements, hook it up.
Codegen is still missing (and I won't work on that), but __leave is now
as implemented as __try and friends.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212425 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-07 00:12:30 +00:00
Logan Chien 4dfce5abc5 Remove CleanupHackLevel from CGException.
This patch removes the dead code, and refines the
getEHResumeBlock() slightly.

The CleanupHackLevel was a hack to the old exception
handling intrinsics, which have several issues with function
inliner.

Since LLVM 3.0, the new landingpad and resume instructions
are added to LLVM IR.  With the new exception handling
mechanism, most of the issues are fixed now.  We should
always use these instructions to implement the exception
handling code nowadays, and we don't need the hack any more.

Besides, the `CleanupHackLevel` is a compile-time constant,
thus other cases have been considered as dead code for a while.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212097 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-01 11:47:10 +00:00
Alexey Bataev 8b7ce32597 Using of variable length arrays in captured statements and OpenMP constructs.
Differential Revision: http://reviews.llvm.org/D4067


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212010 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-30 02:55:54 +00:00
Craig Topper 489b66f705 Remove llvm:: from uses of ArrayRef.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211987 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-28 23:22:23 +00:00
Alexey Bataev f0a57f4453 [OPENMP] Initial parsing and sema analysis for 'single' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211774 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-26 12:05:45 +00:00
Alexey Bataev 0eca5e96c1 [OPENMP] Initial parsing and sema analysis for 'section' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211767 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-26 08:21:58 +00:00
Alexey Bataev 71f61a8866 [OPENMP] Initial support for 'sections' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211685 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-25 11:44:49 +00:00
Matt Arsenault 240288d24f Add R600 builtin codegen.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211631 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-24 20:45:01 +00:00
Tim Northover b6cd35729c ARM: remove dead CodeGen functions.
These two are no longer being used by NEON codegen.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211586 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-24 12:07:44 +00:00
Alexey Bataev b23263a1ac [OPENMP] Initial support for '#pragma omp for' (fixed incompatibility with MSVC).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211140 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-18 04:14:57 +00:00
Rafael Espindola 7d2009b4cd Revert "[OPENMP] Initial support for '#pragma omp for'."
This reverts commit r211096. Looks like it broke the msvc build:

SemaOpenMP.cpp(140) : error C4519: default template arguments are only allowed on a class template

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211113 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-17 17:20:53 +00:00
Alexey Bataev 46c5afbd70 [OPENMP] Initial support for '#pragma omp for'.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211096 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-17 11:49:22 +00:00
Aaron Ballman 61aa205494 Adding a new #pragma for the vectorize and interleave optimization hints.
Patch thanks to Tyler Nowicki!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@210330 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-06 12:40:24 +00:00
Richard Smith fb9e1524b7 Add __builtin_operator_new and __builtin_operator_delete, which act like calls
to the normal non-placement ::operator new and ::operator delete, but allow
optimizations like new-expressions and delete-expressions do.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@210137 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-03 23:27:44 +00:00
Richard Smith 95563a5ba8 When emitting a multidimensional array new, emit the initializers for the
trailing elements as a single loop, rather than sometimes emitting a nest of
several loops. This fixes a bug where CodeGen would sometimes try to emit an
expression with the wrong type for the element being initialized. Plus various
other minor cleanups to the IR produced for array new initialization.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@210079 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-03 06:58:52 +00:00
Tim Northover 8d681a2f93 AArch64/ARM64: rename ARM64 components to AArch64
This keeps Clang consistent with backend naming conventions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209579 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-24 12:52:07 +00:00
Tim Northover 646ddb51d2 AArch64/ARM64: update Clang after AArch64 removal.
A few (mostly CodeGen) parts of Clang were tightly coupled to the
AArch64 backend. Now that it's gone, they will not even compile.

I've also deduplicated RUN lines in many of the AArch64 tests. This
might improve "make check-all" time noticably: some of those NEON
tests were monsters.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209578 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-24 12:51:25 +00:00
Alexander Musman b725d270db This patch adds a helper class (CGLoopInfo) for marking memory instructions with llvm.mem.parallel_loop_access metadata.
It also adds a simple initial version of codegen for pragma omp simd (it will change in the future to support all the clauses).

Differential revision: http://reviews.llvm.org/D3644



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209411 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-22 08:54:05 +00:00
Craig Topper d1008e5c93 [C++11] Use 'nullptr'. CodeGen edition.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209272 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-21 05:09:00 +00:00
Renato Golin 5df2310080 Non-allocatable Global Named Register
This patch implements global named registers in Clang, lowering to the just
created intrinsics in LLVM (@llvm.read/write_register). A new type of LValue
had to be created (Register), which just adds support to carry the metadata
node containing the name of the register. Two new methods to emit loads and
stores interoperate with another to emit the named metadata node.

No guarantees are being made and only non-allocatable global variable named
registers are being supported. Local named register support is unchanged.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209149 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-19 18:15:42 +00:00
Rafael Espindola 258ff3162c Don't indent in namespaces.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208384 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-09 00:57:59 +00:00
Alexey Bataev bfa38388de [OPENMP] Initial codegen for '#pragma omp parallel'
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208077 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-06 10:08:46 +00:00
Justin Bogner c087dce522 CodeGen: Handle CapturedStmt in instrumentation based profiling
CapturedStmt was being ignored by instrumentation based profiling, and
its counters attributed to the containing function. Instead, we need
to treat this as a top level entity, like we do with blocks.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@206231 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-15 00:50:54 +00:00
Adrian Prantl 94d470b741 Cleanup: Add default arguments to CodeGenFunction::StartFunction.
Thanks dblaikie for the suggestion!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@206012 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-11 01:13:04 +00:00
Adrian Prantl 9a7c2b4dfa Debug info: (Bugfix) Make sure artificial functions like _GLOBAL__I_a
are not associated with any source lines.

Previously, if the Location of a Decl was empty, EmitFunctionStart would
just keep using CurLoc, which would sometimes be correct (e.g., thunks)
but in other cases would just point to a hilariously random location.

This patch fixes this by completely eliminating all uses of CurLoc from
EmitFunctionStart and rather have clients explicitly pass in a
SourceLocation for the function header and the function body.

rdar://problem/14985269

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205999 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-10 23:21:53 +00:00
Tim Northover 7e0e8ef787 ARM64: initial clang support commit.
This adds Clang support for the ARM64 backend. There are definitely
still some rough edges, so please bring up any issues you see with
this patch.

As with the LLVM commit though, we think it'll be more useful for
merging with AArch64 from within the tree.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205100 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-29 15:09:45 +00:00
Eli Bendersky 6e06873ac6 Proper handling of static local variables with address space qualifiers.
Similar to the implementation for globals in r157167.

Patch by Jingyue Wu.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204677 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-24 22:05:38 +00:00
Chandler Carruth bcd563ef31 [Modules] Update to reflect ValueHandle moving to the IR library in LLVM
r202821.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202822 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-04 11:18:19 +00:00
Tim Northover e4931de986 ARM & AArch64: use table for EmitCommonNeonBuiltinExpr
This extends the intrinsic lookup table format slightly, and adds
entries for use the shared ARM/AArch64 definitions. The benefit is
currently smaller than for the SISD intrinsics (there's more custom
code implementing this set), but a few lines are saved and there's
scope for future expansion.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201848 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-21 11:57:24 +00:00
Tim Northover a67b8f1151 AArch64: refactor table-driven NEON lookup.
This extracts the table-driven intrinsic lookup phase into a separate
function, to be used by EmitCommonNeonBuiltinExpr soon.

It also simplifies the logic used in that lookup, since VectorCastArgN
and ScalarArgN were actually identical.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201847 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-21 11:57:20 +00:00
Bob Wilson ac14efa58a Change PGO instrumentation to compute counts in a separate AST traversal.
Previously, we made one traversal of the AST prior to codegen to assign
counters to the ASTs and then propagated the count values during codegen. This
patch now adds a separate AST traversal prior to codegen for the
-fprofile-instr-use option to propagate the count values. The counts are then
saved in a map from which they can be retrieved during codegen.

This new approach has several advantages:

1. It gets rid of a lot of extra PGO-related code that had previously been
added to codegen.

2. It fixes a serious bug. My original implementation (which was mailed to the
list but never committed) used 3 counters for every loop. Justin improved it to
move 2 of those counters into the less-frequently executed breaks and continues,
but that turned out to produce wrong count values in some cases. The solution
requires visiting a loop body before the condition so that the count for the
condition properly includes the break and continue counts. Changing codegen to
visit a loop body first would be a fairly invasive change, but with a separate
AST traversal, it is easy to control the order of traversal. I've added a
testcase (provided by Justin) to make sure this works correctly.

3. It improves the instrumentation overhead, reducing the number of counters for
a loop from 3 to 1. We no longer need dedicated counters for breaks and
continues, since we can just use the propagated count values when visiting
breaks and continues.

To make this work, I needed to make a change to the way we count case
statements, going back to my original approach of not including the fall-through
in the counter values. This was necessary because there isn't always an AST node
that can be used to record the fall-through count. Now case statements are
handled the same as default statements, with the fall-through paths branching
over the counter increments.  While I was at it, I also went back to using this
approach for do-loops -- omitting the fall-through count into the loop body
simplifies some of the calculations and make them behave the same as other
loops. Whenever we start using this instrumentation for coverage, we'll need
to add the fall-through counts into the counter values.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201528 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-17 19:21:09 +00:00
Fariborz Jahanian 45ac397b41 [IRGen]. Fixes a crash in using Objective-C array
properties by fixing shouldBindAsLValue to accept arrays
(like record types) because we always manipulate
them in memory. Patch suggested by John MaCall.
// rdar://15610943


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201428 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-14 19:37:25 +00:00
Reid Kleckner 279292b8f1 [ms-cxxabi] Use inalloca on win32 when passing non-trivial C++ objects
When a non-trivial parameter is present, clang now gathers up all the
parameters that lack inreg and puts them into a packed struct.  MSVC
always aligns each parameter to 4 bytes and no more, so this is a pretty
simple struct to lay out.

On win64, non-trivial records are passed indirectly.  Prior to this
change, clang was incorrectly using byval on win64.

I'm able to self-host a working clang with this change and additional
LLVM patches.

Reviewers: rsmith

Differential Revision: http://llvm-reviews.chandlerc.com/D2636

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@200597 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-01 00:04:45 +00:00
Tim Northover 4ee3b82c1b ARM & AArch64: move shared vld/vst intrinsics to common implementation.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@200526 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-31 10:46:45 +00:00
Tim Northover 4808677f05 ARM & AArch64: extend shared NEON implementation to first block.
This extends the refactoring to the whole of the first block of
trivial correspondences (as a fairly arbitrary boundary).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@200472 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-30 14:48:01 +00:00
Tim Northover a8289924ed ARM & AArch64: fully share NEON implementation of permutation intrinsics
As a starting point, this moves the CodeGen for NEON permutation
instructions (vtrn, vzip, vuzp) into a new shared function.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@200471 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-30 14:47:57 +00:00
Justin Bogner 5f83225b49 Revert "CodeGen: Simplify CodeGenFunction::EmitCaseStmt"
I misunderstood the discussion on this. The complexity here is
justified by the malloc overhead it saves.

This reverts commit r199302.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199700 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-21 00:35:11 +00:00
Alp Toker c50bf3d128 Rename FunctionProtoType accessors from 'arguments' to 'parameters'
Fix a perennial source of confusion in the clang type system: Declarations and
function prototypes have parameters to which arguments are supplied, so calling
these 'arguments' was a stretch even in C mode, let alone C++ where default
arguments, templates and overloading make the distinction important to get
right.

Readability win across the board, especially in the casting, ADL and
overloading implementations which make a lot more sense at a glance now.

Will keep an eye on the builders and update dependent projects shortly.

No functional change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199686 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-20 20:26:09 +00:00
Justin Bogner 41afb42c24 CodeGen: Simplify CodeGenFunction::EmitCaseStmt
Way back in r129652 we tried to avoid emitting an empty block at -O0
for switch cases that did nothing but break. This led to a poor
debugging experience as reported in PR9796, so we disabled the
optimization for -O0 but left it in for higher optimization levels in
r154420.

Since the whole point of this was to improve -O0, it's silly to keep
the complexity at all.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199302 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-15 07:30:30 +00:00
Adrian Prantl da45f59bdf Revert "Debug info: Ensure that the last stop point in a function is still within"
This reverts commit r198461.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198714 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-07 22:05:52 +00:00
Adrian Prantl b9b5b2ce07 Revert "Debug info: Implement a cleaner version of r198461. For symmetry with"
This reverts commit 198699 so we can get a cleaner patch.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198713 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-07 22:05:45 +00:00
Adrian Prantl 292f579c87 Debug info: Implement a cleaner version of r198461. For symmetry with
C and C++ don't emit an extra lexical scope for the compound statement
that is the body of an Objective-C method.

rdar://problem/15010825

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198699 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-07 19:24:24 +00:00
Chandler Carruth 4b9be6e25f Sort all the #include lines with LLVM's utils/sort_includes.py which
encodes the canonical rules for LLVM's style. I noticed this had drifted
quite a bit when cleaning up LLVM, so wanted to clean up Clang as well.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198686 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-07 11:51:46 +00:00
Justin Bogner e0e019f6a2 CodeGen: Initial instrumentation based PGO implementation
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198640 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-06 22:27:43 +00:00
Adrian Prantl d22d777d6d Debug info: Ensure that the last stop point in a function is still within
the lexical block formed by the compound statement that is the function
body.

rdar://problem/15010825

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198461 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-03 23:34:30 +00:00
Reid Kleckner 395336de59 [ms-cxxabi] The 'most derived' ctor parameter usually comes last
Unlike Itanium's VTTs, the 'most derived' boolean or bitfield is the
last parameter for non-variadic constructors, rather than the second.
For variadic constructors, the 'most derived' parameter comes after the
'this' parameter.  This affects constructor calls and constructor decls
in a variety of places.

Reviewers: timurrrr

Differential Revision: http://llvm-reviews.chandlerc.com/D2405

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197518 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-17 19:46:40 +00:00
Reid Kleckner d4abf6549e [ms-cxxabi] Construct and destroy call arguments in the correct order
Summary:
MSVC destroys arguments in the callee from left to right.  Because C++
objects have to be destroyed in the reverse order of construction, Clang
has to construct arguments from right to left and destroy arguments from
left to right.

This patch fixes the ordering by reversing the order of evaluation of
all call arguments under the MS C++ ABI.

Fixes PR18035.

Reviewers: rsmith

Differential Revision: http://llvm-reviews.chandlerc.com/D2275

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196402 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-04 19:23:12 +00:00