summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
...
* This commit changes:Chris Lattner2008-01-173-22/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1. Legalize now always promotes truncstore of i1 to i8. 2. Remove patterns and gunk related to truncstore i1 from targets. 3. Rename the StoreXAction stuff to TruncStoreAction in TLI. 4. Make the TLI TruncStoreAction table a 2d table to handle from/to conversions. 5. Mark a wide variety of invalid truncstores as such in various targets, e.g. X86 currently doesn't support truncstore of any of its integer types. 6. Add legalize support for truncstores with invalid value input types. 7. Add a dag combine transform to turn store(truncate) into truncstore when safe. The later allows us to compile CodeGen/X86/storetrunc-fp.ll to: _foo: fldt 20(%esp) fldt 4(%esp) faddp %st(1) movl 36(%esp), %eax fstps (%eax) ret instead of: _foo: subl $4, %esp fldt 24(%esp) fldt 8(%esp) faddp %st(1) fstps (%esp) movl 40(%esp), %eax movss (%esp), %xmm0 movss %xmm0, (%eax) addl $4, %esp ret llvm-svn: 46140
* code cleanups, no functionality change.Chris Lattner2008-01-171-7/+9
| | | | llvm-svn: 46126
* * Introduce a new SelectionDAG::getIntPtrConstant methodChris Lattner2008-01-178-114/+133
| | | | | | | | | | | | | and switch various codegen pieces and the X86 backend over to using it. * Add some comments to SelectionDAGNodes.h * Introduce a second argument to FP_ROUND, which indicates whether the FP_ROUND changes the value of its input. If not it is safe to xform things like fp_extend(fp_round(x)) -> x. llvm-svn: 46125
* When a live virtual register is being clobbered by an implicit def, it is ↵Evan Cheng2008-01-171-2/+20
| | | | | | | | | | | spilled and the spill is its kill. However, if the local allocator has determined the register has not been modified (possible when its value was reloaded), it would not issue a restore. In that case, mark the last use of the virtual register as kill. llvm-svn: 46111
* Replace std::vector<bool> with BitVector.Evan Cheng2008-01-171-4/+8
| | | | llvm-svn: 46104
* Fixes a nasty dag combiner bug that causes a bunch of tests to fail at -O0.Evan Cheng2008-01-161-6/+44
| | | | | | | | | | | | | | | | | | | | It's not safe to use the two value CombineTo variant to combine away a dead load. e.g. v1, chain2 = load chain1, loc v2, chain3 = load chain2, loc v3 = add v2, c Now we replace use of v1 with undef, use of chain2 with chain1. ReplaceAllUsesWith() will iterate through uses of the first load and update operands: v1, chain2 = load chain1, loc v2, chain3 = load chain1, loc v3 = add v2, c Now the second load is the same as the first load, SelectionDAG cse will ensure the use of second load is replaced with the first load. v1, chain2 = load chain1, loc v3 = add v1, c Then v1 is replaced with undef and bad things happen. llvm-svn: 46099
* Do not mark EH tables no-dead-strip unless theDale Johannesen2008-01-162-13/+40
| | | | | | associated function is so marked. llvm-svn: 46088
* Fix a ppc long double regression I introduced yesterday due to aChris Lattner2008-01-161-0/+1
| | | | | | simplification. This fixes automotive-basicmath on PPC. llvm-svn: 46072
* merge a few pieces of code that do the store/load to stack Chris Lattner2008-01-161-30/+12
| | | | | | pattern to use EmitStackConvert now. llvm-svn: 46066
* rename ExpandBIT_CONVERT to EmitStackConvert, generalizing Chris Lattner2008-01-161-15/+37
| | | | | | it to allow it to emit different load and store kinds. llvm-svn: 46065
* simplify a bunch of code by using SelectionDAG::CreateStackTemporary Chris Lattner2008-01-161-28/+6
| | | | | | instead of inlining its body. llvm-svn: 46062
* Change legalizeop of FP_ROUND and FP_EXTEND to not fall throughChris Lattner2008-01-161-32/+55
| | | | | | | | | into the ANY_EXTEND/ZERO_EXTEND/SIGN_EXTEND code to simplify it. Unmerge the code for FP_ROUND and FP_EXTEND from each other to make each one simpler. llvm-svn: 46061
* Factor the ReachesChainWithoutSideEffects out of dag combiner into Chris Lattner2008-01-162-28/+32
| | | | | | | a public SDOperand::reachesChainWithoutSideEffects method. No functionality change. llvm-svn: 46050
* Fix and enable EH for x86-64 Darwin. AddsDale Johannesen2008-01-151-8/+12
| | | | | | | | | ShortenEHDataFor64Bits as a not-very-accurate abstraction to cover all the changes in DwarfWriter. Some cosmetic changes to Darwin assembly code for gcc testsuite compatibility. llvm-svn: 46029
* Move some calls to getVRegDef higher in the callgraph, so they don't get ↵Owen Anderson2008-01-151-11/+11
| | | | | | executed as frequently in performance sensitive code. llvm-svn: 46027
* The type of the 'abort' node should be pointer type (becauseChris Lattner2008-01-151-1/+2
| | | | | | | it's a function pointer) not MVT::Other. This fixes builtin_trap lowering on ppc, alpha, ia64 llvm-svn: 46018
* Remove DefInst from LiveVariables::VarInfo. Use the facilities on ↵Owen Anderson2008-01-153-35/+20
| | | | | | MachineRegisterInfo instead. llvm-svn: 46016
* Add support for targets that have a legal ISD::TRAP.Chris Lattner2008-01-152-4/+12
| | | | llvm-svn: 46014
* Oops. Forgot to commit this.Evan Cheng2008-01-151-5/+12
| | | | llvm-svn: 46002
* For PR1839: add initial support for __builtin_trap. llvm-gcc part is missedAnton Korobeynikov2008-01-153-1/+26
| | | | | | as well as PPC codegen llvm-svn: 46001
* ByVal stack slot alignment should be at least as large as pointer ABI alignment.Evan Cheng2008-01-151-1/+3
| | | | llvm-svn: 45995
* don't create the post-ra scheduler unless it is enabled.Chris Lattner2008-01-142-17/+8
| | | | llvm-svn: 45972
* remove dead #includeChris Lattner2008-01-141-1/+0
| | | | llvm-svn: 45971
* Remove the assumption that byval has been applied toDuncan Sands2008-01-131-12/+12
| | | | | | a pointer to a struct. llvm-svn: 45939
* implement support for sinking a load out the bottom of a block thatChris Lattner2008-01-121-16/+23
| | | | | | | | | has no stores between the load and the end of block. This works great and sinks hundreds of stores, but we can't turn it on because machineinstrs don't have volatility information and we don't want to sink volatile stores :( llvm-svn: 45894
* Simplify the side effect stuff a bit more and make licm/sinkingChris Lattner2008-01-102-16/+35
| | | | | | | | | | | | | | | | both work right according to the new flags. This removes the TII::isReallySideEffectFree predicate, and adds TII::isInvariantLoad. It removes NeverHasSideEffects+MayHaveSideEffects and adds UnmodeledSideEffects as machine instr flags. Now the clients can decide everything they need. I think isRematerializable can be implemented in terms of the flags we have now, though I will let others tackle that. llvm-svn: 45843
* Clamp down on sinking of lots of instructions.Chris Lattner2008-01-101-0/+9
| | | | llvm-svn: 45841
* Output sinl for a long double FSIN node, not sin.Duncan Sands2008-01-102-55/+61
| | | | | | | | Likewise fix up a bunch of other libcalls. While there I remove NEG_F32 and NEG_F64 since they are not used anywhere. This fixes 9 Ada ACATS failures. llvm-svn: 45833
* Only remat loads from immutable stack slots.Evan Cheng2008-01-101-2/+2
| | | | llvm-svn: 45831
* Simplify some code.Evan Cheng2008-01-101-8/+2
| | | | llvm-svn: 45830
* Don't use LiveVariables::VarInfo::DefInst.Owen Anderson2008-01-101-1/+8
| | | | llvm-svn: 45815
* Emit unused EH frames for weak definitions on Darwin,Dale Johannesen2008-01-101-8/+15
| | | | | | | because assembler/linker can't cope with weak absolutes. PR 1880. llvm-svn: 45811
* Get rid of all uses of LiveVariables::VarInfo::DefInst in favor of the ↵Owen Anderson2008-01-101-58/+66
| | | | | | | | equivalent API from MachineRegisterInfo. Once all clients are switched over, the former will be going away. llvm-svn: 45805
* Add more comments explaining the basics of how the decision of when to ↵Owen Anderson2008-01-101-7/+37
| | | | | | | | rename and when to insert copies is made. llvm-svn: 45799
* Get rid of the isKillInst predicate. LiveVariables already provides this ↵Owen Anderson2008-01-101-14/+10
| | | | | | information. llvm-svn: 45797
* Copies need to be inserted before the first terminator, not at the end of ↵Owen Anderson2008-01-101-2/+2
| | | | | | the block. llvm-svn: 45791
* Special copy SUnit's do not have SDNode's.Evan Cheng2008-01-091-2/+2
| | | | llvm-svn: 45787
* Clean up StrongPHIElimination a bit, and add some more comments to the ↵Owen Anderson2008-01-091-6/+46
| | | | | | | | internal structures. There's still more work to do on this front. llvm-svn: 45783
* StrongPHIElim: Now with even fewer trivial bugs!Owen Anderson2008-01-091-2/+4
| | | | llvm-svn: 45775
* Fix an infinite recursion bug in InsertCopies.Owen Anderson2008-01-091-4/+9
| | | | llvm-svn: 45774
* Fix some simple bugs. StrongPHIElimination now does not crash on 164.gzip.Owen Anderson2008-01-091-3/+3
| | | | llvm-svn: 45773
* Make load->store deletion a bit smarter. This allows us to compile this:Chris Lattner2008-01-081-3/+33
| | | | | | | | | | | | | | | | | | | | | | void test(long long *P) { *P ^= 1; } into just: _test: movl 4(%esp), %eax xorl $1, (%eax) ret instead of code like this: _test: movl 4(%esp), %ecx xorl $1, (%ecx) movl 4(%ecx), %edx movl %edx, 4(%ecx) ret llvm-svn: 45762
* Rename registers that do not need copies.Owen Anderson2008-01-081-3/+19
| | | | llvm-svn: 45759
* Actually insert copies now!Owen Anderson2008-01-081-6/+29
| | | | llvm-svn: 45738
* Oops, missed one.Owen Anderson2008-01-071-1/+1
| | | | llvm-svn: 45719
* Make some predicates static.Owen Anderson2008-01-071-3/+3
| | | | llvm-svn: 45718
* Pruning includes.Gordon Henriksen2008-01-072-14/+0
| | | | llvm-svn: 45700
* remove #includageChris Lattner2008-01-073-5/+2
| | | | llvm-svn: 45697
* rename TargetInstrDescriptor -> TargetInstrDesc.Chris Lattner2008-01-0719-111/+112
| | | | | | | Make MachineInstr::getDesc return a reference instead of a pointer, since it can never be null. llvm-svn: 45695
* simplify some code.Chris Lattner2008-01-071-10/+13
| | | | llvm-svn: 45693
OpenPOWER on IntegriCloud