| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
This needs a test, but it will take some time to figure
out the best way to get an input that will produce > 2^16 relocs.
Patch by Graydon Hoare!
llvm-svn: 152787
|
|
|
|
|
|
| |
add the new node into the work list because there is a potential for further optimizations.
llvm-svn: 152784
|
|
|
|
|
|
|
|
|
| |
out the DW_AT_name. Older gdbs unfortunately still use it to
disambiguate member functions in templated classes (gdb.cp/templates.exp).
rdar://11043421 (which is now deferred for a bit)
llvm-svn: 152782
|
|
|
|
|
|
| |
unittest/ExecutionEngine/JIT
llvm-svn: 152780
|
|
|
|
|
|
|
|
|
|
|
|
| |
Transform:
(fsub x, (fadd x, y)) -> (fneg y) and
(fsub x, (fadd y, x)) -> (fneg y)
if 'unsafe math' is specified.
<rdar://problem/7540295>
llvm-svn: 152777
|
|
|
|
|
|
|
| |
changed since. No one was using it. It is yet another consumer of the
InlineCost interface that I'd like to change.
llvm-svn: 152769
|
|
|
|
|
|
|
| |
essentially sorting the pair's arguments. I'd love to actually call sort
here, but I'm just not that crazy. ;]
llvm-svn: 152764
|
|
|
|
|
|
|
| |
This appears to not be the case with dragonegg at least in some
contexts. Hopefully will fix the bootstrap assert failure there.
llvm-svn: 152763
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This results in things such as
vmovaps -96(%rbx), %xmm1
vinsertf128 $1, %xmm1, %ymm0, %ymm0
to be combined to
vinsertf128 $1, -96(%rbx), %ymm0, %ymm0
rdar://10643481
llvm-svn: 152762
|
|
|
|
|
|
| |
metrics.
llvm-svn: 152760
|
|
|
|
|
|
| |
side of things. This is all dead code.
llvm-svn: 152759
|
|
|
|
|
|
| |
Fixes PR12202.
llvm-svn: 152756
|
|
|
|
| |
llvm-svn: 152755
|
|
|
|
|
|
| |
separate file -- we will need the same functionality in ThreadSanitizer
llvm-svn: 152753
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
correlated pairs of pointer arguments at the callsite. This is designed
to recognize the common C++ idiom of begin/end pointer pairs when the
end pointer is a constant offset from the begin pointer. With the
C-based idiom of a pointer and size, the inline cost saw the constant
size calculation, and this provides the same level of information for
begin/end pairs.
In order to propagate this information we have to search for candidate
operations on a pair of pointer function arguments (or derived from
them) which would be simplified if the pointers had a known constant
offset. Then the callsite analysis looks for such pointer pairs in the
argument list, and applies the appropriate bonus.
This helps LLVM detect that half of bounds-checked STL algorithms
(such as hash_combine_range, and some hybrid sort implementations)
disappear when inlined with a constant size input. However, it's not
a complete fix due the inaccuracy of our cost metric for constants in
general. I'm looking into that next.
Benchmarks showed no significant code size change, and very minor
performance changes. However, specific code such as hashing is showing
significantly cleaner inlining decisions.
llvm-svn: 152752
|
|
|
|
|
|
|
| |
should be ignored by ARC optimization, don't insert new ARC runtime
calls in the unwind destination.
llvm-svn: 152748
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Commit r152704 exposed a latent MSVC limitation (aka bug).
Both ilist and and iplist contains the same function:
template<class InIt> void insert(iterator where, InIt first, InIt last) {
for (; first != last; ++first) insert(where, *first);
}
Also ilist inherits from iplist and ilist contains a "using iplist<NodeTy>::insert".
MSVC doesn't know which one to pick and complain with an error.
I think it is safe to delete ilist::insert since it is redundant anyway.
llvm-svn: 152746
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
which are small enough to themselves be inlined. Delaying in this manner
can be harmful if the function is inelligible for inlining in some (or
many) contexts as it pessimizes the code of the function itself in the
event that inlining does not eventually happen.
Previously the check was written to only do this delaying of inlining
for static functions in the hope that they could be entirely deleted and
in the knowledge that all callers of static functions will have the
opportunity to inline if it is in fact profitable. However, with C++ we
get two other important sources of functions where the definition is
always available for inlining: inline functions and templated functions.
This patch generalizes the inliner to allow linkonce-ODR (the linkage
such C++ routines receive) to also qualify for this delay-based
inlining.
Benchmarking across a range of large real-world applications shows
roughly 2% size increase across the board, but an average speedup of
about 0.5%. Some benhcmarks improved over 2%, and the 'clang' binary
itself (when bootstrapped with this feature) shows a 1% -O0 performance
improvement when run over all Sema, Lex, and Parse source code smashed
into a single file. A clean re-build of Clang+LLVM with a bootstrapped
Clang shows approximately 2% improvement, but that measurement is often
noisy.
llvm-svn: 152737
|
|
|
|
| |
llvm-svn: 152712
|
|
|
|
| |
llvm-svn: 152711
|
|
|
|
|
|
| |
Also do some minor reformatting.
llvm-svn: 152707
|
|
|
|
|
|
|
|
| |
a worklist rather than a recursive call.
No functionality changed.
llvm-svn: 152706
|
|
|
|
|
|
|
|
|
| |
There were cases where a value could be used and it's both crossing an invoke
and NOT crossing an invoke. This could happen in the landing pads. In that case,
we will demote the value to the stack like we did before.
<rdar://problem/10609139>
llvm-svn: 152705
|
|
|
|
|
|
|
| |
expensive "getFirstTerminator" call. This reduces the time of compilation in
PR12258 from >10 minutes to < 10 seconds.
llvm-svn: 152704
|
|
|
|
| |
llvm-svn: 152703
|
|
|
|
| |
llvm-svn: 152702
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
New flags: -misched-topdown, -misched-bottomup. They can be used with
the default scheduler or with -misched=shuffle. Without either
topdown/bottomup flag -misched=shuffle now alternates scheduling
direction.
LiveIntervals update is unimplemented with bottom-up scheduling, so
only -misched-topdown currently works.
Capped the ScheduleDAG hierarchy with a concrete ScheduleDAGMI class.
ScheduleDAGMI is aware of the top and bottom of the unscheduled zone
within the current region. Scheduling policy can be plugged into
the ScheduleDAGMI driver by implementing MachineSchedStrategy.
ConvergingScheduler is now the default scheduling algorithm.
It exercises the new driver but still does no reordering.
llvm-svn: 152700
|
|
|
|
| |
llvm-svn: 152699
|
|
|
|
|
|
|
|
|
|
|
| |
output (we're emitting a specification already and the information
isn't changing).
Saves 1% on the debug information for a build of llvm.
Fixes rdar://11043421
llvm-svn: 152697
|
|
|
|
| |
llvm-svn: 152692
|
|
|
|
|
|
| |
code when inlined.
llvm-svn: 152688
|
|
|
|
|
|
| |
that would trigger the truncation case.
llvm-svn: 152678
|
|
|
|
|
|
|
|
|
| |
(i16 load $addr+c*sizeof(i16)) and replace uses of (i32 vextract) with the
i16 load. It should issue an extload instead: (i32 extload $addr+c*sizeof(i16)).
rdar://11035895
llvm-svn: 152675
|
|
|
|
|
|
| |
intrinsics in the same way it current does for loads and stores
llvm-svn: 152666
|
|
|
|
|
|
|
|
| |
if the passed in FileSize is inaccurate.
rdar://11034179
llvm-svn: 152662
|
|
|
|
|
|
| |
compilers anymore.
llvm-svn: 152659
|
|
|
|
|
|
| |
No functionality change.
llvm-svn: 152658
|
|
|
|
|
|
|
| |
instruction's destination operand like it does for the source operand.
Also fix a typo in the comment for X86AsmParser::isSrcOp().
llvm-svn: 152654
|
|
|
|
|
|
|
| |
fixing rdar://11039258, an issue that came up when inspecting clang's
bootstrapped codegen.
llvm-svn: 152635
|
|
|
|
| |
llvm-svn: 152634
|
|
|
|
|
|
| |
trunc(ptrtoint(x-y))" optimization introduced by Chandler.
llvm-svn: 152626
|
|
|
|
| |
llvm-svn: 152624
|
|
|
|
|
|
|
|
| |
take a TargetLibraryInfo parameter. Internally, rather than passing TD, TLI
and DT parameters around all over the place, introduce a struct for holding
them.
llvm-svn: 152623
|
|
|
|
|
|
|
|
|
|
|
| |
code in LLVM.
Also refactor the existing OProfile profiling code to reuse the same interfaces with the VTune profiling code.
In addition, unit tests for the profiling interfaces were added.
This patch was prepared by Andrew Kaylor and Daniel Malea, and reviewed in the llvm-commits list by Jim Grosbach
llvm-svn: 152620
|
|
|
|
|
|
| |
declaration from class to run method since its only used there and was being reinitialized anyway.
llvm-svn: 152616
|
|
|
|
| |
llvm-svn: 152614
|
|
|
|
| |
llvm-svn: 152613
|
|
|
|
|
|
| |
No functionality change.
llvm-svn: 152611
|
|
|
|
| |
llvm-svn: 152610
|
|
|
|
|
|
| |
reachable from the entry block with uses of an instruction not reachable from the entry block. PR12231.
llvm-svn: 152595
|