| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
in the pre alloc splitter.
llvm-svn: 62678
|
| |
|
|
|
|
| |
Also a few signed comparison fixes.
llvm-svn: 62665
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- Ensure that (operation) legalization emits proper FDIV libcall when needed.
- Fix various bugs encountered during llvm-spu-gcc build, along with various
cleanups.
- Start supporting double precision comparisons for remaining libgcc2 build.
Discovered interesting DAGCombiner feature, which is currently solved via
custom lowering (64-bit constants are not legal on CellSPU, but DAGCombiner
insists on inserting one anyway.)
- Update README.
llvm-svn: 62664
|
| |
|
|
|
|
| |
multiple values. For example, a load with an illegal operand (a load produces two values, a value and chain).
llvm-svn: 62663
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
unsigned test(unsigned a) {
return ~a;
}
llvm used to generate:
movl $4294967295, %eax
xorl 4(%esp), %eax
Now it generates:
movl 4(%esp), %eax
notl %eax
It's 3 bytes shorter.
llvm-svn: 62661
|
| |
|
|
|
|
|
|
| |
Besides APFloat, this involved removing code
from two places that thought they knew the
result of frem(0., x) but were wrong.
llvm-svn: 62645
|
| |
|
|
| |
llvm-svn: 62639
|
| |
|
|
| |
llvm-svn: 62638
|
| |
|
|
| |
llvm-svn: 62625
|
| |
|
|
|
|
| |
the last reference is also the last def (i.e. dead def), it should also check if last reference is the current machine instruction being processed. This can happen when it is processing a physical register use and setting the current machine instruction as sub-register's last ref.
llvm-svn: 62617
|
| |
|
|
| |
llvm-svn: 62616
|
| |
|
|
|
|
|
| |
causing the limited precision stuff to produce the wrong result for values in
the range [0, 1).
llvm-svn: 62615
|
| |
|
|
| |
llvm-svn: 62610
|
| |
|
|
| |
llvm-svn: 62602
|
| |
|
|
|
|
| |
sub-register indices as well.
llvm-svn: 62600
|
| |
|
|
| |
llvm-svn: 62596
|
| |
|
|
| |
llvm-svn: 62594
|
| |
|
|
|
|
|
|
| |
fully implemented yet and not used. This is
mainly to clarify that APFloat::mod implements
C fmod, not remainder.
llvm-svn: 62593
|
| |
|
|
|
|
| |
Patrick Boettcher!
llvm-svn: 62592
|
| |
|
|
| |
llvm-svn: 62590
|
| |
|
|
| |
llvm-svn: 62589
|
| |
|
|
| |
llvm-svn: 62573
|
| |
|
|
| |
llvm-svn: 62571
|
| |
|
|
| |
llvm-svn: 62561
|
| |
|
|
| |
llvm-svn: 62558
|
| |
|
|
|
|
|
| |
as its comment says, even in the case where it will be generating
extending loads. This fixes PR3216.
llvm-svn: 62557
|
| |
|
|
|
|
| |
types. After all there was a reason why std::map was used initially!
llvm-svn: 62555
|
| |
|
|
|
|
|
|
|
|
|
| |
This requires a rebuild of 'configure' itself. I will be committing that next, but
built with the wrong version of autoconf. Somebody who has the right one, please update
it.
As a side-note, because of the way autoconf works, all built tools will link against
libffi, not just lli. If you know how to fix this, please let me know ...
llvm-svn: 62553
|
| |
|
|
| |
llvm-svn: 62547
|
| |
|
|
| |
llvm-svn: 62546
|
| |
|
|
| |
llvm-svn: 62545
|
| |
|
|
|
|
| |
trapping instruction be executed unconditionally.
llvm-svn: 62541
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
SDNode subclasses to keep state that requires non-trivial
destructors, however it was already effectively impossible,
since the destructor isn't actually ever called. There currently
aren't any SDNode subclasses affected by this, and in general
it's desireable to keep SDNode objects light-weight.
This eliminates the last virtual member function in the SDNode
class, so it eliminates the need for a vtable pointer, making
SDNode smaller.
llvm-svn: 62539
|
| |
|
|
| |
llvm-svn: 62535
|
| |
|
|
|
|
|
| |
langref. Constant fold them to undef instead of trying to preserve
the trap. This fixes PR3354.
llvm-svn: 62534
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
uses are added to the From node while it is processing From's
use list, because of automatic local CSE. The fix is to avoid
visiting any new uses.
Fix a few places in the DAGCombiner that assumed that after
a RAUW call, the From node has no users and may be deleted.
This fixes PR3018.
llvm-svn: 62533
|
| |
|
|
| |
llvm-svn: 62529
|
| |
|
|
| |
llvm-svn: 62528
|
| |
|
|
| |
llvm-svn: 62526
|
| |
|
|
|
|
| |
instead of sign extending the low part (in AX/EAX/RAX) into it.
llvm-svn: 62519
|
| |
|
|
| |
llvm-svn: 62518
|
| |
|
|
| |
llvm-svn: 62516
|
| |
|
|
| |
llvm-svn: 62512
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
llvm-gcc. Most likely, it's miscompiling one of the "gen*" programs:
/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm-gcc.obj/./prev-gcc/xgcc -B/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm-gcc.obj/./prev-gcc/ -B/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm-gcc.install/i386-apple-darwin9.6.0/bin/ -c -g -O2 -mdynamic-no-pic -DIN_GCC -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -mdynamic-no-pic -DHAVE_CONFIG_H -DGENERATOR_FILE -I. -Ibuild -I../../llvm-gcc.src/gcc -I../../llvm-gcc.src/gcc/build -I../../llvm-gcc.src/gcc/../include -I./../intl -I../../llvm-gcc.src/gcc/../libcpp/include -I../../llvm-gcc.src/gcc/../libdecnumber -I../libdecnumber -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.obj/include -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/include -DENABLE_LLVM -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.obj/../llvm.src/include -D_DEBUG -D_GNU_SOURCE -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -o build/gencondmd.o build/gencondmd.c
../../llvm-gcc.src/gcc/config/i386/mmx.md:926: error: expected '}' before ')' token
../../llvm-gcc.src/gcc/config/i386/mmx.md:926: warning: excess elements in struct initializer
../../llvm-gcc.src/gcc/config/i386/mmx.md:926: warning: (near initialization for 'insn_conditions[4]')
../../llvm-gcc.src/gcc/config/i386/mmx.md:926: error: expected '}' before ')' token
../../llvm-gcc.src/gcc/config/i386/mmx.md:926: error: expected ',' or ';' before ')' token
../../llvm-gcc.src/gcc/config/i386/mmx.md:927: error: expected identifier or '(' before ',' token
../../llvm-gcc.src/gcc/config/i386/sse.md:3458: error: expected identifier or '(' before ',' token
...
llvm-svn: 62506
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
uses so we should make it the second source operand of ISD::OR so 2-address pass won't have to be smart about commuting.
%reg1024<def> = MOVSDrm %reg0, 1, %reg0, <cp#0>, Mem:LD(8,8) [ConstantPool + 0]
%reg1025<def> = MOVSD2PDrr %reg1024
%reg1026<def> = MOVDI2PDIrm <fi#-1>, 1, %reg0, 0, Mem:LD(4,16) [FixedStack-1 + 0]
%reg1027<def> = ORPSrr %reg1025<kill>, %reg1026<kill>
%reg1028<def> = MOVPD2SDrr %reg1027<kill>
%reg1029<def> = SUBSDrr %reg1028<kill>, %reg1024<kill>
%reg1030<def> = CVTSD2SSrr %reg1029<kill>
MOVSSmr <fi#0>, 1, %reg0, 0, %reg1030<kill>, Mem:ST(4,4) [FixedStack0 + 0]
%reg1031<def> = LD_Fp32m80 <fi#0>, 1, %reg0, 0, Mem:LD(4,16) [FixedStack0 + 0]
RET %reg1031<kill>, %ST0<imp-use,kill>
The reason 2-addr pass isn't smart enough to commute the ORPSrr is because it can't look pass the MOVSD2PDrr instruction.
llvm-svn: 62505
|
| |
|
|
|
|
| |
optimize it to a SINT_TO_FP when the sign bit is known zero. X86 isel should perform the optimization itself.
llvm-svn: 62504
|
| |
|
|
|
|
|
|
|
| |
we assumed a CFG structure that would be valid when all code in
the function is reachable, but not all code is necessarily
reachable. Do a simple, but horrible, CFG walk to check for this
case.
llvm-svn: 62487
|
| |
|
|
| |
llvm-svn: 62477
|
| |
|
|
|
|
|
|
|
|
| |
because of dead code, a phi could use the speculated instruction
that was not in "BB2". Make this check explicit and tighten up
some other corners. This fixes PR3292. No testcase becauase this
depends entirely on visitation order of blocks and requires a
sequence of 8 passes to repro.
llvm-svn: 62476
|
| |
|
|
|
|
| |
check. No functionality change.
llvm-svn: 62474
|