Commit Graph

6321 Commits

Author SHA1 Message Date
Sanjoy Das 151493a00f [LangRef] Add a clarifying example for undef
llvm-svn: 281570
2016-09-15 01:56:58 +00:00
Sanjoy Das 23f06e53d8 [Stackmap] Added callsite counts to emitted function information.
Summary:
It was previously not possible for tools to use solely the stackmap
information emitted to reconstruct the return addresses of callsites in
the map, which is necessary to use the information to walk a stack. This
patch adds per-function callsite counts when emitting the stackmap
section in order to resolve the problem. Note that this slightly alters
the stackmap format, so external tools parsing these maps will need to
be updated.

**Problem Details:**
Records only store their offset from the beginning of the function they
belong to. While these records and the functions are output in program
order, it is not possible to determine where the end of one function's
records are without the callsite count when processing the records to
compute return addresses.

Patch by Kavon Farvardin!

Reviewers: atrick, ributzka, sanjoy

Subscribers: nemanjai

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

llvm-svn: 281532
2016-09-14 20:22:03 +00:00
Davide Italiano 11cfa45bec [Docs] Fix a broken link in the Kaleidoscope tutorial.
Patch by:	Alfred Perlstein <alfred@FreeBSD.org>

llvm-svn: 281297
2016-09-13 06:31:37 +00:00
Arnold Schwaighofer 6c57f4f56d It should also be legal to pass a swifterror parameter to a call as a swifterror
argument.

rdar://28233388

llvm-svn: 281147
2016-09-10 19:42:53 +00:00
Kostya Serebryany 5c04bd250e [libFuzzer] remove use_traces=1 since use_value_profile seems to be strictly better
llvm-svn: 281007
2016-09-09 01:17:03 +00:00
Kostya Serebryany dec394935f [libFuzzer] add missing docs
llvm-svn: 280996
2016-09-08 22:21:13 +00:00
Reid Kleckner 1361c0c6ef Remove restriction that 'sret' must be on the first parameter
On Windows, it is often applied to the second parameter, and the x86
backend is prepared to deal with sret appearing on any parameter.

Other backends assume it only appears on parameter zero, but those are
target-specific requirements, and not an IR-level rule.

llvm-svn: 280951
2016-09-08 15:45:27 +00:00
Justin Lebar 66feaf9c3c [CUDA] Rework "optimizations" and "publication" section in CompileCudaWithLLVM.rst.
llvm-svn: 280869
2016-09-07 21:46:53 +00:00
Justin Lebar b5cb9dfbf1 [CUDA] Clarify that -l and -L only need to be passed when linking, in CompileCudaWithLLVM.rst.
llvm-svn: 280868
2016-09-07 21:46:49 +00:00
Justin Lebar 1c10257cb2 [CUDA] Further reformat "invoking clang" section of CompileCudaWithLLVM.rst.
llvm-svn: 280867
2016-09-07 21:46:21 +00:00
Justin Lebar 62d5b01189 [CUDA] Fix typo in link in CompileCudaWithLLVM.
llvm-svn: 280859
2016-09-07 20:42:24 +00:00
Justin Lebar 6f04ed9ed5 [CUDA] Move AXPY example into gist.
No need to have a long inline code snippet in this doc.

Also move "flags that control numerical code" underneath the "invoking
clang" section, and reformat things a bit.

llvm-svn: 280857
2016-09-07 20:37:41 +00:00
Justin Lebar 7029cb5b8a [CUDA] Simplify build/install instructions in CompileCudaWithLLVM.rst.
llvm-svn: 280850
2016-09-07 20:09:53 +00:00
Justin Lebar 5b4e0222d7 [CUDA] Call it "CUDA", not "CUDA C/C++" in our docs.
CUDA is an extension to C++ -- there is no such thing as "CUDA C".  But
also, the language is much more commonly called "CUDA" than "CUDA C++".

llvm-svn: 280849
2016-09-07 20:09:50 +00:00
Justin Lebar 84473cdd41 [CUDA] Expand upon --cuda-gpu-arch flag in CompileCudaWithLLVM doc.
llvm-svn: 280848
2016-09-07 20:09:46 +00:00
Andrey Bokhanko 7454145785 Fixed a typo (LLVM/Support/CFG.h -> LLVM/IR/CFG.h)
llvm-svn: 280481
2016-09-02 11:13:35 +00:00
Lang Hames c5d41d4ada [Docs] Fix another typo in the Error/Expected docs.
llvm-svn: 280461
2016-09-02 03:50:50 +00:00
Lang Hames 42f5dd8066 [Docs] Fix a couple of typos in the Error/Expected docs.
llvm-svn: 280460
2016-09-02 03:46:08 +00:00
Chandler Carruth 67473526cb Make the coding standards a bit more clear that we prefer the fancy new
auto-brief format for doxygen comments. Most notable is switching to
that in the example doxygen comment. I've also tweaked the wording but
am happy to tweak it further if others have suggestions here.

Mostly doing this to capture something I and others have been writing
consistently and repeatedly in code reviews.

llvm-svn: 280419
2016-09-01 22:18:25 +00:00
Chris Bieneman be765196fa [CMake] Revive LLVM_*_DIRS variables
This is a partial revert of r280013. Brad King pointed out these variable names are matching CMake conventions, so we should preserve them.

I've also added a direct mapping of the LLVM_*_DIR variables which we need to make projects support building in and out of tree.

llvm-svn: 280380
2016-09-01 16:43:39 +00:00
Geoff Berry 4bda57622b [LangRef] Clarify !invariant.load semantics.
Based on discussion on llvm-dev.

llvm-svn: 280262
2016-08-31 17:39:21 +00:00
Aaron Ballman 15b978a2c8 Changing a code block to text because Sphinx does not like it on the builder (http://lab.llvm.org:8011/builders/llvm-sphinx-docs/builds/12517/steps/docs-llvm-html/logs/stdio)
llvm-svn: 280247
2016-08-31 14:37:20 +00:00
Aaron Ballman 655e5a41e1 Changing a code block to text because Sphinx does not like it on the builder (http://lab.llvm.org:8011/builders/llvm-sphinx-docs/builds/12516/steps/docs-llvm-html/logs/stdio)
llvm-svn: 280238
2016-08-31 13:29:23 +00:00
Peter Zotov 0025723189 docs: mention that clobbering output regs in inline asm is illegal.
I've found this out the hard way; LLVM will not normally catch this
error (unless -verify-machineinstrs is passed), and under certain
very specific circumstances (such as register scavenger running
under pressure) this would result in an opaque crash in codegen.

llvm-svn: 280071
2016-08-30 10:48:31 +00:00
Chris Bieneman 5349efc6b7 [CMake] Make LLVMConfig.cmake variable names match in-tree names
With the runtimes build we're trying to use LLVMConfig.cmake as a way of providing LLVM_* variables that are needed to behave as if the project is building in tree. To make this work we need to rename two variables by dropping the "S" from the end. This makes the variables match the in-tree names.

This renames:
LLVM_INCLUDE_DIRS -> LLVM_INCLUDE_DIR
LLVM_LIBRARY_DIRS -> LLVM_LIBRARY_DIR

The versions ending in S are not used in-tree anywhere. This also cleans up LLVM_LIBRARY_DIR being set to the same value with and without the "S".

llvm-svn: 280013
2016-08-29 21:26:32 +00:00
Gor Nishanov dce9b02677 [Coroutines] Part 9: Add cleanup subfunction.
Summary:
[Coroutines] Part 9: Add cleanup subfunction.

This patch completes coroutine heap allocation elision. Now, the heap elision example from docs\Coroutines.rst compiles and produces expected result (see test/Transform/Coroutines/ex3.ll)

Intrinsic Changes:
* coro.free gets a token parameter tying it to coro.id to allow reliably discovering all coro.frees associated with a particular coroutine.
* coro.id gets an extra parameter that points back to a coroutine function. This allows to check whether a coro.id describes the enclosing function or it belongs to a different function that was later inlined.

CoroSplit now creates three subfunctions:
# f$resume - resume logic
# f$destroy - cleanup logic, followed by a deallocation code
# f$cleanup - just the cleanup code

CoroElide pass during devirtualization replaces coro.destroy with either f$destroy or f$cleanup depending whether heap elision is performed or not.

Other fixes, improvements:
* Fixed buglet in Shape::buildFrame that was not creating coro.save properly if coroutine has more than one suspend point.

* Switched to using variable width suspend index field (no longer limited to 32 bit index field can be as little as i1 or as large as i<whatever-size_t-is>)

Reviewers: majnemer

Subscribers: llvm-commits, mehdi_amini

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

llvm-svn: 279971
2016-08-29 14:34:12 +00:00
Sylvestre Ledru 843b7515ae Fix some typos in the doc
llvm-svn: 279943
2016-08-28 20:29:18 +00:00
Andrew Kaylor 3aeda4fcfb Adding document describing the use of the -opt-bisect-limit option.
llvm-svn: 279881
2016-08-26 23:11:48 +00:00
Kostya Serebryany 0f0fa4faf2 [libFizzer] rename -print_new_cov_pcs=1 into -print_pcs=1 and make it more useful: print PCs only after the initial corpus has been read and symbolize them
llvm-svn: 279787
2016-08-25 22:35:08 +00:00
Kostya Serebryany aafa0b0529 [libFuzzer] fix link in docs
llvm-svn: 279589
2016-08-23 23:43:08 +00:00
Kostya Serebryany b5dad1ee99 [libFuzzer] docs on value profile
llvm-svn: 279587
2016-08-23 23:36:21 +00:00
Zachary Turner 068d1f826c Update coding standards for include style.
Reviewed By: lattner
Differential Revision: https://reviews.llvm.org/D23591

llvm-svn: 279560
2016-08-23 20:07:32 +00:00
Peter Zotov b2a12759b2 [CMake] [OCaml] Add -DLLVM_ENABLE_OCAMLDOC switch
Patch by Michael Gorny.

llvm-svn: 279544
2016-08-23 18:07:16 +00:00
Jacques Pienaar bfa5ea0818 Fix link quotes on AArch64's CompilerWriterInfo section.
Reviewers: t.p.northover

Subscribers: t.p.northover, aemerson, rengolin

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

llvm-svn: 279169
2016-08-18 22:10:06 +00:00
Jacques Pienaar 2b25799bcc [lanai] Add ISA document to CompilerWritersInfo
Summary: Add Lanai ISA document to CompilerWritersInfo.

Reviewers: eliben

Subscribers: aemerson, llvm-commits

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

llvm-svn: 279149
2016-08-18 21:25:17 +00:00
George Burgess IV c7c81fa197 [Docs] More MemorySSA doc updates!
Thanks again to Michael Kuperstein for the feedback.

llvm-svn: 279032
2016-08-18 02:56:05 +00:00
George Burgess IV 30788fb7b0 [Docs] Update MemorySSA doc to address more feedback.
Primarily, this clarifies wording in a few places, and adds "\ "s to
make the formatting of things like "``Foo`` s" better.

Thanks to Michael Kuperstein for the comments.

llvm-svn: 279007
2016-08-17 23:21:56 +00:00
Chris Lattner a5e039c4c5 wordsmith the "new targets" section a bit.
llvm-svn: 278994
2016-08-17 22:17:03 +00:00
Renato Golin 891a49c487 [docs] Adding "new target" rules to dev policy
Making explicit our current policy to accept new targets as experimental and
later official. Every new target should follow these rules to be added,
and kept relevant in the upstream tree.

llvm-svn: 278971
2016-08-17 20:38:09 +00:00
Andrey Bokhanko 7d7bacbafa Clarify the statement on using #if 0 ... #endif in CodingStandards.
The statement on using #if 0 ... #endif is not very clear (for people like me
:-)). This patch clarifies it a bit to avoid confusion.

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

llvm-svn: 278932
2016-08-17 14:53:18 +00:00
George Burgess IV 67c5885d09 [Docs] Fix post-review comments on MemorySSA's docs.
Thanks to Sean Silva for bringing these up. :)

llvm-svn: 278885
2016-08-17 01:50:54 +00:00
George Burgess IV 3bbeb735ed [Docs] Add initial MemorySSA documentation.
Patch partially by Danny.

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

llvm-svn: 278875
2016-08-17 00:17:29 +00:00
Mehdi Amini 8c629ecf3a Revert "Revert "Invariant start/end intrinsics overloaded for address space""
This reverts commit 32fc6488e48eafc0ca1bac1bd9cbf0008224d530.

llvm-svn: 278609
2016-08-13 23:31:24 +00:00
Mehdi Amini 164ac651da Revert "Invariant start/end intrinsics overloaded for address space"
This reverts commit r276447.

llvm-svn: 278608
2016-08-13 23:27:32 +00:00
Kostya Serebryany f5bb42c081 [libFuzzer] mention one more trophie in LLVM
llvm-svn: 278582
2016-08-13 00:12:32 +00:00
Kostya Serebryany 5d70d82f60 [libFuzzer] fix typo in docs
llvm-svn: 278563
2016-08-12 20:42:24 +00:00
Gor Nishanov 0f303accde [Coroutines]: Part6b: Add coro.id intrinsic.
Summary:
1. Make coroutine representation more robust against optimization that may duplicate instruction by introducing coro.id intrinsics that returns a token that will get fed into coro.alloc and coro.begin. Due to coro.id returning a token, it won't get duplicated and can be used as reliable indicator of coroutine identify when a particular coroutine call gets inlined.
2. Move last three arguments of coro.begin into coro.id as they will be shared if coro.begin will get duplicated.
3. doc + test + code updated to support the new intrinsic.

Reviewers: mehdi_amini, majnemer

Subscribers: mehdi_amini, llvm-commits

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

llvm-svn: 278481
2016-08-12 05:45:49 +00:00
Sanjoy Das 63752e6372 [LangRef] Fix formatting (no semantic change)
llvm-svn: 278294
2016-08-10 21:48:24 +00:00
Gor Nishanov b2a9c02521 [Coroutines] Part 6: Elide dynamic allocation of a coroutine frame when possible
Summary:
A particular coroutine usage pattern, where a coroutine is created, manipulated and
destroyed by the same calling function, is common for coroutines implementing
RAII idiom and is suitable for allocation elision optimization which avoid
dynamic allocation by storing the coroutine frame as a static `alloca` in its
caller.

coro.free and coro.alloc intrinsics are used to indicate which code needs to be suppressed
when dynamic allocation elision happens:
```
entry:
  %elide = call i8* @llvm.coro.alloc()
  %need.dyn.alloc = icmp ne i8* %elide, null
  br i1 %need.dyn.alloc, label %coro.begin, label %dyn.alloc
dyn.alloc:
  %alloc = call i8* @CustomAlloc(i32 4)
  br label %coro.begin
coro.begin:
  %phi = phi i8* [ %elide, %entry ], [ %alloc, %dyn.alloc ]
  %hdl = call i8* @llvm.coro.begin(i8* %phi, i32 0, i8* null,
                          i8* bitcast ([2 x void (%f.frame*)*]* @f.resumers to i8*))
```
and
```
  %mem = call i8* @llvm.coro.free(i8* %hdl)
  %need.dyn.free = icmp ne i8* %mem, null
  br i1 %need.dyn.free, label %dyn.free, label %if.end
dyn.free:
  call void @CustomFree(i8* %mem)
  br label %if.end
if.end:
  ...
```

If heap allocation elision is performed, we replace coro.alloc with a static alloca on the caller frame and coro.free with null constant.

Also, we need to make sure that if there are any tail calls referencing the coroutine frame, we need to remote tail call attribute, since now coroutine frame lives on the stack.

Documentation and overview is here: http://llvm.org/docs/Coroutines.html.

Upstreaming sequence (rough plan)
1.Add documentation. (https://reviews.llvm.org/D22603)
2.Add coroutine intrinsics. (https://reviews.llvm.org/D22659)
3.Add empty coroutine passes. (https://reviews.llvm.org/D22847)
4.Add coroutine devirtualization + tests.
ab) Lower coro.resume and coro.destroy (https://reviews.llvm.org/D22998)
c) Do devirtualization (https://reviews.llvm.org/D23229)
5.Add CGSCC restart trigger + tests. (https://reviews.llvm.org/D23234)
6.Add coroutine heap elision + tests.  <= we are here
7.Add the rest of the logic (split into more patches)

Reviewers: mehdi_amini, majnemer

Subscribers: mehdi_amini, llvm-commits

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

llvm-svn: 278242
2016-08-10 16:40:39 +00:00
Kostya Serebryany 1dceb59be2 [scudo] Documentation update for Scudo, from https://reviews.llvm.org/D23332
llvm-svn: 278180
2016-08-09 23:57:04 +00:00