summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG
Commit message (Collapse)AuthorAgeFilesLines
* Add an SSE2 algorithm for uint64->f64 conversion.Dale Johannesen2008-10-211-0/+16
| | | | | | | | | | 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
* Fix SelectionDAGBuild lowering of Select instructions toDan Gohman2008-10-211-8/+22
| | | | | | | handle first-class aggregate values. Also, fix a bug in the Ret handling for empty aggregates. llvm-svn: 57925
* Don't create TargetGlobalAddress nodes with offsets that don't fitDan Gohman2008-10-211-1/+1
| | | | | | | | | | | | | | 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
* Make the NaN test come second, heuristically assumingDan Gohman2008-10-211-12/+12
| | | | | | that NaNs are less common. llvm-svn: 57871
* Fix gcc.c-torture/compile/920520-1.c by inserting bitconvertsChris Lattner2008-10-211-7/+30
| | | | | | | | | for strange asm conditions earlier. In this case, we have a double being passed in an integer reg class. Convert to like sized integer register so that we allocate the right number for the class (two i32's for the f64 in this case). llvm-svn: 57862
* Fast-isel no longer an experiment.Dan Gohman2008-10-201-1/+1
| | | | llvm-svn: 57845
* Support operations like fp_to_uint with a vectorDuncan Sands2008-10-202-1/+53
| | | | | | | | | result type when the result type is legal but not the operand type. Add additional support for EXTRACT_SUBVECTOR and CONCAT_VECTORS, needed to handle such cases. llvm-svn: 57840
* LegalizeTypes support for atomic operation promotion.Duncan Sands2008-10-202-3/+78
| | | | llvm-svn: 57838
* Use DAG.getIntPtrConstant rather than DAG.getConstantDuncan Sands2008-10-202-6/+4
| | | | | | with TLI.getPointerTy for a small simplification. llvm-svn: 57837
* Always use either MVT::i1 or getSetCCResultType forDuncan Sands2008-10-201-15/+51
| | | | | | | | the condition of a SELECT node. Make sure that the correct extension type (any-, sign- or zero-extend) is used. llvm-svn: 57836
* Formatting - no functional change.Duncan Sands2008-10-202-7/+6
| | | | llvm-svn: 57834
* Don't use a random type for the select condition,Duncan Sands2008-10-201-2/+1
| | | | | | use an MVT::i1 and simplify the code while there. llvm-svn: 57833
* Set N->OperandList to 0 after deletion. Otherwise, it's possible that it willBill Wendling2008-10-191-15/+26
| | | | | | be either deleted or referenced afterwards. llvm-svn: 57786
* Fix comment. Other formatting changes. No functionality changes.Bill Wendling2008-10-191-5/+6
| | | | llvm-svn: 57785
* Vector shuffle mask elements may be "undef". HandleDuncan Sands2008-10-191-13/+24
| | | | | | this everywhere in LegalizeTypes. llvm-svn: 57783
* Use a legal integer type for vector shuffle maskDuncan Sands2008-10-191-4/+4
| | | | | | | | | elements. Otherwise LegalizeTypes will, reasonably enough, legalize the mask, which may result in it no longer being a BUILD_VECTOR node (LegalizeDAG simply ignores the legality or not of vector masks). llvm-svn: 57782
* Reapply r57699 with a fix to not crash on asms with multiple results. UnlikeChris Lattner2008-10-181-16/+48
| | | | | | | | | | the previous patch this one actually passes make check. "Fix PR2356 on PowerPC: if we have an input and output that are tied together that have different sizes (e.g. i32 and i64) make sure to reserve registers for the bigger operand." llvm-svn: 57771
* Don't truncate GlobalAddress offsets to int in debug output.Dan Gohman2008-10-182-2/+2
| | | | llvm-svn: 57770
* Teach DAGCombine to fold constant offsets into GlobalAddress nodes,Dan Gohman2008-10-183-2/+47
| | | | | | | | | | | | | | | | | | | | | | 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
* Revert r57699. It's causing regressions inDan Gohman2008-10-181-43/+15
| | | | | | | test/CodeGen/X86/2008-09-17-inline-asm-1.ll and a few others, and it breaks the llvm-gcc build. llvm-svn: 57747
* Factor out the code for mapping LLVM IR condition opcodes toDan Gohman2008-10-172-34/+47
| | | | | | ISD condition opcodes into helper functions. llvm-svn: 57726
* add support for 128 bit aggregates.Chris Lattner2008-10-171-0/+1
| | | | llvm-svn: 57715
* Added MemIntrinsicNode which is useful to represent target intrinsics thatMon P Wang2008-10-171-2/+59
| | | | | | touches memory and need an associated MemOperand llvm-svn: 57712
* Factor out the code for mapping LLVM IR condition opcodes toDan Gohman2008-10-171-126/+61
| | | | | | ISD condition opcodes into helper functions. llvm-svn: 57710
* Fix PR2356 on PowerPC: if we have an input and output that are tied togetherChris Lattner2008-10-171-15/+43
| | | | | | | that have different sizes (e.g. i32 and i64) make sure to reserve registers for the bigger operand. llvm-svn: 57699
* refactor some code into a helper method, no functionality change.Chris Lattner2008-10-171-25/+40
| | | | llvm-svn: 57690
* Keep track of *which* input constraint matches an outputChris Lattner2008-10-172-6/+6
| | | | | | | constraint. Reject asms where an output has multiple input constraints tied to it. llvm-svn: 57687
* add an assert so that PR2356 explodes instead of running off anChris Lattner2008-10-172-6/+24
| | | | | | | array. Improve some minor comments, refactor some helpers in AsmOperandInfo. No functionality change for valid code. llvm-svn: 57686
* Define patterns for shld and shrd that match immediateDan Gohman2008-10-171-5/+9
| | | | | | | | | | | | | | | | | | 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
* - Add target lowering hooks that specify which setcc conditions are illegal,Evan Cheng2008-10-152-5/+55
| | | | | | | | | | | i.e. conditions that cannot be checked with a single instruction. For example, SETONE and SETUEQ on x86. - Teach legalizer to implement *illegal* setcc as a and / or of a number of legal setcc nodes. For now, only implement FP conditions. e.g. SETONE is implemented as SETO & SETNE, SETUEQ is SETUO | SETEQ. - Move x86 target over. llvm-svn: 57542
* FastISel support for exception-handling constructs.Dan Gohman2008-10-142-48/+119
| | | | | | | | | - Move the EH landing-pad code and adjust it so that it works with FastISel as well as with SDISel. - Add FastISel support for @llvm.eh.exception and @llvm.eh.selector. llvm-svn: 57539
* Rename LoadX to LoadExt.Evan Cheng2008-10-143-16/+16
| | | | llvm-svn: 57526
* Fix command-line option printing to print two spaces where needed,Dan Gohman2008-10-144-5/+5
| | | | | | | | | instead of requiring all "short description" strings to begin with two spaces. This makes these strings less mysterious, and it fixes some cases where short description strings mistakenly did not begin with two spaces. llvm-svn: 57521
* FIX PR2794. Make sure SIGN_EXTEND_INREG nodes introduced by ↵Evan Cheng2008-10-131-1/+4
| | | | | | LegalizeSetCCOperands are leglized. Patch by Richard Pennington. llvm-svn: 57460
* * Make TargetLowering not crash when TargetMachine::getTargetAsmInfo() returnsMatthijs Kooijman2008-10-131-1/+2
| | | | | | | null. This assumes that any target that does not have AsmInfo, does not support "LocAndDot". llvm-svn: 57438
* calls can be supported.Chris Lattner2008-10-131-9/+9
| | | | llvm-svn: 57428
* Change CALLSEQ_BEGIN and CALLSEQ_END to take TargetConstant's asChris Lattner2008-10-111-7/+3
| | | | | | | parameters instead of raw Constants. This prevents the constants from being selected by the isel pass, fixing PR2735. llvm-svn: 57385
* simplify comparisonChris Lattner2008-10-111-1/+1
| | | | llvm-svn: 57371
* Add a "loses information" return value to APFloat::convertDale Johannesen2008-10-092-13/+22
| | | | | | | and APFloat::convertToInteger. Restore return value to IEEE754. Adjust all users accordingly. llvm-svn: 57329
* Rename APFloat::convertToAPInt to bitcastToAPInt toDale Johannesen2008-10-093-10/+10
| | | | | | | make it clearer what the function does. No functional change. llvm-svn: 57325
* Avoid emitting redundant materializations of integer constantsDan Gohman2008-10-071-3/+4
| | | | | | | for things like null pointers, which at this level aren't different from regular integer constants. llvm-svn: 57265
* Use Dan's supperior checkAndrew Lenharth2008-10-071-13/+9
| | | | llvm-svn: 57255
* No need for |=Andrew Lenharth2008-10-071-3/+3
| | | | llvm-svn: 57249
* Use ADDC if it is valid at any smaller size. Do it right this timeAndrew Lenharth2008-10-071-3/+6
| | | | llvm-svn: 57248
* Use ADDC if it is valid at any smaller size. fixes ↵Andrew Lenharth2008-10-071-3/+18
| | | | | | test/Codegen/Generic/i128-addsub.ll on x86 llvm-svn: 57247
* Expand arith on machines without carry flagsAndrew Lenharth2008-10-071-9/+33
| | | | llvm-svn: 57243
* Correctly handle calls with no return values. This fixesDan Gohman2008-10-071-1/+1
| | | | | | 2006-01-23-UnionInit on x86-64 when inlining is not enabled. llvm-svn: 57223
* wrap some long lines and expand i32 mul's to libcalls, inspired by aChris Lattner2008-10-041-4/+12
| | | | | | patch by Mikael Lepisto! llvm-svn: 57077
* Fix fast-isel's handling of atomic instructions. They mayDan Gohman2008-10-041-1/+4
| | | | | | | | expand to multiple basic blocks, in which case fast-isel needs to informed of which block to use as it resumes inserting instructions. llvm-svn: 57040
* Pass MemOperand through for 64-bit atomics on 32-bit,Dale Johannesen2008-10-031-5/+18
| | | | | | | incidentally making the case where the memop is a pointer deref work. Fix cmp-and-swap regression. llvm-svn: 57027
OpenPOWER on IntegriCloud