| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 48648
|
| |
|
|
| |
llvm-svn: 48639
|
| |
|
|
|
|
|
|
| |
simplify things like (X & 4) >> 1 == 2 --> (X & 4) == 4.
since it is obvious that the shift doesn't remove any bits.
llvm-svn: 48631
|
| |
|
|
|
|
|
|
| |
- Fix loop nest.
- Use RetVals.size()
- Check for null return value.
llvm-svn: 48605
|
| |
|
|
|
|
| |
Patch by Erick Tryzelaar.
llvm-svn: 48602
|
| |
|
|
| |
llvm-svn: 48588
|
| |
|
|
| |
llvm-svn: 48573
|
| |
|
|
| |
llvm-svn: 48567
|
| |
|
|
| |
llvm-svn: 48556
|
| |
|
|
| |
llvm-svn: 48474
|
| |
|
|
|
|
| |
Patch originally by Erick Tryzelaar, but has been modified somewhat.
llvm-svn: 48419
|
| |
|
|
|
|
|
|
| |
the type instead of the byte size. This was causing troublesome mis-compilations.
True to form, this took 2 days to find and is a one-line fix. :-P
llvm-svn: 48354
|
| |
|
|
|
|
| |
pointer bitcast when performing return slot optimization.
llvm-svn: 48343
|
| |
|
|
|
|
| |
successors. This makes it support nounwind.
llvm-svn: 48320
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. There is now a "PAListPtr" class, which is a smart pointer around
the underlying uniqued parameter attribute list object, and manages
its refcount. It is now impossible to mess up the refcount.
2. PAListPtr is now the main interface to the underlying object, and
the underlying object is now completely opaque.
3. Implementation details like SmallVector and FoldingSet are now no
longer part of the interface.
4. You can create a PAListPtr with an arbitrary sequence of
ParamAttrsWithIndex's, no need to make a SmallVector of a specific
size (you can just use an array or scalar or vector if you wish).
5. All the client code that had to check for a null pointer before
dereferencing the pointer is simplified to just access the
PAListPtr directly.
6. The interfaces for adding attrs to a list and removing them is a
bit simpler.
Phase #2 will rename some stuff (e.g. PAListPtr) and do other less
invasive changes.
llvm-svn: 48289
|
| |
|
|
|
|
|
|
|
| |
to sret parameters), and
safer (when the passed pointer might be invalid). Thanks to Duncan and Chris for the idea behind this,
and extra thanks to Duncan for helping me work out the trap-safety.
llvm-svn: 48280
|
| |
|
|
| |
llvm-svn: 48267
|
| |
|
|
| |
llvm-svn: 48262
|
| |
|
|
| |
llvm-svn: 48254
|
| |
|
|
| |
llvm-svn: 48253
|
| |
|
|
|
|
|
|
| |
before trying to merge the block into its predecessors.
This allows two-entry-phi-return.ll to be simplified
into a single basic block.
llvm-svn: 48252
|
| |
|
|
| |
llvm-svn: 48233
|
| |
|
|
|
|
|
| |
Right now, the pass does not optimize tail recursions
involving multiple return values.
llvm-svn: 48228
|
| |
|
|
| |
llvm-svn: 48227
|
| |
|
|
| |
llvm-svn: 48210
|
| |
|
|
|
|
| |
has single return value.
llvm-svn: 48162
|
| |
|
|
| |
llvm-svn: 48161
|