| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
| |
rounding correctly. This implementation is a generalization of
the x86_64 code in compiler-rt.
This fixes rdar://7683708.
llvm-svn: 97778
|
| |
|
|
| |
llvm-svn: 97776
|
| |
|
|
|
|
| |
the following Intrinsic::bswap code. I have no idea why it wasn't breaking stuff.
llvm-svn: 97774
|
| |
|
|
| |
llvm-svn: 97769
|
| |
|
|
| |
llvm-svn: 97768
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This code:
float floatingPointComparison(float x, float y) {
double product = (double)x * y;
if (product == 0.0)
return product;
return product - 1.0;
}
produces this:
_floatingPointComparison:
0000000000000000 cvtss2sd %xmm1,%xmm1
0000000000000004 cvtss2sd %xmm0,%xmm0
0000000000000008 mulsd %xmm1,%xmm0
000000000000000c pxor %xmm1,%xmm1
0000000000000010 ucomisd %xmm1,%xmm0
0000000000000014 jne 0x00000004
0000000000000016 jp 0x00000002
0000000000000018 jmp 0x00000008
000000000000001a addsd 0x00000006(%rip),%xmm0
0000000000000022 cvtsd2ss %xmm0,%xmm0
0000000000000026 ret
The "jne/jp/jmp" sequence can be reduced to this instead:
_floatingPointComparison:
0000000000000000 cvtss2sd %xmm1,%xmm1
0000000000000004 cvtss2sd %xmm0,%xmm0
0000000000000008 mulsd %xmm1,%xmm0
000000000000000c pxor %xmm1,%xmm1
0000000000000010 ucomisd %xmm1,%xmm0
0000000000000014 jp 0x00000002
0000000000000016 je 0x00000008
0000000000000018 addsd 0x00000006(%rip),%xmm0
0000000000000020 cvtsd2ss %xmm0,%xmm0
0000000000000024 ret
for a savings of 2 bytes.
This xform can happen when we recognize that jne and jp jump to the same "true"
MBB, the unconditional jump would jump to the "false" MBB, and the "true" branch
is the fall-through MBB.
llvm-svn: 97766
|
| |
|
|
| |
llvm-svn: 97765
|
| |
|
|
| |
llvm-svn: 97763
|
| |
|
|
|
|
| |
of either sxtb16 or uxtb16, and the unified syntax does not specify ".w".
llvm-svn: 97760
|
| |
|
|
|
|
| |
positive where pointers would be leaked on llvm_shutdown.
llvm-svn: 97759
|
| |
|
|
|
|
|
|
| |
as nounwind are marked with a -1 call-site value. This is necessary to, for
example, correctly process exceptions thrown from within an "unexpected"
execption handler (see SingleSource/Regression/C++/EH/expection_spec_test.cpp).
llvm-svn: 97757
|
| |
|
|
|
|
| |
frame pointer.
llvm-svn: 97755
|
| |
|
|
| |
llvm-svn: 97752
|
| |
|
|
| |
llvm-svn: 97747
|
| |
|
|
|
|
|
|
| |
an undef value. This is only going to come up for bugpoint-reduced tests --
correct programs will not access memory at undefined addresses -- so it's not
worth the effort of doing anything more aggressive.
llvm-svn: 97745
|
| |
|
|
|
|
| |
We need this so can not bake DESTDIR into the O'Caml symlinks.
llvm-svn: 97743
|
| |
|
|
|
|
|
|
|
| |
These instructions technically define AL,AH, but a trick in X86ISelDAGToDAG
reads AX in order to avoid reading AH with a REX instruction.
Fix PR6489.
llvm-svn: 97742
|
| |
|
|
|
|
| |
clobber registers in a different order.
llvm-svn: 97741
|
| |
|
|
| |
llvm-svn: 97740
|
| |
|
|
|
|
|
| |
register if it isn't possible to match the indexes *and* the base.
This fixes some fast isel rejects of load instructions on oggenc.
llvm-svn: 97739
|
| |
|
|
| |
llvm-svn: 97738
|
| |
|
|
|
|
|
|
|
| |
just count references to it from JIT output to decide when to destroy it. This
patch waits to destroy the JIT's memory of a stub until the Function it refers
to is destroyed. External function stubs and GVIndirectSyms aren't destroyed
until the JIT itself is.
llvm-svn: 97737
|
| |
|
|
| |
llvm-svn: 97735
|
| |
|
|
|
|
|
|
|
|
| |
Instruction (PLI) for disassembly only.
According to A8.6.120 PLI (immediate, literal), for example, different
instructions are generated for "pli [pc, #0]" and "pli [pc, #-0"]. The
disassembler solves it by mapping -0 (negative zero) to -1, -1 to -2, ..., etc.
llvm-svn: 97731
|
| |
|
|
|
|
|
|
|
|
| |
transformation much more careful. Truncating binary '01' to '1' sounds like it's
safe until you realize that it switched from positive to negative under a signed
interpretation, and that depends on the icmp predicate.
Also a few miscellaneous cleanups.
llvm-svn: 97721
|
| |
|
|
|
|
| |
the set.
llvm-svn: 97720
|
| |
|
|
| |
llvm-svn: 97713
|
| |
|
|
| |
llvm-svn: 97709
|
| |
|
|
|
|
| |
dead is really alive. This is necessary to catch a lot of common cse opportunities for targets like x86.
llvm-svn: 97706
|
| |
|
|
|
|
|
|
|
|
| |
as the very last thing before node emission. This should
dramatically reduce the number of times we do 'MatchAddress'
on X86, speeding up compile time. This also improves comments
in the tables and shrinks the table a bit, now down to
80506 bytes for x86.
llvm-svn: 97703
|
| |
|
|
|
|
|
| |
destroyed, it could leave stubs in the StubToResolverMap, which would confuse
the lookup for subsequent lazy compilations.
llvm-svn: 97698
|
| |
|
|
|
|
| |
a patch my Micah Villmow for PR6465.
llvm-svn: 97692
|
| |
|
|
| |
llvm-svn: 97691
|
| |
|
|
| |
llvm-svn: 97690
|
| |
|
|
|
|
| |
cannot be CSE'ed, but it *can* be used to replace a common subexpression.
llvm-svn: 97688
|
| |
|
|
| |
llvm-svn: 97687
|
| |
|
|
|
|
| |
over only virtual register defs. This matches what isEqual() is doing.
llvm-svn: 97680
|
| |
|
|
|
|
| |
implements a special DenseMapInfo trait for DenseMap<MachineInstr*> that compare the value of the MachineInstr rather than the pointer value. Since the hashing and equality test functions ignore defs it's useful for doing CSE kind optimization.
llvm-svn: 97678
|
| |
|
|
|
|
|
|
| |
MULS <Rdm>, <Rn>, <Rdm>
according to A8.6.105 MUL Encoding T1.
llvm-svn: 97675
|
| |
|
|
| |
llvm-svn: 97673
|
| |
|
|
| |
llvm-svn: 97670
|
| |
|
|
| |
llvm-svn: 97667
|
| |
|
|
|
|
|
|
|
|
| |
CSE and recursive RAUW calls delete a node from the use list,
invalidating the use list iterator. There's currently no known
way to reproduce this in an unmodified LLVM, however there's no
fundamental reason why a SelectionDAG couldn't be formed which
would trigger this case.
llvm-svn: 97665
|
| |
|
|
|
|
| |
physical registers are getting in the way.
llvm-svn: 97664
|
| |
|
|
| |
llvm-svn: 97663
|
| |
|
|
|
|
| |
error. May not fix it in an ABI complient way. It wasn't clear what gcc does
llvm-svn: 97660
|
| |
|
|
| |
llvm-svn: 97659
|
| |
|
|
|
|
|
| |
--- Reverse-merging r97592 into '.':
U lib/CodeGen/TargetLoweringObjectFileImpl.cpp
llvm-svn: 97657
|
| |
|
|
|
|
| |
and STRHT for disassembly only.
llvm-svn: 97655
|
| |
|
|
|
|
| |
Scope accelerator.
llvm-svn: 97652
|