- Feb 29, 2008
-
-
Anders Carlsson authored
llvm-svn: 47740
-
- Feb 19, 2008
-
-
Evan Cheng authored
- When DAG combiner is folding a bit convert into a BUILD_VECTOR, it should check if it's essentially a SCALAR_TO_VECTOR. Avoid turning (v8i16) <10, u, u, u> to <10, 0, u, u, u, u, u, u>. Instead, simply convert it to a SCALAR_TO_VECTOR of the proper type. - X86 now normalize SCALAR_TO_VECTOR to (BIT_CONVERT (v4i32 SCALAR_TO_VECTOR)). Get rid of X86ISD::S2VEC. llvm-svn: 47290
-
- Jan 10, 2008
-
-
Chris Lattner authored
x86 backend where instructions were not marked maystore/mayload, and perf issues where instructions were not marked neverHasSideEffects. It would be really nice if we could write patterns for copy instructions. I have audited all the x86 instructions down to MOVDQAmr. The flags on others and on other targets are probably not right in all cases, but no clients currently use this info that are enabled by default. llvm-svn: 45829
-
Chris Lattner authored
inferred from the instr patterns. llvm-svn: 45824
-
- Jan 07, 2008
-
-
Chris Lattner authored
llvm-svn: 45667
-
- Dec 29, 2007
-
-
Chris Lattner authored
llvm-svn: 45418
-
- Dec 18, 2007
-
-
Bill Wendling authored
based what flag to set on whether it was already marked as "isRematerializable". If there was a further check to determine if it's "really" rematerializable, then I marked it as "mayHaveSideEffects" and created a check in the X86 back-end similar to the remat one. llvm-svn: 45132
-
- Dec 13, 2007
-
-
Evan Cheng authored
Implicit def instructions, e.g. X86::IMPLICIT_DEF_GR32, are always re-materializable and they should not be spilled. llvm-svn: 44960
-
- Nov 25, 2007
-
-
Chris Lattner authored
sometimes emit "zero" and "all one" vectors multiple times, for example: _test2: pcmpeqd %mm0, %mm0 movq %mm0, _M1 pcmpeqd %mm0, %mm0 movq %mm0, _M2 ret instead of: _test2: pcmpeqd %mm0, %mm0 movq %mm0, _M1 movq %mm0, _M2 ret This patch fixes this by always arranging for zero/one vectors to be defined as v4i32 or v2i32 (SSE/MMX) instead of letting them be any random type. This ensures they get trivially CSE'd on the dag. This fix is also important for LegalizeDAGTypes, as it gets unhappy when the x86 backend wants BUILD_VECTOR(i64 0) to be legal even when 'i64' isn't legal. This patch makes the following changes: 1) X86TargetLowering::LowerBUILD_VECTOR now lowers 0/1 vectors into their canonical types. 2) The now-dead patterns are removed from the SSE/MMX .td files. 3) All the patterns in the .td file that referred to immAllOnesV or immAllZerosV in the wrong form now use *_bc to match them with a bitcast wrapped around them. 4) X86DAGToDAGISel::SelectScalarSSELoad is generalized to handle bitcast'd zero vectors, which simplifies the code actually. 5) getShuffleVectorZeroOrUndef is updated to generate a shuffle that is legal, instead of generating one that is illegal and expecting a later legalize pass to clean it up. 6) isZeroShuffle is generalized to handle bitcast of zeros. 7) several other minor tweaks. This patch is definite goodness, but has the potential to cause random code quality regressions. Please be on the lookout for these and let me know if they happen. llvm-svn: 44310
-
- Sep 11, 2007
-
-
Evan Cheng authored
llvm-svn: 41863
-
- Aug 30, 2007
-
-
Evan Cheng authored
llvm-svn: 41595
-
- Aug 02, 2007
-
-
Dan Gohman authored
X86InstrInfo::isReallyTriviallyReMaterializable knows how to handle with the isReMaterializable flag so that it is given a chance to handle them. Without hoisting constant-pool loads from loops this isn't very visible, though it does keep CodeGen/X86/constant-pool-remat-0.ll from making a copy of the constant pool on the stack. llvm-svn: 40736
-
- Jul 31, 2007
-
-
Dan Gohman authored
mnemonics from their operands instead of single spaces. This makes the assembly output a little more consistent with various other compilers (f.e. GCC), and slightly easier to read. Also, update the regression tests accordingly. llvm-svn: 40648
-
Evan Cheng authored
Redo and generalize previously removed opt for pinsrw: (vextract (v4i32 bc (v4f32 s2v (f32 load ))), 0) -> (i32 load ) llvm-svn: 40628
-
- Jul 19, 2007
-
-
Evan Cheng authored
InOperandList. This gives one piece of important information: # of results produced by an instruction. An example of the change: def ADD32rr : I<0x01, MRMDestReg, (ops GR32:$dst, GR32:$src1, GR32:$src2), "add{l} {$src2, $dst|$dst, $src2}", [(set GR32:$dst, (add GR32:$src1, GR32:$src2))]>; => def ADD32rr : I<0x01, MRMDestReg, (outs GR32:$dst), (ins GR32:$src1, GR32:$src2), "add{l} {$src2, $dst|$dst, $src2}", [(set GR32:$dst, (add GR32:$src1, GR32:$src2))]>; llvm-svn: 40033
-
- Jul 04, 2007
-
-
Bill Wendling authored
llvm-svn: 37866
-
Bill Wendling authored
Still need to have JIT generate this code. llvm-svn: 37863
-
- Jun 26, 2007
-
-
Dan Gohman authored
instruction flag, and use the flag along with a virtual member function hook for targets to override if there are instructions that are only trivially rematerializable with specific operands (i.e. constant pool loads). llvm-svn: 37728
-
- Jun 19, 2007
-
-
Dan Gohman authored
with a general target hook to identify rematerializable instructions. Some instructions are only rematerializable with specific operands, such as loads from constant pools, while others are always rematerializable. This hook allows both to be identified as being rematerializable with the same mechanism. llvm-svn: 37644
-
- May 16, 2007
-
-
Chris Lattner authored
llvm-svn: 37100
-
- Apr 24, 2007
-
-
Bill Wendling authored
llvm-svn: 36405
-
- Apr 04, 2007
-
-
Bill Wendling authored
llvm-svn: 35638
-
- Apr 03, 2007
-
-
Bill Wendling authored
llvm-svn: 35616
-
- Mar 28, 2007
-
-
Bill Wendling authored
llvm-svn: 35392
-
- Mar 27, 2007
-
-
Bill Wendling authored
the MMX instructions that are needed... llvm-svn: 35389
-
Bill Wendling authored
comparison operators. llvm-svn: 35385
-
- Mar 26, 2007
-
-
Bill Wendling authored
#include <mmintrin.h> extern __m64 C; void baz(__v2si *A, __v2si *B) { *A = C; _mm_empty(); } We get this: _baz: call "L1$pb" "L1$pb": popl %eax movl L_C$non_lazy_ptr-"L1$pb"(%eax), %eax movq (%eax), %mm0 movl 4(%esp), %eax movq %mm0, (%eax) emms ret GCC gives us this: _baz: pushl %ebx call L3 "L00000000001$pb": L3: popl %ebx subl $8, %esp movl L_C$non_lazy_ptr-"L00000000001$pb"(%ebx), %eax movl (%eax), %edx movl 4(%eax), %ecx movl 16(%esp), %eax movl %edx, (%eax) movl %ecx, 4(%eax) emms addl $8, %esp popl %ebx ret llvm-svn: 35351
-
- Mar 23, 2007
-
-
Bill Wendling authored
Add final support to get the QT example to compile. llvm-svn: 35290
-
- Mar 22, 2007
-
-
Bill Wendling authored
intrinsic. llvm-svn: 35269
-
Bill Wendling authored
llvm-svn: 35266
-
- Mar 16, 2007
-
-
Bill Wendling authored
llvm-svn: 35125
-
- Mar 15, 2007
-
-
Bill Wendling authored
llvm-svn: 35118
-
- Mar 10, 2007
-
-
Bill Wendling authored
the addition. Please let me know if you have suggestions. llvm-svn: 35055
-
- Mar 08, 2007
-
-
Bill Wendling authored
moves, loads, etc. are recognized. llvm-svn: 35031
-
- Mar 07, 2007
-
-
Bill Wendling authored
llvm-svn: 35009
-
Bill Wendling authored
load and stores. llvm-svn: 35002
-
- Mar 06, 2007
-
-
Bill Wendling authored
llvm-svn: 34978
-
Bill Wendling authored
llvm-svn: 34938
-
- Jul 19, 2006
-
-
Evan Cheng authored
llvm-svn: 29194
-
- May 16, 2006
-
-
Evan Cheng authored
llvm-svn: 28324
-