| Commit message (Collapse) | Author | Age | Files | Lines | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
PR25157 identifies a bug where a load plus a vector shuffle is
incorrectly converted into an LXVDSX instruction.  That optimization
is only valid if the load is of a doubleword, and in the noted case,
it was not.  This corrects that problem.
Joint patch with Eric Schweitz, who provided the bugpoint-reduced test
case.
llvm-svn: 250324
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Reviewers: reames
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D13738
llvm-svn: 250317
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
This adds documentation for the binary profile encoding and moves the
documentation for the text encoding into the header file
SampleProfReader.h.
llvm-svn: 250309
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Summary:
Caching SDLoc(N), instead of recreating it in every single
function call, keeps the code denser, and allows to unwrap long lines.
Reviewers: sunfish, atrick, sdmitrouk
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D13726
llvm-svn: 250305
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Summary: The two implementations had more code in common than not.
Reviewers: sunfish, MatzeB, sdmitrouk
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D13724
llvm-svn: 250302
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
This patch teaches x86 fast-isel how to select nontemporal stores.
On x86, we can use MOVNTI for nontemporal stores of doublewords/quadwords.
Instructions (V)MOVNTPS/PD/DQ can be used for SSE2/AVX aligned nontemporal
vector stores.
Before this patch, fast-isel always selected 'movd/movq' instead of 'movnti'
for doubleword/quadword nontemporal stores. In the case of nontemporal stores
of aligned vectors, fast-isel always selected movaps/movapd/movdqa instead of
movntps/movntpd/movntdq.
With this patch, if we use SSE2/AVX intrinsics for nontemporal stores we now
always get the expected (V)MOVNT instructions.
The lack of fast-isel support for nontemporal stores was spotted when analyzing
the -O0 codegen for nontemporal stores.
Differential Revision: http://reviews.llvm.org/D13698
llvm-svn: 250285
 | 
| | 
| 
| 
| 
| 
|  | 
enabled them and the saving of YMM state. This seems to be consistent with gcc behavior.
llvm-svn: 250269
 | 
| | 
| 
| 
|  | 
llvm-svn: 250268
 | 
| | 
| 
| 
|  | 
llvm-svn: 250266
 | 
| | 
| 
| 
|  | 
llvm-svn: 250264
 | 
| | 
| 
| 
| 
| 
|  | 
Fixes PR25160.
llvm-svn: 250260
 | 
| | 
| 
| 
|  | 
llvm-svn: 250259
 | 
| | 
| 
| 
| 
| 
| 
|  | 
to get away with this because llvm/Support/GCOV.h was an implementation detail
of the llvm-gcov tool, but it's now being used by FDO.
llvm-svn: 250258
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Instead of `dyn_cast` ing to `SCEVConstant` and checking the contained
`ConstantInteger.
llvm-svn: 250251
 | 
| | 
| 
| 
| 
| 
| 
|  | 
This removes old remnants from the gcov reader. I missed these when I
re-wrote it recently.
llvm-svn: 250242
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
Binary encoded profiles used to encode all function names inline at
every reference.  This is clearly suboptimal in terms of space.  This
patch fixes this by adding a name table to the header of the file.
llvm-svn: 250241
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
We forgot to append the terminatepad's arguments which resulted in us
treating the old terminatepad as an argument to the new terminatepad
causing us to crash immediately.  Instead, add the old terminatepad's
arguments to the new terminatepad.
This fixes PR25155.
llvm-svn: 250234
 | 
| | 
| 
| 
|  | 
llvm-svn: 250233
 | 
| | 
| 
| 
|  | 
llvm-svn: 250224
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
ArchiveMemberHeader, suggestion by Rafael Espíndola.
Also The clang-x86-win2008-selfhost bot still does not like the
malformed-machos 00000031.a test, so removing it for now.  All
the other bots are fine with it however.
llvm-svn: 250222
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Summary:
Emit the handler and clause locations immediately after the standard
xdata.
Clauses are emitted in the same order and format used to communiate them
to the CLR Execution Engine.
Add a lit test to verify correct table generation on a small but
interesting example function.
Reviewers: majnemer, andrew.w.kaylor, rnk
Subscribers: pgavlin, AndyAyers, llvm-commits
Differential Revision: http://reviews.llvm.org/D13451
llvm-svn: 250219
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
One of the changes in lib/Target/AMDGPU/AMDGPUMCInstLower.cpp was a new
one.  Previously, bundle iterators and single-instruction iterators
could be compared to each other (comparing on underlying pointers).
I changed a comparison from using `MBB->end()` to using
`MBB->instr_end()`, since both end iterators should point at the some
place anyway.
I don't think the implicit conversion between the two iterator types is
a good idea since it's fairly easy to accidentally compare to the wrong
thing (they aren't always end iterators).  Otherwise I would have just
added the conversion.
Even with that, no there should be functionality change here.
llvm-svn: 250218
 | 
| | 
| 
| 
|  | 
llvm-svn: 250216
 | 
| | 
| 
| 
|  | 
llvm-svn: 250214
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Remove remaining `ilist_iterator` implicit conversions from
LLVMScalarOpts.
This change exposed some scary behaviour in
lib/Transforms/Scalar/SCCP.cpp around line 1770.  This patch changes a
call from `Function::begin()` to `&Function::front()`, since the return
was immediately being passed into another function that takes a
`Function*`.  `Function::front()` started to assert, since the function
was empty.  Note that `Function::end()` does not point at a legal
`Function*` -- it points at an `ilist_half_node` -- so the other
function was getting garbage before.  (I added the missing check for
`Function::isDeclaration()`.)
Otherwise, no functionality change intended.
llvm-svn: 250211
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
This fixes an assert in AArch64AsmParser::MatchAndEmitInstruction.
rdar://problem/23081753
llvm-svn: 250207
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
Currently in JumpThreading pass, the branch weight metadata is not updated after CFG modification. Consider the jump threading on PredBB, BB, and SuccBB. After jump threading, the weight on BB->SuccBB should be adjusted as some of it is contributed by the edge PredBB->BB, which doesn't exist anymore. This patch tries to update the edge weight in metadata on BB->SuccBB by scaling it by 1 - Freq(PredBB->BB) / Freq(BB->SuccBB).
Differential revision: http://reviews.llvm.org/D10979
llvm-svn: 250204
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
|  | 
On Linux, the profile runtime can use __start_SECTNAME and __stop_SECTNAME
symbols defined by the linker to locate the start and end location of
a named section (with C name). This eliminates the need for instrumented
binary to call __llvm_profile_register_function during start-up time.
llvm-svn: 250199
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Remove some of the implicit ilist iterator conversions in
LLVMScalarOpts.  More to go.
llvm-svn: 250197
 | 
| | 
| 
| 
|  | 
llvm-svn: 250193
 | 
| | 
| 
| 
|  | 
llvm-svn: 250192
 | 
| | 
| 
| 
|  | 
llvm-svn: 250187
 | 
| | 
| 
| 
|  | 
llvm-svn: 250186
 | 
| | 
| 
| 
|  | 
llvm-svn: 250185
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Stop relying on implicit conversions of ilist iterators in
LLVMInstCombine.  No functionality change intended.
llvm-svn: 250183
 | 
| | 
| 
| 
| 
| 
| 
|  | 
Get LLVMBitReader building without relying on `ilist_iterator` implicit
conversions.
llvm-svn: 250181
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Summary:
Add an iterator that can walk across blocks and which visits the state
transitions rather than state ranges, with explicit transitions to -1
indicating the presence of top-level calls that may throw and cause the
current function to unwind to caller.  This will simplify code that needs
to identify nested try regions.
Refactor SEH and C++EH table generation to use the new
InvokeStateChangeIterator, and remove the InvokeLabelIterator they were
using.
Reviewers: majnemer, andrew.w.kaylor, rnk
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D13623
llvm-svn: 250179
 | 
| | 
| 
| 
|  | 
llvm-svn: 250177
 | 
| | 
| 
| 
|  | 
llvm-svn: 250174
 | 
| | 
| 
| 
|  | 
llvm-svn: 250162
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
As discussed in D13348 - the INSERTQI range combining code is wrong in that it confuses the insertion bit index with an extraction bit index.
The remaining legal combines are very unlikely (especially once we've converted to shuffles in D13348) so I'm removing the optimization.
llvm-svn: 250160
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
Now that all the known faults with GlobalsAA have been fixed, flip the big switch on -enable-non-lto-gmr again.
Feel free to pester me with any more bugs found, and don't hesitate to flip the switch back off.
llvm-svn: 250157
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
Weak linkage and friends allow a symbol to be overriden outside the
code generator's model, so GlobalsAA shouldn't assume that anything it
can compute about such a symbol is valid.
llvm-svn: 250156
 | 
| | 
| 
| 
|  | 
llvm-svn: 250154
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
- Rename methods according to the LLVM Coding Style
 - Merge adjacent anonymous namespace block
 - Use `auto` in two places
llvm-svn: 250152
 | 
| | 
| 
| 
|  | 
llvm-svn: 250151
 | 
| | 
| 
| 
|  | 
llvm-svn: 250148
 | 
| | 
| 
| 
| 
| 
|  | 
parser will check the size.
llvm-svn: 250147
 | 
| | 
| 
| 
|  | 
llvm-svn: 250145
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Now LLVMBitWriter compiles without implicit ilist iterator conversions.
In these cases, the cleanest thing was to switch to range-based for
loops.  Since there wasn't much noise I converted sub-loops and parent
loops as a drive-by.
llvm-svn: 250144
 |