| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
| |
Also, make a few changes to allow using the pass in .mir testcases.
Among other things, change the abbreviation from opt-amode to amode-opt,
because otherwise lit would expand the "opt" part to the full path to
the opt binary.
llvm-svn: 300707
|
|
|
|
| |
llvm-svn: 300706
|
|
|
|
|
|
|
| |
The list has a single element 75+% of the time, reservation of 4 elements
is sufficient in 95% of cases.
llvm-svn: 300705
|
|
|
|
| |
llvm-svn: 300704
|
|
|
|
| |
llvm-svn: 300702
|
|
|
|
| |
llvm-svn: 300701
|
|
|
|
| |
llvm-svn: 300603
|
|
|
|
|
|
|
| |
This used to be a Hexagon-specific treatment, but is no longer needed
since it's switched to subregister liveness tracking.
llvm-svn: 300369
|
|
|
|
| |
llvm-svn: 300368
|
|
|
|
|
|
|
| |
This avoids many complications related to the complex register
aliasing schemes.
llvm-svn: 300345
|
|
|
|
| |
llvm-svn: 300337
|
|
|
|
|
|
|
| |
A non-zero lane mask on a register with no subregister means that the
whole register is live-in. It is equivalent to a full mask.
llvm-svn: 300335
|
|
|
|
| |
llvm-svn: 300329
|
|
|
|
|
|
|
|
| |
latencies/throughputs.
The details are here: https://reviews.llvm.org/D30941
llvm-svn: 300311
|
|
|
|
|
|
|
|
| |
Patch by Michael Wu.
Differential Revision: https://reviews.llvm.org/D32000
llvm-svn: 300199
|
|
|
|
|
|
|
|
|
|
| |
assertion
Patch by Michael Wu.
Differential Revision: https://reviews.llvm.org/D31999
llvm-svn: 300198
|
|
|
|
|
|
|
|
|
|
|
| |
templates.
From a user prospective, it forces the use of an annoying nullptr to mark the end of the vararg, and there's not type checking on the arguments.
The variadic template is an obvious solution to both issues.
Differential Revision: https://reviews.llvm.org/D31070
llvm-svn: 299949
|
|
|
|
|
|
|
| |
This reverts commit r299925 because it broke the buildbots. See e.g.
http://lab.llvm.org:8011/builders/clang-cmake-armv7-a15/builds/6008
llvm-svn: 299928
|
|
|
|
|
|
|
|
|
|
|
|
| |
Module::getOrInsertFunction is using C-style vararg instead of
variadic templates.
From a user prospective, it forces the use of an annoying nullptr
to mark the end of the vararg, and there's not type checking on the
arguments. The variadic template is an obvious solution to both
issues.
llvm-svn: 299925
|
|
|
|
|
|
|
| |
Keep full offset value on MI-level instructions, but have it scaled down
in the MC-level instructions.
llvm-svn: 299664
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A number of backends (AArch64, MIPS, ARM) have been using
MCContext::reportError to report issues such as out-of-range fixup values in
their TgtAsmBackend. This is great, but because MCContext couldn't easily be
threaded through to the adjustFixupValue helper function from its usual
callsite (applyFixup), these backends ended up adding an MCContext* argument
and adding another call to applyFixup to processFixupValue. Adding an
MCContext parameter to applyFixup makes this unnecessary, and even better -
applyFixup can take a reference to MCContext rather than a potentially null
pointer.
Differential Revision: https://reviews.llvm.org/D30264
llvm-svn: 299529
|
|
|
|
| |
llvm-svn: 299367
|
|
|
|
|
|
|
|
|
|
| |
class. Implement them without memory allocation for multiword
This moves the isMask and isShiftedMask functions to be class methods. They now use the MathExtras.h function for single word size and leading/trailing zeros/ones or countPopulation for the multiword size. The previous implementation made multiple temorary memory allocations to do the bitwise arithmetic operations to match the MathExtras.h implementation.
Differential Revision: https://reviews.llvm.org/D31565
llvm-svn: 299362
|
|
|
|
|
|
| |
Found by PVS-Studio. Fixes llvm.org/PR31676.
llvm-svn: 299262
|
|
|
|
|
|
| |
Found by PVS-Studio. Fixes llvm.org/PR32480.
llvm-svn: 299258
|
|
|
|
|
|
|
|
|
| |
- Avoid explosive growth of the simplification queue by not queuing
expressions that are alredy in it.
- Add an iteration counter and abort after a sufficiently large number
of iterations (assuming that it's a symptom of an infinite loop).
llvm-svn: 298655
|
|
|
|
|
|
|
|
|
|
|
| |
[Hexagon] Recognize polynomial-modulo loop idiom again
Regain the ability to recognize loops calculating polynomial modulo
operation. This ability has been lost due to some changes in the
preceding optimizations. Add code to preprocess the IR to a form
that the pattern matching code can recognize.
llvm-svn: 298400
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This class is a list of AttributeSetNodes corresponding the function
prototype of a call or function declaration. This class used to be
called ParamAttrListPtr, then AttrListPtr, then AttributeSet. It is
typically accessed by parameter and return value index, so
"AttributeList" seems like a more intuitive name.
Rename AttributeSetImpl to AttributeListImpl to follow suit.
It's useful to rename this class so that we can rename AttributeSetNode
to AttributeSet later. AttributeSet is the set of attributes that apply
to a single function, argument, or return value.
Reviewers: sanjoy, javed.absar, chandlerc, pete
Reviewed By: pete
Subscribers: pete, jholewinski, arsenm, dschuff, mehdi_amini, jfb, nhaehnle, sbc100, void, llvm-commits
Differential Revision: https://reviews.llvm.org/D31102
llvm-svn: 298393
|
|
|
|
|
|
|
|
| |
Fix memory leaks on check-llvm tests detected by Asan.
This reverts commit r298282.
llvm-svn: 298329
|
|
|
|
|
|
|
|
|
| |
Regain the ability to recognize loops calculating polynomial modulo
operation. This ability has been lost due to some changes in the
preceding optimizations. Add code to preprocess the IR to a form
that the pattern matching code can recognize.
llvm-svn: 298282
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: mkuper, rnk
Subscribers: mehdi_amini, jyknight, aemerson, llvm-commits, rengolin
Differential Revision: https://reviews.llvm.org/D27050
llvm-svn: 298179
|
|
|
|
| |
llvm-svn: 298178
|
|
|
|
| |
llvm-svn: 297920
|
|
|
|
|
|
| |
This fixes llvm.org/PR32265.
llvm-svn: 297745
|
|
|
|
|
|
| |
Use Liveness::getNearestAliasedRef to find the reaching def instead.
llvm-svn: 297526
|
|
|
|
|
|
|
|
| |
This function will find the closest ref node aliased to Reg that is
in an instruction preceding Inst. This could be used to identify the
hypothetical reaching def of Reg, if Reg was a member of Inst.
llvm-svn: 297524
|
|
|
|
|
|
|
|
| |
- Fix the insertion point, which occasionally could have been incorrect.
- Avoid creating multiple bitsplits with the same operands, if an old one
could be reused.
llvm-svn: 297414
|
|
|
|
|
|
| |
Extract individual transformations into their own functions.
llvm-svn: 297401
|
|
|
|
| |
llvm-svn: 297393
|
|
|
|
|
|
|
| |
(op ... (zext i1 c) ...) -> (select c (op ... 1 ...),
(op ... 0 ...))
llvm-svn: 297391
|
|
|
|
|
|
|
|
| |
When extracting a bitfield from the high register in a register pair,
the final offset should be relative to the high register (for 32-bit
extracts).
llvm-svn: 297288
|
|
|
|
| |
llvm-svn: 297240
|
|
|
|
| |
llvm-svn: 297239
|
|
|
|
| |
llvm-svn: 297141
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Merge the tail block into the loop in cases where the main loop body
exits early, subject to profitability constraints. This will coalesce
the loop body into fewer blocks.
For example:
loop: loop:
// loop body // loop body
if (...) jump exit --> // more body
more: if (...) jump exit
// more body jump loop
jump loop
llvm-svn: 297033
|
|
|
|
|
|
|
|
|
| |
The code in updateDeadFlags removed unnecessary <dead> flags, but there
can be cases where such a flag is not set, and yet a register has become
dead. For example, if a mux with identical inputs is replaced with a COPY,
the predicate register may no longer be used after that.
llvm-svn: 297032
|
|
|
|
| |
llvm-svn: 297031
|
|
|
|
| |
llvm-svn: 296901
|
|
|
|
|
|
|
| |
Specifically, pick the opcode with the correct branch prediction, i.e.
jump:t or jump:nt.
llvm-svn: 296821
|
|
|
|
| |
llvm-svn: 296777
|