| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
EVT.
llvm-svn: 170183
|
|
|
|
|
|
|
| |
The new API is higher level than just manipulating the bundle flags
directly, and the setIsInsideBundle() function will disappear soon.
llvm-svn: 170159
|
|
|
|
|
|
| |
This is the LLVM portion of r170154.
llvm-svn: 170156
|
|
|
|
| |
llvm-svn: 170148
|
|
|
|
|
|
|
|
| |
EVT.
Accordingly, change RegDefIter to contain MVTs instead of EVTs.
llvm-svn: 170140
|
|
|
|
|
|
|
|
|
|
|
|
| |
Accordingly, add helper funtions getSimpleValueType (in parallel to
getValueType) in SDValue, SDNode, and TargetLowering.
This is the first, in a series of patches.
This is the second attempt. In the first attempt (r169837), a few
getSimpleVT() were hoisted too far, detected by bootstrap failures.
llvm-svn: 170104
|
|
|
|
|
|
| |
section to help prep some code to be split about.
llvm-svn: 170088
|
|
|
|
|
|
| |
before referencing them. rdar://12868039
llvm-svn: 170078
|
|
|
|
|
|
|
|
| |
the asm printer,
also changed MCContext to a single reset only method for simplicity as requested on the list
llvm-svn: 170041
|
|
|
|
|
|
|
| |
load / store pair. It's not legal to use a wider load than the size of
the remaining bytes if it's the first pair of load / store.
llvm-svn: 170018
|
|
|
|
|
|
|
|
|
|
|
|
| |
mention the inline memcpy / memset expansion code is a mess?
This patch split the ZeroOrLdSrc argument into two: IsMemset and ZeroMemset.
The first indicates whether it is expanding a memset or a memcpy / memmove.
The later is whether the memset is a memset of zero. It's totally possible
(likely even) that targets may want to do different things for memcpy and
memset of zero.
llvm-svn: 169959
|
|
|
|
|
|
|
|
|
| |
Also added more comments to explain why it is generally ok to return true.
- Rename getOptimalMemOpType argument IsZeroVal to ZeroOrLdSrc. It's meant to
be true for loaded source (memcpy) or zero constants (memset). The poor name
choice is probably some kind of legacy issue.
llvm-svn: 169954
|
|
|
|
|
|
| |
rdar://12838504
llvm-svn: 169951
|
|
|
|
|
|
| |
f64 load / store on non-SSE2 x86 targets.
llvm-svn: 169944
|
|
|
|
|
|
|
|
|
| |
ScalarTargetTransformInfo::getIntImmCost() instead. "Legal" is a poorly defined
term for something like integer immediate materialization. It is always possible
to materialize an integer immediate. Whether to use it for memcpy expansion is
more a "cost" conceern.
llvm-svn: 169929
|
|
|
|
| |
llvm-svn: 169907
|
|
|
|
| |
llvm-svn: 169880
|
|
|
|
| |
llvm-svn: 169854
|
|
|
|
|
|
| |
instead of EVTs.
llvm-svn: 169851
|
|
|
|
|
|
|
|
| |
MVTs, instead of EVTs.
Accordingly, add bitsLT (and similar) to MVT.
llvm-svn: 169850
|
|
|
|
|
|
| |
from EVT.
llvm-svn: 169849
|
|
|
|
|
|
| |
EVTs.
llvm-svn: 169848
|
|
|
|
|
|
| |
EVTs.
llvm-svn: 169847
|
|
|
|
|
|
| |
of EVT.
llvm-svn: 169845
|
|
|
|
|
|
| |
instead of EVTs.
llvm-svn: 169844
|
|
|
|
| |
llvm-svn: 169843
|
|
|
|
|
|
| |
EVT.
llvm-svn: 169842
|
|
|
|
| |
llvm-svn: 169841
|
|
|
|
| |
llvm-svn: 169840
|
|
|
|
| |
llvm-svn: 169839
|
|
|
|
|
|
|
|
| |
EVT.
Accordingly, change RegDefIter to contain MVTs instead of EVTs.
llvm-svn: 169838
|
|
|
|
|
|
|
|
|
| |
Accordingly, add helper funtions getSimpleValueType (in parallel to
getValueType) in SDValue, SDNode, and TargetLowering.
This is the first, in a series of patches.
llvm-svn: 169837
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
try to reduce the width of this load, and would end up transforming:
(truncate (lshr (sextload i48 <ptr> as i64), 32) to i32)
to
(truncate (zextload i32 <ptr+4> as i64) to i32)
We lost the sext attached to the load while building the narrower i32
load, and replaced it with a zext because lshr always zext's the
results. Instead, bail out of this combine when there is a conflict
between a sextload and a zext narrowing. The rest of the DAG combiner
still optimize the code down to the proper single instruction:
movswl 6(...),%eax
Which is exactly what we wanted. Previously we read past the end *and*
missed the sign extension:
movl 6(...), %eax
llvm-svn: 169802
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This shouldn't affect codegen for -O0 compiles as tail call markers are not
emitted in unoptimized compiles. Testing with the external/internal nightly
test suite reveals no change in compile time performance. Testing with -O1,
-O2 and -O3 with fast-isel enabled did not cause any compile-time or
execution-time failures. All tests were performed on my x86 machine.
I'll monitor our arm testers to ensure no regressions occur there.
In an upcoming clang patch I will be marking the objc_autoreleaseReturnValue
and objc_retainAutoreleaseReturnValue as tail calls unconditionally. While
it's theoretically true that this is just an optimization, it's an
optimization that we very much want to happen even at -O0, or else ARC
applications become substantially harder to debug.
Part of rdar://12553082
llvm-svn: 169796
|
|
|
|
|
|
|
|
|
|
|
|
| |
controls each of the abbreviation sets (only a single one at the
moment) and computes offsets separately as well for each set
of DIEs.
No real function change, ordering of abbreviations for the skeleton
CU changed but only because we're computing in a separate order. Fix
the testcase not to care.
llvm-svn: 169793
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. Teach it to use overlapping unaligned load / store to copy / set the trailing
bytes. e.g. On 86, use two pairs of movups / movaps for 17 - 31 byte copies.
2. Use f64 for memcpy / memset on targets where i64 is not legal but f64 is. e.g.
x86 and ARM.
3. When memcpy from a constant string, do *not* replace the load with a constant
if it's not possible to materialize an integer immediate with a single
instruction (required a new target hook: TLI.isIntImmLegal()).
4. Use unaligned load / stores more aggressively if target hooks indicates they
are "fast".
5. Update ARM target hooks to use unaligned load / stores. e.g. vld1.8 / vst1.8.
Also increase the threshold to something reasonable (8 for memset, 4 pairs
for memcpy).
This significantly improves Dhrystone, up to 50% on ARM iOS devices.
rdar://12760078
llvm-svn: 169791
|
|
|
|
|
|
|
|
| |
InitSections is called before the MCContext is initialized it could cause
duplicate temporary symbols to be emitted later (after context initialization
resets the temporary label counter).
llvm-svn: 169785
|
|
|
|
| |
llvm-svn: 169780
|
|
|
|
| |
llvm-svn: 169779
|
|
|
|
| |
llvm-svn: 169776
|
|
|
|
| |
llvm-svn: 169773
|
|
|
|
| |
llvm-svn: 169772
|
|
|
|
|
|
| |
going on and makes a lot of the terminology in comments make more sense.
llvm-svn: 169758
|
|
|
|
| |
llvm-svn: 169757
|
|
|
|
| |
llvm-svn: 169756
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
misched used GetUnderlyingObject in order to break false load/store
dependencies, and the -enable-aa-sched-mi feature similarly relied on
GetUnderlyingObject in order to ensure it is safe to use the aliasing analysis.
Unfortunately, GetUnderlyingObject does not recurse through phi nodes, and so
(especially due to LSR) all of these mechanisms failed for
induction-variable-dependent loads and stores inside loops.
This change replaces uses of GetUnderlyingObject with GetUnderlyingObjects
(which will recurse through phi and select instructions) in misched.
Andy reviewed, tested and simplified this patch; Thanks!
llvm-svn: 169744
|
|
|
|
| |
llvm-svn: 169727
|
|
|
|
| |
llvm-svn: 169692
|
|
|
|
|
|
| |
or all 0s. These cases can show up when vectors are split for legalizing. Fix some tests that were dependent on these cases not being combined.
llvm-svn: 169684
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is still a work in progress. The purpose is to make bundling and
unbundling operations explicit, and to catch errors where bundles are
broken or created inadvertently.
The old IsInsideBundle flag is replaced by two MI flags: BundledPred
which has the same meaning as IsInsideBundle, and BundledSucc which is
set on instructions that are bundled with a successor. Having two flags
provdes redundancy to detect when a bundle is inadvertently torn by a
splice() or insert(), and it makes it possible to write bundle iterators
that don't need to peek at adjacent instructions.
The new flags can't be manipulated directly (once setIsInsideBundle is
gone). Instead there are MI functions to make and break bundle bonds.
The setIsInsideBundle function will be removed in a future commit. It
should be replaced by bundleWithPred().
llvm-svn: 169583
|