summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Fix a couple bugs in the const div stuff where we'd generate MULHS/MULHUNate Begeman2005-10-201-3/+4
| | | | | | | for types that aren't legal, and fail a divisor is less than zero comparison, which would cause us to drop a subtract. llvm-svn: 23846
* don't use llabs with apparently VC++ doesn't haveChris Lattner2005-10-201-1/+1
| | | | llvm-svn: 23845
* Move the target constant divide optimization up into the dag combiner, soNate Begeman2005-10-201-0/+263
| | | | | | | that the nodes can be folded with other nodes, and we can not duplicate code in every backend. Alpha will probably want this too. llvm-svn: 23835
* Fold (select C, load A, load B) -> load (select C, A, B). This happens quiteChris Lattner2005-10-181-7/+82
| | | | | | | | | | | | | | | | | | | | | | a lot throughout many programs. In particular, specfp triggers it a bunch for constant FP nodes when you have code like cond ? 1.0 : -1.0. If the PPC ISel exposed the loads implicit in pic references to external globals, we would be able to eliminate a load in cases like this as well: %X = external global int %Y = external global int int* %test4(bool %C) { %G = select bool %C, int* %X, int* %Y ret int* %G } Note that this breaks things that use SrcValue's (see the fixme), but since nothing uses them yet, this is ok. Also, simplify some code to use hasOneUse() on an SDOperand instead of hasNUsesOfValue directly. llvm-svn: 23781
* Implement some feedback from Chris re: constant canonicalizationNate Begeman2005-10-181-39/+27
| | | | llvm-svn: 23777
* fold fmul X, +2.0 -> fadd X, X;Nate Begeman2005-10-171-14/+17
| | | | llvm-svn: 23774
* add a trivial foldChris Lattner2005-10-171-0/+4
| | | | llvm-svn: 23764
* Fix this logic.Chris Lattner2005-10-151-1/+1
| | | | llvm-svn: 23756
* Add a case we were missing that was causing us to fail ↵Chris Lattner2005-10-151-0/+14
| | | | | | CodeGen/PowerPC/rlwinm.ll:test3 llvm-svn: 23755
* fold sext_in_reg, sext_in_reg where both have the same VT. This wasNate Begeman2005-10-141-1/+1
| | | | | | popping up in Fourinarow. llvm-svn: 23722
* Relax the checking on zextload generation a bit, since as sabre pointed outNate Begeman2005-10-141-5/+49
| | | | | | | | | | you could be AND'ing with the result of a shift that shifts out all the bits you care about, in addition to a constant. Also, move over an add/sub_parts fold from legalize to the dag combiner, where it works for things other than constants. Woot! llvm-svn: 23720
* Fix the trunc(load) case, finally allowing crafty and povray to passChris Lattner2005-10-131-1/+2
| | | | llvm-svn: 23718
* Fix some bugs in (sext (load x))Chris Lattner2005-10-131-1/+2
| | | | llvm-svn: 23717
* Fix the remaining DAGCombiner issues pointed out by sabre. This should fixNate Begeman2005-10-131-16/+11
| | | | | | the remainder of the failures introduced by my patch last night. llvm-svn: 23714
* Fix a minor bug in the dag combiner that broke pcompress2 and some otherChris Lattner2005-10-131-4/+3
| | | | | | tests. llvm-svn: 23713
* Move some Legalize functionality over to the DAGCombiner where it belongs.Nate Begeman2005-10-131-0/+74
| | | | | | Kill some dead code. llvm-svn: 23706
* Fix a potential bug with two combine-to's back to back that chris pointedNate Begeman2005-10-121-4/+14
| | | | | | | | | | out, where after the first CombineTo() call, the node the second CombineTo wishes to replace may no longer exist. Fix a very real bug with the truncated load optimization on little endian targets, which do not need a byte offset added to the load. llvm-svn: 23704
* More cool stuff for the dag combiner. We can now finally handle thingsNate Begeman2005-10-121-3/+22
| | | | | | | | | | | | | | | | | | | | | | | | like turning: _foo: fctiwz f0, f1 stfd f0, -8(r1) lwz r2, -4(r1) rlwinm r3, r2, 0, 16, 31 blr into _foo: fctiwz f0,f1 stfd f0,-8(r1) lhz r3,-2(r1) blr Also removed an unncessary constraint from sra -> srl conversion, which should take care of hte only reason we would ever need to handle sra in MaskedValueIsZero, AFAIK. llvm-svn: 23703
* Fix a powerpc crash on CodeGen/Generic/llvm-ct-intrinsics.llChris Lattner2005-10-111-1/+1
| | | | llvm-svn: 23694
* Add a canonicalization that got lost, fixing PowerPC/fold-li.ll:SUBChris Lattner2005-10-111-3/+5
| | | | llvm-svn: 23693
* clean up some corner casesChris Lattner2005-10-101-2/+6
| | | | llvm-svn: 23692
* Implement trivial DSE. If two stores are neighbors and store to the sameChris Lattner2005-10-101-0/+29
| | | | | | | location, replace them with a new store of the last value. This occurs in the same neighborhood in 197.parser, speeding it up about 1.5% llvm-svn: 23691
* Add support for CombineTo, allowing the dag combiner to replace nodes withChris Lattner2005-10-101-2/+56
| | | | | | | | | | | | | | | | | | | | multiple results. Use this support to implement trivial store->load forwarding, implementing CodeGen/PowerPC/store-load-fwd.ll. Though this is the most simple case and can be extended in the future, it is still useful. For example, it speeds up 197.parser by 6.2% by avoiding an LSU reject in xalloc: stw r6, lo16(l5_end_of_array)(r2) addi r2, r5, -4 stwx r5, r4, r2 - lwzx r5, r4, r2 - rlwinm r5, r5, 0, 0, 30 stwx r5, r4, r2 lwz r2, -4(r4) ori r2, r2, 1 llvm-svn: 23690
* Teach the DAGCombiner several new tricks, teaching it how to turnNate Begeman2005-10-101-32/+46
| | | | | | | sext_inreg into zext_inreg based on the signbit (fires a lot), srem into urem, etc. llvm-svn: 23688
* Fix commentChris Lattner2005-10-101-1/+1
| | | | llvm-svn: 23686
* Add ISD::ADD to MaskedValueIsZeroChris Lattner2005-10-101-0/+8
| | | | llvm-svn: 23685
* add a todo for something I noticedChris Lattner2005-10-091-0/+4
| | | | llvm-svn: 23679
* (X & Y) & C == 0 if either X&C or Y&C are zeroChris Lattner2005-10-091-1/+6
| | | | llvm-svn: 23678
* Lo and behold, the last bits of SelectionDAG.cpp have been moved over.Nate Begeman2005-10-081-6/+150
| | | | llvm-svn: 23665
* implement CodeGen/PowerPC/div-2.ll:test2-4 by propagating zero bits throughChris Lattner2005-10-071-0/+18
| | | | | | C-X's llvm-svn: 23662
* Turn sdivs into udivs when we can prove the sign bits are clear. ThisChris Lattner2005-10-071-0/+10
| | | | | | implements CodeGen/PowerPC/div-2.ll llvm-svn: 23659
* Check in some more DAGCombiner piecesNate Begeman2005-10-051-23/+45
| | | | llvm-svn: 23639
* implement visitBR_CC so that PowerPC/inverted-bool-compares.ll passesChris Lattner2005-10-051-2/+22
| | | | | | | with the dag combiner. This speeds up espresso by 8%, reaching performance parity with the dag-combiner-disabled llc. llvm-svn: 23636
* Add a new HandleNode class, which is used to handle (haha) cases in theChris Lattner2005-10-051-5/+12
| | | | | | | dead node elim and dag combiner passes where the root is potentially updated. This fixes a fixme in the dag combiner. llvm-svn: 23634
* Implement the code for PowerPC/inverted-bool-compares.ll, even though itChris Lattner2005-10-051-1/+16
| | | | | | | | | | that testcase still does not pass with the dag combiner. This is because not all forms of br* are folded yet. Also, when we combine a node into another one, delete the node immediately instead of waiting for the node to potentially come up in the future. llvm-svn: 23632
* Fix a crash compiling Olden/tspChris Lattner2005-10-051-6/+4
| | | | llvm-svn: 23630
* Add FP versions of the binary operators, keeping the int and fp worlds seperate.Chris Lattner2005-09-281-45/+98
| | | | | | | | Though I have done extensive testing, it is possible that this will break things in configs I can't test. Please let me know if this causes a problem and I'll fix it ASAP. llvm-svn: 23504
* Stub out the rest of the DAG Combiner. Just need to fill in theNate Begeman2005-09-191-8/+104
| | | | | | | select_cc bits and then wrap it in a convenience function for use with regular select. llvm-svn: 23389
* More DAG combining. Still need the branch instructions, and select_ccNate Begeman2005-09-161-5/+425
| | | | llvm-svn: 23371
* Add a missing #include, patch courtesy of Baptiste Lepilleur.Chris Lattner2005-09-091-0/+1
| | | | llvm-svn: 23302
* Last round of 2-node folds from SD.cpp. Will move on to 3 node ops suchNate Begeman2005-09-091-0/+103
| | | | | | as setcc and select next. llvm-svn: 23295
* Move yet more folds over to the dag combiner from sd.cppNate Begeman2005-09-081-10/+59
| | | | llvm-svn: 23278
* Another round of dag combiner changes. This fixes some missing XOR foldsNate Begeman2005-09-071-13/+44
| | | | | | as well as fixing how we replace old values with new values. llvm-svn: 23260
* Implement a common missing fold, (add (add x, c1), c2) -> (add x, c1+c2).Nate Begeman2005-09-071-8/+14
| | | | | | | This restores all of stanford to being identical with and without the dag combiner with the add folding turned off in sd.cpp. llvm-svn: 23258
* Add an option to the DAG Combiner to enable it for beta runs, and turn onNate Begeman2005-09-071-5/+6
| | | | | | that option for PowerPC's beta. llvm-svn: 23253
* Next round of DAGCombiner changes. This version now passes all the testsNate Begeman2005-09-061-236/+231
| | | | | | | I have run so far when run before Legalize. It still needs to pick up the SetCC folds, and nodes that use SetCC. llvm-svn: 23243
* Next round of DAG Combiner changes. Just need to support multiple returnNate Begeman2005-09-021-302/+325
| | | | | | values, and then we should be able to hook it up. llvm-svn: 23231
* Implement first round of feedback from chris (there's still a couple thingsNate Begeman2005-09-011-201/+137
| | | | | | left to do). llvm-svn: 23195
* Add the rest of the currently implemented visit routines to the switchNate Begeman2005-09-011-22/+36
| | | | | | statement in visit(). llvm-svn: 23185
* First pass at the DAG Combiner. It isn't used anywhere yet, but it shouldNate Begeman2005-09-011-0/+1056
be mostly functional. It currently has all folds from SelectionDAG.cpp that do not involve a condition code. llvm-svn: 23184
OpenPOWER on IntegriCloud