| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 178314
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
indirect call.
To enable a load of a call address to be folded with that call, this
load is moved from outside of callseq into callseq. Such a moving
adds a non-glued node (that load) into a glued sequence. This non-glue
load is only removed when DAG selection folds them into a memory form
call instruction. When such instruction selection is disabled, it breaks
DAG schedule.
To prevent that, such moving is disabled when target favors register
indirect call.
Previous workaround disabling CALL32m/CALL64m insn selection is removed.
llvm-svn: 178308
|
|
|
|
| |
llvm-svn: 178083
|
|
|
|
| |
llvm-svn: 178082
|
|
|
|
| |
llvm-svn: 178048
|
|
|
|
|
|
| |
- Add 'PRFCHW' feature defined in AVX2 ISA extension
llvm-svn: 178040
|
|
|
|
| |
llvm-svn: 177611
|
|
|
|
| |
llvm-svn: 177417
|
|
|
|
|
|
| |
rdar://13254235
llvm-svn: 176036
|
|
|
|
|
|
| |
-feature flag, instructions definitions, test cases
llvm-svn: 175196
|
|
|
|
|
|
|
|
|
| |
1) allows the use of RIP-relative addressing in 32-bit LEA instructions under
x86-64 (ILP32 and LP64)
2) separates the size of address registers in 64-bit LEA instructions from
control by ILP32/LP64.
llvm-svn: 174208
|
|
|
|
| |
llvm-svn: 171696
|
|
|
|
|
|
| |
Patch by Michael M Kuperstein!
llvm-svn: 171414
|
|
|
|
|
|
| |
instructions. Shouldn't change any functionality since they don't have patterns to select them.
llvm-svn: 171128
|
|
|
|
|
|
| |
reversed. Memory form writes memory, but was marked as MRMSrcMem.
llvm-svn: 171123
|
|
|
|
|
|
| |
really emitted by the backend, but it reduces the number of instructions in the output files with unmodelled side effects to make auditing easier.
llvm-svn: 171118
|
|
|
|
|
|
| |
combine don't contain an EFLAGS def.
llvm-svn: 170308
|
|
|
|
|
|
|
|
|
|
| |
When an instruction as written requires 32-bit mode and we're assembling
in 64-bit mode, or vice-versa, issue a more specific diagnostic about
what's wrong.
rdar://12700702
llvm-svn: 167937
|
|
|
|
|
|
|
|
| |
- Add RTM code generation support throught 3 X86 intrinsics:
xbegin()/xend() to start/end a transaction region, and xabort() to abort a
tranaction region
llvm-svn: 167573
|
|
|
|
|
|
|
|
|
|
|
| |
- Besides used in SjLj exception handling, __builtin_setjmp/__longjmp is also
used as a light-weight replacement of setjmp/longjmp which are used to
implementation continuation, user-level threading, and etc. The support added
in this patch ONLY addresses this usage and is NOT intended to support SjLj
exception handling as zero-cost DWARF exception handling is used by default
in X86.
llvm-svn: 165989
|
|
|
|
|
|
| |
the switch statement. This keeps the unreachable default case from being hit if the instruction was created with an intrinsic with too large of an immediate.
llvm-svn: 165483
|
|
|
|
| |
llvm-svn: 164664
|
|
|
|
|
|
|
| |
- Rewirte most atomic instructions in templates for both better
maintenance and future extensions, such as HLE in TSX.
llvm-svn: 164357
|
|
|
|
|
|
| |
The patch caused "Wrong topological sorting" assertions.
llvm-svn: 163810
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We don't have enough GR64_TC registers when calling a varargs function
with 6 arguments. Since %al holds the number of vector registers used,
only %r11 is available as a scratch register.
This means that addressing modes using both base and index registers
can't be folded into TCRETURNmi64.
<rdar://problem/12282281>
llvm-svn: 163761
|
|
|
|
| |
llvm-svn: 163561
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Add 'UseSSEx' to force SSE legacy insn not being selected when AVX is
enabled.
As the penalty of inter-mixing SSE and AVX instructions, we need
prevent SSE legacy insn from being generated except explicitly
specified through some intrinsics. For patterns supported by both
SSE and AVX, so far, we force AVX insn will be tried first relying on
AddedComplexity or position in td file. It's error-prone and
introduces bugs accidentally.
'UseSSEx' is disabled when AVX is turned on. For SSE insns inherited
by AVX, we need this predicate to force VEX encoding or SSE legacy
encoding only.
For insns not inherited by AVX, we still use the previous predicates,
i.e. 'HasSSEx'. So far, these insns fall into the following
categories:
* SSE insns with MMX operands
* SSE insns with GPR/MEM operands only (xFENCE, PREFETCH, CLFLUSH,
CRC, and etc.)
* SSE4A insns.
* MMX insns.
* x87 insns added by SSE.
2 test cases are modified:
- test/CodeGen/X86/fast-isel-x86-64.ll
AVX code generation is different from SSE one. 'vcvtsi2sdq' cannot be
selected by fast-isel due to complicated pattern and fast-isel
fallback to materialize it from constant pool.
- test/CodeGen/X86/widen_load-1.ll
AVX code generation is different from SSE one after fixing SSE/AVX
inter-mixing. Exec-domain fixing prefers 'vmovapd' instead of
'vmovaps'.
llvm-svn: 162919
|
|
|
|
|
|
| |
instruction and an AVX2 instruction rather than relying on AddedComplexity.
llvm-svn: 162654
|
|
|
|
| |
llvm-svn: 162514
|
|
|
|
|
|
| |
instructions. Also fix Intel syntax for gather instructions to use 'DWORD PTR' or 'QWORD PTR' to match gas.
llvm-svn: 160420
|
|
|
|
|
|
|
|
| |
MachineLICM don't touch it.
I already had the necessary things in place for IR-level passes but missed the machine passes.
llvm-svn: 160137
|
|
|
|
|
|
|
|
|
| |
The rdrand/cmov sequence is the same that is emitted by both
GCC and ICC.
Fixes PR13284.
llvm-svn: 160117
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Corrected type for index of llvm.x86.avx2.gather.d.pd.256
from 256-bit to 128-bit.
Corrected types for src|dst|mask of llvm.x86.avx2.gather.q.ps.256
from 256-bit to 128-bit.
Support the following intrinsics:
llvm.x86.avx2.gather.d.q, llvm.x86.avx2.gather.q.q
llvm.x86.avx2.gather.d.q.256, llvm.x86.avx2.gather.q.q.256
llvm.x86.avx2.gather.d.d, llvm.x86.avx2.gather.q.d
llvm.x86.avx2.gather.d.d.256, llvm.x86.avx2.gather.q.d.256
llvm-svn: 159402
|
|
|
|
|
|
|
|
|
|
|
|
| |
Support the following intrinsics:
llvm.x86.avx2.gather.d.pd, llvm.x86.avx2.gather.q.pd
llvm.x86.avx2.gather.d.pd.256, llvm.x86.avx2.gather.q.pd.256
llvm.x86.avx2.gather.d.ps, llvm.x86.avx2.gather.q.ps
llvm.x86.avx2.gather.d.ps.256, llvm.x86.avx2.gather.q.ps.256
Modified Disassembler to handle VSIB addressing mode.
llvm-svn: 159221
|
|
|
|
| |
llvm-svn: 157903
|
|
|
|
|
|
|
|
|
| |
This implements codegen support for accesses to thread-local variables
using the local-dynamic model, and adds a clean-up pass so that the base
address for the TLS block can be re-used between local-dynamic access on
an execution path.
llvm-svn: 157818
|
|
|
|
|
|
|
| |
It was renamed in gcc/gas a while ago and causes all kinds of
confusion because it was named differently in llvm and clang.
llvm-svn: 157745
|
|
|
|
| |
llvm-svn: 156579
|
|
|
|
|
|
|
|
|
| |
The getPointerRegClass() hook will return GR32_TC, or whatever is
appropriate for the current function.
Patch by Yiannis Tsiouris!
llvm-svn: 156459
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
pre-pentiumpro architectures.
* Model FPSW (the FPU status word) as a register.
* Add ISel patterns for the FUCOM*, FNSTSW and SAHF instructions.
* During Legalize/Lowering, build a node sequence to transfer the comparison
result from FPSW into EFLAGS. If you're wondering about the right-shift: That's
an implicit sub-register extraction (%ax -> %ah) which is handled later on by
the instruction selector.
Fixes PR6679. Patch by Christoph Erhardt!
llvm-svn: 155704
|
|
|
|
| |
llvm-svn: 153935
|
|
|
|
| |
llvm-svn: 152136
|
|
|
|
| |
llvm-svn: 152014
|
|
|
|
|
|
|
| |
rdar://10921670
PR11935
llvm-svn: 151543
|
|
|
|
|
|
| |
used by the Win32 _ftol2 runtime function. Patch by Joe Groff!
llvm-svn: 151382
|
|
|
|
|
|
| |
MSP430, PPC, PTX, Sparc, X86, XCore.
llvm-svn: 150878
|
|
|
|
|
|
| |
Original patch by Kay Tiong Khoo. Few tweaks by me for code density and to reduce replication.
llvm-svn: 150873
|
|
|
|
|
|
|
| |
The different calling conventions and call-preserved registers are
represented with regmask operands that are added dynamically.
llvm-svn: 150708
|
|
|
|
| |
llvm-svn: 148338
|
|
|
|
| |
llvm-svn: 148239
|