aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenFunction.h
AgeCommit message (Collapse)AuthorFilesLines
2014-07-25MS ABI: Don't push destructor cleanups for aggregate parameters in thunksReid Kleckner1-0/+4
The target method of the thunk will perform the cleanup. This can't be tested in 32-bit x86 yet because passing something by value would create an inalloca, and we refuse to generate broken code for that. llvm-svn: 213976
2014-07-22[OPENMP] Initial parsing and sema analysis for 'atomic' directive.Alexey Bataev1-0/+1
llvm-svn: 213639
2014-07-22[OPENMP] Initial parsing and sema analysis for 'ordered' directive.Alexey Bataev1-0/+1
llvm-svn: 213616
2014-07-21Revert "Emit lifetime.start / lifetime.end markers for unnamed temporary ↵Arnaud A. de Grandmaison1-37/+0
objects." This commit did break the sanitizer-x86 bot. Revert it while investigating. llvm-svn: 213579
2014-07-21Emit lifetime.start / lifetime.end markers for unnamed temporary objects.Arnaud A. de Grandmaison1-0/+37
This will give more information to the optimizers so that they can reuse stack slots. llvm-svn: 213576
2014-07-21[OPENMP] Initial parsing and sema analysis for 'flush' directive.Alexey Bataev1-0/+1
llvm-svn: 213512
2014-07-21[OPENMP] Parsing/Sema of the OpenMP directive 'critical'.Alexander Musman1-0/+1
llvm-svn: 213510
2014-07-18Revert "Emit lifetime.start / lifetime.end markers for unnamed temporary ↵Arnaud A. de Grandmaison1-20/+0
objects." This reverts commit dbf785a6432f78a8ec229665876647c4cc610d3d, while I qm investigating a buildbot failure. llvm-svn: 213380
2014-07-18Emit lifetime.start / lifetime.end markers for unnamed temporary objects.Arnaud A. de Grandmaison1-0/+20
This will give more information to the optimizers so that they can reuse stack slots. llvm-svn: 213379
2014-07-18[OPENMP] Initial parsing and sema analysis for 'taskwait' directive.Alexey Bataev1-0/+1
llvm-svn: 213363
2014-07-18[OPENMP] Initial parsing and sema analysis for 'barrier' directive.Alexey Bataev1-0/+1
llvm-svn: 213360
2014-07-18[OPENMP] Initial parsing and sema analysis of 'taskyield' directive.Alexey Bataev1-0/+1
llvm-svn: 213355
2014-07-17[UBSan] Add !nosanitize metadata to the code generated by UBSan.Alexey Samsonov1-0/+11
This is used to mark the instructions emitted by Clang to implement variety of UBSan checks. Generally, we don't want to instrument these instructions with another sanitizers (like ASan). Reviewed in http://reviews.llvm.org/D4544 llvm-svn: 213291
2014-07-17[OPENMP] Parsing/Sema analysis of directive 'master'Alexander Musman1-0/+1
llvm-svn: 213237
2014-07-11[OPENMP] Parsing and sema analysis for 'omp task' directive.Alexey Bataev1-0/+1
llvm-svn: 212804
2014-07-10Fix the dtor location issues in PR20038 harder.David Blaikie1-0/+13
Originally committed in r211722, this fixed one case of dtor calls being emitted without locations (this causes problems for debug info if the call is then inlined), this caught only some of the cases. Instead of trying to re-enable the location before the cleanup, simply re-enable the location immediately after the unconditional branches in question using a scoped device to ensure the no-location state doesn't leak out arbitrarily. llvm-svn: 212761
2014-07-08[OPENMP] Parsing and sema analysis for 'omp parallel sections' directive.Alexey Bataev1-0/+1
llvm-svn: 212516
2014-07-07[Sanitizer] Remove brittle cache variable and slightly simplify blacklisting ↵Alexey Samsonov1-4/+4
code. Now CodeGenFunction is responsible for looking at sanitizer blacklist (in CodeGenFunction::StartFunction) and turning off instrumentation, if necessary. No functionality change. llvm-svn: 212501
2014-07-07[OPENMP] Added initial support for 'omp parallel for'.Alexey Bataev1-0/+1
llvm-svn: 212453
2014-07-07Add an AST node for __leave statements, hook it up.Nico Weber1-0/+1
Codegen is still missing (and I won't work on that), but __leave is now as implemented as __try and friends. llvm-svn: 212425
2014-07-01Remove CleanupHackLevel from CGException.Logan Chien1-2/+0
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. llvm-svn: 212097
2014-06-30Using of variable length arrays in captured statements and OpenMP constructs.Alexey Bataev1-3/+1
Differential Revision: http://reviews.llvm.org/D4067 llvm-svn: 212010
2014-06-28Remove llvm:: from uses of ArrayRef.Craig Topper1-1/+1
llvm-svn: 211987
2014-06-26[OPENMP] Initial parsing and sema analysis for 'single' directive.Alexey Bataev1-0/+1
llvm-svn: 211774
2014-06-26[OPENMP] Initial parsing and sema analysis for 'section' directive.Alexey Bataev1-0/+1
llvm-svn: 211767
2014-06-25[OPENMP] Initial support for 'sections' directive.Alexey Bataev1-0/+1
llvm-svn: 211685
2014-06-24Add R600 builtin codegen.Matt Arsenault1-0/+1
llvm-svn: 211631
2014-06-24ARM: remove dead CodeGen functions.Tim Northover1-3/+0
These two are no longer being used by NEON codegen. llvm-svn: 211586
2014-06-18[OPENMP] Initial support for '#pragma omp for' (fixed incompatibility with ↵Alexey Bataev1-0/+1
MSVC). llvm-svn: 211140
2014-06-17Revert "[OPENMP] Initial support for '#pragma omp for'."Rafael Espindola1-1/+0
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 llvm-svn: 211113
2014-06-17[OPENMP] Initial support for '#pragma omp for'.Alexey Bataev1-0/+1
llvm-svn: 211096
2014-06-06Adding a new #pragma for the vectorize and interleave optimization hints.Aaron Ballman1-4/+10
Patch thanks to Tyler Nowicki! llvm-svn: 210330
2014-06-03Add __builtin_operator_new and __builtin_operator_delete, which act like callsRichard Smith1-1/+5
to the normal non-placement ::operator new and ::operator delete, but allow optimizations like new-expressions and delete-expressions do. llvm-svn: 210137
2014-06-03When emitting a multidimensional array new, emit the initializers for theRichard Smith1-1/+2
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. llvm-svn: 210079
2014-05-24AArch64/ARM64: rename ARM64 components to AArch64Tim Northover1-2/+2
This keeps Clang consistent with backend naming conventions. llvm-svn: 209579
2014-05-24AArch64/ARM64: update Clang after AArch64 removal.Tim Northover1-2/+0
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. llvm-svn: 209578
2014-05-22This patch adds a helper class (CGLoopInfo) for marking memory instructions ↵Alexander Musman1-0/+9
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 llvm-svn: 209411
2014-05-21[C++11] Use 'nullptr'. CodeGen edition.Craig Topper1-33/+37
llvm-svn: 209272
2014-05-19Non-allocatable Global Named RegisterRenato Golin1-0/+3
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. llvm-svn: 209149
2014-05-09Don't indent in namespaces.Rafael Espindola1-40/+40
llvm-svn: 208384
2014-05-06[OPENMP] Initial codegen for '#pragma omp parallel'Alexey Bataev1-0/+3
llvm-svn: 208077
2014-04-15CodeGen: Handle CapturedStmt in instrumentation based profilingJustin Bogner1-0/+2
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. llvm-svn: 206231
2014-04-11Cleanup: Add default arguments to CodeGenFunction::StartFunction.Adrian Prantl1-2/+2
Thanks dblaikie for the suggestion! llvm-svn: 206012
2014-04-10Debug info: (Bugfix) Make sure artificial functions like _GLOBAL__I_aAdrian Prantl1-0/+4
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 llvm-svn: 205999
2014-03-29ARM64: initial clang support commit.Tim Northover1-0/+14
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. llvm-svn: 205100
2014-03-24Proper handling of static local variables with address space qualifiers.Eli Bendersky1-3/+3
Similar to the implementation for globals in r157167. Patch by Jingyue Wu. llvm-svn: 204677
2014-03-04[Modules] Update to reflect ValueHandle moving to the IR library in LLVMChandler Carruth1-1/+1
r202821. llvm-svn: 202822
2014-02-21ARM & AArch64: use table for EmitCommonNeonBuiltinExprTim Northover1-3/+10
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. llvm-svn: 201848
2014-02-21AArch64: refactor table-driven NEON lookup.Tim Northover1-0/+2
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. llvm-svn: 201847
2014-02-17Change PGO instrumentation to compute counts in a separate AST traversal.Bob Wilson1-8/+4
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. llvm-svn: 201528