summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG
Commit message (Collapse)AuthorAgeFilesLines
* Add explicit keywords.Dan Gohman2008-07-072-3/+2
| | | | llvm-svn: 53179
* Make DenseMap's insert return a pair, to more closely resemble std::map.Dan Gohman2008-07-072-9/+14
| | | | llvm-svn: 53177
* LegalizeSetCCOperands should legalize the result of ExpandLibCall. Patch by ↵Evan Cheng2008-07-071-1/+1
| | | | | | Richard Osborne. llvm-svn: 53169
* LegalizeTypes soft-float support for stores of aDuncan Sands2008-07-072-0/+20
| | | | | | float value. llvm-svn: 53165
* Fixed generating incorrect aligned stores that I backout of r53031Mon P Wang2008-07-052-12/+19
| | | | | | | | that fixed problems in EmitStackConvert where the source and target type have different alignment by creating a stack slot with the max alignment of source and target type. llvm-svn: 53150
* Rather than having a different custom legalizationDuncan Sands2008-07-045-107/+72
| | | | | | | | | | | | hook for each way in which a result type can be legalized (promotion, expansion, softening etc), just use one: ReplaceNodeResults, which returns a node with exactly the same result types as the node passed to it, but presumably with a bunch of custom code behind the scenes. No change if the new LegalizeTypes infrastructure is not turned on. llvm-svn: 53137
* Revert my previous check-in that split up MachineModuleInfo. It turns out toBill Wendling2008-07-032-2/+1
| | | | | | slow the compiler down at -O0 some 30% or more. Ooops. llvm-svn: 53120
* Backed out 53031.Evan Cheng2008-07-032-19/+12
| | | | llvm-svn: 53110
* Avoid unnecessarily copying APInt objects.Dan Gohman2008-07-031-3/+3
| | | | llvm-svn: 53065
* Replace a few uses of SelectionDAG::getTargetNode withDan Gohman2008-07-022-110/+46
| | | | | | | | | | | | SelectionDAG::SelectNodeTo in the instruction selector. This updates existing nodes in place instead of creating new ones. Go back to selecting ISD::DBG_LABEL nodes into TargetInstrInfo::DBG_LABEL nodes instead of leaving them unselected, now that SelectNodeTo allows us to update them in place. llvm-svn: 53057
* Add a new getMergeValues method that does not needDuncan Sands2008-07-023-32/+27
| | | | | | | | | | to be passed the list of value types, and use this where appropriate. Inappropriate places are where the value type list is already known and may be long, in which case the existing method is more efficient. llvm-svn: 53035
* Fixed problem in EmitStackConvert where the source and target typeMon P Wang2008-07-022-12/+19
| | | | | | | have different alignment by creating a stack slot with the max alignment of source and target type. llvm-svn: 53031
* instead of aborting on shifts of i1, just implicitly fold them.Chris Lattner2008-07-021-1/+7
| | | | | | The dag combiner can produce a shift of i1 when folding icmp i1's. llvm-svn: 53030
* Fix typo compounded by a cut-and-pasto.Duncan Sands2008-07-021-4/+4
| | | | llvm-svn: 53012
* Let AnalyzeNewNode take care of calling ExpungeNode.Duncan Sands2008-07-022-86/+79
| | | | | | | This makes sure that all new nodes are expunged, not just those the top node of a new subtree. llvm-svn: 53011
* - Use a faster priority comparison function if -fast.Evan Cheng2008-07-022-228/+304
| | | | | | - Code clean up. llvm-svn: 53010
* No need to use std::distance. We can just count the number of operandsOwen Anderson2008-07-011-1/+4
| | | | | | much more cheaply. llvm-svn: 52990
* Eliminate a compile time warning.Evan Cheng2008-07-011-1/+1
| | | | llvm-svn: 52982
* Do run ComputeLiveOutVRegInfo with -fast.Evan Cheng2008-07-011-1/+1
| | | | llvm-svn: 52975
* Do not use computationally expensive scheduling heuristics with -fast.Evan Cheng2008-07-013-50/+59
| | | | llvm-svn: 52971
* Apply Chris' suggestion.Evan Cheng2008-07-011-32/+36
| | | | llvm-svn: 52970
* Split ISD::LABEL into ISD::DBG_LABEL and ISD::EH_LABEL, eliminatingDan Gohman2008-07-015-40/+54
| | | | | | | | | | | | | | | | the need for a flavor operand, and add a new SDNode subclass, LabelSDNode, for use with them to eliminate the need for a label id operand. Change instruction selection to let these label nodes through unmodified instead of creating copies of them. Teach the MachineInstr emitter how to emit a MachineInstr directly from an ISD label node. This avoids the need for allocating SDNodes for the label id and flavor value, as well as SDNodes for each of the post-isel label, label id, and label flavor. llvm-svn: 52943
* Suppress compiler warning.Evan Cheng2008-06-301-1/+1
| | | | llvm-svn: 52934
* Use a simpler but equivalent form of RecordSource.Dan Gohman2008-06-301-2/+1
| | | | llvm-svn: 52931
* Add timing report for various sub-passes under SelectionDAGISel.Evan Cheng2008-06-301-0/+26
| | | | llvm-svn: 52930
* Use reserve.Dan Gohman2008-06-301-0/+1
| | | | | | | | | | SelectionDAG::allnodes_size is linear, but that doesn't appear to outweigh the benefit of reducing heap traffic. If it does become a problem, we should teach SelectionDAG to keep a count of how many nodes are live, because there are several other places where that information would be useful as well. llvm-svn: 52926
* Rename ISD::LOCATION to ISD::DBG_STOPPOINT to better reflect itsDan Gohman2008-06-304-44/+47
| | | | | | | | | | | | | | | | | purpose, and give it a custom SDNode subclass so that it doesn't need to have line number, column number, filename string, and directory string, all existing as individual SDNodes to be the operands. This was the only user of ISD::STRING, StringSDNode, etc., so remove those and some associated code. This makes stop-points considerably easier to read in -view-legalize-dags output, and reduces overhead (creating new nodes and copying std::strings into them) on code containing debugging information. llvm-svn: 52924
* Split scheduling from instruction selection.Evan Cheng2008-06-301-3/+11
| | | | llvm-svn: 52923
* Replace some std::vectors that showed up in heap profiling withDan Gohman2008-06-301-10/+9
| | | | | | | | SmallVectors. Change the signature of TargetLowering::LowerArguments to avoid returning a vector by value, and update the two targets which still use this directly, Sparc and IA64, accordingly. llvm-svn: 52917
* Correct the allocation size for CCState's UsedRegs member, whichDan Gohman2008-06-301-1/+1
| | | | | | | | only needs one bit for each register. UsedRegs is a SmallVector sized at 16, so this eliminates a heap allocation/free for every call and return processed by Legalize on most targets. llvm-svn: 52915
* ExpungeNode is only needed for new nodes! ThisDuncan Sands2008-06-301-9/+12
| | | | | | | fixes CodeGen/PowerPC/2008-06-19-LegalizerCrash.ll when using the new LegalizeTypes infrastructure. llvm-svn: 52903
* Support for VAARG. As noted in a comment, this isDuncan Sands2008-06-302-0/+33
| | | | | | | wrong for types like x86 long double and i1, but no worse than what is done in LegalizeDAG. llvm-svn: 52898
* Support for promoting select_cc operands.Duncan Sands2008-06-302-3/+16
| | | | llvm-svn: 52895
* Revert the SelectionDAG optimization that makesDuncan Sands2008-06-303-40/+27
| | | | | | | | | | | | | | | | | | it impossible to create a MERGE_VALUES node with only one result: sometimes it is useful to be able to create a node with only one result out of one of the results of a node with more than one result, for example because the new node will eventually be used to replace a one-result node using ReplaceAllUsesWith, cf X86TargetLowering::ExpandFP_TO_SINT. On the other hand, most users of MERGE_VALUES don't need this and for them the optimization was valuable. So add a new utility method getMergeValues for creating MERGE_VALUES nodes which by default performs the optimization. Change almost everywhere to use getMergeValues (and tidy some stuff up at the same time). llvm-svn: 52893
* - Re-apply 52748 and friends with fix. GetConstantStringInfo() returns an ↵Evan Cheng2008-06-301-29/+34
| | | | | | | | empty string for ConstantAggregateZero case which surprises selectiondag. - Correctly handle memcpy from constant string which is zero-initialized. llvm-svn: 52891
* Implement split and scalarize for SELECT_CC, fixing PR2504Chris Lattner2008-06-301-0/+23
| | | | llvm-svn: 52887
* Revert (52748 and friends):Anton Korobeynikov2008-06-291-7/+13
| | | | | | | | | | | | Move GetConstantStringInfo to lib/Analysis. Remove string output routine from Constant. Update all callers. Change debug intrinsic api slightly to accomodate move of routine, these now return values instead of strings. This unbreaks llvm-gcc bootstrap. llvm-svn: 52884
* Really fix the bootstrap failure.Chris Lattner2008-06-281-9/+5
| | | | llvm-svn: 52854
* Add back the capability to include nul characters in strings with Chris Lattner2008-06-281-1/+1
| | | | | | | GetConstantStringInfo. This will hopefully restore llvm-gcc to happy bootstrap land. llvm-svn: 52851
* When folding a bitcast into a load or store, preserve the alignmentDan Gohman2008-06-281-2/+2
| | | | | | | information of the original load or store, which is checked to be at least as good, and possibly better. llvm-svn: 52849
* simplify this check, GetConstantStringInfo validates that aChris Lattner2008-06-271-5/+3
| | | | | | global is constant already. No functionality change. llvm-svn: 52812
* Refactor the DebugInfoDesc stuff out of the MachineModuleInfo file. Clean upBill Wendling2008-06-271-0/+1
| | | | | | some uses of std::vector, where it's return std::vector by value. Yuck! llvm-svn: 52800
* duncan points out that isOperationLegal includes a check forChris Lattner2008-06-261-2/+2
| | | | | | type legality. Thanks Duncan! llvm-svn: 52786
* Move GetConstantStringInfo to lib/Analysis. RemoveEric Christopher2008-06-261-2/+2
| | | | | | | | | string output routine from Constant. Update all callers. Change debug intrinsic api slightly to accomodate move of routine, these now return values instead of strings. llvm-svn: 52748
* when we know the signbit of an input to uint_to_fp is zero,Chris Lattner2008-06-261-3/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | change it to sint_to_fp on targets where that is cheaper (and visaversa of course). This allows us to compile uint_to_fp to: _test: movl 4(%esp), %eax shrl $23, %eax cvtsi2ss %eax, %xmm0 movl 8(%esp), %eax movss %xmm0, (%eax) ret instead of: .align 3 LCPI1_0: ## double .long 0 ## double least significant word 4.5036e+15 .long 1127219200 ## double most significant word 4.5036e+15 .text .align 4,0x90 .globl _test _test: subl $12, %esp movl 16(%esp), %eax shrl $23, %eax movl %eax, (%esp) movl $1127219200, 4(%esp) movsd (%esp), %xmm0 subsd LCPI1_0, %xmm0 cvtsd2ss %xmm0, %xmm0 movl 20(%esp), %eax movss %xmm0, (%eax) addl $12, %esp ret llvm-svn: 52747
* - Fix a x86 vector isel bug: illegal transformation of a vector_shuffle into aEvan Cheng2008-06-251-11/+11
| | | | | | | | shift. - Add a readme entry for a missing vector_shuffle optimization that results in awful codegen. llvm-svn: 52740
* Add support for expanding PPC 128 bit floats.Duncan Sands2008-06-254-9/+215
| | | | | | | | | | | | | | | | | | | | For this it is convenient to permit floats to be used with EXTRACT_ELEMENT, so I tweaked things to allow that. I also added libcalls for ppcf128 to i32 forms of FP_TO_XINT, since they exist in libgcc and this case can certainly occur (and does occur in the testsuite) - before the i64 libcall was being used. Also, the XINT_TO_FP result seemed to be wrong when the argument is an i128: the wrong fudge factor was added (the i32 and i64 cases were handled directly, but the i128 code fell through to some generic softening code which seemed to think it was i64 to f32!). So I fixed it by adding a fudge factor that I found in my breakfast cereal. llvm-svn: 52739
* Add/complete support for integer and floatDuncan Sands2008-06-253-38/+282
| | | | | | | | select_cc and friends. This code could be factorized a bit but I'm not sure that it's worth it. llvm-svn: 52724
* Remove the OrigVT member from AtomicSDNode, as it is redundant withDan Gohman2008-06-253-13/+9
| | | | | | the base SDNode's VTList. llvm-svn: 52722
* Added MemOperands to Atomic operations since Atomics touches memory.Mon P Wang2008-06-253-34/+93
| | | | | | | | Added abstract class MemSDNode for any Node that have an associated MemOperand Changed atomic.lcs => atomic.cmp.swap, atomic.las => atomic.load.add, and atomic.lss => atomic.load.sub llvm-svn: 52706
OpenPOWER on IntegriCloud