summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
* Implement matching constraints. We can now say things like this:Chris Lattner2006-02-021-15/+28
| | | | | | | | | | | | | | %C = call int asm "xyz $0, $1, $2, $3", "=r,r,r,0"(int %A, int %B, int 4) and get: xyz r2, r3, r4, r2 note that the r2's are pinned together. Yaay for 2-address instructions. 2342 ---------------------------------------------------------------------- llvm-svn: 25893
* Implement smart printing of inline asm strings, handling variants andChris Lattner2006-02-011-5/+112
| | | | | | | | | | | | | | | | | | | | | | substituted operands. For this testcase: int %test(int %A, int %B) { %C = call int asm "xyz $0, $1, $2", "=r,r,r"(int %A, int %B) ret int %C } we now emit: _test: or r2, r3, r3 or r3, r4, r4 xyz r2, r2, r3 ;; look here or r3, r2, r2 blr ... note the substituted operands. :) llvm-svn: 25886
* *** empty log message ***Nate Begeman2006-02-011-0/+1
| | | | llvm-svn: 25879
* Implement simple register assignment for inline asms. This allows us to ↵Chris Lattner2006-02-011-8/+103
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | compile: int %test(int %A, int %B) { %C = call int asm "xyz $0, $1, $2", "=r,r,r"(int %A, int %B) ret int %C } into: (0x8906130, LLVM BB @0x8902220): %r2 = OR4 %r3, %r3 %r3 = OR4 %r4, %r4 INLINEASM <es:xyz $0, $1, $2>, %r2<def>, %r2, %r3 %r3 = OR4 %r2, %r2 BLR which asmprints as: _test: or r2, r3, r3 or r3, r4, r4 xyz $0, $1, $2 ;; need to print the operands now :) or r3, r2, r2 blr llvm-svn: 25878
* Fix some of the stuff in the PPC README file, and clean up legalizationNate Begeman2006-02-012-222/+254
| | | | | | of the SELECT_CC, BR_CC, and BRTWOWAY_CC nodes. llvm-svn: 25875
* adjust to changes in InlineAsm interface. Fix a few minor bugs.Chris Lattner2006-02-012-32/+42
| | | | llvm-svn: 25865
* Allow the specification of explicit alignments for constant pool entries.Evan Cheng2006-01-314-16/+30
| | | | llvm-svn: 25855
* Allow custom lowering of fabs. I forgot to check in this change whichEvan Cheng2006-01-311-1/+6
| | | | | | caused several test failures. llvm-svn: 25852
* Only insert an AND when converting from BR_COND to BRCC if needed.Chris Lattner2006-01-311-1/+3
| | | | llvm-svn: 25832
* Handle physreg input/outputs. We now compile this:Chris Lattner2006-01-312-4/+97
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | int %test_cpuid(int %op) { %B = alloca int %C = alloca int %D = alloca int %A = call int asm "cpuid", "=eax,==ebx,==ecx,==edx,eax"(int* %B, int* %C, int* %D, int %op) %Bv = load int* %B %Cv = load int* %C %Dv = load int* %D %x = add int %A, %Bv %y = add int %x, %Cv %z = add int %y, %Dv ret int %z } to this: _test_cpuid: sub %ESP, 16 mov DWORD PTR [%ESP], %EBX mov %EAX, DWORD PTR [%ESP + 20] cpuid mov DWORD PTR [%ESP + 8], %ECX mov DWORD PTR [%ESP + 12], %EBX mov DWORD PTR [%ESP + 4], %EDX mov %ECX, DWORD PTR [%ESP + 12] add %EAX, %ECX mov %ECX, DWORD PTR [%ESP + 8] add %EAX, %ECX mov %ECX, DWORD PTR [%ESP + 4] add %EAX, %ECX mov %EBX, DWORD PTR [%ESP] add %ESP, 16 ret ... note the proper register allocation. :) it is unclear to me why the loads aren't folded into the adds. llvm-svn: 25827
* Print the most trivial inline asms.Chris Lattner2006-01-301-1/+12
| | | | llvm-svn: 25822
* Fix a bug in my legalizer reworking that caused the X86 backend to not getChris Lattner2006-01-301-2/+1
| | | | | | | a chance to custom legalize setcc, which broke a bunch of C++ Codes. Testcase here: CodeGen/X86/2006-01-30-LongSetcc.ll llvm-svn: 25821
* don't insert an and node if it isn't needed here, this can prevent foldingChris Lattner2006-01-301-1/+3
| | | | | | of lowered target nodes. llvm-svn: 25804
* Move MaskedValueIsZero from the DAGCombiner to the TargetLowering ↵Chris Lattner2006-01-301-120/+21
| | | | | | interface,making isMaskedValueZeroForTargetNode simpler, and useable from other partsof the compiler. llvm-svn: 25803
* pass the address of MaskedValueIsZero into isMaskedValueZeroForTargetNode,Chris Lattner2006-01-301-1/+1
| | | | | | to permit recursion llvm-svn: 25799
* Fix RET of promoted values on targets that custom expand RET to a target node.Chris Lattner2006-01-291-8/+9
| | | | llvm-svn: 25794
* cleanups to the ValueTypeActions interfaceChris Lattner2006-01-291-7/+5
| | | | llvm-svn: 25785
* Remove some special case hacks for CALLSEQ_*, using UpdateNodeOperandsChris Lattner2006-01-292-60/+27
| | | | | | instead. llvm-svn: 25780
* Allow custom expansion of ConstantVec nodes. PPC will use this in the future.Chris Lattner2006-01-291-22/+35
| | | | llvm-svn: 25774
* Legalize ConstantFP into TargetConstantFP when the target allows. ImplementChris Lattner2006-01-292-2/+39
| | | | | | custom expansion of ConstantFP nodes. llvm-svn: 25772
* eliminate uses of SelectionDAG::getBR2Way_CCChris Lattner2006-01-292-9/+24
| | | | llvm-svn: 25767
* Use the new "UpdateNodeOperands" method to simplify LegalizeDAG and make itChris Lattner2006-01-281-317/+194
| | | | | | | | | | | | | | faster. This cuts about 120 lines of code out of the legalizer (mostly code checking to see if operands have changed). It also fixes an ugly performance issue, where the legalizer cloned the entire graph after any change. Now the "UpdateNodeOperands" method gives it a chance to reuse nodes if the operands of a node change but not its opcode or valuetypes. This speeds up instruction selection time on kimwitu++ by about 8.2% with a release build. llvm-svn: 25746
* add another method variantChris Lattner2006-01-281-3/+18
| | | | llvm-svn: 25744
* add some methods for updating nodesChris Lattner2006-01-281-0/+234
| | | | llvm-svn: 25742
* minor tweaksChris Lattner2006-01-281-21/+21
| | | | llvm-svn: 25740
* move a bunch of code, no other change.Chris Lattner2006-01-281-326/+324
| | | | llvm-svn: 25739
* remove a couple more now-extraneous legalizeop'sChris Lattner2006-01-281-9/+5
| | | | llvm-svn: 25738
* fix a bugChris Lattner2006-01-281-2/+1
| | | | llvm-svn: 25737
* Several major changes:Chris Lattner2006-01-281-764/+488
| | | | | | | | | | | 1. Pull out the expand cases for BSWAP and CT* into a separate function, reducing the size of LegalizeOp. 2. Fix a bug where expand(bswap i64) was wrong when i64 is legal. 3. Changed LegalizeOp/PromoteOp so that the legalizer never needs to be iterative. It now operates in a single pass over the nodes. 4. Simplify a LOT of code, with a net reduction of ~280 lines. llvm-svn: 25736
* Eliminate the need for ExpandOp to set 'needsanotheriteration', as it alreadyChris Lattner2006-01-281-131/+80
| | | | | | | | | | | relegalizes the stuff it returns. Add the ability to custom expand ADD/SUB, so that targets don't need to deal with ADD_PARTS/SUB_PARTS if they don't want. Fix some obscure potential bugs and simplify code. llvm-svn: 25732
* Instead of making callers of ExpandLibCall legalize the result, makeChris Lattner2006-01-281-6/+7
| | | | | | ExpandLibCall do it itself. llvm-svn: 25731
* Eliminate the need to do another iteration of the legalizer after insertingChris Lattner2006-01-281-3/+2
| | | | | | a libcall. llvm-svn: 25730
* remove method I just addedChris Lattner2006-01-281-7/+0
| | | | llvm-svn: 25728
* add a new callbackChris Lattner2006-01-281-0/+7
| | | | llvm-svn: 25727
* Implement Promote for VAARG, and allow it to be custom promoted for peopleNate Begeman2006-01-282-1/+32
| | | | | | who don't want the default behavior (Alpha). llvm-svn: 25726
* Add a missing case to the dag combiner.Nate Begeman2006-01-281-2/+3
| | | | llvm-svn: 25723
* Remove the ISD::CALL and ISD::TAILCALL nodesChris Lattner2006-01-282-83/+1
| | | | llvm-svn: 25721
* Remove TLI.LowerReturnTo, and just let targets custom lower ISD::RET forNate Begeman2006-01-271-37/+22
| | | | | | | the same functionality. This addresses another piece of bug 680. Next, on to fixing Alpha VAARG, which I broke last time. llvm-svn: 25696
* Using bit size of integers instead of ambiguous "long" et all.Jim Laskey2006-01-271-62/+62
| | | | llvm-svn: 25694
* Sorry - really folowing convention.Jim Laskey2006-01-271-1/+1
| | | | llvm-svn: 25691
* Following convention.Jim Laskey2006-01-271-1/+1
| | | | llvm-svn: 25689
* fix buildAndrew Lenharth2006-01-271-1/+1
| | | | llvm-svn: 25687
* Fix build error that is apparently only a warning with some compilers.Chris Lattner2006-01-271-1/+1
| | | | llvm-svn: 25686
* Forgot the version number.Jim Laskey2006-01-271-1/+1
| | | | llvm-svn: 25685
* Improve visibility/correctness of operand indices in "llvm.db" objects.Jim Laskey2006-01-272-48/+71
| | | | | | Handle 64 in DIEs. llvm-svn: 25684
* Stub out a methodChris Lattner2006-01-271-0/+6
| | | | llvm-svn: 25676
* Teach the scheduler to emit the appropriate INLINEASM MachineInstr for anChris Lattner2006-01-261-0/+29
| | | | | | ISD::INLINEASM node. llvm-svn: 25668
* initial selectiondag support for new INLINEASM node. Note that inline asmsChris Lattner2006-01-263-1/+74
| | | | | | with outputs or inputs are not supported yet. :) llvm-svn: 25664
* Use global information to fill out Dwarf compile units.Jim Laskey2006-01-262-22/+18
| | | | llvm-svn: 25662
* Set up MachineDebugInfo to scan for debug information form "llvm.db"g globals.Jim Laskey2006-01-263-15/+288
| | | | | | Global Variable information is now pulled from "llvm.dbg.globals" llvm-svn: 25655
OpenPOWER on IntegriCloud