| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
SuperRegClasses. These are not necessary. Also eliminate getSubRegisterRegClass and getSuperRegisterRegClass. These are slow and their results can change if register file names change. Just use TargetLowering::getRegClassFor() to get the right TargetRegisterClass instead.
llvm-svn: 62762
|
|
|
|
|
|
| |
sub-register indices as well.
llvm-svn: 62600
|
|
|
|
| |
llvm-svn: 62127
|
|
|
|
|
|
| |
suggested by Chris.
llvm-svn: 62099
|
|
|
|
|
|
| |
X86_COND_B and X86_COND_AE, respectively.
llvm-svn: 61835
|
|
|
|
| |
llvm-svn: 61392
|
|
|
|
|
|
|
| |
constant shift count that doesn't fit in the shift instruction's
immediate field. This fixes PR3242.
llvm-svn: 61281
|
|
|
|
| |
llvm-svn: 61244
|
|
|
|
|
|
| |
arithmetic with overflow instruction.
llvm-svn: 60844
|
|
|
|
|
|
|
|
|
| |
overflow/carry from the "arithmetic with overflow" intrinsics. It searches the
machine basic block from bottom to top to find the SETO/SETC instruction that is
its conditional. If an instruction modifies EFLAGS before it reaches the
SETO/SETC instruction, then it defaults to the normal instruction emission.
llvm-svn: 60807
|
|
|
|
| |
llvm-svn: 60753
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
complete. For instance, it lowers the common case into this less-than-optimal
code:
addl %ecx, %eax
seto %cl
testb %cl, %cl
jne LBB1_2 ## overflow
instead of:
addl %ecx, %eax
jo LBB1_2 ## overflow
That will come in a future commit.
llvm-svn: 60737
|
|
|
|
|
|
| |
for spotting these!
llvm-svn: 60728
|
|
|
|
|
|
|
|
|
| |
and use it in x86 address mode folding. Also, make
getRegForValue return 0 for illegal types even if it has a
ValueMap for them, because Argument values are put in the
ValueMap. This fixes PR3181.
llvm-svn: 60696
|
|
|
|
| |
llvm-svn: 57915
|
|
|
|
|
|
|
| |
are due to argument passing in calls. This is significant because
it hits all immediate arguments to calls on x86-32.
llvm-svn: 57556
|
|
|
|
|
|
|
|
|
|
| |
this:
- movl $0, %eax
- movl %eax, _yy_n_chars
+ movl $0, _yy_n_chars
llvm-svn: 57555
|
|
|
|
| |
llvm-svn: 57553
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. Compute action in X86SelectSelect based on MVT instead of type.
2. Use TLI.getValueType(..) instead of MVT::getVT(..) because the former
handles pointers and the later doesn't.
3. Don't pass TLI into isTypeLegal, since it already has access to it as
an ivar.
#2 gives fast isel some minor new functionality: handling load/stores of
pointers.
llvm-svn: 57552
|
|
|
|
| |
llvm-svn: 57551
|
|
|
|
|
|
| |
change the generated code, but makes the code simpler.
llvm-svn: 57550
|
|
|
|
|
|
|
|
| |
which makes it easy to share the compare/imm folding logic with 'setcc'.
This shaves a bunch of instructions off the common select case, which
happens a lot in llvm-gcc.
llvm-svn: 57549
|
|
|
|
|
|
| |
loading 4 into a register and then doing the compare.
llvm-svn: 57548
|
|
|
|
| |
llvm-svn: 57547
|
|
|
|
| |
llvm-svn: 57546
|
|
|
|
| |
llvm-svn: 57545
|
|
|
|
| |
llvm-svn: 57544
|
|
|
|
|
|
|
|
|
| |
- Move the EH landing-pad code and adjust it so that it works
with FastISel as well as with SDISel.
- Add FastISel support for @llvm.eh.exception and
@llvm.eh.selector.
llvm-svn: 57539
|
|
|
|
|
|
|
| |
SDISel typically adds them in. This makes it a little easier
to compare FastISel output with SDISel output.
llvm-svn: 57266
|
|
|
|
|
|
|
|
| |
X86::CL that was used, emit an EXTRACT_SUBREG from the CL
super-register to CL. This more precisely describes how the
CL register is being used.
llvm-svn: 57264
|
|
|
|
|
|
|
| |
getting inserted into the ValueMap. This avoids infinite
recursion in some rare cases.
llvm-svn: 56989
|
|
|
|
|
|
|
|
|
|
|
| |
sequences like this:
sete %al
testb %al, %al
jne LBB11_1
with this:
je LBB11_1
llvm-svn: 56969
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
local register allocator's physreg liveness doesn't recognize subregs,
so it doesn't know that defs of %ecx that are immediately followed by
uses of %cl aren't dead. This comes up due to the way fast-isel emits
shift instructions.
This is a temporary workaround. Arguably, local regalloc should
handle subreg references correctly. On the other hand, perhaps
fast-isel should use INSERT_SUBREG instead of just assigning to the
most convenient super-register of %cl when lowering shifts.
This fixes MultiSource/Benchmarks/MallocBench/espresso,
MultiSource/Applications/hexxagon, and others, under -fast.
llvm-svn: 56947
|
|
|
|
|
|
|
|
|
|
|
| |
This allows the 64-bit forms to use+def RSP instead of ESP. This
doesn't fix any real bugs today, but it is more precise and it
makes the debug dumps on x86-64 look more consistent.
Also, add some comments describing the CALL instructions' physreg
operand uses and defs.
llvm-svn: 56925
|
|
|
|
| |
llvm-svn: 56829
|
|
|
|
|
|
|
|
| |
and X86FastISel.cpp into X86MachineFunction.h, so that it
can be shared, instead of having each selector keep track
of its own.
llvm-svn: 56825
|
|
|
|
|
|
| |
doesn't have SSE(2), with X86FastISel.
llvm-svn: 56823
|
|
|
|
| |
llvm-svn: 56802
|
|
|
|
|
|
| |
values for overflow.
llvm-svn: 56686
|
|
|
|
|
|
|
|
|
| |
require RIP-relative addressing and use it to fix a bug
in X86FastISel in x86-64 PIC mode, where it was trying to
use base/index registers with RIP-relative addresses. This
fixes a bunch of x86-64 testsuite failures.
llvm-svn: 56676
|
|
|
|
|
|
| |
require more work.
llvm-svn: 56637
|
|
|
|
|
|
| |
load from the stub, instead of the result of the load from the stub.
llvm-svn: 56626
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
s/ParamAttr/Attribute/g
s/PAList/AttrList/g
s/FnAttributeWithIndex/AttributeWithIndex/g
s/FnAttr/Attribute/g
This sets the stage
- to implement function notes as function attributes and
- to distinguish between function attributes and return value attributes.
This requires corresponding changes in llvm-gcc and clang.
llvm-svn: 56622
|
|
|
|
| |
llvm-svn: 56608
|
|
|
|
|
|
| |
object. This will be needed to support debug info.
llvm-svn: 56508
|
|
|
|
|
|
| |
from CC_X86_32_TailCall to CC_X86_32_FastCC.
llvm-svn: 56436
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
sarl $3, %ecx
instead of:
movl $3, %ecx
sarl %cl, %edx
This shrinks fast isel 176.gcc by about 2000 instructions (.3%)
llvm-svn: 56413
|
|
|
|
| |
llvm-svn: 56376
|
|
|
|
|
|
|
| |
results in better code for globals. Also, unbreak the local CSE for
GlobalValue stub loads.
llvm-svn: 56371
|
|
|
|
|
|
|
|
| |
catches a fair number of common cases. Note that this currently
causes Fast-ISel to leave behind lots of dead instructions.
Those will be dealt with in subsequent commits.
llvm-svn: 56320
|