- Oct 25, 2008
-
-
Nicolas Geoffray authored
llvm-svn: 58141
-
Oscar Fuentes authored
llvm-svn: 58133
-
Dale Johannesen authored
Prevents some more overzealous deletions (mostly in AltiVec code). llvm-svn: 58121
-
- Oct 24, 2008
-
-
Dale Johannesen authored
be saved/restored in the prolog/epilog. We need to do this iff something in the function stores into it. llvm-svn: 58116
-
Torok Edwin authored
llvm-svn: 58104
-
Torok Edwin authored
llvm-svn: 58103
-
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
-
Dan Gohman authored
fixes a bunch of test-suite JIT failures on x86-64 in -relocation-model=static mode. llvm-svn: 58066
-
- Oct 23, 2008
-
-
Dale Johannesen authored
Prevents DeadMachineInstructionElim from thinking things like MTCTR are dead (fixes massive testsuite breakage at -O0). llvm-svn: 58043
-
Jim Grosbach authored
llvm-svn: 58006
-
- 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
-
Chris Lattner authored
are their operands. llvm-svn: 57956
-
Oscar Fuentes authored
names of LLVMCore and ARMCodeGen. llvm-svn: 57943
-
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
llvm-svn: 57915
-
Jim Grosbach authored
llvm-svn: 57911
-
Dan Gohman authored
isn't yet prepared for it. llvm-svn: 57886
-
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
-
Dan Gohman authored
the copy instruction from the instruction list before asking the target to create the new instruction. This gets the old instruction out of the way so that it doesn't interfere with the target's rematerialization code. In the case of x86, this helps it find more cases where EFLAGS is not live. Also, in the X86InstrInfo.cpp, teach isSafeToClobberEFLAGS to check to see if it reached the end of the block after scanning each instruction, instead of just before. This lets it notice when the end of the block is only two instructions away, without doing any additional scanning. These changes allow rematerialization to clobber EFLAGS in more cases, for example using xor instead of mov to set the return value to zero in the included testcase. llvm-svn: 57872
-
- Oct 20, 2008
-
-
Jim Grosbach authored
is re-written by the callback to branch directly to the compiled code in future invocations. Added back in range-based memory permission functions for the updating of the stub on Darwin. llvm-svn: 57846
-
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
-
- Oct 18, 2008
-
-
Dan Gohman authored
and add a TargetLowering hook for it to use to determine when this is legal (i.e. not in PIC mode, etc.) This allows instruction selection to emit folded constant offsets in more cases, such as the included testcase, eliminating the need for explicit arithmetic instructions. This eliminates the need for the C++ code in X86ISelDAGToDAG.cpp that attempted to achieve the same effect, but wasn't as effective. Also, fix handling of offsets in GlobalAddressSDNodes in several places, including changing GlobalAddressSDNode's offset from int to int64_t. The Mips, Alpha, Sparc, and CellSPU targets appear to be unaware of GlobalAddress offsets currently, so set the hook to false on those targets. llvm-svn: 57748
-
- Oct 17, 2008
-
-
Dan Gohman authored
llvm-svn: 57734
-
Dan Gohman authored
llvm-svn: 57733
-
Evan Cheng authored
Add implicit defs of XMM8 to XMM15 on 32-bit call instructions. While this is not technically true, it tells tblgen that these instructions "clobber" the entire XMM register file. llvm-svn: 57723
-
Chris Lattner authored
llvm-svn: 57709
-
Chris Lattner authored
in 32-bit mode instead of assigning a register pair. This has nothing to do with PR2356, but I happened to notice it while working on it. llvm-svn: 57704
-
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
-
Evan Cheng authored
llvm-svn: 57691
-
Chris Lattner authored
should work for intel long double, but ppc long double aborts in convert. llvm-svn: 57672
-
Dan Gohman authored
use a SUB instruction instead of an ADD, because -128 can be encoded in an 8-bit signed immediate field, while +128 can't be. This avoids the need for a 32-bit immediate field in this case. A similar optimization applies to 64-bit adds with 0x80000000, with the 32-bit signed immediate field. To support this, teach tablegen how to handle 64-bit constants. llvm-svn: 57663
-
Dan Gohman authored
shift counts, and patterns that match dynamic shift counts when the subtract is obscured by a truncate node. Add DAGCombiner support for recognizing rotate patterns when the shift counts are defined by truncate nodes. Fix and simplify the code for commuting shld and shrd instructions to work even when the given instruction doesn't have a parent, and when the caller needs a new instruction. These changes allow LLVM to use the shld, shrd, rol, and ror instructions on x86 to replace equivalent code using two shifts and an or in many more cases. llvm-svn: 57662
-
- Oct 16, 2008
-
-
Dan Gohman authored
llvm-svn: 57649
-
Chris Lattner authored
llvm-svn: 57644
-
Duncan Sands authored
uninitialized in these functions with gcc-4.3. llvm-svn: 57635
-
Chris Lattner authored
llvm-svn: 57631
-