| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
Machine model description by Dave Estes <cestes@codeaurora.org>.
llvm-svn: 260686
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This change merges adjacent 32 bit zero stores into a 64 bit zero store.
e.g.,
str wzr, [x0]
str wzr, [x0, #4]
becomes
str xzr, [x0]
Therefore, four adjacent 32 bit zero stores will be a single stp.
e.g.,
str wzr, [x0]
str wzr, [x0, #4]
str wzr, [x0, #8]
str wzr, [x0, #12]
becomes
stp xzr, xzr, [x0]
Reviewers: mcrosier, jmolloy, gberry, t.p.northover
Subscribers: aemerson, rengolin, mcrosier, llvm-commits
Differential Revision: http://reviews.llvm.org/D16933
llvm-svn: 260682
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Summary: This change makes findMatchingStore() follow the same coding style introduced in r260275.
Reviewers: gberry, junbuml
Subscribers: aemerson, rengolin, haicheng, bmakam, mssimpso
Differential Revision: http://reviews.llvm.org/D17083
llvm-svn: 260534
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This patch allows the mixing of scaled and unscaled load/stores to form
load/store pairs.
This is a reapplication of r259812, which had an incorrect assert. The
test_stur_str_no_assert() test is a reduced version of the issue hit in
the AArch64 self-host.
PR24465
llvm-svn: 260523
|
| |
|
|
| |
llvm-svn: 260419
|
| |
|
|
| |
llvm-svn: 260406
|
| |
|
|
| |
llvm-svn: 260383
|
| |
|
|
| |
llvm-svn: 260283
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
Fix case where a pre-inc/dec load/store would not be formed if the
add/sub that forms the inc/dec part of the operation was the first
instruction in the block being examined.
Reviewers: mcrosier, jmolloy, t.p.northover, junbuml
Subscribers: aemerson, rengolin, mcrosier, llvm-commits
Differential Revision: http://reviews.llvm.org/D16785
llvm-svn: 260275
|
| |
|
|
|
|
| |
NFC.
llvm-svn: 260274
|
| |
|
|
| |
llvm-svn: 260273
|
| |
|
|
| |
llvm-svn: 260272
|
| |
|
|
| |
llvm-svn: 260264
|
| |
|
|
| |
llvm-svn: 260260
|
| |
|
|
| |
llvm-svn: 260257
|
| |
|
|
| |
llvm-svn: 260256
|
| |
|
|
| |
llvm-svn: 260249
|
| |
|
|
|
|
|
|
| |
The logic to pair instructions and merge narrow instructions has become cloogy
and error prone. This patch beings to unravel these two similar, but distinct
optimizations.
llvm-svn: 260242
|
| |
|
|
| |
llvm-svn: 260228
|
| |
|
|
| |
llvm-svn: 260226
|
| |
|
|
|
|
|
| |
Remove narrow load / store instructions from getMatchingPairOpcode(),
and add getMatchingWideOpcode().
llvm-svn: 259914
|
| |
|
|
|
|
| |
This reverts commit r259812 as it broke AArch64 self-hosting.
llvm-svn: 259881
|
| |
|
|
|
|
|
| |
This only impacts the creation of pre-/post-index instructions. The bound was
set high enough such that it did not change code generation for SPEC200X.
llvm-svn: 259828
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch allows the mixing of scaled and unscaled load/stores to form
load/store pairs.
PR24465
http://reviews.llvm.org/D12116
Many thanks to Ahmed and Michael for fixes and code review.
This is a reapplication of r246769 and r259790. The tramp3d failure was caused
by an incorrect refactoring in the patch. Specifically, we weren't always
properly clearing the SExtIdx flag.
llvm-svn: 259812
|
| |
|
|
|
|
| |
This reverts commit r259790. tramp3d-v4 is still having problems.
llvm-svn: 259795
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch allows the mixing of scaled and unscaled load/stores to form
load/store pairs.
PR24465
http://reviews.llvm.org/D12116
Many thanks to Ahmed and Michael for fixes and code review.
This is a reapplication of r246769, which was reverted in r246782 due to a
test-suite failure. I'm unable to reproduce the issue at this time.
llvm-svn: 259790
|
| |
|
|
| |
llvm-svn: 259515
|
| |
|
|
| |
llvm-svn: 259510
|
| |
|
|
| |
llvm-svn: 259411
|
| |
|
|
|
|
|
| |
Without the MMOs the MI scheduler is unable to reason about the dependencies of
these instructions.
llvm-svn: 259052
|
| |
|
|
| |
llvm-svn: 258193
|
| |
|
|
| |
llvm-svn: 258191
|
| |
|
|
|
|
| |
AFAICT, these have been unused since the initial backend import.
llvm-svn: 258093
|
| |
|
|
| |
llvm-svn: 257804
|
| |
|
|
|
|
|
|
|
|
| |
In the discussion on http://reviews.llvm.org/D15730, Andy pointed out we had a utility function for merging MMO lists. Since it turned we actually had two copies and there's another review in progress (http://reviews.llvm.org/D15230) which needs the same, extract it into a utility function and clean up the interfaces to make it easier to use with a MachineInstBuilder.
I introduced a pair here to track size and allocation together. I think we should probably move in the direction of the MachineOperandsRef helper class, but I'm leaving that for further work. I want to get the poison state introduced before I make major changes to the interface.
Differential Revision: http://reviews.llvm.org/D15757
llvm-svn: 256909
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a recommit of r256004 which was reverted in r256160. The issue was the
incorrect promotion for half and byte loads transformed into mov instructions.
This fix will replace half and byte type loads only with bit field extracts.
Original commit message:
This change promotes load instructions which directly read from stored by
replacing them with mov instructions. If the store is wider than the load,
the load will be replaced with a bitfield extract.
For example :
STRWui %W1, %X0, 1
%W0 = LDRHHui %X0, 3
becomes
STRWui %W1, %X0, 1
%W0 = UBFMWri %W1, 16, 31
llvm-svn: 256249
|
| |
|
|
|
|
| |
This reverts commit r256004 due to a failure in cortex-a53.
llvm-svn: 256160
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This change promotes load instructions which directly read from stores by
replacing them with mov instructions. If the store is wider than the load,
the load will be replaced with a bitfield extract.
For example :
STRWui %W1, %X0, 1
%W0 = LDRHHui %X0, 3
becomes
STRWui %W1, %X0, 1
%W0 = UBFMWri %W1, 16, 31
llvm-svn: 256004
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This change merges adjacent zero stores into a wider single store.
For example :
strh wzr, [x0]
strh wzr, [x0, #2]
becomes
str wzr, [x0]
This will fix PR25410.
llvm-svn: 253711
|
| |
|
|
|
|
|
|
|
| |
Summary :
* Rename isSmallTypeLdMerge() to isNarrowLoad().
* Rename NumSmallTypeMerged to NumNarrowTypePromoted.
* Use Subtarget defined as a member variable.
llvm-svn: 253587
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This change extends r251438 to handle more narrow load promotions
including byte type, unscaled, and signed. For example, this change will
convert :
ldursh w1, [x0, #-2]
ldurh w2, [x0, #-4]
into
ldur w2, [x0, #-4]
asr w1, w2, #16
and w2, w2, #0xffff
llvm-svn: 253577
|
| |
|
|
|
|
|
|
|
|
|
|
| |
For big-endian targets, when we merge two halfword loads into a word load, the
order of the halfwords in the loaded value is reversed compared to
little-endian, so the load-store optimiser needs to swap the destination
registers.
This does not affect merging of two word loads, as we use ldp, which treats the
memory as two separate 32-bit words.
llvm-svn: 252597
|
| |
|
|
|
|
|
|
|
| |
The benefit from converting narrow loads into a wider load (r251438) could be
micro-architecturally dependent, as it assumes that a single load with two bitfield
extracts is cheaper than two narrow loads. Currently, this conversion is
enabled only in cortex-a57 on which performance benefits were verified.
llvm-svn: 252316
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This recommits r250719, which caused a failure in SPEC2000.gcc
because of the incorrect insert point for the new wider load.
Convert two halfword loads into a single 32-bit word load with bitfield extract
instructions. For example :
ldrh w0, [x2]
ldrh w1, [x2, #2]
becomes
ldr w0, [x2]
ubfx w1, w0, #16, #16
and w0, w0, #ffff
llvm-svn: 251438
|
| |
|
|
|
|
| |
This reverts commit r250719. This introduced a codegen fault in SPEC2000.gcc, when compiled for Cortex-A53.
llvm-svn: 251108
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Convert two halfword loads into a single 32-bit word load with bitfield extract
instructions. For example :
ldrh w0, [x2]
ldrh w1, [x2, #2]
becomes
ldr w0, [x2]
ubfx w1, w0, #16, #16
and w0, w0, #ffff
llvm-svn: 250719
|
| |
|
|
|
|
|
| |
Support for pairing unscaled loads and stores has been enabled since the
original ARM64 port. This feature is no longer experimental, AFAICT.
llvm-svn: 249049
|
| |
|
|
| |
llvm-svn: 249011
|
| |
|
|
| |
llvm-svn: 249008
|
| |
|
|
| |
llvm-svn: 249007
|