| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This required disabling a PowerPC optimization that did the following:
input:
x = BUILD_VECTOR <i32 16, i32 16, i32 16, i32 16>
lowered to:
tmp = BUILD_VECTOR <i32 8, i32 8, i32 8, i32 8>
x = ADD tmp, tmp
The add now gets folded immediately and we're back at the BUILD_VECTOR we
started from. I don't see a way to fix this currently so I left it disabled
for now.
Fix some trivially foldable X86 tests too.
llvm-svn: 174325
|
| |
|
|
|
|
|
| |
Fix a bug in DAGCombine. The symptom is mistakenly optimizing expression
"x + x*x" into "x * 3.0".
llvm-svn: 174239
|
| |
|
|
| |
llvm-svn: 174237
|
| |
|
|
|
|
|
|
| |
Testing case is reduced from MultiSource/BenchMarks/Prolangs-C++/deriv1.
rdar://problem/13071590
llvm-svn: 174235
|
| |
|
|
|
|
| |
Found by Alexander Kornienko.
llvm-svn: 174207
|
| |
|
|
| |
llvm-svn: 174198
|
| |
|
|
| |
llvm-svn: 174088
|
| |
|
|
|
|
| |
past the natural stack alignment.
llvm-svn: 174085
|
| |
|
|
|
|
|
|
|
|
|
|
| |
We used to create children DIEs for a scope, then check whether ScopeDIE is
null. If ScopeDIE is null, the children DIEs will be dangling. Other DIEs can
link to those dangling DIEs, which are not emitted at all, causing dwarf error.
The current testing case is 4k lines, from MultiSource/BenchMark/McCat/09-vor.
rdar://problem/13071959
llvm-svn: 174084
|
| |
|
|
|
|
|
| |
Each target implementation was needlessly recomputing the index.
Part of rdar://13076458
llvm-svn: 174083
|
| |
|
|
|
|
| |
of ScheduleDAGRRList
llvm-svn: 173833
|
| |
|
|
|
|
|
| |
Provides the functionality for Clang change r172911 - I just had this still
lying around.
llvm-svn: 173820
|
| |
|
|
|
|
|
| |
Fixed set-but-not-used warnings.
Reviewer: gribozavr
llvm-svn: 173810
|
| |
|
|
| |
llvm-svn: 173775
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
conditions are met:
1. They share the same operand and are in the same BB.
2. Both outputs are used.
3. The target has a native instruction that maps to ISD::FSINCOS node or
the target provides a sincos library call.
Implemented the generic optimization in sdisel and enabled it for
Mac OSX. Also added an additional optimization for x86_64 Mac OSX by
using an alternative entry point __sincos_stret which returns the two
results in xmm0 / xmm1.
rdar://13087969
PR13204
llvm-svn: 173755
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The common code in the post-RA scheduler to break anti-dependencies on the
critical path contained a flaw. In the reported case, an anti-dependency
between the overlapping registers %X4 and %R4 exists:
%X29<def> = OR8 %X4, %X4
%R4<def>, %X3<def,dead,tied3> = LBZU 1, %X3<kill,tied1>
The unpatched code breaks the dependency by replacing %R4 and its uses
with %R3, the first register on the available list. However, %R3 and
%X3 overlap, so this creates two overlapping definitions on the same
instruction.
The fix is straightforward, preventing selection of a register that
overlaps any other defined register on the same instruction.
The test case is reduced from the bug report, and verifies that we no
longer produce "lbzu 3, 1(3)" when breaking this anti-dependency.
llvm-svn: 173706
|
| |
|
|
| |
llvm-svn: 173698
|
| |
|
|
|
|
| |
for refactoring the ARC Optimizer.
llvm-svn: 173647
|
| |
|
|
| |
llvm-svn: 173625
|
| |
|
|
|
|
| |
code makes.
llvm-svn: 173620
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
right shift amount type.
Fix that by adding a cast to the shift expander. This came up with vector shifts
on sse-less X86 CPUs.
<2 x i64> = shl <2 x i64> <2 x i64>
-> i64,i64 = shl i64 i64; shl i64 i64
-> i32,i32,i32,i32 = shl_parts i32 i32 i64; shl_parts i32 i32 i64
Now we cast the last two i64s to the right type. Fixes the crash in PR14668.
llvm-svn: 173615
|
| |
|
|
| |
llvm-svn: 173497
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
with an initial number of elements, instead of DenseMap, which has
zero initial elements, in order to avoid the copying of elements
when the size changes and to avoid allocating space every time
LegalizeTypes is run. This patch will not affect the memory footprint,
because DenseMap will increase the element size to 64
when the first element is added.
Patch by Wan Xiaofei.
llvm-svn: 173448
|
| |
|
|
| |
llvm-svn: 173433
|
| |
|
|
| |
llvm-svn: 173432
|
| |
|
|
| |
llvm-svn: 173431
|
| |
|
|
|
|
| |
This fixes DAG subtree analysis at the boundary.
llvm-svn: 173427
|
| |
|
|
|
|
|
|
|
| |
Maintain separate per-node and per-tree book-keeping.
Track all instructions above a DAG node including nested subtrees.
Seperately track instructions within a subtree.
Record subtree parents.
llvm-svn: 173426
|
| |
|
|
|
|
|
| |
Allow the strategy to select SchedDFS. Allow the results of SchedDFS
to affect initialization of the scheduler state.
llvm-svn: 173425
|
| |
|
|
|
|
|
| |
This is mostly refactoring, along with adding an instruction count
within the subtrees and ensuring we only look at data edges.
llvm-svn: 173420
|
| |
|
|
|
|
| |
interface and allow other strategies to select it.
llvm-svn: 173413
|
| |
|
|
|
|
|
|
|
|
| |
For sanity, create a root when NumDataSuccs >= 4. Splitting large
subtrees will no longer be detrimental after my next checkin to handle
nested tree. A magic number of 4 is fine because single subtrees
seldom rejoin more than this. It makes subtrees easier to visualize
and heuristics more sane.
llvm-svn: 173399
|
| |
|
|
|
|
| |
Patch by Stefan Hepp.
llvm-svn: 173395
|
| |
|
|
| |
llvm-svn: 173318
|
| |
|
|
|
|
|
| |
Allow schedulers to order DAG edges by critical path. This makes
DFS-based heuristics more stable and effective.
llvm-svn: 173317
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The requirements of the strong heuristic are:
* A Protector is required for functions which contain an array, regardless of
type or length.
* A Protector is required for functions which contain a structure/union which
contains an array, regardless of type or length. Note, there is no limit to
the depth of nesting.
* A protector is required when the address of a local variable (i.e., stack
based variable) is exposed. (E.g., such as through a local whose address is
taken as part of the RHS of an assignment or a local whose address is taken as
part of a function argument.)
llvm-svn: 173231
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
SSPStrong applies a heuristic to insert stack protectors in these situations:
* A Protector is required for functions which contain an array, regardless of
type or length.
* A Protector is required for functions which contain a structure/union which
contains an array, regardless of type or length. Note, there is no limit to
the depth of nesting.
* A protector is required when the address of a local variable (i.e., stack
based variable) is exposed. (E.g., such as through a local whose address is
taken as part of the RHS of an assignment or a local whose address is taken as
part of a function argument.)
This patch implements the SSPString attribute to be equivalent to
SSPRequired. This will change in a subsequent patch.
llvm-svn: 173230
|
| |
|
|
|
|
|
|
|
| |
Previously we tried to infer it from the bit width size, with an added
IsIEEE argument for the PPC/IEEE 128-bit case, which had a default
value. This default value allowed bugs to creep in, where it was
inappropriate.
llvm-svn: 173138
|
| |
|
|
|
|
|
|
| |
scheduler to use it.
A SparseMultiSet adds multiset behavior to SparseSet, while retaining SparseSet's desirable properties. Essentially, SparseMultiSet provides multiset behavior by storing its dense data in doubly linked lists that are inlined into the dense vector. This allows it to provide good data locality as well as vector-like constant-time clear() and fast constant time find(), insert(), and erase(). It also allows SparseMultiSet to have a builtin recycler rather than keeping SparseSet's behavior of always swapping upon removal, which allows it to preserve more iterators. It's often a better alternative to a SparseSet of a growable container or vector-of-vector.
llvm-svn: 173064
|
| |
|
|
|
|
|
|
|
| |
The optimization handles esoteric cases but adds a lot of complexity both to the X86 backend and to other backends.
This optimization disables an important canonicalization of chains of SEXT nodes and makes SEXT and ZEXT asymmetrical.
Disabling the canonicalization of consecutive SEXT nodes into a single node disables other DAG optimizations that assume
that there is only one SEXT node. The AVX mask optimizations is one example. Additionally this optimization does not update the cost model.
llvm-svn: 172968
|
| |
|
|
| |
llvm-svn: 172941
|
| |
|
|
| |
llvm-svn: 172857
|
| |
|
|
|
|
|
| |
Further encapsulation of the Attribute object. Don't allow direct access to the
Attribute object as an aggregate.
llvm-svn: 172853
|
| |
|
|
|
|
| |
the Attribute query methods.
llvm-svn: 172852
|
| |
|
|
|
|
| |
- Also, fixup syntax errors in LangRef and missing newline in the MCAsmStreamer.
llvm-svn: 172837
|
| |
|
|
|
|
|
|
|
|
|
|
| |
v8i8 -> v8i64,
v8i8 -> v8i32,
v4i8 -> v4i64,
v4i16 -> v4i64
for AVX and AVX2.
Bug 14865.
llvm-svn: 172708
|
| |
|
|
|
|
|
|
|
| |
changing both the string of the dwo_name to be correct and the type of
the statement list.
Testcases all around.
llvm-svn: 172699
|
| |
|
|
|
|
|
| |
emitting the dwarf32 version of DW_FORM_sec_offset and correct
disassembler support.
llvm-svn: 172698
|
| |
|
|
|
|
| |
Let targets use it.
llvm-svn: 172688
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Move the early if-conversion pass into this group.
ILP optimizations usually need to find the right balance between
register pressure and ILP using the MachineTraceMetrics analysis to
identify critical paths and estimate other costs. Such passes should run
together so they can share dominator tree and loop info analyses.
Besides if-conversion, future passes to run here here could include
expression height reduction and ARM's MLxExpansion pass.
llvm-svn: 172687
|