- Mar 09, 2008
-
-
Chris Lattner authored
llvm-svn: 48117
-
Chris Lattner authored
they are produced by calls (which are known exact) and by cross block copies which are known to be produced by extends. This improves: define double @test2() { %tmp85 = call double asm sideeffect "fld0", "={st(0)}"() ret double %tmp85 } from: _test2: subl $20, %esp # InlineAsm Start fld0 # InlineAsm End fstpl 8(%esp) movsd 8(%esp), %xmm0 movsd %xmm0, (%esp) fldl (%esp) addl $20, %esp #FP_REG_KILL ret to: _test2: # InlineAsm Start fld0 # InlineAsm End #FP_REG_KILL ret by avoiding a f64 <-> f80 trip llvm-svn: 48108
-
Chris Lattner authored
an RFP register class. Teach ScheduleDAG how to handle CopyToReg with different src/dst reg classes. This allows us to compile trivial inline asms that expect stuff on the top of x87-fp stack. llvm-svn: 48107
-
Chris Lattner authored
in different register classes, e.g. copy of ST(0) to RFP*. This gets some really trivial inline asm working that plops things on the top of stack (PR879) llvm-svn: 48105
-
Chris Lattner authored
llvm-svn: 48100
-
Chris Lattner authored
llvm-svn: 48097
-
Chris Lattner authored
of BUILD_VECTORS that only have two unique elements: 1. The previous code was nondeterminstic, because it walked a map in SDOperand order, which isn't determinstic. 2. The previous code didn't handle the case when one element was undef very well. Now we ensure that the generated shuffle mask has the undef vector on the RHS (instead of potentially being on the LHS) and that any elements that refer to it are themselves undef. This allows us to compile CodeGen/X86/vec_set-9.ll into: _test3: movd %rdi, %xmm0 punpcklqdq %xmm0, %xmm0 ret instead of: _test3: movd %rdi, %xmm1 #IMPLICIT_DEF %xmm0 punpcklqdq %xmm1, %xmm0 ret ... saving a register. llvm-svn: 48060
-
Chris Lattner authored
_test3: movd %rdi, %xmm1 #IMPLICIT_DEF %xmm0 punpcklqdq %xmm1, %xmm0 ret instead of: _test3: #IMPLICIT_DEF %rax movd %rax, %xmm0 movd %rdi, %xmm1 punpcklqdq %xmm1, %xmm0 ret This is still not ideal. There is no reason to two xmm regs. llvm-svn: 48058
-
- Mar 08, 2008
-
-
Evan Cheng authored
Implement x86 support for @llvm.prefetch. It corresponds to prefetcht{0|1|2} and prefetchnta instructions. llvm-svn: 48042
-
- Mar 06, 2008
-
-
Evan Cheng authored
llvm-svn: 47998
-
Evan Cheng authored
llvm-svn: 47992
-
- Mar 05, 2008
-
-
Dale Johannesen authored
and add some protection against creating such. llvm-svn: 47957
-
Chris Lattner authored
except ppc long double. This allows us to shrink constant pool entries for x86 long double constants, which in turn allows us to use flds/fldl instead of fldt. llvm-svn: 47938
-
Chris Lattner authored
all the way to float, not stopping at double. llvm-svn: 47937
-
Dan Gohman authored
bug in r47928 (Int64Ty is the correct type for the constant pool entry here) and removes the asserts, now that the code is capable of handling i128. llvm-svn: 47932
-
Evan Cheng authored
For x86, if sse2 is available, it's not a good idea since cvtss2sd is slower than a movsd load and it prevents load folding. On x87, it's important to shrink fp constant since fldt is very expensive. llvm-svn: 47931
-
Andrew Lenharth authored
llvm-svn: 47929
-
Dan Gohman authored
llvm-svn: 47928
-
- Mar 04, 2008
-
-
Roman Levenstein authored
The basic idea is that all these algorithms are computing the longest paths from the root node or to the exit node. Therefore the existing implementation that uses and iterative and potentially exponential algorithm was changed to a well-known graph algorithm based on dynamic programming. It has a linear run-time. llvm-svn: 47884
-
Evan Cheng authored
Refactor ExpandConstantFP so it can optimize load from constpool of types larger than f64 into extload from smaller types. llvm-svn: 47883
-
Evan Cheng authored
llvm-svn: 47872
-
Dan Gohman authored
llvm-svn: 47869
-
Dan Gohman authored
llvm-svn: 47868
-
- Mar 03, 2008
-
-
Dan Gohman authored
llvm-svn: 47867
-
Dan Gohman authored
llvm-svn: 47866
-
Dan Gohman authored
llvm-svn: 47864
-
- Mar 01, 2008
-
-
Andrew Lenharth authored
llvm-svn: 47798
-
Dale Johannesen authored
unaligned load/store code using them. Per review of unaligned load/store vector patch. llvm-svn: 47782
-
Evan Cheng authored
llvm-svn: 47779
-
- Feb 29, 2008
-
-
Dan Gohman authored
llvm-svn: 47746
-
Dan Gohman authored
which allows more of the surrounding arithmetic to be done with APInt instead of uint64_t. llvm-svn: 47745
-
Dan Gohman authored
an APInt into a uint64_t to call getConstant. llvm-svn: 47742
-
- Feb 28, 2008
-
-
Dale Johannesen authored
generic & x86 versions; change generic to follow x86 and improve comments. Add PPC version (not right for non-Darwin.) llvm-svn: 47734
-
Dale Johannesen authored
llvm-svn: 47722
-
Evan Cheng authored
llvm-svn: 47710
-
Chris Lattner authored
llvm-svn: 47708
-
Evan Cheng authored
llvm-svn: 47703
-
- Feb 27, 2008
-
-
Dale Johannesen authored
same size as an int type by doing a bitconvert of load/store of the int type (same algorithm as floating point). This makes them work for ppc Altivec. There was some code that purported to handle loads of (some) vectors by splitting them into two smaller vectors, but getExtLoad rejects subvector loads, so this could never have worked; the patch removes it. llvm-svn: 47696
-
Dan Gohman authored
llvm-svn: 47686
-
Duncan Sands authored
llvm-svn: 47676
-