summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
* Make getTypeSizeInBits work correctly for array types; it should returnDan Gohman2010-02-243-12/+23
| | | | | | | | | | | | | | | the number of value bits, not the number of bits of allocation for in-memory storage. Make getTypeStoreSize and getTypeAllocSize work consistently for arrays and vectors. Fix several places in CodeGen which compute offsets into in-memory vectors to use TargetData information. This fixes PR1784. llvm-svn: 97064
* convert cycle checker to smallptrset, add comments and make itChris Lattner2010-02-241-20/+20
| | | | | | more elegant. llvm-svn: 97059
* revert david's patch which does not even build.Chris Lattner2010-02-241-4/+4
| | | | llvm-svn: 97057
* Use a SmallPtrSet as suggested by Chris.David Greene2010-02-241-4/+4
| | | | llvm-svn: 97056
* Speculatively revert r97011, "Re-apply 96540 and 96556 with fixes.", again inDaniel Dunbar2010-02-242-86/+9
| | | | | | the hopes of fixing PPC bootstrap. llvm-svn: 97040
* When forming SSE min and max nodes for UGE and ULE comparisons, it'sDan Gohman2010-02-241-0/+23
| | | | | | | | | | | necessary to swap the operands to handle NaN and negative zero properly. Also, reintroduce logic for checking for NaN conditions when forming SSE min and max instructions, fixed to take into consideration NaNs and negative zeros. This allows forming min and max instructions in more cases. llvm-svn: 97025
* Change the scheduler from adding nodes in allnodes orderChris Lattner2010-02-241-2/+14
| | | | | | | | | | | | | | | | | | to adding them in a determinstic order (bottom up from the root) based on the structure of the graph itself. This updates tests for some random changes, interesting bits: CodeGen/Blackfin/promote-logic.ll no longer crashes. I have no idea why, but that's good right? CodeGen/X86/2009-07-16-LoadFoldingBug.ll also fails, but now compiles to have one fewer constant pool entry, making the expected load that was being folded disappear. Since it is an unreduced mass of gnast, I just removed it. This fixes PR6370 llvm-svn: 97023
* add node #'s to debug dumps.Chris Lattner2010-02-241-3/+3
| | | | llvm-svn: 97019
* Re-apply 96540 and 96556 with fixes.Evan Cheng2010-02-242-9/+86
| | | | llvm-svn: 97011
* make selectnodeto set the nodeid to -1. This makes it more akin toChris Lattner2010-02-231-1/+4
| | | | | | creating a new node then replacing uses. llvm-svn: 97000
* Remember to handle sub-registers when moving imp-defs to a rematted instruction.Jakob Stoklund Olesen2010-02-231-2/+17
| | | | llvm-svn: 96995
* Keep track of phi join registers explicitly in LiveVariables.Jakob Stoklund Olesen2010-02-233-52/+36
| | | | | | | | Previously, LiveIntervalAnalysis would infer phi joins by looking for multiply defined registers. That doesn't work if the phi join is implicitly defined in all but one of the predecessors. llvm-svn: 96994
* fix a bug in findNonImmUse (used by IsLegalToFold) where nodes withChris Lattner2010-02-231-2/+14
| | | | | | | | | | no id's would cause early exit allowing IsLegalToFold to return true instead of false, producing a cyclic dag. This was striking the new isel because it isn't using SelectNodeTo yet, which theoretically is just an optimization. llvm-svn: 96972
* Print node ID's in dumps and views if set.Chris Lattner2010-02-231-0/+3
| | | | llvm-svn: 96971
* use OutStreamer.EmitCodeAlignment for alignment in the textChris Lattner2010-02-231-4/+3
| | | | | | segment. llvm-svn: 96967
* Speed up cycle checking significantly by caching results.David Greene2010-02-231-3/+9
| | | | llvm-svn: 96956
* Dead code eliminationJakob Stoklund Olesen2010-02-232-14/+0
| | | | llvm-svn: 96837
* Updated version of r96634 (which was reverted due to failing 176.gcc andJim Grosbach2010-02-221-3/+4
| | | | | | | | 126.gcc nightly tests. These failures uncovered latent bugs that machine DCE could remove one half of a stack adjust down/up pair, causing PEI to assert. This update fixes that, and the tests now pass. llvm-svn: 96822
* Fix various doxygen warnings.Dan Gohman2010-02-221-2/+2
| | | | llvm-svn: 96779
* It turned out that we failed to emit proper symbol stubs on non-x86/darwin ↵Anton Korobeynikov2010-02-211-1/+29
| | | | | | | | | for ages (we emitted a reference to a stub, but no stub was emitted). The code inside x86-32/macho target objfile lowering should actually be the generic one - move it there. This (I really, really hope) should fix EH issues on ppc/darwin and arm/darwin. llvm-svn: 96755
* Enable assertion to detect cyclic valno references.Jakob Stoklund Olesen2010-02-211-1/+1
| | | | | | This changes the stack overflow in PR6363 to an assertion failure. llvm-svn: 96744
* Revert 96634. It causes assertion failures for 126.gcc and 176.gcc inBob Wilson2010-02-191-4/+3
| | | | | | the armv6 nightly tests. llvm-svn: 96691
* Add support for the 'alignstack' attribute to the x86 backend. Fixes PR5254.Charles Davis2010-02-191-0/+3
| | | | | | Also, FileCheck'ize a test. llvm-svn: 96686
* Revert Anton's most recent EH patch (r96637), since it breaks a lot ofBob Wilson2010-02-191-17/+0
| | | | | | ARM and Thumb tests. llvm-svn: 96680
* Revert commits 96556 and 96640, because commit 96556 breaks theDuncan Sands2010-02-192-80/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | dragonegg self-host build. I reverted 96640 in order to revert 96556 (96640 goes on top of 96556), but it also looks like with both of them applied the breakage happens even earlier. The symptom of the 96556 miscompile is the following crash: llvm[3]: Compiling AlphaISelLowering.cpp for Release build cc1plus: /home/duncan/tmp/tmp/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:4982: void llvm::SelectionDAG::ReplaceAllUsesWith(llvm::SDNode*, llvm::SDNode*, llvm::SelectionDAG::DAGUpdateListener*): Assertion `(!From->hasAnyUseOfValue(i) || From->getValueType(i) == To->getValueType(i)) && "Cannot use this version of ReplaceAllUsesWith!"' failed. Stack dump: 0. Running pass 'X86 DAG->DAG Instruction Selection' on function '@_ZN4llvm19AlphaTargetLowering14LowerOperationENS_7SDValueERNS_12SelectionDAGE' g++: Internal error: Aborted (program cc1plus) This occurs when building LLVM using LLVM built by LLVM (via dragonegg). Probably LLVM has miscompiled itself, though it may have miscompiled GCC and/or dragonegg itself: at this point of the self-host build, all of GCC, LLVM and dragonegg were built using LLVM. Unfortunately this kind of thing is extremely hard to debug, and while I did rummage around a bit I didn't find any smoking guns, aka obviously miscompiled code. Found by bisection. r96556 | evancheng | 2010-02-18 03:13:50 +0100 (Thu, 18 Feb 2010) | 5 lines Some dag combiner goodness: Transform br (xor (x, y)) -> br (x != y) Transform br (xor (xor (x,y), 1)) -> br (x == y) Also normalize (and (X, 1) == / != 1 -> (and (X, 1)) != / == 0 to match to "test on x86" and "tst on arm" r96640 | evancheng | 2010-02-19 01:34:39 +0100 (Fri, 19 Feb 2010) | 16 lines Transform (xor (setcc), (setcc)) == / != 1 to (xor (setcc), (setcc)) != / == 1. e.g. On x86_64 %0 = icmp eq i32 %x, 0 %1 = icmp eq i32 %y, 0 %2 = xor i1 %1, %0 br i1 %2, label %bb, label %return => testl %edi, %edi sete %al testl %esi, %esi sete %cl cmpb %al, %cl je LBB1_2 llvm-svn: 96672
* Transform (xor (setcc), (setcc)) == / != 1 toEvan Cheng2010-02-191-3/+13
| | | | | | | | | | | | | | | | | | | (xor (setcc), (setcc)) != / == 1. e.g. On x86_64 %0 = icmp eq i32 %x, 0 %1 = icmp eq i32 %y, 0 %2 = xor i1 %1, %0 br i1 %2, label %bb, label %return => testl %edi, %edi sete %al testl %esi, %esi sete %cl cmpb %al, %cl je LBB1_2 llvm-svn: 96640
* Use the same encoding for EH stuff uniformly on all MachO targets.Anton Korobeynikov2010-02-191-0/+17
| | | | | | This hopefulyl should unbreak EH on PPC/Darwin. llvm-svn: 96637
* Radar 7636153. In the presence of large call frames, it's not sufficientJim Grosbach2010-02-191-3/+4
| | | | | | | | | for ARM to just check if a function has a FP to determine if it's safe to simplify the stack adjustment pseudo ops prior to eliminating frame indices. Allow targets to override the default behavior and does so for ARM and Thumb2. llvm-svn: 96634
* Always normalize spill weights, also for intervals created by spilling.Jakob Stoklund Olesen2010-02-182-4/+10
| | | | | | | | | | | | | | Moderate the weight given to very small intervals. The spill weight given to new intervals created when spilling was not normalized in the same way as the original spill weights calculated by CalcSpillWeights. That meant that restored registers would tend to hang around because they had a much higher spill weight that unspilled registers. This improves the runtime of a few tests by up to 10%, and there are no significant regressions. llvm-svn: 96613
* Make CodePlacementOpt detect special EH control flow byDan Gohman2010-02-181-7/+8
| | | | | | | | | | checking whether AnalyzeBranch disagrees with the CFG directly, rather than looking for EH_LABEL instructions. EH_LABEL instructions aren't always at the end of the block, due to FP_REG_KILL and other things. This fixes an infinite loop compiling MultiSource/Benchmarks/Bullet. llvm-svn: 96611
* Uniformize the way these options are printed. Requested byDuncan Sands2010-02-182-2/+2
| | | | | | Russell Wallace. llvm-svn: 96580
* Remove terminating dot in description. Inconsistency pointedDuncan Sands2010-02-181-1/+1
| | | | | | out by Russell Wallace. llvm-svn: 96579
* Some dag combiner goodness:Evan Cheng2010-02-182-6/+70
| | | | | | | | Transform br (xor (x, y)) -> br (x != y) Transform br (xor (xor (x,y), 1)) -> br (x == y) Also normalize (and (X, 1) == / != 1 -> (and (X, 1)) != / == 0 to match to "test on x86" and "tst on arm" llvm-svn: 96556
* Make the non-temporal bit "significant" in MemSDNodes so they aren'tDavid Greene2010-02-171-8/+17
| | | | | | CSE'd or otherwise combined with temporal MemSDNodes. llvm-svn: 96505
* Dead code elimination.Jakob Stoklund Olesen2010-02-172-38/+0
| | | | llvm-svn: 96496
* move isOnlyReachableByFallthrough out of MachineBasicBlock into AsmPrinter,Chris Lattner2010-02-172-31/+34
| | | | | | | and add a sparc implementation that knows about delay slots. Patch by Nathan Keynes! llvm-svn: 96492
* sink special case "cannotyetselect" for intrinsics out of the Chris Lattner2010-02-171-0/+5
| | | | | | tblgen splatted code into the implementation. llvm-svn: 96460
* Removed an early out which was causing the PBQP allocator to not compute ↵Lang Hames2010-02-171-4/+0
| | | | | | live-in sets or run the rewriter. llvm-svn: 96450
* Before setting scope end marker, pay attention to scope begin marker and ↵Devang Patel2010-02-171-1/+12
| | | | | | existing scope end marker, if any. Scope must begin before it ends and nested inlined scope do not truncate surrounding scope. llvm-svn: 96445
* There are two ways of checking for a given type, for example isa<PointerType>(T)Duncan Sands2010-02-163-11/+11
| | | | | | | and T->isPointerTy(). Convert most instances of the first form to the second form. Requested by Chris. llvm-svn: 96344
* Handle DBG_VALUE mixed with labels when doing PHIDale Johannesen2010-02-161-1/+18
| | | | | | | elimination. Before a DBG_VALUE could affect codegen. The solution here is imperfect and not final. llvm-svn: 96318
* Reapply 96294; now that I've gotten around to lookingDale Johannesen2010-02-161-4/+26
| | | | | | | at older buildbot messages, I see the failure predates this patch. llvm-svn: 96307
* Something broke. Hard to believe it was this patchDale Johannesen2010-02-161-26/+4
| | | | | | | but it's harder to believe it's the other candidate, so reverting. Temporarily I hope. llvm-svn: 96303
* Fix a memory leak. Patch by Nicolas Geoffray.Evan Cheng2010-02-151-0/+1
| | | | llvm-svn: 96295
* More handling of DBG_VALUE.Dale Johannesen2010-02-151-4/+26
| | | | llvm-svn: 96294
* Add missed entry to cmake build list fileAnton Korobeynikov2010-02-151-0/+1
| | | | llvm-svn: 96292
* Use ttype encoding consistentlyAnton Korobeynikov2010-02-151-1/+1
| | | | llvm-svn: 96290
* Move TLOF implementations to libCodegen to resolve layering violation.Anton Korobeynikov2010-02-151-0/+874
| | | | llvm-svn: 96288
* It turns out that we emitted completely wrong common EH frame since the ↵Anton Korobeynikov2010-02-151-7/+9
| | | | | | early beginning! The "z" CIE augmentation mark indicates that there is an extra word containing the size of augmentation section. However, even for frames w/o any augmentation data we emitted size uleb! (this is the case of "unwinding through C code"). Thus frame moves information was emitterd completely wrong. llvm-svn: 96287
* Preliminary patch to improve dwarf EH generation - Hooks to return ↵Anton Korobeynikov2010-02-155-93/+109
| | | | | | Personality / FDE / LSDA / TType encoding depending on target / options (e.g. code model / relocation model) - MCIzation of Dwarf EH printer to use encoding information - Stub generation for ELF target (needed for indirect references) - Some other small changes here and there llvm-svn: 96285
OpenPOWER on IntegriCloud