- Dec 25, 2008
-
-
Chris Lattner authored
llvm-svn: 61426
-
Chris Lattner authored
llvm-svn: 61423
-
- Dec 24, 2008
-
-
Chris Lattner authored
llvm-svn: 61407
-
Chris Lattner authored
llvm-svn: 61404
-
- Dec 23, 2008
-
-
Dan Gohman authored
llvm-svn: 61400
-
Dan Gohman authored
This removes all the _8, _16, _32, and _64 opcodes and replaces each group with an unsuffixed opcode. The MemoryVT field of the AtomicSDNode is now used to carry the size information. In tablegen, the size-specific opcodes are replaced by size-independent opcodes that utilize the ability to compose them with predicates. This shrinks the per-opcode tables and makes the code that handles atomics much more concise. llvm-svn: 61389
-
Mon P Wang authored
Fixed lowering of v8i16 shuffles for v8i16 when we fall back to extract/insert. llvm-svn: 61365
-
- Dec 18, 2008
-
-
Mon P Wang authored
llvm-svn: 61211
-
- Dec 12, 2008
-
-
Bill Wendling authored
which are identical to the original patterns. - Change the multiply with overflow so that we distinguish between signed and unsigned multiplication. Currently, unsigned multiplication with overflow isn't working! llvm-svn: 60963
-
Mon P Wang authored
Added support for TRUNC v8i16 to v8i8 for X86 (MMX) llvm-svn: 60916
-
Bill Wendling authored
ISD::ADD to emit an implicit EFLAGS. This was horribly broken. Instead, replace the intrinsic with an ISD::SADDO node. Then custom lower that into an X86ISD::ADD node with a associated SETCC that checks the correct condition code (overflow or carry). Then that gets lowered into the correct X86::ADDOvf instruction. Similar for SUB and MUL instructions. llvm-svn: 60915
-
- Dec 10, 2008
-
-
Bill Wendling authored
llvm-svn: 60826
-
- Dec 09, 2008
-
-
Bill Wendling authored
target-independent way of determining overflow on multiplication. It's very tricky. Patch by Zoltan Varga! llvm-svn: 60800
-
- Dec 05, 2008
-
-
Dale Johannesen authored
loops when they can be subsumed into addressing modes. Change X86 addressing mode check to realize that some PIC references need an extra register. (I believe this is correct for Linux, if not, I'm sure someone will tell me.) llvm-svn: 60608
-
- Dec 03, 2008
-
-
Evan Cheng authored
llvm-svn: 60478
-
Bill Wendling authored
llvm-svn: 60477
-
- Dec 02, 2008
-
-
Bill Wendling authored
- LowerXADDO lowers [SU]ADDO into an ADD with an implicit EFLAGS define. The EFLAGS are fed into a SETCC node which has the conditional COND_O or COND_C, depending on the type of ADDO requested. - LowerBRCOND now recognizes if it's coming from a SETCC node with COND_O or COND_C set. llvm-svn: 60388
-
- Dec 01, 2008
-
-
Duncan Sands authored
MERGE_VALUES node with only one operand, so get rid of special code that only existed to handle that possibility. llvm-svn: 60349
-
Duncan Sands authored
ReplaceNodeResults: rather than returning a node which must have the same number of results as the original node (which means mucking around with MERGE_VALUES, and which is also easy to get wrong since SelectionDAG folding may mean you don't get the node you expect), return the results in a vector. llvm-svn: 60348
-
- Nov 27, 2008
-
-
Bill Wendling authored
llvm-svn: 60156
-
- Nov 26, 2008
-
-
Bill Wendling authored
the conditional for the BRCOND statement. For instance, it will generate: addl %eax, %ecx jo LOF instead of addl %eax, %ecx ; About 10 instructions to compare the signs of LHS, RHS, and sum. jl LOF llvm-svn: 60123
-
- Nov 24, 2008
-
-
Bill Wendling authored
- Mark "add with overflow" as having a custom lowering for X86. Give it a null lowering representation for now. llvm-svn: 59971
-
Mon P Wang authored
llvm-svn: 59929
-
- Nov 23, 2008
-
-
Duncan Sands authored
practice these booleans are mostly produced by SetCC, however the concept is more general. llvm-svn: 59911
-
Mon P Wang authored
llvm-svn: 59901
-
- Nov 13, 2008
-
-
Dale Johannesen authored
(actually, code already all worked, only the comment changed). Use this to implement 'A' constraint on x86. Fixes PR 1779. llvm-svn: 59266
-
- Nov 06, 2008
-
-
Mon P Wang authored
llvm-svn: 58796
-
- Nov 05, 2008
-
-
Evan Cheng authored
llvm-svn: 58750
-
- Oct 31, 2008
-
-
Dan Gohman authored
vector element 0 for a store, as it's smaller and faster. llvm-svn: 58483
-
- Oct 30, 2008
-
-
Mon P Wang authored
One will only see an effect if legalizetype is not active. Will move support to LegalizeType soon. llvm-svn: 58426
-
- Oct 28, 2008
-
-
Chris Lattner authored
a memset using 16-byte XMM stores, but where the stack realignment code didn't work. Until it does (PR2962) disable use of xmm regs in memcpy and memset formation for linux and other targets with insufficiently aligned stacks. This is part of PR2888 llvm-svn: 58317
-
- Oct 24, 2008
-
-
Duncan Sands authored
LHS is a foldable load, then LHS and RHS are swapped and SetCCOpcode is changed to SETUGT. But the later code is expecting operands to be the wrong way round for SETUGT, but they are not in this case, resulting in an inverted compare. The solution is to move the load normalization before the correction for SETUGT. This bug was tickled by LegalizeTypes which happened to legalize the testcase slightly differently to LegalizeDAG. llvm-svn: 58092
-
- Oct 22, 2008
-
-
Dale Johannesen authored
llvm-svn: 57987
-
Duncan Sands authored
assume that i64 has been turned into a BUILD_PAIR node (when called from LegalizeTypes this hasn't happened yet) and don't use a vector shuffle mask with an illegal element type. llvm-svn: 57972
-
Dale Johannesen authored
llvm-svn: 57940
-
Dale Johannesen authored
well, sort of. (Algorithm by Ian Ollmann.) llvm-svn: 57932
-
- Oct 21, 2008
-
-
Dale Johannesen authored
The same one Apple gcc uses, faster. Also gets the extreme case in gcc.c-torture/execute/ieee/rbug.c correct which we weren't before; this is not sufficient to get the test to pass though, there is another bug. llvm-svn: 57926
-
Dan Gohman authored
in the 32-bit signed offset field of addresses. Even though this may be intended, some linkers refuse to relocate code where the relocated address computation overflows. Also, fix the sign-extension of constant offsets to use the actual pointer size, rather than the size of the GlobalAddress node, which may be different, for example on x86-64 where MVT::i32 is used when the address is being fit into the 32-bit displacement field. llvm-svn: 57885
-
Dan Gohman authored
Where previously LLVM might emit code like this: ucomisd %xmm1, %xmm0 setne %al setp %cl orb %al, %cl jne .LBB4_2 it now emits this: ucomisd %xmm1, %xmm0 jne .LBB4_2 jp .LBB4_2 It has fewer instructions and uses fewer registers, but it does have more branches. And in the case that this code is followed by a non-fallthrough edge, it may be followed by a jmp instruction, resulting in three branch instructions in sequence. Some effort is made to avoid this situation. To achieve this, X86ISelLowering.cpp now recognizes FCMP_OEQ and FCMP_UNE in lowered form, and replace them with code that emits two branches, except in the case where it would require converting a fall-through edge to an explicit branch. Also, X86InstrInfo.cpp's branch analysis and transform code now knows now to handle blocks with multiple conditional branches. It uses loops instead of having fixed checks for up to two instructions. It can now analyze and transform code generated from FCMP_OEQ and FCMP_UNE. llvm-svn: 57873
-
- Oct 20, 2008
-
-
Duncan Sands authored
LowerOperation if it doesn't know what else to do. This methods should probably be factorized some, but this is good enough for the moment. Have LowerATOMIC_BINARY_64 use EXTRACT_ELEMENT rather than assuming the operand is a BUILD_PAIR (if it is then getNode will automagically simplify the EXTRACT_ELEMENT). This way LowerATOMIC_BINARY_64 usable from LegalizeTypes. llvm-svn: 57831
-