summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Add the necessary support to the ISel to allow targets to codegen the newNate Begeman2005-11-061-2/+5
| | | | | | | | alignment information appropriately. Includes code for PowerPC to support fixed-size allocas with alignment larger than the stack. Support for arbitrarily aligned dynamic allocas coming soon. llvm-svn: 24224
* Significantly simplify this code and make it more aggressive. Instead of havingChris Lattner2005-10-301-103/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | a special case hack for X86, make the hack more general: if an incoming argument register is not used in any block other than the entry block, don't copy it to a vreg. This helps us compile code like this: %struct.foo = type { int, int, [0 x ubyte] } int %test(%struct.foo* %X) { %tmp1 = getelementptr %struct.foo* %X, int 0, uint 2, int 100 %tmp = load ubyte* %tmp1 ; <ubyte> [#uses=1] %tmp2 = cast ubyte %tmp to int ; <int> [#uses=1] ret int %tmp2 } to: _test: lbz r3, 108(r3) blr instead of: _test: lbz r2, 108(r3) or r3, r2, r2 blr The (dead) copy emitted to copy r3 into a vreg for extra-block uses was increasing the live range of r3 past the load, preventing the coallescing. This implements CodeGen/PowerPC/reg-coallesce-simple.ll llvm-svn: 24115
* 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
* Enable Nate's excellent DAG combiner work by default. This allows theChris Lattner2005-10-101-16/+4
| | | | | | removal of a bunch of ad-hoc and crufty code from SelectionDAG.cpp. llvm-svn: 23682
* make sure that -view-isel-dags is the input to the isel, not the input toChris Lattner2005-10-051-2/+2
| | | | | | the second phase of dag combining llvm-svn: 23631
* Fix VC++ warnings.Jeff Cohen2005-10-011-4/+4
| | | | llvm-svn: 23579
* Add FP versions of the binary operators, keeping the int and fp worlds seperate.Chris Lattner2005-09-281-12/+35
| | | | | | | | 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
* If the target prefers it, use _setjmp/_longjmp should be used instead of ↵Chris Lattner2005-09-271-2/+6
| | | | | | setjmp/longjmp for llvm.setjmp/llvm.longjmp. llvm-svn: 23481
* If a function has liveins, and if the target requested that they be ploppedChris Lattner2005-09-131-0/+15
| | | | | | into particular vregs, emit copies into the entry MBB. llvm-svn: 23331
* Add an option to the DAG Combiner to enable it for beta runs, and turn onNate Begeman2005-09-071-0/+19
| | | | | | that option for PowerPC's beta. llvm-svn: 23253
* Don't create zero sized stack objects even for array allocas with a zeroChris Lattner2005-09-021-1/+2
| | | | | | number of elements. llvm-svn: 23219
* Fix the release build, noticed by Eric van Riet PaapChris Lattner2005-09-021-1/+1
| | | | llvm-svn: 23215
* For values that are live across basic blocks and need promotion, use ANY_EXTENDChris Lattner2005-09-021-10/+5
| | | | | | | | instead of ZERO_EXTEND to eliminate extraneous extensions. This eliminates dead zero extensions on formal arguments and other cases on PPC, implementing the newly tightened up test/Regression/CodeGen/PowerPC/small-arguments.ll test. llvm-svn: 23205
* It is NDEBUG not _NDEBUGChris Lattner2005-09-011-1/+1
| | | | llvm-svn: 23186
* Disable this code, which broke many tests last nightChris Lattner2005-08-271-1/+1
| | | | llvm-svn: 23114
* Don't copy regs that are only used in the entry block into a vreg. ThisChris Lattner2005-08-261-3/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | changes the code generated for: short %test(short %A) { %B = xor short %A, -32768 ret short %B } to: _test: xori r2, r3, 32768 xoris r2, r2, 65535 extsh r3, r2 blr instead of: _test: rlwinm r2, r3, 0, 16, 31 xori r2, r3, 32768 xoris r2, r2, 65535 extsh r3, r2 blr llvm-svn: 23109
* Call the InsertAtEndOfBasicBlock hook if the usesCustomDAGSchedInserterChris Lattner2005-08-261-0/+14
| | | | | | flag is set on an instruction. llvm-svn: 23098
* Make -view-isel-dags show the dag before instruction selecting, in caseChris Lattner2005-08-241-2/+2
| | | | | | the target isel crashes due to unimplemented features like calls :) llvm-svn: 22997
* Fix a problem where constant expr shifts would not have their shift amountChris Lattner2005-08-221-5/+5
| | | | | | promoted to the right type. This fixes: IA64/2005-08-22-LegalizerCrash.ll llvm-svn: 22969
* Enable critical edge splitting by defaultChris Lattner2005-08-181-16/+10
| | | | llvm-svn: 22863
* Add a new beta option for critical edge splitting, to avoid a problem thatChris Lattner2005-08-171-0/+23
| | | | | | | | | Nate noticed in yacr2 (and I know occurs in other places as well). This is still rough, as the critical edge blocks are not intelligently placed but is added to get some idea to see if this improves performance. llvm-svn: 22825
* Fix a regression on X86, where FP values can be promoted too.Chris Lattner2005-08-171-1/+4
| | | | llvm-svn: 22822
* Eliminate the RegSDNode class, which 3 nodes (CopyFromReg/CopyToReg/ImplicitDef)Chris Lattner2005-08-161-4/+43
| | | | | | | | | | | | | | used to tack a register number onto the node. Instead of doing this, make a new node, RegisterSDNode, which is a leaf containing a register number. These three operations just become normal DAG nodes now, instead of requiring special handling. Note that with this change, it is no longer correct to make illegal CopyFromReg/CopyToReg nodes. The legalizer will not touch them, and this is bad, so don't do it. :) llvm-svn: 22806
* Eliminate the SetCCSDNode in favor of a CondCodeSDNode class. This pulls theChris Lattner2005-08-091-4/+4
| | | | | | | | CC out of the SetCC operation, making SETCC a standard ternary operation and CC's a standard DAG leaf. This will make it possible for other node to use CC's as operands in the future... llvm-svn: 22728
* Eliminate all remaining tabs and trailing spaces.Jeff Cohen2005-07-271-2/+2
| | | | llvm-svn: 22523
* Remove unnecessary FP_EXTEND. This causes worse codegen for SSE.Nate Begeman2005-07-191-3/+0
| | | | llvm-svn: 22469
* Make several cleanups to Andrews varargs change:Chris Lattner2005-07-051-22/+25
| | | | | | | | | | 1. Pass Value*'s into lowering methods so that the proper pointers can be added to load/stores from the valist 2. Intrinsics that return void should only return a token chain, not a token chain/retval pair. 3. Rename LowerVAArgNext -> LowerVAArg, because VANext is long gone. llvm-svn: 22338
* restore old srcValueNode behavior and try to to work around itAndrew Lenharth2005-06-291-2/+2
| | | | llvm-svn: 22315
* tracking the instructions causing loads and stores provides more information ↵Andrew Lenharth2005-06-291-2/+2
| | | | | | than just the pointer being loaded or stored llvm-svn: 22311
* If we support structs as va_list, we must pass pointers to them to va_copyAndrew Lenharth2005-06-221-4/+5
| | | | | | See last commit for LangRef, this implements it on all targets. llvm-svn: 22273
* core changes for varargsAndrew Lenharth2005-06-181-18/+12
| | | | llvm-svn: 22254
* Fix construction of ioport intrinsics, fixing X86/io.llx and io-port.llxChris Lattner2005-05-141-4/+10
| | | | llvm-svn: 22026
* Eliminate special purpose hacks for dynamic_stack_alloc.Chris Lattner2005-05-141-3/+8
| | | | llvm-svn: 22015
* LowerOperation takes a dagChris Lattner2005-05-141-1/+1
| | | | llvm-svn: 22004
* Align doubles on 8-byte boundaries if possible.Chris Lattner2005-05-131-0/+9
| | | | llvm-svn: 21993
* Add an isTailCall flag to LowerCallToChris Lattner2005-05-131-3/+4
| | | | llvm-svn: 21958
* Emit function entry code after lowering hte arguments.Chris Lattner2005-05-131-2/+2
| | | | llvm-svn: 21931
* Allow targets to emit code into the entry block of each functionChris Lattner2005-05-131-0/+2
| | | | llvm-svn: 21930
* Pass calling convention to use into lower call toChris Lattner2005-05-121-3/+4
| | | | llvm-svn: 21900
* wrap long lineChris Lattner2005-05-111-1/+2
| | | | llvm-svn: 21870
* The semantics of cast X to bool are a comparison against zero, not a truncation!Chris Lattner2005-05-091-0/+5
| | | | llvm-svn: 21833
* Add support for matching the READPORT, WRITEPORT, READIO, WRITEIO intrinsicsChris Lattner2005-05-091-14/+28
| | | | llvm-svn: 21825
* Don't use the load/store instruction as the source pointer, use the pointerChris Lattner2005-05-091-2/+2
| | | | | | being stored/loaded through! llvm-svn: 21806
* wrap long linesChris Lattner2005-05-091-2/+4
| | | | llvm-svn: 21804
* When hitting an unsupported intrinsic, actually print itChris Lattner2005-05-051-0/+10
| | | | | | Lower debug info to noops. llvm-svn: 21698
* Implement count leading zeros (ctlz), count trailing zeros (cttz), and countAndrew Lenharth2005-05-031-0/+15
| | | | | | | | | population (ctpop). Generic lowering is implemented, however only promotion is implemented for SelectionDAG at the moment. More coming soon. llvm-svn: 21676
* Codegen and legalize sin/cos/llvm.sqrt as FSIN/FCOS/FSQRT calls. This patchChris Lattner2005-04-301-0/+25
| | | | | | | was contributed by Morten Ofstad, with some minor tweaks and bug fixes added by me. llvm-svn: 21636
* Implement Value* tracking for loads and stores in the selection DAG. This ↵Andrew Lenharth2005-04-271-2/+3
| | | | | | | | enables one to use alias analysis in the backends. (TRUNK)Stores and (EXT|ZEXT|SEXT)Loads have an extra SDOperand which is a SrcValueSDNode which contains the Value*. Note that if the operation is introduced by the backend, it will still have the operand, but the value* will be null. llvm-svn: 21599
OpenPOWER on IntegriCloud