- Sep 16, 2012
-
-
Nadav Rotem authored
It had patterns for zext-loading and extending. This commit adds patterns for loading a wide type, performing a bitcast, and extending. This is an odd pattern, but it is commonly used when writing code with intrinsics. rdar://11897677 llvm-svn: 163995
-
- Sep 10, 2012
-
-
Michael Liao authored
- Fix an remaining issue of PR11674 as well llvm-svn: 163528
-
- Sep 08, 2012
-
-
Craig Topper authored
llvm-svn: 163473
-
- Sep 06, 2012
-
-
Craig Topper authored
Use iPTR instead of i32 for extract_subvector/insert_subvector index in lowering and patterns. This makes it consistent with the incoming DAG nodes from the DAG builder. llvm-svn: 163293
-
Craig Topper authored
Add patterns for converting stores of subvector_extracts of lower 128-bits of a 256-bit vector to VMOVAPSmr/VMOVUPSmr. llvm-svn: 163292
-
- Sep 05, 2012
-
-
Craig Topper authored
Remove some of the patterns added in r163196. Increasing the complexity on insert_subvector into undef accomplishes the same thing. llvm-svn: 163198
-
Craig Topper authored
Add patterns for integer forms of VINSERTF128/VINSERTI128 folded with loads. Also add patterns to turn subvector inserts with loads to index 0 of an undef into VMOVAPS. llvm-svn: 163196
-
Craig Topper authored
Convert vextracti128/vextractf128 intrinsics to extract_subvector at DAG build time. Similar was previously done for vinserti128/vinsertf128. Add patterns for folding these extract_subvectors with stores. llvm-svn: 163192
-
- Sep 01, 2012
-
-
Craig Topper authored
llvm-svn: 163053
-
- Aug 31, 2012
-
-
Michael Liao authored
llvm-svn: 162973
-
Jim Grosbach authored
The assembly string for the VMOVPQIto64rr instruction incorrectly lacked the 'v' prefix, resulting in mis-assembly of the vanilla movd instruction. llvm-svn: 162963
-
- Aug 30, 2012
-
-
Michael Liao authored
- 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
-
- Aug 28, 2012
-
-
Bill Wendling authored
it here, then a 'register-memory' version would wrongly get the commutative flag. <rdar://problem/12180135> llvm-svn: 162741
-
Craig Topper authored
llvm-svn: 162740
-
Craig Topper authored
llvm-svn: 162738
-
Jakob Stoklund Olesen authored
llvm-svn: 162714
-
- Aug 27, 2012
-
-
Craig Topper authored
Don't allow vextractf128 to be folded with unaligned stores. We don't fold unaligned loads so shouldn't fold unaligned stores as it can cause an alignment fault to occur. llvm-svn: 162658
-
Craig Topper authored
Fold some patterns into instruction definitons so tablegen can infer flags removing the need for an explicit 'neverHasSideEffects = 1' llvm-svn: 162656
-
Craig Topper authored
Add HasAVX1Only predicate and use it for patterns that have an AVX1 instruction and an AVX2 instruction rather than relying on AddedComplexity. llvm-svn: 162654
-
- Aug 25, 2012
-
-
Jakob Stoklund Olesen authored
llvm-svn: 162622
-
- Aug 24, 2012
-
-
Jakob Stoklund Olesen authored
They were inserted to silence TableGen's warning about redundant properties. That warning is now gone. llvm-svn: 162517
-
- Aug 19, 2012
-
-
Nadav Rotem authored
this allows for better code generation. Added a new DAGCombine transformation to convert FMAX and FMIN to FMANC and FMINC, which are commutative. For example: movaps %xmm0, %xmm1 movsd LC(%rip), %xmm0 minsd %xmm1, %xmm0 becomes: minsd LC(%rip), %xmm0 llvm-svn: 162187
-
- Aug 14, 2012
-
-
Michael Liao authored
- FP_EXTEND only support extending from vectors with matching elements. This results in the scalarization of extending to v2f64 from v2f32, which will be legalized to v4f32 not matching with v2f64. - add X86-specific VFPEXT supproting extending from v4f32 to v2f64. - add BUILD_VECTOR lowering helper to recover back the original extending from v4f32 to v2f64. - test case is enhanced to include different vector width. llvm-svn: 161894
-
- Aug 06, 2012
-
-
Craig Topper authored
Implement proper handling for pcmpistri/pcmpestri intrinsics. Requires custom handling in DAGISelToDAG due to limitations in TableGen's implicit def handling. Fixes PR11305. llvm-svn: 161318
-
- Aug 05, 2012
-
-
Craig Topper authored
llvm-svn: 161306
-
- Aug 02, 2012
-
-
Manman Ren authored
llvm-svn: 161143
-
- Jul 30, 2012
-
-
Craig Topper authored
llvm-svn: 160942
-
Craig Topper authored
llvm-svn: 160941
-
Craig Topper authored
Fix up patterns for VCVTSS2SD. Specifically give it priority over SSE form. Add an OptForSpeed to explicitly pair up with an OptForSize that was already on another pattern. llvm-svn: 160939
-
Craig Topper authored
llvm-svn: 160938
-
Craig Topper authored
llvm-svn: 160937
-
- Jul 28, 2012
-
-
Craig Topper authored
llvm-svn: 160922
-
Craig Topper authored
llvm-svn: 160921
-
Craig Topper authored
llvm-svn: 160914
-
Craig Topper authored
llvm-svn: 160913
-
- Jul 27, 2012
-
-
Jakob Stoklund Olesen authored
I'll remove these two sub-register indexes shortly. llvm-svn: 160831
-
Jakob Stoklund Olesen authored
The (COPY_TO_REGCLASS GR32:$src, VR128) pattern looks odd, but copyPhysReg does the right thing with it. (The old pattern would eventually produce the same cross-class copy). llvm-svn: 160830
-
Jakob Stoklund Olesen authored
This gets rid of some more INSERT_SUBREG - IMPLICIT_DEF patterns, simplifying the emitted code a bit. llvm-svn: 160820
-
Jakob Stoklund Olesen authored
The SUBREG_TO_REG instruction has magic semantics asserting that the source value was defined by an instruction that cleared the high half of the register. Those semantics are never actually exploited for xmm registers. llvm-svn: 160818
-
- Jul 26, 2012
-
-
Jakob Stoklund Olesen authored
These idempotent sub-register indices don't do anything --- They simply map XMM registers to themselves. They no longer affect register classes either since the SubRegClasses field has been removed from Target.td. This patch replaces XMM->XMM EXTRACT_SUBREG and INSERT_SUBREG patterns with COPY_TO_REGCLASS patterns which simply become COPY instructions. The number of IMPLICIT_DEF instructions before register allocation is reduced, and that is the cause of the test case changes. llvm-svn: 160816
-