| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
| |
llvm-svn: 62710
|
| |
|
|
| |
llvm-svn: 62699
|
| |
|
|
|
|
|
| |
we want to clear %ah to zero before a division, just use a
zero-extending mov to %al. This fixes PR3366.
llvm-svn: 62691
|
| |
|
|
| |
llvm-svn: 62681
|
| |
|
|
|
|
|
| |
prototypes, in operand type legalization. No
functionality change.
llvm-svn: 62680
|
| |
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
sub-register indices as well.
llvm-svn: 62600
|
| |
|
|
| |
llvm-svn: 62558
|
| |
|
|
|
|
| |
instead of sign extending the low part (in AX/EAX/RAX) into it.
llvm-svn: 62519
|
| |
|
|
| |
llvm-svn: 62518
|
| |
|
|
| |
llvm-svn: 62516
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 62415
|
| |
|
|
|
|
| |
folded in 64-bit mode.
llvm-svn: 62413
|
| |
|
|
| |
llvm-svn: 62405
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
X86. This code:
void f() {
uint32_t x;
float y = (float)x;
}
used to be:
movl %eax, -8(%ebp)
movl [2^52 double], -4(%ebp)
movsd -8(%ebp), %xmm0
subsd [2^52 double], %xmm0
cvtsd2ss %xmm0, %xmm0
Is now:
movsd [2^52 double], %xmm0
movsd %xmm0, %xmm1
movd %ecx, %xmm2
orps %xmm2, %xmm1
subsd %xmm0, %xmm1
cvtsd2ss %xmm1, %xmm0
This is faster on X86. Note that there's an extra load of %xmm0 into %xmm1. That
will be fixed in a later coalescer fix.
llvm-svn: 62404
|
| |
|
|
| |
llvm-svn: 62394
|
| |
|
|
|
|
| |
PPCTargetLowering::LowerGlobalAddress to check if isVerifiedDebugInfoDesc() is true. Given the recent changes, it would falsely return true for a lot of GlobalAddressSDNode's.
llvm-svn: 62373
|
| |
|
|
|
|
| |
implement getSubtargetImpl.
llvm-svn: 62369
|
| |
|
|
| |
llvm-svn: 62338
|
| |
|
|
|
|
| |
available.
llvm-svn: 62299
|
| |
|
|
|
|
|
| |
a new toy hazard recognizier heuristic which attempts to direct the
scheduler to avoid clumping large groups of loads or stores too densely.
llvm-svn: 62291
|
| |
|
|
|
|
|
| |
to support MachineInstr-based scheduling in addition to
SDNode-based scheduling.
llvm-svn: 62284
|
| |
|
|
| |
llvm-svn: 62282
|
| |
|
|
| |
llvm-svn: 62281
|
| |
|
|
| |
llvm-svn: 62279
|
| |
|
|
|
|
|
|
|
|
|
| |
and into the ScheduleDAGInstrs class, so that they don't get
destructed and re-constructed for each block. This fixes a
compile-time hot spot in the post-pass scheduler.
To help facilitate this, tidy and do some minor reorganization
in the scheduler constructor functions.
llvm-svn: 62275
|
| |
|
|
| |
llvm-svn: 62267
|
| |
|
|
| |
llvm-svn: 62265
|
| |
|
|
| |
llvm-svn: 62259
|
| |
|
|
|
|
| |
the ADDRspii addressing mode.
llvm-svn: 62258
|
| |
|
|
|
|
| |
changes in the last commit.
llvm-svn: 62257
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
sequences in SPUDAGToDAGISel.cpp and SPU64InstrInfo.td, killing custom
DAG node types as needed.
- i64 mul is now a legal instruction, but emits an instruction sequence
that stretches tblgen and the imagination, as well as violating laws of
several small countries and most southern US states (just kidding, but
looking at a function with 80+ parameters is really weird and just plain
wrong.)
- Update tests as needed.
llvm-svn: 62254
|
| |
|
|
|
|
|
|
|
|
|
| |
frame index. eliminateFrameIndex will replace these instructions with
(LDWSP|STWSP|LDAWSP) or (LDW|STW|LDAWF) if a frame pointer is in use.
This fixes PR 3324. Previously we used LDWSP, STWSP, LDAWSP before frame
pointer elimination. However since they were marked as implicitly using
SP they could not be rematerialised.
llvm-svn: 62238
|
| |
|
|
| |
llvm-svn: 62198
|
| |
|
|
| |
llvm-svn: 62196
|
| |
|
|
| |
llvm-svn: 62195
|
| |
|
|
|
|
|
|
| |
to Eli for pointing out that these forms don't ignore the high bits of
their index operands, and as such are not immediately suitable for use
by isel.
llvm-svn: 62194
|
| |
|
|
| |
llvm-svn: 62180
|
| |
|
|
| |
llvm-svn: 62179
|
| |
|
|
| |
llvm-svn: 62174
|
| |
|
|
|
|
| |
sees attributes it doesn't know.
llvm-svn: 62155
|
| |
|
|
| |
llvm-svn: 62127
|
| |
|
|
|
|
| |
suggested by Chris.
llvm-svn: 62099
|
| |
|
|
| |
llvm-svn: 62024
|
| |
|
|
| |
llvm-svn: 61991
|
| |
|
|
| |
llvm-svn: 61972
|