summaryrefslogtreecommitdiffstats
path: root/llvm/lib
Commit message (Collapse)AuthorAgeFilesLines
* Fix a bug with inttoptr/ptrtoint casts where the pointer has a differentDan Gohman2009-04-162-5/+12
| | | | | | | | size from the integer, requiring zero extension or truncation. Don't create ZExtInsts with pointer types. This fixes a regression in consumer-jpeg. llvm-svn: 69307
* Do not treat beginning of inlined scope as beginning of normal function ↵Devang Patel2009-04-162-2/+20
| | | | | | | | | | | | | | | | | | | | | scope if the location info is missing. Insetad of doing ... if (inlined_subroutine && known_location) DW_TAG_inline_subroutine else DW_TAG_subprogram do if (inlined_subroutine) { if (known_location) DW_TAG_inline_subroutine } else { DW_TAG_subprogram } llvm-svn: 69300
* Minor code simplifications. Don't attempt LSR on theoreticalDan Gohman2009-04-161-12/+6
| | | | | | | targets with pointers larger than 64 bits, due to the code not yet being APInt clean. llvm-svn: 69296
* LSR is no longer a GEP optimizer. It is now an IV expressionDan Gohman2009-04-161-2/+1
| | | | | | optimizer, which just happen to frequently involve optimizing GEPs. llvm-svn: 69295
* Fix SCEVExpander::visitSMaxExpr and SCEVExpander::visitUMaxExpr toDan Gohman2009-04-161-0/+8
| | | | | | | not create ICmpInsts with operands of different types. This fixes a regression in Applications/d/make_dparser. llvm-svn: 69294
* Teach SCEVExpander::InsertCastOfTo to avoid creating inttoptr-of-ptrtointDan Gohman2009-04-161-0/+8
| | | | | | and ptrtoint-of-inttoptr expressions. This fixes a regression in 300.twolf. llvm-svn: 69293
* Use ConstantExpr::getIntToPtr instead of SCEVExpander::InsertCastOfTo,Dan Gohman2009-04-161-3/+2
| | | | | | since the operand is always a constant. llvm-svn: 69291
* Use a SCEV expression cast instead of immediately inserting aDan Gohman2009-04-161-8/+8
| | | | | | new instruction with SCEVExpander::InsertCastOfTo. llvm-svn: 69290
* Record line number at the beginning of a func.start.Devang Patel2009-04-162-2/+2
| | | | | | This line was accidently lost yesterday. llvm-svn: 69286
* fix PR3995. A scale must be 1, 2, 4 or 8.Rafael Espindola2009-04-161-1/+1
| | | | llvm-svn: 69284
* Expand GEPs in ScalarEvolution expressions. SCEV expressions can nowDan Gohman2009-04-164-443/+433
| | | | | | | | | | | | | | | | | | | | | have pointer types, though in contrast to C pointer types, SCEV addition is never implicitly scaled. This not only eliminates the need for special code like IndVars' EliminatePointerRecurrence and LSR's own GEP expansion code, it also does a better job because it lets the normal optimizations handle pointer expressions just like integer expressions. Also, since LLVM IR GEPs can't directly index into multi-dimensional VLAs, moving the GEP analysis out of client code and into the SCEV framework makes it easier for clients to handle multi-dimensional VLAs the same way as other arrays. Some existing regression tests show improved optimization. test/CodeGen/ARM/2007-03-13-InstrSched.ll in particular improved to the point where if-conversion started kicking in; I turned it off for this test to preserve the intent of the test. llvm-svn: 69258
* In -fast mode do what FastISel does.Devang Patel2009-04-162-30/+71
| | | | | | This code could use some refactoring help! llvm-svn: 69254
* If FastISel is run and it has known DebugLoc then use it.Devang Patel2009-04-162-3/+7
| | | | llvm-svn: 69253
* If location where the function was inlined is not know then do not emit ↵Devang Patel2009-04-161-5/+11
| | | | | | debug info describing inlinied region. llvm-svn: 69252
* Eliminate zext over (iv | const) or (signed iv),Dale Johannesen2009-04-151-22/+77
| | | | | | | | and sext over (iv | const), if a longer iv is available. Allow expressions to have more than one zext/sext parent. All from OpenSSL. llvm-svn: 69241
* s/RootDbgScope/FunctionDbgScope/gDevang Patel2009-04-151-13/+13
| | | | llvm-svn: 69216
* Eliminate zext over (iv & const) or ((iv+const)&const)Dale Johannesen2009-04-151-31/+89
| | | | | | | if a longer iv is available. These subscript forms are not common; they're a bottleneck in OpenSSL. llvm-svn: 69215
* teach EscapeString and UnescapeString to handle ".Chris Lattner2009-04-151-0/+3
| | | | llvm-svn: 69211
* Add DISubprogram is not null check.Devang Patel2009-04-151-2/+4
| | | | | | This fixes test/CodeGen//2009-01-21-invalid-debug-info.m test case. llvm-svn: 69210
* Generalize one of the SelectionDAG::ReplaceAllUsesWith overloadsDan Gohman2009-04-152-9/+10
| | | | | | | | to support replacing a node with another that has a superset of the result types. Use this instead of calling ReplaceAllUsesOfValueWith for each value. llvm-svn: 69209
* Fix 80-column violations.Dan Gohman2009-04-152-3/+4
| | | | llvm-svn: 69204
* Add a folding table entry for MOV8rr_NOREX.Dan Gohman2009-04-151-0/+1
| | | | llvm-svn: 69203
* Check isInlinedSubroutine() before creating DW_TAG_inlined_subroutine.Devang Patel2009-04-151-1/+2
| | | | llvm-svn: 69202
* Fix MachineInstr::getNumExplicitOperands to countDan Gohman2009-04-151-2/+2
| | | | | | variadic operands correctly. Patch by Jakob Stoklund Olesen! llvm-svn: 69190
* Limit the number of times we're willing to chase pointers. Removes an O(n^2)Nick Lewycky2009-04-151-1/+3
| | | | | | problem from instcombine. llvm-svn: 69151
* Fix X86MachineFunctionInfo's doxygen comment.Dan Gohman2009-04-151-2/+3
| | | | llvm-svn: 69127
* Move MachineRegisterInfo::setRegClass out of line.Dan Gohman2009-04-151-0/+20
| | | | llvm-svn: 69126
* Move MachineJumpTableInfo::ReplaceMBBInJumpTables out of line.Dan Gohman2009-04-151-0/+17
| | | | llvm-svn: 69125
* Give RemoveRegOperandFromRegInfo a comment and move theDan Gohman2009-04-151-0/+15
| | | | | | code out of line. llvm-svn: 69124
* Enhance induction variable code to remove theDale Johannesen2009-04-151-40/+121
| | | | | | | | | sext around sext(shorter IV + constant), using a longer IV instead, when it can figure out the add can't overflow. This comes up a lot in subscripting; mainly affects 64 bit. llvm-svn: 69123
* Avoid making the transformation enabled by my last patch if the new ↵Evan Cheng2009-04-151-3/+13
| | | | | | destinations have phi nodes. llvm-svn: 69121
* While inlining, clone llvm.dbg.func.start intrinsic and adjust Devang Patel2009-04-152-3/+52
| | | | | | llvm.dbg.region.end instrinsic. This nested llvm.dbg.func.start/llvm.dbg.region.end pair now enables DW_TAG_inlined_subroutine support in code generator. llvm-svn: 69118
* Construct and emit DW_TAG_inlined_subroutine DIEs for inlined subroutine ↵Devang Patel2009-04-153-91/+217
| | | | | | scopes (only in FastISel mode). llvm-svn: 69116
* Do for GR16_NOREX what r69049 did for GR8_NOREX, to avoid trouble withDan Gohman2009-04-151-0/+35
| | | | | | the local register allocator. llvm-svn: 69115
* Add a method to check that the subprogram holds debug info for the given ↵Devang Patel2009-04-151-0/+13
| | | | | | Function or not. llvm-svn: 69113
* Add a new MOV8rr_NOREX, and make X86's copyRegToReg use it whenDan Gohman2009-04-152-5/+20
| | | | | | | | either the source or destination is a physical h register. This fixes sqlite3 with the post-RA scheduler enabled. llvm-svn: 69111
* GR8_NOREX can contain the H registers, since they don't requireDan Gohman2009-04-151-2/+3
| | | | | | REX prefixes. llvm-svn: 69108
* Optimize conditional branch on i1 phis with non-constant inputs.Evan Cheng2009-04-141-14/+55
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This turns: eq: %3 = icmp eq i32 %1, %2 br label %join ne: %4 = icmp ne i32 %1, %2 br label %join join: %5 = phi i1 [%3, %eq], [%4, %ne] br i1 %5, label %yes, label %no => eq: %3 = icmp eq i32 %1, %2 br i1 %3, label %yes, label %no ne: %4 = icmp ne i32 %1, %2 br i1 %4, label %yes, label %no llvm-svn: 69102
* For the h-register addressing-mode trick, use the correct value forDan Gohman2009-04-141-1/+14
| | | | | | any non-address uses of the address value. This fixes 186.crafty. llvm-svn: 69094
* Mac OS X 10.6 and above do not use key manager to register EH frames.Evan Cheng2009-04-141-2/+8
| | | | llvm-svn: 69090
* When the result of an EXTRACT_SUBREG, INSERT_SUBREG, or SUBREG_TO_REGDan Gohman2009-04-141-20/+19
| | | | | | | | | | | | operator is used by a CopyToReg to export the value to a different block, don't reuse the CopyToReg's register for the subreg operation result if the register isn't precisely the right class for the subreg operation. Also, rename the h-registers.ll test, now that there are more than one. llvm-svn: 69087
* Call CreateProcess with bInheritHandles = TRUE.Mikhail Glushenkov2009-04-141-1/+1
| | | | | | | | Makes llvmc show error messages printed by child processes when run from the Cygwin/MSYS shell. Since ExecuteAndWait does not return until the child program has finished execution, this change should be harmless. llvm-svn: 69082
* Delete trailing whitespace.Mikhail Glushenkov2009-04-141-13/+13
| | | | llvm-svn: 69081
* Some of GR8_NOREX registers are only available in 64-bit mode.Evan Cheng2009-04-141-0/+48
| | | | llvm-svn: 69049
* Handle aggregate type arguments to direct and indirect calls.Sanjiv Gupta2009-04-144-35/+101
| | | | llvm-svn: 69022
* LoopIndexSplit needs to inform the loop pass manager of the instructions it isOwen Anderson2009-04-141-0/+1
| | | | | | deleting, not just the basic block. llvm-svn: 69011
* Do not force asm's to be chained if they don't touchDale Johannesen2009-04-141-0/+3
| | | | | | | memory and aren't volatile. This was interfering with good scheduling. llvm-svn: 69008
* Fix PR3934 part 2. findOnlyInterestingUse() was not setting IsCopy and ↵Evan Cheng2009-04-141-9/+13
| | | | | | IsDstPhys which are returned by value and used by callee. This happened to work on the earlier test cases because of a logic error in the caller side. llvm-svn: 69006
* Make these errors more noticable in build logs.Daniel Dunbar2009-04-131-5/+5
| | | | llvm-svn: 68998
* Change SelectionDAG type legalization to allow BUILD_VECTOR operands to beBob Wilson2009-04-135-31/+78
| | | | | | | | | | | | | | | | | | | | | | | | promoted to legal types without changing the type of the vector. This is following a suggestion from Duncan (http://lists.cs.uiuc.edu/pipermail/llvmdev/2009-February/019923.html). The transformation that used to be done during type legalization is now postponed to DAG legalization. This allows the BUILD_VECTORs to be optimized and potentially handled specially by target-specific code. It turns out that this is also consistent with an optimization done by the DAG combiner: a BUILD_VECTOR and INSERT_VECTOR_ELT may be combined by replacing one of the BUILD_VECTOR operands with the newly inserted element; but INSERT_VECTOR_ELT allows its scalar operand to be larger than the element type, with any extra high bits being implicitly truncated. The result is a BUILD_VECTOR where one of the operands has a type larger the the vector element type. Any code that operates on BUILD_VECTORs may now need to be aware of the potential type discrepancy between the vector element type and the BUILD_VECTOR operands. This patch updates all of the places that I could find to handle that case. llvm-svn: 68996
OpenPOWER on IntegriCloud