| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
X86 memory operand.
llvm-svn: 107925
|
| |
|
|
| |
llvm-svn: 107920
|
| |
|
|
|
|
|
|
|
|
|
|
| |
in memory operands at the same type as hard coded segments.
This fixes problems where we'd emit the segment override after
the REX prefix on instructions like:
mov %gs:(%rdi), %rax
This fixes rdar://8127102. I have several cleanup patches coming
next.
llvm-svn: 107917
|
| |
|
|
|
|
|
|
|
| |
returns the start of the memory operand for an instruction.
Introduce a new "X86AddrSegment" enum to reduce # magic numbers
referring to X86 memory operand layout.
llvm-svn: 107916
|
| |
|
|
|
|
| |
to a Tablegen implementation.
llvm-svn: 107913
|
| |
|
|
| |
llvm-svn: 107904
|
| |
|
|
|
|
|
|
|
|
|
| |
This pass runs before COPY instructions are passed to copyPhysReg, so we simply
translate COPY to the proper pseudo instruction. Note that copyPhysReg does not
handle floating point stack copies.
Once COPY is used everywhere, this can be cleaned up a bit, and most of the
pseudo instructions can be removed.
llvm-svn: 107899
|
| |
|
|
| |
llvm-svn: 107898
|
| |
|
|
|
|
| |
This pass can go away entirely soon.
llvm-svn: 107892
|
| |
|
|
|
|
|
| |
words within the 64-bit D registers. Use VLD1/VST1 with 64-bit elements
instead.
llvm-svn: 107890
|
| |
|
|
| |
llvm-svn: 107882
|
| |
|
|
|
|
|
|
|
| |
EXTRACT_SUBREG no longer appears as a machine instruction. Use COPY instead.
Add isCopy() checks in many places using isMoveInstr() and isExtractSubreg().
The isMoveInstr hook will be removed later.
llvm-svn: 107879
|
| |
|
|
|
|
|
| |
Fix X86InstrInfo::convertToThreeAddressWithLEA to generate COPY instead of
INSERT_SUBREG.
llvm-svn: 107878
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(X >s -1) ? C1 : C2 and (X <s 0) ? C2 : C1
into ((X >>s 31) & (C2 - C1)) + C1, avoiding the conditional.
This optimization could be extended to take non-const C1 and C2 but we better
stay conservative to avoid code size bloat for now.
for
int sel(int n) {
return n >= 0 ? 60 : 100;
}
we now generate
sarl $31, %edi
andl $40, %edi
leal 60(%rdi), %eax
instead of
testl %edi, %edi
movl $60, %ecx
movl $100, %eax
cmovnsl %ecx, %eax
llvm-svn: 107866
|
| |
|
|
|
|
|
|
| |
correct the testcase for valid assembly.
Needs more tests.
llvm-svn: 107860
|
| |
|
|
| |
llvm-svn: 107856
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
simplest case when the following conditions are met:
1. The arguments are f32.
2. The arguments are loads and they have no uses other than the comparison.
3. The comparison code is EQ or NE.
e.g.
vldr.32 s0, [r1]
vldr.32 s1, [r0]
vcmpe.f32 s1, s0
vmrs apsr_nzcv, fpscr
beq LBB0_2
=>
ldr r1, [r1]
ldr r0, [r0]
cmp r0, r1
beq LBB0_2
More complicated cases will be implemented in subsequent patches.
llvm-svn: 107852
|
| |
|
|
|
|
|
|
|
| |
Add explicit testcases for tail calls within the same module.
Duplicate some code to humor those who think .w doesn't apply on ARM.
Leave this disabled on Thumb1, and add some comments explaining why it's hard
and won't gain much.
llvm-svn: 107851
|
| |
|
|
|
|
| |
Debug info intrinsics win for now.
llvm-svn: 107850
|
| |
|
|
| |
llvm-svn: 107832
|
| |
|
|
| |
llvm-svn: 107831
|
| |
|
|
|
|
|
|
|
| |
address calculation instructions leading up to a jump table when we're trying
to convert them into a TB[H] instruction in Thumb2. This realistically
shouldn't happen much, if at all, for well formed inputs, but it's more correct
to handle it. rdar://7387682
llvm-svn: 107830
|
| |
|
|
| |
llvm-svn: 107826
|
| |
|
|
|
|
|
| |
in the integrated assembler. Still some discussion to be
done.
llvm-svn: 107825
|
| |
|
|
| |
llvm-svn: 107823
|
| |
|
|
|
|
| |
for consistency sake.
llvm-svn: 107820
|
| |
|
|
| |
llvm-svn: 107818
|
| |
|
|
| |
llvm-svn: 107811
|
| |
|
|
|
|
| |
This fixes PR7540.
llvm-svn: 107809
|
| |
|
|
|
|
| |
a separate DCE pass over MachineInstrs.
llvm-svn: 107804
|
| |
|
|
|
|
|
| |
a bunch of stuff, to allow the target-independent calling convention
logic to be employed.
llvm-svn: 107800
|
| |
|
|
| |
llvm-svn: 107798
|
| |
|
|
|
|
|
|
| |
around everywhere, and also give it an InsertPt member, to enable isel
to operate at an arbitrary position within a block, rather than just
appending to a block.
llvm-svn: 107791
|
| |
|
|
|
|
|
|
|
| |
instance, rather than pointers to all of FunctionLoweringInfo's
members.
This eliminates an NDEBUG ABI sensitivity.
llvm-svn: 107789
|
| |
|
|
|
|
| |
code can do calling-convention queries. This obviates OutputArgReg.
llvm-svn: 107786
|
| |
|
|
| |
llvm-svn: 107752
|
| |
|
|
| |
llvm-svn: 107750
|
| |
|
|
|
|
| |
more appropriate sections. No functionality changes
llvm-svn: 107749
|
| |
|
|
| |
llvm-svn: 107747
|
| |
|
|
| |
llvm-svn: 107746
|
| |
|
|
| |
llvm-svn: 107743
|
| |
|
|
|
|
| |
they've been tested to work.
llvm-svn: 107742
|
| |
|
|
| |
llvm-svn: 107740
|
| |
|
|
|
|
|
| |
than assuming a target will custom lower them. Targets which do so should
exlicitly mark them as having custom lowerings. PR7454.
llvm-svn: 107734
|
| |
|
|
|
|
| |
allocated to consecutive registers.
llvm-svn: 107730
|
| |
|
|
|
|
|
| |
print the (%rip) only if the 'a' modifier is present.
PR 7528.
llvm-svn: 107727
|
| |
|
|
|
|
|
| |
This means that an instruction defining an S register will affect the domain of
the parent D register.
llvm-svn: 107725
|
| |
|
|
| |
llvm-svn: 107723
|
| |
|
|
| |
llvm-svn: 107720
|
| |
|
|
| |
llvm-svn: 107717
|