summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
...
* Change class' public PassInfo variables to by initialized with theDan Gohman2008-05-136-6/+6
| | | | | | | | | | | address of the PassInfo directly instead of calling getPassInfo. This eliminates a bunch of dynamic initializations of static data. Also, fold RegisterPassBase into PassInfo, make a bunch of its data members const, and rearrange some code to initialize data members in constructors instead of using setter member functions. llvm-svn: 51022
* Clean up the use of static and anonymous namespaces. This turned upDan Gohman2008-05-1322-131/+126
| | | | | | | several things that were neither in an anonymous namespace nor static but not intended to be global. llvm-svn: 51017
* Teach Legalize how to scalarize VSETCCNate Begeman2008-05-121-0/+10
| | | | | | Teach X86 a few more vsetcc patterns. Custom lowering for unsupported ones is next. llvm-svn: 51009
* Xform bitconvert(build_pair(load a, load b)) to a single load if the load ↵Evan Cheng2008-05-122-1/+50
| | | | | | locations are at the right offset from each other. llvm-svn: 51008
* Be more aggressive about tail-merging small blocksDale Johannesen2008-05-121-1/+12
| | | | | | | if those blocks consist entirely of common instructions; merging will not add an extra branch in this case. llvm-svn: 51006
* Constify isSourceDefinedByImplicitDef function. Otherwise, just formattingBill Wendling2008-05-121-45/+38
| | | | | | changes that don't change functionality. llvm-svn: 51004
* Further rework of tail merge algorithm. Not quiteDale Johannesen2008-05-121-111/+77
| | | | | | | | semantically identical, but little difference in either results or execution speed; but it's much easier to read, at least IMO. llvm-svn: 50999
* Refactor isConsecutiveLoad from X86 to TargetLowering so DAG combiner can ↵Evan Cheng2008-05-121-0/+68
| | | | | | make use of it. llvm-svn: 50991
* Revert the previous commit. Go ahead and hoist rematerializable instructions.Bill Wendling2008-05-121-4/+0
| | | | llvm-svn: 50990
* Add support for vicmp/vfcmp codegen, more legalize support coming.Nate Begeman2008-05-123-0/+98
| | | | | | This is necessary to unbreak the build. llvm-svn: 50988
* One real change - don't hoist something that's trivially rematerializable. It'sBill Wendling2008-05-121-18/+19
| | | | | | | | possible for it to produce worse code than before. The rest of this patch is code cleanup. llvm-svn: 50987
* Fix a missing break in the ISD::FLT_ROUNDS_ handling. Patch by giuma!Dan Gohman2008-05-121-0/+1
| | | | llvm-svn: 50967
* If all sources of a PHI node are defined by an implicit_def, just emit an ↵Evan Cheng2008-05-101-7/+11
| | | | | | implicit_def instead of a copy. llvm-svn: 50927
* Cosmetic changes:Bill Wendling2008-05-101-36/+48
| | | | | | | | | - Comment fixes. - Moar whitespace. - Made ivars "private" by default. No functionality change. llvm-svn: 50926
* Remove an evil vector bool. Cosmetic refactoring,Dale Johannesen2008-05-091-62/+85
| | | | | | no functional change. llvm-svn: 50921
* Rewrite tail merging algorithm to handle theDale Johannesen2008-05-091-87/+115
| | | | | | | | case where there are multiple blocks with a large number of common tail instructions more efficiently (compile time optimization). llvm-svn: 50916
* Get exception handling working again on 64 bitDuncan Sands2008-05-081-1/+2
| | | | | | | | | | | Darwin. This is a hack of course, but it does at least look at the right thing: gotpcrel means that this is already an offset, so an explicit offset is not needed (and wrong). I think this is good enough for the moment: Anton is working on something better. llvm-svn: 50850
* Turn StripPointerCast() into a methodAnton Korobeynikov2008-05-073-5/+5
| | | | llvm-svn: 50836
* Output correct exception handling and frame infoDuncan Sands2008-05-071-51/+49
| | | | | | | | | | | | | | | | | | on x86-64 linux. This causes no regressions on 32 bit linux and 32 bit ppc. More tests pass on 64 bit ppc with no regressions. I didn't turn on eh on 64 bit linux because the intrinsics needed to compile the eh runtime aren't done yet. But if you turn it on and link with the mainline runtime then eh seems to work fine on x86-64 linux with this patch. Thanks to Dale for testing. The main point of the patch is that if you output that some object is encoded using 4 bytes you had better not output 8 bytes for it: the patch makes everything consistent. llvm-svn: 50825
* Yet another nasty spiller bug.Evan Cheng2008-05-071-14/+19
| | | | | | | | | | %ecx = op store %cl<kill>, (addr) (addr) = op %al It's not safe to unfold the last operand and eliminate store even though %cl is marked kill. It's a sub-register use which means one of its super-register(s) may be used below. llvm-svn: 50794
* Fix a bug in the ComputeMaskedBits logic for multiply.Dan Gohman2008-05-071-2/+2
| | | | llvm-svn: 50793
* Make StripPointerCast a common function (should we mak it method of Value ↵Anton Korobeynikov2008-05-063-8/+6
| | | | | | instead?) llvm-svn: 50775
* Make several variable declarations static.Dan Gohman2008-05-064-9/+10
| | | | llvm-svn: 50696
* Remove uses of llvm/System/IncludeFile.h that are no longer needed.Dan Gohman2008-05-061-3/+0
| | | | llvm-svn: 50695
* Instead of enumerating each opcode that isn't handled thatDan Gohman2008-05-061-11/+1
| | | | | | | ComputeMaskedBits handles, just use a 'default:'. This avoids TargetLowering's list getting out of date with SelectionDAG's. llvm-svn: 50693
* Correct the value of LowBits in srem and urem handling inDan Gohman2008-05-061-3/+3
| | | | | | ComputeMaskedBits. llvm-svn: 50692
* Fix a broken doxygen comment, and reword it for clarity.Dan Gohman2008-05-061-2/+3
| | | | llvm-svn: 50687
* Added addition atomic instrinsics and, or, xor, min, and max.Mon P Wang2008-05-055-37/+113
| | | | llvm-svn: 50663
* Fix a bug in the ELF writer that caused it to produce malformedDan Gohman2008-05-051-1/+1
| | | | | | ELF headers. The ELF writer still isn't generally usable though. llvm-svn: 50652
* Add AsmPrinter support for emitting a directive to declare thatDan Gohman2008-05-051-0/+7
| | | | | | | | | the code being generated does not require an executable stack. Also, add target-specific code to make use of this on Linux on x86. llvm-svn: 50634
* Fix a mistake in the computation of leading zeros for udiv.Dan Gohman2008-05-021-3/+5
| | | | llvm-svn: 50591
* Fix a typo in a comment.Dan Gohman2008-05-021-1/+1
| | | | llvm-svn: 50562
* Use push_back(...) instead of resize(1, ...), per review feedback.Dan Gohman2008-05-021-2/+2
| | | | llvm-svn: 50561
* Fix uninitialized uses of the FPC variable.Dan Gohman2008-05-011-2/+2
| | | | llvm-svn: 50558
* don't randomly miscompile seto/setuo just because we are in Chris Lattner2008-05-011-4/+4
| | | | | | | | | ffastmath mode. This fixes rdar://5902801, a miscompilation of gcc.dg/builtins-8.c. Bill, please pull this into Tak. llvm-svn: 50523
* Tail call optimization improvements:Arnold Schwaighofer2008-04-301-6/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | Move platform independent code (lowering of possibly overwritten arguments, check for tail call optimization eligibility) from target X86ISelectionLowering.cpp to TargetLowering.h and SelectionDAGISel.cpp. Initial PowerPC tail call implementation: Support ppc32 implemented and tested (passes my tests and test-suite llvm-test). Support ppc64 implemented and half tested (passes my tests). On ppc tail call optimization is performed if caller and callee are fastcc call is a tail call (in tail call position, call followed by ret) no variable argument lists or byval arguments option -tailcallopt is enabled Supported: * non pic tail calls on linux/darwin * module-local tail calls on linux(PIC/GOT)/darwin(PIC) * inter-module tail calls on darwin(PIC) If constraints are not met a normal call will be emitted. A test checking the argument lowering behaviour on x86-64 was added. llvm-svn: 50477
* Add comments for previous patch as requested.Dale Johannesen2008-04-301-0/+6
| | | | llvm-svn: 50463
* Fix custom target lowering for zero/any/sign_extend: make sure thatScott Michel2008-04-301-5/+3
| | | | | | | DAG.UpdateNodeOperands() is called before (not after) the call to TLI.LowerOperation(). llvm-svn: 50461
* Make eh_frame objects by 8-byte aligned on 64-bitDale Johannesen2008-04-291-2/+4
| | | | | | targets. llvm-svn: 50451
* Use std::set instead of std::priority_queue for the RegReductionPriorityQueue. Roman Levenstein2008-04-291-44/+29
| | | | | | | | | | | | | | This removes the existing bottleneck related to the removal of elements from the middle of the queue. Also fixes a subtle bug in ScheduleDAGRRList::CapturePred: It was updating the state of the SUnit before removing it. As a result, the comparison operators were working incorrectly and this SUnit could not be removed from the queue properly. Reviewed by Evan and Dan. Approved by Dan. llvm-svn: 50412
* make the vector conversion magic handle multiple results.Chris Lattner2008-04-291-7/+16
| | | | | | | | | | | | | | | | | | | | | We now compile test2/test3 to: _test2: ## InlineAsm Start set %xmm0, %xmm1 ## InlineAsm End addps %xmm1, %xmm0 ret _test3: ## InlineAsm Start set %xmm0, %xmm1 ## InlineAsm End paddd %xmm1, %xmm0 ret as expected. llvm-svn: 50389
* add support for multiple return values in inline asm. This is a step Chris Lattner2008-04-291-12/+19
| | | | | | | | | | | | | | | | | | towards PR2094. It now compiles the attached .ll file to: _sad16_sse2: movslq %ecx, %rax ## InlineAsm Start %ecx %rdx %rax %rax %r8d %rdx %rsi ## InlineAsm End ## InlineAsm Start set %eax ## InlineAsm End ret which is pretty decent for a 3 output, 4 input asm. llvm-svn: 50386
* Another extract_subreg coalescing bug.Evan Cheng2008-04-291-1/+3
| | | | | | | | e.g. vr1024<2> extract_subreg vr1025, 2 If vr1024 do not have the same register class as vr1025, it's not safe to coalesce this away. For example, vr1024 might be a GPR32 while vr1025 might be a GPR64. llvm-svn: 50385
* Fix a bug in RegsForValue::getCopyToRegs() that causes cyclical scheduling ↵Evan Cheng2008-04-281-2/+12
| | | | | | | | | | | | | | units. If it's creating multiple CopyToReg nodes that are "flagged" together, it should not create a TokenFactor for it's chain outputs: c1, f1 = CopyToReg c2, f2 = CopyToReg c3 = TokenFactor c1, c2 ... = user c3, ..., f2 Now that the two CopyToReg's and the user are "flagged" together. They effectively forms a single scheduling unit. The TokenFactor is now both an operand and a successor of the Flagged nodes. llvm-svn: 50376
* Evan pointed out that folding sext to zext may not be correctDan Gohman2008-04-281-1/+2
| | | | | | if the zext is not legal. llvm-svn: 50368
* Delete an unused constructor.Dan Gohman2008-04-281-3/+0
| | | | llvm-svn: 50367
* Add a comment to CreateRegForValue that clarifies the handling ofDan Gohman2008-04-281-0/+4
| | | | | | aggregate types. llvm-svn: 50366
* Rewrite the comments for RegsForValue and its members, andDan Gohman2008-04-281-20/+30
| | | | | | reorder some of the members for clarity. llvm-svn: 50365
* Don't call size() on each iteration of the loop.Dan Gohman2008-04-281-2/+2
| | | | llvm-svn: 50361
* Fix the SVOffset values for loads and stores produced byDan Gohman2008-04-281-18/+20
| | | | | | | memcpy/memset expansion. It was a bug for the SVOffset value to be used in the actual address calculations. llvm-svn: 50359
OpenPOWER on IntegriCloud