| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
| |
the shift type was needed one place, the shift count
type another. The transform in 123555 had the same
problem.
llvm-svn: 122366
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(add Y, (sete X, 0)) -> cmp X, 1; adc 0, Y
(add Y, (setne X, 0)) -> cmp X, 1; sbb -1, Y
(sub (sete X, 0), Y) -> cmp X, 1; sbb 0, Y
(sub (setne X, 0), Y) -> cmp X, 1; adc -1, Y
for
unsigned foo(unsigned a, unsigned b) {
if (a == 0) b++;
return b;
}
we now get:
foo:
cmpl $1, %edi
movl %esi, %eax
adcl $0, %eax
ret
instead of:
foo:
testl %edi, %edi
sete %al
movzbl %al, %eax
addl %esi, %eax
ret
llvm-svn: 122364
|
| |
|
|
|
|
| |
while at it.
llvm-svn: 122362
|
| |
|
|
| |
llvm-svn: 122360
|
| |
|
|
|
|
| |
the folding it can.
llvm-svn: 122359
|
| |
|
|
|
|
|
| |
are not actually relaxed. For example, a section with only alignments will never
needs relaxation.
llvm-svn: 122356
|
| |
|
|
| |
llvm-svn: 122355
|
| |
|
|
|
|
|
|
| |
count operand. These should be the same but apparently are
not always, and this is cleaner anyway. This improves the
code in an existing test.
llvm-svn: 122354
|
| |
|
|
| |
llvm-svn: 122353
|
| |
|
|
| |
llvm-svn: 122349
|
| |
|
|
| |
llvm-svn: 122346
|
| |
|
|
| |
llvm-svn: 122345
|
| |
|
|
|
|
|
| |
visit instructions before their uses, since InstructionSimplify does a
better job in that case. All this prompted by Frits van Bommel.
llvm-svn: 122343
|
| |
|
|
| |
llvm-svn: 122342
|
| |
|
|
|
|
|
|
| |
being tested. This ensures that we test the tools just built and not
some random tools that might happen to be in the user's PATH. This
makes LLVM testing much more stable and predictable.
llvm-svn: 122341
|
| |
|
|
| |
llvm-svn: 122337
|
| |
|
|
|
|
|
| |
not very important since the pass is only used for testing, but it does make
it more realistic. Suggested by Frits van Bommel.
llvm-svn: 122336
|
| |
|
|
|
|
| |
type.
llvm-svn: 122334
|
| |
|
|
| |
llvm-svn: 122333
|
| |
|
|
|
|
|
| |
not assume this (for example in case more transforms get added below
it). Suggested by Frits van Bommel.
llvm-svn: 122332
|
| |
|
|
| |
llvm-svn: 122331
|
| |
|
|
|
|
| |
plenty left though!), in particular for multiplication.
llvm-svn: 122330
|
| |
|
|
| |
llvm-svn: 122329
|
| |
|
|
|
|
|
| |
quite often, but don't make much difference in practice presumably because
instcombine also knows them and more.
llvm-svn: 122328
|
| |
|
|
|
|
| |
No functionality change.
llvm-svn: 122327
|
| |
|
|
|
|
|
|
|
|
|
|
| |
a couple of existing transforms. This fires surprisingly often, for
example when compiling gcc "(X+(-1))+1->X" fires quite a lot as well
as various "and" simplifications (usually with a phi node operand).
Most of the time this doesn't make a real difference since the same
thing would have been done elsewhere anyway, eg: by instcombine, but
there are a few places where this results in simplifications that we
were not doing before.
llvm-svn: 122326
|
| |
|
|
|
|
|
|
|
|
|
|
| |
of the problems with my last attempt were in the updating of LiveIntervals
rather than the coalescing itself. Therefore, I decided to get that right first
by essentially reimplementing the existing PHIElimination using LiveIntervals.
It works correctly, with only a few tests failing (which may not be legitimate
failures) and no new verifier failures (at least as far as I can tell, I didn't
count the number per file).
llvm-svn: 122321
|
| |
|
|
|
|
|
|
|
|
|
| |
Type legalization splits up i64 values into pairs of i32 values, which leads
to poor quality code when inserting or extracting i64 vector elements.
If the vector element is loaded or stored, it can be treated as an f64 value
and loaded or stored directly from a VPR register. Use the pre-legalization
DAG combiner to cast those vector elements to f64 types so that the type
legalizer won't mess them up. Radar 8755338.
llvm-svn: 122319
|
| |
|
|
|
|
|
|
|
|
| |
section.
This helps because in practice sections form a dag with debug sections pointing
to text sections. Finishing up the text sections first makes the debug section
relaxation trivial.
llvm-svn: 122314
|
| |
|
|
|
|
| |
Fixes rdar://8782223
llvm-svn: 122313
|
| |
|
|
| |
llvm-svn: 122312
|
| |
|
|
|
|
|
| |
something that just glues two nodes together, even if it is
sometimes used for flags.
llvm-svn: 122310
|
| |
|
|
|
|
|
|
|
| |
to be the one we want to use. bugpoint reduced testcase is a little large,
I'll see if I can simplify it down more.
Fixes part of rdar://8782207
llvm-svn: 122307
|
| |
|
|
|
|
| |
they are just as useless, but at least a bit more gramatical
llvm-svn: 122305
|
| |
|
|
|
|
|
|
|
| |
tPseudoInst class, its size was changed from "special" to "2 bytes". This is
incorrect because the jump table will no longer be taken into account when
calculating branch offsets.
<rdar://problem/8782216>
llvm-svn: 122303
|
| |
|
|
| |
llvm-svn: 122302
|
| |
|
|
|
|
|
|
|
| |
Edge bundles is an annotation on the CFG that turns it into a bipartite directed
graph where each basic block is connected to an outgoing and an ingoing bundle.
These bundles are useful for identifying regions of the CFG for live range
splitting.
llvm-svn: 122301
|
| |
|
|
| |
llvm-svn: 122296
|
| |
|
|
|
|
|
|
|
|
| |
This implementation already exists as ConnectedVNInfoEqClasses in
LiveInterval.cpp, and it seems to be generally useful to have a light-weight way
of forming equivalence classes of small integers.
IntEqClasses doesn't allow enumeration of the elements in a class.
llvm-svn: 122293
|
| |
|
|
|
|
| |
causing Linux self-host failures.
llvm-svn: 122291
|
| |
|
|
| |
llvm-svn: 122288
|
| |
|
|
|
|
| |
severe slowdowns on the Linux self-host configuration.
llvm-svn: 122279
|
| |
|
|
|
|
|
|
| |
addition to being an intrinsic, and convert
lowering to use it. Hopefully the pattern fragment is doing the right thing with XMM0, looks correct in testing.
llvm-svn: 122277
|
| |
|
|
|
|
| |
backend.
llvm-svn: 122276
|
| |
|
|
|
|
| |
assured of iterator stability.
llvm-svn: 122273
|
| |
|
|
| |
llvm-svn: 122269
|
| |
|
|
| |
llvm-svn: 122268
|
| |
|
|
|
|
| |
the library unless *all* uses have been converted over to the new form.
llvm-svn: 122267
|
| |
|
|
| |
llvm-svn: 122265
|
| |
|
|
|
|
|
|
|
| |
it could only be tested indirectly, via instcombine, gvn or some other
pass that makes use of InstructionSimplify, which means that testcases
had to be carefully contrived to dance around any other transformations
that that pass did.
llvm-svn: 122264
|