| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
automatically. Use -S with llvm-gcc rather than -c, so tests can
work when llvm-gcc is really dragonegg (which can output IR with -S
but not -c).
llvm-svn: 120158
|
|
|
|
|
|
| |
than -c.
llvm-svn: 120157
|
|
|
|
| |
llvm-svn: 120156
|
|
|
|
|
|
| |
instruction.
llvm-svn: 120147
|
|
|
|
| |
llvm-svn: 120145
|
|
|
|
|
|
|
| |
whether the pointer can be replaced with the global variable it is a copy of.
Fixes PR8680.
llvm-svn: 120126
|
|
|
|
|
|
| |
for any relocation to a symbol defined in a tls section.
llvm-svn: 120121
|
|
|
|
|
|
| |
Patch by David Meyer, I added the test.
llvm-svn: 120104
|
|
|
|
|
|
| |
sets the type of a symbol to STT_TLS.
llvm-svn: 120100
|
|
|
|
| |
llvm-svn: 120099
|
|
|
|
|
|
| |
Fix by Visa Putkinen!
llvm-svn: 120090
|
|
|
|
|
|
| |
fixes PR8659.
llvm-svn: 120076
|
|
|
|
|
|
|
|
|
|
| |
two.
E.g. -5 % 5 is 0 with srem and 1 with urem.
Also addresses Frits van Bommel's comments.
llvm-svn: 120049
|
|
|
|
|
|
|
| |
We need to check if the individual vector elements are sign/zero-extended
values. For now this only handles constants values. Radar 8687140.
llvm-svn: 120034
|
|
|
|
|
|
|
|
| |
positive.
This allows to transform the rem in "1 << ((int)x % 8);" to an and.
llvm-svn: 120028
|
|
|
|
|
|
|
|
|
|
|
|
| |
fairly systematic way in instcombine. Some of these cases were already dealt
with, in which case I removed the existing code. The case of Add has a bunch of
funky logic which covers some of this plus a few variants (considers shifts to be
a form of multiplication), which I didn't touch. The simplification performed is:
A*B+A*C -> A*(B+C). The improvement is to do this in cases that were not already
handled [such as A*B-A*C -> A*(B-C), which was reported on the mailing list], and
also to do it more often by not checking for "only one use" if "B+C" simplifies.
llvm-svn: 120024
|
|
|
|
|
|
| |
shifts.
llvm-svn: 120022
|
|
|
|
| |
llvm-svn: 120006
|
|
|
|
|
|
| |
on this instcombine xform. This fixes a miscompilation of 403.gcc.
llvm-svn: 119988
|
|
|
|
| |
llvm-svn: 119987
|
|
|
|
| |
llvm-svn: 119984
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
state. Previously Thumb2 would restore sp from fp like this:
mov sp, r7
sub, sp, #4
If an interrupt is taken after the 'mov' but before the 'sub', callee-saved
registers might be clobbered by the interrupt handler. Instead, try
restoring directly from sp:
add sp, #4
Or, if necessary (with VLA, etc.) use a scratch register to compute sp and
then restore it:
sub.w r4, r7, #8
mov sp, r7
rdar://8465407
llvm-svn: 119977
|
|
|
|
|
|
| |
then replace the index with zero.
llvm-svn: 119974
|
|
|
|
|
|
|
| |
In the attached testcase, the element was
never extracted (missing rotate).
llvm-svn: 119973
|
|
|
|
|
|
|
| |
This currently only catches the most basic case, a two-case switch, but can be
extended later.
llvm-svn: 119964
|
|
|
|
| |
llvm-svn: 119951
|
|
|
|
|
|
|
|
|
|
| |
constant
folding improvements: if P points to a type of size zero, turn "gep P, N" into "P".
More generally, if a gep index type has size zero, instcombine could replace the
index with zero, but that is not done here.
llvm-svn: 119942
|
|
|
|
| |
llvm-svn: 119938
|
|
|
|
|
|
| |
when transfering between i64 gprs and mmx regs.
llvm-svn: 119931
|
|
|
|
| |
llvm-svn: 119927
|
|
|
|
| |
llvm-svn: 119926
|
|
|
|
|
|
|
|
|
| |
void a(int x) { if (((1<<x)&8)==0) b(); }
into "x != 3", which occurs over 100 times in 403.gcc but in no
other program in llvm-test.
llvm-svn: 119922
|
|
|
|
| |
llvm-svn: 119917
|
|
|
|
|
|
|
|
|
|
|
|
| |
allowing the memcpy to be eliminated.
Unfortunately, the requirements on byval's without explicit
alignment are really weak and impossible to predict in the
mid-level optimizer, so this doesn't kick in much with current
frontends. The fix is to change clang to set alignment on all
byval arguments.
llvm-svn: 119916
|
|
|
|
|
|
| |
but not complicated enough to merit another test.
llvm-svn: 119898
|
|
|
|
|
|
|
|
| |
performing
addressing mode folding, introduced in r119853.
llvm-svn: 119857
|
|
|
|
|
|
| |
This finishes up 8460971.
llvm-svn: 119848
|
|
|
|
|
|
|
| |
DAGCombine from making an illegal transformation of bitcast of a scalar to a
vector into a scalar_to_vector.
llvm-svn: 119819
|
|
|
|
| |
llvm-svn: 119816
|
|
|
|
|
|
|
| |
lr" instruction cannot be tested just yet. It requires matching a "condition
code", but adding one of those makes things go south quickly...
llvm-svn: 119774
|
|
|
|
| |
llvm-svn: 119761
|
|
|
|
| |
llvm-svn: 119756
|
|
|
|
|
|
| |
mode instead of Thumb2.
llvm-svn: 119755
|
|
|
|
|
|
|
|
| |
illegal types (vector should be split first).
Added test case.
llvm-svn: 119749
|
|
|
|
| |
llvm-svn: 119737
|
|
|
|
| |
llvm-svn: 119733
|
|
|
|
|
|
|
|
|
|
| |
if the extension types were not the same. The result was that if you
fed a select with sext and zext loads, as in the testcase, then it
would get turned into a zext (or sext) of the select, which is wrong
in the cases when it should have been an sext (resp. zext). Reported
and diagnosed by Sebastien Deldon.
llvm-svn: 119728
|
|
|
|
|
|
|
|
| |
preserves LCSSA form out of ScalarEvolution and into the LoopInfo
class. Use it to check that SimplifyInstruction simplifications
are not breaking LCSSA form. Fixes PR8622.
llvm-svn: 119727
|
|
|
|
|
|
|
|
|
| |
Remove movePastCSLoadStoreOps and associated code for simple pointer
increments. Update routines that depended upon other opcodes for save/restore.
Adjust all testcases accordingly.
llvm-svn: 119725
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to leader mapping. Previously,
this was a tree of hashtables, and a query recursed into the table for the immediate dominator ad infinitum
if the initial lookup failed. This led to really bad performance on tall, narrow CFGs.
We can instead replace it with what is conceptually a multimap of value numbers to leaders (actually
represented by a hashtable with a list of Value*'s as the value type), and then
determine which leader from that set to use very cheaply thanks to the DFS numberings maintained by
DominatorTree. Because there are typically few duplicates of a given value, this scan tends to be
quite fast. Additionally, we use a custom linked list and BumpPtr allocation to avoid any unnecessary
allocation in representing the value-side of the multimap.
This change brings with it a 15% (!) improvement in the total running time of GVN on 403.gcc, which I
think is pretty good considering that includes all the "real work" being done by MemDep as well.
The one downside to this approach is that we can no longer use GVN to perform simple conditional progation,
but that seems like an acceptable loss since we now have LVI and CorrelatedValuePropagation to pick up
the slack. If you see conditional propagation that's not happening, please file bugs against LVI or CVP.
llvm-svn: 119714
|