| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
VisualStudio happy. Also had to undefine setjmp because of #include <csetjmp> turning setjmp into _setjmp in VisualStudio.
llvm-svn: 49743
|
| |
|
|
| |
llvm-svn: 49681
|
| |
|
|
| |
llvm-svn: 49671
|
| |
|
|
| |
llvm-svn: 49657
|
| |
|
|
|
|
| |
which is significantly more efficient.
llvm-svn: 49614
|
| |
|
|
|
|
| |
of calls and less aggressive with non-readnone calls.
llvm-svn: 49516
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
in addition to integer expressions. Rewrite GetOrEnforceKnownAlignment
as a ComputeMaskedBits problem, moving all of its special alignment
knowledge to ComputeMaskedBits as low-zero-bits knowledge.
Also, teach ComputeMaskedBits a few basic things about Mul and PHI
instructions.
This improves ComputeMaskedBits-based simplifications in a few cases,
but more noticeably it significantly improves instcombine's alignment
detection for loads, stores, and memory intrinsics.
llvm-svn: 49492
|
| |
|
|
|
|
| |
This is not safe for all inputs.
llvm-svn: 49458
|
| |
|
|
|
|
| |
figuring out the suffix to use. implement pow(2,x) -> exp2(x).
llvm-svn: 49437
|
| |
|
|
|
|
| |
long double and simplify the code.
llvm-svn: 49435
|
| |
|
|
| |
llvm-svn: 49430
|
| |
|
|
|
|
| |
GVN and into its own pass.
llvm-svn: 49419
|
| |
|
|
| |
llvm-svn: 49418
|
| |
|
|
|
|
| |
add support for pow(x, 2.0) -> x*x.
llvm-svn: 49411
|
| |
|
|
| |
llvm-svn: 49367
|
| |
|
|
|
|
|
|
|
| |
GVN. This results
in both time and memory savings for GVN. For example, one testcase went from 10.5s to 6s with
this patch.
llvm-svn: 49345
|
| |
|
|
| |
llvm-svn: 49338
|
| |
|
|
|
|
|
|
|
| |
needs to be fixed here - a previous commit made sure
that intrinsics always get the right attributes.
So remove no-longer needed code, and while there use
Intrinsic::getDeclaration rather than getOrInsertFunction.
llvm-svn: 49337
|
| |
|
|
|
|
|
| |
intrinsics. Fix up the argument type (should
be i8*, was an array*).
llvm-svn: 49336
|
| |
|
|
|
|
|
|
| |
number of
allocations, which GVN can't optimize anyways.
llvm-svn: 49329
|
| |
|
|
|
|
|
|
| |
nounwind. When such calls are inlined into something
else that is invoked, they were getting changed to invokes,
which is badness.
llvm-svn: 49299
|
| |
|
|
| |
llvm-svn: 49283
|
| |
|
|
|
|
|
|
| |
Specifically, introduction of XXX::Create methods
for Users that have a potentially variable number of
Uses.
llvm-svn: 49277
|
| |
|
|
|
|
|
|
| |
don't access cached iterators from after the erased element.
Re-apply 49056 with SmallVector support.
llvm-svn: 49106
|
| |
|
|
|
|
|
| |
2. Do not use # of basic blocks as part of the cost computation since it doesn't really figure into function size.
3. More aggressively inline function with vector code.
llvm-svn: 49061
|
| |
|
|
| |
llvm-svn: 49060
|
| |
|
|
|
|
| |
don't access cached iterators from after the erased element.
llvm-svn: 49056
|
| |
|
|
| |
llvm-svn: 49046
|
| |
|
|
|
|
|
|
|
|
|
| |
not marked nounwind, or for all functions when -enable-eh
is set, provided the target supports Dwarf EH.
llvm-gcc generates nounwind in the right places; other FEs
will need to do so also. Given such a FE, -enable-eh should
no longer be needed.
llvm-svn: 49006
|
| |
|
|
| |
llvm-svn: 48971
|
| |
|
|
|
|
| |
patch by David Chisnall.
llvm-svn: 48963
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
when something changes, instead of moving forward. This allows us to
simplify memset lowering, inserting the memset at the end of the range of
stuff we're touching instead of at the start.
This, in turn, allows us to make use of the addressing instructions already
used in the function instead of inserting our own. For example, we now
codegen:
%tmp41 = getelementptr [8 x i8]* %ref_idx, i32 0, i32 0 ; <i8*> [#uses=2]
call void @llvm.memset.i64( i8* %tmp41, i8 -1, i64 8, i32 1 )
instead of:
%tmp20 = getelementptr [8 x i8]* %ref_idx, i32 0, i32 7 ; <i8*> [#uses=1]
%ptroffset = getelementptr i8* %tmp20, i64 -7 ; <i8*> [#uses=1]
call void @llvm.memset.i64( i8* %ptroffset, i8 -1, i64 8, i32 1 )
llvm-svn: 48940
|
| |
|
|
|
|
| |
into a memset!) faster by avoiding an allocation of an std::list node.
llvm-svn: 48939
|
| |
|
|
| |
llvm-svn: 48937
|
| |
|
|
|
|
|
|
|
|
| |
memsets that initialize "structs of arrays" and other store sequences
that are not sequential. This is still only enabled if you pass
-form-memset-from-stores. The flag is not heavily tested and I haven't
analyzed the perf regressions when -form-memset-from-stores is passed
either, but this causes no make check regressions.
llvm-svn: 48909
|
| |
|
|
|
|
| |
Increment iterator in advance.
llvm-svn: 48890
|
| |
|
|
|
|
| |
transformed to undef. But this is such a common idiom (misuse) we are going to handle it.
llvm-svn: 48791
|
| |
|
|
| |
llvm-svn: 48738
|
| |
|
|
|
|
|
|
| |
each BB costs 20 and each instruction costs 5, 200 means a 4 BB function + 24 instructions (actually less because caller's size also contributes to it).
Furthermore, double the limit when more than 10% of the callee instructions are vector instructions. Multimedia kernels tend to love inlining.
llvm-svn: 48725
|
| |
|
|
| |
llvm-svn: 48720
|
| |
|
|
|
|
| |
at least one of the (zext icmp) can be transformed to eliminate an icmp.
llvm-svn: 48715
|
| |
|
|
| |
llvm-svn: 48708
|
| |
|
|
|
|
|
|
| |
This fires dozens of times across spec and multisource, but I don't know
if it actually speeds stuff up. Hopefully the testers will show something
nice :)
llvm-svn: 48680
|
| |
|
|
| |
llvm-svn: 48679
|
| |
|
|
|
|
| |
merging optimization. Nothing to see here, hopefully more later :)
llvm-svn: 48670
|
| |
|
|
|
|
| |
adding <map> to many files that actually do need it.
llvm-svn: 48667
|
| |
|
|
| |
llvm-svn: 48662
|
| |
|
|
|
|
| |
each basic block.
llvm-svn: 48660
|
| |
|
|
| |
llvm-svn: 48658
|
| |
|
|
|
|
|
| |
from their aggregate operands by moving the getresult
instructions.
llvm-svn: 48657
|