- Mar 15, 2012
-
-
Bill Wendling authored
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
-
Chandler Carruth authored
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
-
Chandler Carruth authored
essentially sorting the pair's arguments. I'd love to actually call sort here, but I'm just not that crazy. ;] llvm-svn: 152764
-
Chandler Carruth authored
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
-
Chad Rosier authored
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
-
Chandler Carruth authored
metrics. llvm-svn: 152760
-
Chandler Carruth authored
side of things. This is all dead code. llvm-svn: 152759
-
Aaron Ballman authored
llvm-svn: 152756
-
Kostya Serebryany authored
llvm-svn: 152755
-
Kostya Serebryany authored
[asan] rename class BlackList to FunctionBlackList and move it into a separate file -- we will need the same functionality in ThreadSanitizer llvm-svn: 152753
-
Chandler Carruth authored
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
-
Dan Gohman authored
should be ignored by ARC optimization, don't insert new ARC runtime calls in the unwind destination. llvm-svn: 152748
-
- Mar 14, 2012
-
-
Francois Pichet authored
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
-
Chandler Carruth authored
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
-
Eli Bendersky authored
llvm-svn: 152712
-
Benjamin Kramer authored
llvm-svn: 152711
-
Bill Wendling authored
Also do some minor reformatting. llvm-svn: 152707
-
Chandler Carruth authored
a worklist rather than a recursive call. No functionality changed. llvm-svn: 152706
-
Bill Wendling authored
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
-
Bill Wendling authored
expensive "getFirstTerminator" call. This reduces the time of compilation in PR12258 from >10 minutes to < 10 seconds. llvm-svn: 152704
-
Eli Bendersky authored
llvm-svn: 152703
-
Eli Bendersky authored
llvm-svn: 152702
-
Andrew Trick authored
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
-
Andrew Trick authored
llvm-svn: 152699
-
Eric Christopher authored
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
-
Benjamin Kramer authored
llvm-svn: 152692
-
Benjamin Kramer authored
llvm-svn: 152688
-
- Mar 13, 2012
-
-
Evan Cheng authored
Fortify r152675 a bit. Although I'm not able to come up with a test case that would trigger the truncation case. llvm-svn: 152678
-
Evan Cheng authored
(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
-
Pete Cooper authored
Target override to allow CodeGenPrepare to sink address operands to intrinsics in the same way it current does for loads and stores llvm-svn: 152666
-
Argyrios Kyrtzidis authored
if the passed in FileSize is inaccurate. rdar://11034179 llvm-svn: 152662
-
Benjamin Kramer authored
llvm-svn: 152659
-
Bill Wendling authored
No functionality change. llvm-svn: 152658
-
Kevin Enderby authored
instruction's destination operand like it does for the source operand. Also fix a typo in the comment for X86AsmParser::isSrcOp(). llvm-svn: 152654
-
Chris Lattner authored
fixing rdar://11039258, an issue that came up when inspecting clang's bootstrapped codegen. llvm-svn: 152635
-
Dan Gohman authored
llvm-svn: 152634
-
Duncan Sands authored
trunc(ptrtoint(x-y))" optimization introduced by Chandler. llvm-svn: 152626
-
Stepan Dyatkovskiy authored
llvm-svn: 152624
-
Duncan Sands authored
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
-
Eli Bendersky authored
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
-