summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Support non-fallthrough unconditional branches in FastISel.Dan Gohman2008-08-221-1/+1
| | | | llvm-svn: 55191
* First cut, un-optimized (and untested) fast isel lowering of GetElementPtrInst.Evan Cheng2008-08-201-2/+2
| | | | llvm-svn: 55085
* Simplify FastISel's constructor argument list, make the FastISelDan Gohman2008-08-201-3/+3
| | | | | | | | class hold a MachineRegisterInfo member, and make the MachineBasicBlock be passed in to SelectInstructions rather than the FastISel constructor. llvm-svn: 55076
* Dump the instruction that foiled ISel even when -debug is not used.Dan Gohman2008-08-201-1/+3
| | | | llvm-svn: 55075
* Kill off SimpleBBISel, it's replaced by FastISel.Evan Cheng2008-08-201-4/+1
| | | | llvm-svn: 55067
* Disable DAGCombine's alignment inference in "fast" codegen mode.Dan Gohman2008-08-201-4/+4
| | | | llvm-svn: 55059
* Use BitVector instead of std::vector<unsigned char>.Dan Gohman2008-08-201-2/+1
| | | | llvm-svn: 55054
* Fix a leak in the FastISel code that Chris pointed out.Dan Gohman2008-08-201-0/+8
| | | | llvm-svn: 55031
* Add support for running SelectionDAG if FastISel fails. This is underDan Gohman2008-08-201-11/+16
| | | | | | | a command-line option, so that the default behavior is an abort, which is useful for exposing code that isn't supported yet. llvm-svn: 55028
* Add code to call FastISel, and a command-line option to enable it.Dan Gohman2008-08-191-1/+32
| | | | llvm-svn: 55015
* Rename some GC classes so that their roll will hopefully be clearer.Gordon Henriksen2008-08-171-17/+18
| | | | | | | | | | | | | | | | | | In particular, Collector was confusing to implementors. Several thought that this compile-time class was the place to implement their runtime GC heap. Of course, it doesn't even exist at runtime. Specifically, the renames are: Collector -> GCStrategy CollectorMetadata -> GCFunctionInfo CollectorModuleMetadata -> GCModuleInfo CollectorRegistry -> GCRegistry Function::getCollector -> getGC (setGC, hasGC, clearGC) Several accessors and nested types have also been renamed to be consistent. These changes should be obvious. llvm-svn: 54899
* Factor GC metadata table assembly generation out of Collector in preparation ↵Gordon Henriksen2008-08-171-1/+1
| | | | | | for splitting AsmPrinter into its own library. llvm-svn: 54881
* Rename SelectionDAGISel's FastISel to Fast, to begin to makeDan Gohman2008-08-131-3/+3
| | | | | | room for the new FastISel instruction selection code. llvm-svn: 54749
* Add skeleton of simple basic block instruction selector.Evan Cheng2008-08-081-3/+7
| | | | llvm-svn: 54522
* Factor code that finalize PHI nodes, jump tables, etc. out of ↵Evan Cheng2008-08-071-14/+23
| | | | | | SelectBasicBlock. No functionality changes. llvm-svn: 54438
* Remove the -disable-correct-folding option, which was ugly and is no longer ↵Owen Anderson2008-08-051-7/+2
| | | | | | needed. llvm-svn: 54361
* This option doesn't need to be a target option. It can be in SDISel instead.Owen Anderson2008-08-051-0/+3
| | | | llvm-svn: 54336
* - Fix SelectionDAG to generate correct CFGs.Owen Anderson2008-08-041-4/+17
| | | | | | | | - Add a basic machine-level dead block eliminator. These two have to go together, since many other parts of the code generator are unable to handle the unreachable blocks otherwise created. llvm-svn: 54333
* Fix SDISel lowering of PHI nodes to use ComputeValueVTs.Dan Gohman2008-08-041-9/+20
| | | | | | | This allows it to work correctly on aggregate values. This fixes PR2623. llvm-svn: 54331
* Fix SDISel lowering of zeroinitializer and undef to use ComputeValueVTs.Dan Gohman2008-08-041-24/+8
| | | | | | | This allows it to work correctly on nested aggregate values. This fixes PR2625. llvm-svn: 54330
* Add a flag to disable jump table generation (allDale Johannesen2008-07-311-2/+3
| | | | | | | | switches use the binary search algorithm) for environments that don't support it. PPC64 JIT is such an environment; turn the flag on for that. llvm-svn: 54248
* Don't look for leaf values to store when lowering stores ofDan Gohman2008-07-301-2/+6
| | | | | | empty structs. This fixes PR2612. llvm-svn: 54226
* Add vector shifts to the IR, patch by Eli Friedman.Nate Begeman2008-07-291-5/+6
| | | | | | CodeGen & Clang work coming next. llvm-svn: 54161
* Fold the useful features of alist and alist_node into ilist, andDan Gohman2008-07-281-15/+14
| | | | | | | | | | | | | | | | a new ilist_node class, and remove them. Unlike alist_node, ilist_node doesn't attempt to manage storage itself, so it avoids the associated problems, including being opaque in gdb. Adjust the Recycler class so that it doesn't depend on alist_node. Also, change it to use explicit Size and Align parameters, allowing it to work when the largest-sized node doesn't have the greatest alignment requirement. Change MachineInstr's MachineMemOperand list from a pool-backed alist to a std::list for now. llvm-svn: 54146
* Rename SDOperand to SDValue.Dan Gohman2008-07-271-247/+247
| | | | llvm-svn: 54128
* Use AliasAnalysis::pointsToConstantMemory in SDISel to avoid unnecessaryDan Gohman2008-07-251-7/+15
| | | | | | | dependencies with constant load nodes. This allows them to be scheduled freely. llvm-svn: 54001
* Enable first-class aggregates support.Dan Gohman2008-07-231-20/+0
| | | | | | | | | | | | Remove the GetResultInst instruction. It is still accepted in LLVM assembly and bitcode, where it is now auto-upgraded to ExtractValueInst. Also, remove support for return instructions with multiple values. These are auto-upgraded to use InsertValueInst instructions. The IRBuilder still accepts multiple-value returns, and auto-upgrades them to InsertValueInst instructions. llvm-svn: 53941
* After early-lowering the FORMAL_ARGUMENTS node, delete it.Dan Gohman2008-07-211-0/+7
| | | | llvm-svn: 53874
* Add titles to the various SelectionDAG viewGraph callsDan Gohman2008-07-211-10/+58
| | | | | | | that include useful information like the name of the block being viewed and the current phase of compilation. llvm-svn: 53872
* Turn LegalizeTypes back off again for the moment:Duncan Sands2008-07-171-6/+4
| | | | | | | it is breaking Darwin bootstrap due to missing functionality. llvm-svn: 53721
* Turn on LegalizeTypes by default.Duncan Sands2008-07-161-4/+6
| | | | llvm-svn: 53671
* Reapply 53476 and 53480, with a fix so that it properly updatesDan Gohman2008-07-141-16/+33
| | | | | | | the BB member to the current basic block after emitting instructions. llvm-svn: 53567
* Back out 53476 and 53480 for now. Somehow they cause llc to miscompile 179.art.Evan Cheng2008-07-121-33/+16
| | | | llvm-svn: 53502
* Add support for putting NamedRegionTimers in TimerGroups, andDan Gohman2008-07-111-16/+33
| | | | | | | | use a timer group for the timers in SelectionDAGISel. Also, Split scheduling out from emitting, to give each their own timer. llvm-svn: 53476
* make legalize types be a command line option: -enable-legalize-types.Chris Lattner2008-07-101-5/+8
| | | | llvm-svn: 53434
* Pool-allocation for SDNodes. The pool is allocated once for each function,Dan Gohman2008-07-071-26/+46
| | | | | | | | | and reused across SelectionDAGs. This drastically reduces the number of calls to malloc/free made during instruction selection, and improves memory locality. llvm-svn: 53211
* Rather than having a different custom legalizationDuncan Sands2008-07-041-6/+0
| | | | | | | | | | | | 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-031-1/+0
| | | | | | slow the compiler down at -O0 some 30% or more. Ooops. llvm-svn: 53120
* Add a new getMergeValues method that does not needDuncan Sands2008-07-021-24/+6
| | | | | | | | | | 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
* 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-011-4/+5
| | | | 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-011-15/+5
| | | | | | | | | | | | | | | | 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
* 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
* Rename ISD::LOCATION to ISD::DBG_STOPPOINT to better reflect itsDan Gohman2008-06-301-12/+4
| | | | | | | | | | | | | | | | | 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
* Revert the SelectionDAG optimization that makesDuncan Sands2008-06-301-29/+20
| | | | | | | | | | | | | | | | | | 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
* 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
OpenPOWER on IntegriCloud