| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
With the option -outline-optional-branches, LLVM will place optional
branches out of line (more details on r231230).
With this patch, this is not done for short optional branches. A short
optional branch is a branch containing a single block with an
instruction count below a certain threshold (defaulting to 3). Still
everything is guarded under -outline-optional-branches).
Outlining a short branch can't significantly improve code locality. It
can however decrease performance because of the additional jmp and in
cases where the optional branch is hot. This fixes a compile time
regression I have observed in a benchmark.
Review: http://reviews.llvm.org/D8108
llvm-svn: 232802
|
|
|
|
|
|
|
| |
It was previously repeatedly erasing elements from the middle of a vector,
causing O(n^2) worst-case run-time.
llvm-svn: 232789
|
|
|
|
|
|
|
| |
will have a MachineFunction, i.e. in places other than the module
level doInitialize/doFinalize.
llvm-svn: 232783
|
|
|
|
| |
llvm-svn: 232782
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is very related to the bug fixed in r174431. The problem is that
SelectionDAG does not include alignment in the uniquing of loads and
stores. When an otherwise no-op DAGCombine would increase the alignment
of a load or store, the original node would be returned (with the
alignment increased), which would cause the node not to be processed by
any further DAGCombines.
I don't have a direct testcase for this that manifests on an in-tree
target, but I did see some noise in the tests for other targets and have
updated them for it.
llvm-svn: 232780
|
|
|
|
| |
llvm-svn: 232777
|
|
|
|
|
|
|
|
|
| |
This enables us to remove calls to the subtarget from the TargetMachine
and with a small hack for backends that require global subtarget
information for module level code generation, e.g. mips abi flags, as
mentioned in a fixme in the code.
llvm-svn: 232776
|
|
|
|
|
|
|
| |
they can be used without a subtarget in constructing subtarget
independent passes.
llvm-svn: 232775
|
|
|
|
|
|
|
|
|
| |
This switches the sense of the i32 values and updates the test cases.
We can also use CHECK-SAME to clean up some tests, and reduce the visual
noise from bitcasts.
llvm-svn: 232774
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Remove `DebugInfoVerifierLegacyPass` and the `-verify-di` pass.
Instead, call into the `DebugInfoVerifier` from inside
`VerifierLegacyPass::finalizeModule()`. This better matches the logic
in `verifyModule()` (used by the new PassManager), avoids requiring two
separate passes to verify the IR, and makes the API for "add a pass to
verify the IR" simple.
Note: the `-verify-debug-info` flag still works (for now, at least;
eventually it might make sense to just remove it).
llvm-svn: 232772
|
|
|
|
| |
llvm-svn: 232759
|
|
|
|
| |
llvm-svn: 232729
|
|
|
|
| |
llvm-svn: 232722
|
|
|
|
|
|
|
| |
From what I can tell, the code is checking for PHIs that expect any value from
this block, not just constants.
llvm-svn: 232697
|
|
|
|
|
|
|
|
|
|
|
| |
Some subregisters are only to indicate different access sizes, while not
providing any way to actually divide the register up into multiple
disjunct parts. Avoid tracking subregister liveness in these cases as it
is not beneficial.
Differential Revision: http://reviews.llvm.org/D8429
llvm-svn: 232695
|
|
|
|
|
|
| |
That changed in r102128.
llvm-svn: 232692
|
|
|
|
|
|
| |
NFC.
llvm-svn: 232690
|
|
|
|
|
|
|
|
| |
Committed too early.
This reverts commit r232666.
llvm-svn: 232667
|
|
|
|
|
|
|
| |
they can be used without a subtarget in constructing subtarget
independent passes.
llvm-svn: 232666
|
|
|
|
|
|
|
|
|
|
|
| |
No outlining is necessary for SEH catch blocks. Use the blockaddr of the
handler in place of the usual outlined function.
Reviewers: majnemer, andrew.w.kaylor
Differential Revision: http://reviews.llvm.org/D8370
llvm-svn: 232664
|
|
|
|
|
|
|
|
|
|
|
|
| |
Memcpy, and other memory intrinsics, typically tries to use LDM/STM if
the source and target addresses are 4-byte aligned. In CodeGenPrepare
look for calls to memory intrinsics and, if the object is on the
stack, 4-byte align it if it's large enough that we expect that memcpy
would want to use LDM/STM to copy it.
Differential Revision: http://reviews.llvm.org/D7908
llvm-svn: 232627
|
|
|
|
|
|
|
|
|
|
| |
Targets which provide a rotate make it possible to replace a sequence of
(XOR (SHL 1, x), -1) with (ROTL ~1, x). This saves an instruction on
architectures like X86 and POWER(64).
Differential Revision: http://reviews.llvm.org/D8350
llvm-svn: 232572
|
|
|
|
|
|
|
|
|
|
| |
COFF COMDATs (for selection kinds other than 'select any') require at
least one non-section symbol in the symbol table.
Satisfy this by morally enhancing the linkage from private to internal.
Differential Revision: http://reviews.llvm.org/D8394
llvm-svn: 232570
|
|
|
|
| |
llvm-svn: 232557
|
|
|
|
|
|
|
|
| |
We were creating an expression of the form (S+C)-S which is just C.
Patch by Frédéric Riss. I just added the testcase.
llvm-svn: 232549
|
|
|
|
|
|
| |
This reverts commit r232539. This was committed accidently.
llvm-svn: 232543
|
|
|
|
|
|
| |
This reverts commit r232540. This was committed accidently.
llvm-svn: 232541
|
|
|
|
| |
llvm-svn: 232540
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
COFF COMDATs (for selection kinds other than 'select any') require at
least one non-section symbol in the symbol table.
Satisfy this by morally enhancing the linkage from private to internal.
Reviewers: rafael
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D8374
llvm-svn: 232539
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Before this patch code wanting to create temporary labels for a given entity
(function, cu, exception range, etc) had to keep its own counter to have stable
symbol names.
createTempSymbol would still add a suffix to make sure a new symbol was always
returned, but it kept a single counter. Because of that, if we were to use
just createTempSymbol("cu_begin"), the label could change from cu_begin42 to
cu_begin43 because some other code started using temporary labels.
Simplify this by just keeping one counter per prefix and removing the various
specialized counters.
llvm-svn: 232535
|
|
|
|
| |
llvm-svn: 232487
|
|
|
|
|
|
| |
Despite using the same name these are unrelated.
llvm-svn: 232485
|
|
|
|
| |
llvm-svn: 232481
|
|
|
|
|
|
|
| |
In these cases no code was depending on GetTempSymbol finding an existing
symbol.
llvm-svn: 232478
|
|
|
|
| |
llvm-svn: 232476
|
|
|
|
| |
llvm-svn: 232475
|
|
|
|
| |
llvm-svn: 232472
|
|
|
|
|
|
| |
This is cleaner and avoids a crash in a corner case.
llvm-svn: 232471
|
|
|
|
| |
llvm-svn: 232429
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now that we check `MDExpression` during `-verify` (r232299), make
the `DIExpression` wrapper more strict:
- remove redundant checks in `DebugInfoVerifier`,
- overload `get()` to `cast_or_null<MDExpression>` (superseding
`getRaw()`),
- stop checking for null in any accessor, and
- remove `DIExpression::Verify()` entirely in favour of
`MDExpression::isValid()`.
There is still some logic in this class, mostly to do with high-level
iterators; I'll defer cleaning up those until the rest of the wrappers
are similarly strict.
llvm-svn: 232412
|
|
|
|
|
|
|
|
|
| |
uppercase letter
This covers essentially all of llvm's headers and libs. One or two weird
cases I wasn't sure were worth/appropriate to fix.
llvm-svn: 232394
|
|
|
|
|
|
|
|
|
|
| |
are not at the file level.
Previously, the default subtarget created from the target triple was used to
emit inline asm instructions. Compilation would fail in cases where the feature
bits necessary to assemble an inline asm instruction in a function weren't set.
llvm-svn: 232392
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This patch consists of the suggestions of clang-tidy/misc-static-assert check.
Reviewers: alexfh
Reviewed By: alexfh
Subscribers: xazax.hun, llvm-commits
Differential Revision: http://reviews.llvm.org/D8343
llvm-svn: 232366
|
|
|
|
| |
llvm-svn: 232328
|
|
|
|
| |
llvm-svn: 232327
|
|
|
|
| |
llvm-svn: 232294
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Specifically, if there are copy-like instructions in the loop header
they are moved into the loop close to their uses. This reduces the live
intervals of the values and can avoid register spills.
This is working towards a fix for http://llvm.org/PR22230.
Review: http://reviews.llvm.org/D7259
Next steps:
- Find a better cost model (which non-copy instructions should be sunk?)
- Make this dependent on register pressure
llvm-svn: 232262
|
|
|
|
|
|
| |
No functionality change intended.
llvm-svn: 232217
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
multiple memory constraints.
The operand flag word for ISD::INLINEASM nodes now contains a 15-bit
memory constraint ID when the operand kind is Kind_Mem. This constraint
ID is a numeric equivalent to the constraint code string and is converted
with a target specific hook in TargetLowering.
This patch maps all memory constraints to InlineAsm::Constraint_m so there
is no functional change at this point. It just proves that using these
previously unused bits in the encoding of the flag word doesn't break
anything.
The next patch will make each target preserve the current mapping of
everything to Constraint_m for itself while changing the target independent
implementation of the hook to return Constraint_Unknown appropriately. Each
target will then be adapted in separate patches to use appropriate
Constraint_* values.
PR22883 was caused the matching operands copying the whole of the operand flags
for the matched operand. This included the constraint id which needed to be
replaced with the operand number. This has been fixed with a conversion
function. Following on from this, matching operands also used the operand
number as the constraint id. This has been fixed by looking up the matched
operand and taking it from there.
llvm-svn: 232165
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
instruction sequences as follows
%Q5_Q6<def> = COPY %Q2_Q3
%D5<def> =
%D3<def> =
%D3<def> = COPY %D6 // Incorrectly removed in MachineCopyPropagation
Using of %D3 results in incorrect result ...
Reviewed in http://reviews.llvm.org/D8242
llvm-svn: 232142
|