summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
* BuildSDIV and BuildUDIV only work for i32/i64, but they don't check thatChris Lattner2005-10-221-10/+20
| | | | | | | | the input is that type, this caused a failure on gs on X86 last night. Move the hard checks into Build[US]Div since that is where decisions like this should be made. llvm-svn: 23881
* add a case missing from the dag combiner that exposed the failure onChris Lattner2005-10-211-0/+3
| | | | | | 2005-10-21-longlonggtu.ll. llvm-svn: 23875
* Make the coallescer a bit smarter, allowing it to join more live ranges.Chris Lattner2005-10-211-30/+85
| | | | | | | | | | | | For example, we can now join things like [0-30:0)[31-40:1)[52-59:2) with [40:60:0) if the 52-59 range is defined by a copy from the 40-60 range. The resultant range ends up being [0-30:0)[31-60:1). This fires a lot through-out the test suite (e.g. shrinking bc from 19492 -> 18509 machineinstrs) though most gains are smaller (e.g. about 50 copies eliminated from crafty). llvm-svn: 23866
* Fix LiveInterval::getOverlapingRanges to take things in the right orderChris Lattner2005-10-211-3/+3
| | | | | | | | | | (an unused method). Fix the merger so that it can merge ranges like this [10:12)[16:40) with [12:38) into [10:40) instead of bogus ranges. This sort of input will be possible for the merger coming shortly llvm-svn: 23865
* Fix a typo in the dag combiner, so that this can work on i64 targetsNate Begeman2005-10-211-3/+2
| | | | llvm-svn: 23856
* Invert the TargetLowering flag that controls divide by consant expansion.Nate Begeman2005-10-211-10/+37
| | | | | | | | | | Add a new flag to TargetLowering indicating if the target has really cheap signed division by powers of two, make ppc use it. This will probably go away in the future. Implement some more ISD::SDIV folds in the dag combiner Remove now dead code in the x86 backend. llvm-svn: 23853
* Fix a conditional so we don't access past the end of the range. Thanks toChris Lattner2005-10-201-6/+4
| | | | | | Andrew for bringing this to my attn. llvm-svn: 23850
* 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
* Fix order of eval problem from when I refactored this into a function.Chris Lattner2005-10-201-3/+2
| | | | llvm-svn: 23844
* add a new method, play around with some code.Chris Lattner2005-10-201-10/+56
| | | | | | | | Fix a *bug* in the extendIntervalEndTo method. In particular, if adding [2:10) to an interval containing [0:2),[10:30), we produced [0:10),[10,30). Which is not the most smart thing to do. Now produce [0:30). llvm-svn: 23841
* Refactor some code, pulling it out into a function. No functionality change.Chris Lattner2005-10-201-15/+26
| | | | llvm-svn: 23839
* 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
* Teach Legalize how to do something with EXTRACT_ELEMENT when the type ofNate Begeman2005-10-191-7/+30
| | | | | | the pair of elements is a legal type. llvm-svn: 23804
* Add the ability to lower return instructions to TargetLowering. ThisNate Begeman2005-10-181-2/+7
| | | | | | | allows us to lower legal return types to something else, to meet ABI requirements (such as that i64 be returned in two i32 regs on Darwin/ppc). llvm-svn: 23802
* Fix Generic/2005-10-18-ZeroSizeStackObject.ll by not requesting a zeroChris Lattner2005-10-181-0/+1
| | | | | | sized stack object if either the array size or the type size is zero. llvm-svn: 23801
* remove hackChris Lattner2005-10-181-3/+1
| | | | llvm-svn: 23797
* 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
* Legalize BUILD_PAIR appropriately for upcoming 64 bit PowerPC work.Nate Begeman2005-10-181-0/+25
| | | | llvm-svn: 23776
* 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
* Use getExtLoad here instead of getNode, as extloads produce two values. ThisChris Lattner2005-10-151-2/+3
| | | | | | fixes a legalize failure on SPASS for itanium. llvm-svn: 23747
* 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-142-27/+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
* When ExpandOp'ing a [SZ]EXTLOAD, make sure to remember that the chainChris Lattner2005-10-131-2/+28
| | | | | | is also legal. Add support for ExpandOp'ing raw EXTLOADs too. llvm-svn: 23716
* Implement PromoteOp for *EXTLOAD, allowing MallocBench/gs to LegalizeChris Lattner2005-10-131-0/+10
| | | | llvm-svn: 23715
* 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
* Add support to Legalize for expanding i64 sextload/zextload into hi and loNate Begeman2005-10-131-0/+35
| | | | | | | parts. This should fix the crafty and signed long long unit test failure on x86 last night. llvm-svn: 23711
* Inhibit instructions from being pushed before function calls. This willJim Laskey2005-10-131-3/+55
| | | | | | minimize unnecessary spilling. llvm-svn: 23710
* Move some Legalize functionality over to the DAGCombiner where it belongs.Nate Begeman2005-10-133-149/+79
| | | | | | 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
* Finally committing to the new scheduler. Still -sched=none by default.Jim Laskey2005-10-121-249/+125
| | | | llvm-svn: 23702
* Added graphviz/gv support for MF.Jim Laskey2005-10-121-0/+22
| | | | llvm-svn: 23700
* 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
* This function is now deadChris Lattner2005-10-101-110/+0
| | | | llvm-svn: 23684
* Enable Nate's excellent DAG combiner work by default. This allows theChris Lattner2005-10-102-558/+18
| | | | | | removal of a bunch of ad-hoc and crufty code from SelectionDAG.cpp. llvm-svn: 23682
OpenPOWER on IntegriCloud