- Dec 18, 2008
-
-
Mon P Wang authored
llvm-svn: 61211
-
- Dec 03, 2008
-
-
Dan Gohman authored
llvm-svn: 60487
-
Dan Gohman authored
foldMemoryOperand how to "fold" them, by converting them into constant-pool loads. When they aren't folded, they use xorps/cmpeqd, but for example when register pressure is high, they may now be folded as memory operands, which reduces register pressure. Also, mark V_SET0 isAsCheapAsAMove so that two-address-elimination will remat it instead of copying zeros around (V_SETALLONES was already marked). llvm-svn: 60461
-
- Oct 17, 2008
-
-
Evan Cheng authored
Fix lfence and mfence encoding. These look like MRM5r and MRM6r instructions except they do not have any operands. The RegModRM byte is encoded with register number 0. llvm-svn: 57692
-
- Oct 16, 2008
-
-
Dan Gohman authored
an unindexed load. llvm-svn: 57612
-
- Oct 15, 2008
-
-
Dan Gohman authored
the predicates by extending simple predicates to create more complex predicates instead of duplicating the logic for the simple predicates. This doesn't reduce much redundancy in DAGISelEmitter.cpp's generated source yet; that will require improvements to DAGISelEmitter.cpp's instruction sorting, to make it more effectively group nodes with similar predicates together. llvm-svn: 57565
-
- Oct 11, 2008
-
-
Dale Johannesen authored
the same pattern as roundpd/roundps, the Intel compiler builtins do not: rounds* has an extra operand. Fixes gcc.target/i386/sse4_1-rounds[sd]-[1234].c llvm-svn: 57370
-
- Oct 07, 2008
-
-
Anders Carlsson authored
Certain patterns involving the "movss" instruction were marked as requiring SSE2, when in reality movss is an SSE1 instruction. llvm-svn: 57246
-
- Oct 02, 2008
-
-
Bill Wendling authored
a constant vector ("{0x123, 0x456}" syntax). The fix is to simplify the _mm_srli_si128 macro, and move the "* 8" from the macro into the compiler back-end. I can't change the existing __builtins because so many people are using them :-(." Patch by Stuart Hastings! llvm-svn: 56944
-
- Sep 27, 2008
-
-
Evan Cheng authored
Implement "punpckldq %xmm0, $xmm0" as "pshufd $0x50, %xmm0, %xmm" unless optimizing for code size. llvm-svn: 56711
-
- Sep 26, 2008
-
-
Evan Cheng authored
llvm-svn: 56697
-
- Sep 25, 2008
-
-
Evan Cheng authored
With sse3 and when the source is a load or has multiple uses, favors movddup over shuffp*, pshufd, etc. Without sse3 or when the source is from a register, make use of movlhps llvm-svn: 56620
-
Evan Cheng authored
llvm-svn: 56600
-
Evan Cheng authored
Fix patterns for SSE4.1 move and sign extend instructions. Also add instructions which fold VZEXT_MOVL and VZEXT_LOAD. llvm-svn: 56594
-
- Sep 12, 2008
-
-
Dan Gohman authored
with ConstantInt. This led to fixing a bug in TargetLowering.cpp using getValue instead of getAPIntValue. llvm-svn: 56159
-
- Sep 06, 2008
-
-
Eli Friedman authored
i32>. This is a little messy, but it works. We should really get rid of the intrinsics, though, since they map perfectly well to standard LLVM instructions. llvm-svn: 55864
-
- Aug 28, 2008
-
-
Evan Cheng authored
llvm-svn: 55466
-
- Aug 20, 2008
-
-
Dan Gohman authored
necessary to use dyn_cast in these predicates. llvm-svn: 55055
-
- Aug 08, 2008
-
-
Dan Gohman authored
X86ISelLowering creates. llvm-svn: 54544
-
- Aug 06, 2008
-
-
Evan Cheng authored
llvm-svn: 54376
-
- Jul 17, 2008
-
-
Nate Begeman authored
llvm-svn: 53720
-
Nate Begeman authored
llvm-svn: 53719
-
- Jul 10, 2008
-
-
Evan Cheng authored
llvm-svn: 53386
-
- Jun 16, 2008
-
-
Evan Cheng authored
llvm-svn: 52363
-
Evan Cheng authored
llvm-svn: 52352
-
- Jun 13, 2008
-
-
Duncan Sands authored
wrong for volatile loads and stores. In fact this is almost all of them! There are three types of problems: (1) it is wrong to change the width of a volatile memory access. These may be used to do memory mapped i/o, in which case a load can have an effect even if the result is not used. Consider loading an i32 but only using the lower 8 bits. It is wrong to change this into a load of an i8, because you are no longer tickling the other three bytes. It is also unwise to make a load/store wider. For example, changing an i16 load into an i32 load is wrong no matter how aligned things are, since the fact of loading an additional 2 bytes can have i/o side-effects. (2) it is wrong to change the number of volatile load/stores: they may be counted by the hardware. (3) it is wrong to change a volatile load/store that requires one memory access into one that requires several. For example on x86-32, you can store a double in one processor operation, but to store an i64 requires two (two i32 stores). In a multi-threaded program you may want to bitcast an i64 to a double and store as a double because that will occur atomically, and be indivisible to other threads. So it would be wrong to convert the store-of-double into a store of an i64, because this will become two i32 stores - no longer atomic. My policy here is to say that the number of processor operations for an illegal operation is undefined. So it is alright to change a store of an i64 (requires at least two stores; but could be validly lowered to memcpy for example) into a store of double (one processor op). In short, if the new store is legal and has the same size then I say that the transform is ok. It would also be possible to say that transforms are always ok if before they were illegal, whether after they are illegal or not, but that's more awkward to do and I doubt it buys us anything much. However this exposed an interesting thing - on x86-32 a store of i64 is considered legal! That is because operations are marked legal by default, regardless of whether the type is legal or not. In some ways this is clever: before type legalization this means that operations on illegal types are considered legal; after type legalization there are no illegal types so now operations are only legal if they really are. But I consider this to be too cunning for mere mortals. Better to do things explicitly by testing AfterLegalize. So I have changed things so that operations with illegal types are considered illegal - indeed they can never map to a machine operation. However this means that the DAG combiner is more conservative because before it was "accidentally" performing transforms where the type was illegal because the operation was nonetheless marked legal. So in a few such places I added a check on AfterLegalize, which I suppose was actually just forgotten before. This causes the DAG combiner to do slightly more than it used to, which resulted in the X86 backend blowing up because it got a slightly surprising node it wasn't expecting, so I tweaked it. llvm-svn: 52254
-
- May 29, 2008
-
-
Evan Cheng authored
llvm-svn: 51667
-
- May 28, 2008
-
-
Dan Gohman authored
llvm-svn: 51630
-
Mon P Wang authored
is a memory location llvm-svn: 51626
-
- May 24, 2008
-
-
Evan Cheng authored
llvm-svn: 51533
-
Evan Cheng authored
Eliminate x86.sse2.movs.d, x86.sse2.shuf.pd, x86.sse2.unpckh.pd, and x86.sse2.unpckl.pd intrinsics. These will be lowered into shuffles. llvm-svn: 51531
-
Evan Cheng authored
Remove x86.sse2.loadh.pd and x86.sse2.loadl.pd. These will be lowered into load and shuffle instructions. llvm-svn: 51522
-
- May 23, 2008
-
-
Evan Cheng authored
llvm-svn: 51501
-
Evan Cheng authored
llvm-svn: 51490
-
Dan Gohman authored
load-folding table entries for PMULDQ and PMULLD. llvm-svn: 51489
-
Evan Cheng authored
Bug: rcpps can only folds a load if the address is 16-byte aligned. Fixed many 'ps' load folding patterns in X86InstrSSE.td which are missing the proper alignment checks. Also fixed some 80 col. violations. llvm-svn: 51462
-
- May 22, 2008
-
-
Evan Cheng authored
llvm-svn: 51435
-
- May 20, 2008
-
-
Evan Cheng authored
llvm-svn: 51327
-
- May 13, 2008
-
-
Nate Begeman authored
llvm-svn: 51057
-
Nate Begeman authored
llvm-svn: 51020
-