summaryrefslogtreecommitdiffstats
path: root/llvm/lib
Commit message (Collapse)AuthorAgeFilesLines
...
* Make X86's copyRegToReg able to handle copies to and from subclasses.Dan Gohman2009-04-202-45/+29
| | | | | | | This makes the extra copyRegToReg calls in ScheduleDAGSDNodesEmit.cpp unnecessary. Derived from a patch by Jakob Stoklund Olesen. llvm-svn: 69635
* Simplify this code. getConstant knows how to makeDan Gohman2009-04-201-10/+3
| | | | | | broadcasted vector constants. llvm-svn: 69634
* Adjust loop size estimate for full unrolling;Dale Johannesen2009-04-201-0/+2
| | | | | | GEP's don't usually become instructions. llvm-svn: 69631
* Make Unix.h:MakeErrMsg separate the prefix and errno string, so we get:Daniel Dunbar2009-04-204-7/+10
| | | | | | | | | | | | | | | | | clang: error: unable to make temporary file: /etc/cc: can't make unique filename: Permission denied instead of clang: error: unable to make temporary file: /etc/cc: can't make unique filenamePermission denied for example. Also, audited the uses of MakeErrMsg to make the prefix strings consistent (not end with newline/punctuation/space/": "). llvm-svn: 69626
* Remove unused variable.Daniel Dunbar2009-04-201-1/+0
| | | | llvm-svn: 69624
* Move duplicated AddLiveIn function from X86 and ARM backends to be a methodBob Wilson2009-04-203-30/+18
| | | | | | | in the MachineFunction class, renaming it to addLiveIn for consistency with the same method in MachineBasicBlock. Thanks for Anton for suggesting this. llvm-svn: 69615
* Match C backend only if it explicitly requested.Devang Patel2009-04-201-2/+3
| | | | llvm-svn: 69613
* Revise my previous change 68996 as suggested by Duncan.Bob Wilson2009-04-203-9/+5
| | | | llvm-svn: 69607
* - Remove an arbitrary spill weight tweak that should not have been there.Evan Cheng2009-04-201-5/+26
| | | | | | - Find more reloads from SS. llvm-svn: 69606
* Emit the auto variables of a function into a different section than parameters.Sanjiv Gupta2009-04-202-24/+46
| | | | llvm-svn: 69605
* It's not necessary for PrintModulePass to flush the output streamsDan Gohman2009-04-201-2/+0
| | | | | | now that errs() is properly non-buffered. llvm-svn: 69602
* Don't discard an AssemblyAnnotationWriter when writing GlobalValues,Dan Gohman2009-04-201-1/+1
| | | | | | | which include Functions, where it can be quite useful to use an AssemblyAnnotationWriter. llvm-svn: 69598
* Implement operator<<(raw_ostream &OS, const Type &T).Dan Gohman2009-04-201-0/+5
| | | | llvm-svn: 69596
* Added a linearscan register allocation optimization. When the register ↵Evan Cheng2009-04-202-67/+189
| | | | | | | | | | | | | | | | | | | | | | | | | | allocator spill an interval with multiple uses in the same basic block, it creates a different virtual register for each of the reloads. e.g. %reg1498<def> = MOV32rm %reg1024, 1, %reg0, 12, %reg0, Mem:LD(4,4) [sunkaddr39 + 0] %reg1506<def> = MOV32rm %reg1024, 1, %reg0, 8, %reg0, Mem:LD(4,4) [sunkaddr42 + 0] %reg1486<def> = MOV32rr %reg1506 %reg1486<def> = XOR32rr %reg1486, %reg1498, %EFLAGS<imp-def,dead> %reg1510<def> = MOV32rm %reg1024, 1, %reg0, 4, %reg0, Mem:LD(4,4) [sunkaddr45 + 0] => %reg1498<def> = MOV32rm %reg2036, 1, %reg0, 12, %reg0, Mem:LD(4,4) [sunkaddr39 + 0] %reg1506<def> = MOV32rm %reg2037, 1, %reg0, 8, %reg0, Mem:LD(4,4) [sunkaddr42 + 0] %reg1486<def> = MOV32rr %reg1506 %reg1486<def> = XOR32rr %reg1486, %reg1498, %EFLAGS<imp-def,dead> %reg1510<def> = MOV32rm %reg2038, 1, %reg0, 4, %reg0, Mem:LD(4,4) [sunkaddr45 + 0] From linearscan's point of view, each of reg2036, 2037, and 2038 are separate registers, each is "killed" after a single use. The reloaded register is available and it's often clobbered right away. e.g. In thise case reg1498 is allocated EAX while reg2036 is allocated RAX. This means we end up with multiple reloads from the same stack slot in the same basic block. Now linearscan recognize there are other reloads from same SS in the same BB. So it'll "downgrade" RAX (and its aliases) after reg2036 is allocated until the next reload (reg2037) is done. This greatly increase the likihood reloads from SS are reused. This speeds up sha1 from OpenSSL by 5.8%. It is also an across the board win for SPEC2000 and 2006. llvm-svn: 69585
* Make all raw_ostreams support the tell() function.Douglas Gregor2009-04-201-0/+11
| | | | llvm-svn: 69583
* Before trying to introduce/eliminate cast/ext/trunc to make indices type asSanjiv Gupta2009-04-201-1/+6
| | | | | | pointer type, make sure that the pointer size is a valid sequential index type. llvm-svn: 69574
* Use an AssertingVH to detect the case where the Function was deleted butNick Lewycky2009-04-191-10/+11
| | | | | | freeMachineCodeForFunction was never called. llvm-svn: 69531
* Now that BUILD_VECTOR operands are allowed to beDuncan Sands2009-04-191-9/+6
| | | | | | | | bigger than the vector element type, turn checking of the operand type back on again, appropriately adjusted. llvm-svn: 69516
* Fix PR3898, which manifests as failures on are an Xcore,Chris Lattner2009-04-181-1/+1
| | | | | | patch by Jakob Stoklund Olesen! llvm-svn: 69472
* Don't try to make BUILD_VECTOR operands have the sameDuncan Sands2009-04-186-63/+35
| | | | | | | | | | | | | | | | | type as the vector element type: allow them to be of a wider integer type than the element type all the way through the system, and not just as far as LegalizeDAG. This should be safe because it used to be this way (the old type legalizer would produce such nodes), so backends should be able to handle it. In fact only targets which have legal vector types with an illegal promoted element type will ever see this (eg: <4 x i16> on ppc). This fixes a regression with the new type legalizer (vec_splat.ll). Also, treat SCALAR_TO_VECTOR the same as BUILD_VECTOR. After all, it is just a special case of BUILD_VECTOR. llvm-svn: 69467
* Add a ScalarEvolution::getCouldNotCompute() function, and use itDan Gohman2009-04-181-12/+21
| | | | | | instead of allocating and leaking new SCEVCouldNotCompute objects. llvm-svn: 69452
* More const qualifiers.Dan Gohman2009-04-181-14/+14
| | | | llvm-svn: 69451
* Use more const qualifiers with SCEV interfaces.Dan Gohman2009-04-183-45/+46
| | | | llvm-svn: 69450
* Add a new LiveInterval::overlaps(). It checks if the live interval overlaps ↵Evan Cheng2009-04-181-0/+16
| | | | | | a range specified by [Start, End). llvm-svn: 69434
* Fixed a few 64 bit cases in X86InstrInfo::commuteInstructionMon P Wang2009-04-181-3/+3
| | | | llvm-svn: 69417
* Inline asm's were still introducing bogus dependencies;Dale Johannesen2009-04-181-1/+7
| | | | | | my earlier patch to this code only fixed half of it. llvm-svn: 69408
* remove trailing whitespaceJim Grosbach2009-04-171-50/+50
| | | | llvm-svn: 69402
* Recommit r69335 and r69336. These were not causing problems.Bill Wendling2009-04-171-3/+5
| | | | llvm-svn: 69394
* Move the AddLiveIn function definition closer to its uses.Bob Wilson2009-04-171-11/+11
| | | | llvm-svn: 69382
* Rearrange code to reduce indentation.Bob Wilson2009-04-171-41/+38
| | | | llvm-svn: 69381
* Clean up formatting, remove trailing whitespace, fix comment typos andBob Wilson2009-04-173-44/+31
| | | | | | punctuation. No functional changes. llvm-svn: 69378
* Use CallConvLower.h and TableGen descriptions of the calling conventionsBob Wilson2009-04-176-305/+561
| | | | | | for ARM. Patch by Sandeep Patel. llvm-svn: 69371
* Use a safer iterator interface and get rid of std C++ library misuse.David Greene2009-04-171-3/+2
| | | | | | This fixes a --enable-expensive-checks problem. llvm-svn: 69353
* For general dynamic TLS access we must useRafael Espindola2009-04-173-36/+32
| | | | | | | | | leaq foo@TLSGD(%rip), %rdi as part of the instruction sequence. Using a register other than %rdi and then copying it to %rdi is not valid. llvm-svn: 69350
* Revert r69335 and r69336. They were causing build failures.Bill Wendling2009-04-171-5/+3
| | | | llvm-svn: 69347
* Don't create ConstantInts with pointer type. This fixes aDan Gohman2009-04-171-1/+1
| | | | | | | regression in 403.gcc in PIC_CODEGEN=1 and DISABLE_LTO=1 mode. llvm-svn: 69344
* Teach spiller to unfold instructions which modref spill slot when a scratchEvan Cheng2009-04-172-11/+227
| | | | | | | | | | | | | | | | | | | | register is available and when it's profitable. e.g. xorq %r12<kill>, %r13 addq %rax, -184(%rbp) addq %r13, -184(%rbp) ==> xorq %r12<kill>, %r13 movq -184(%rbp), %r12 addq %rax, %r12 addq %r13, %r12 movq %r12, -184(%rbp) Two more instructions, but fewer memory accesses. It can also open up opportunities for more optimizations. llvm-svn: 69341
* MOV8rr_NOREX is a "Move" instruction. This doesn't currentlyDan Gohman2009-04-171-0/+1
| | | | | | | matter, because this instruction isn't generated until after things that care. llvm-svn: 69336
* Don't use MOV8rr_NOREX on x86-32. It doesn't actually hurt anything atDan Gohman2009-04-171-3/+4
| | | | | | present, but it's inconsistent. llvm-svn: 69335
* Fix some failures in targets on available_externally functions,Chris Lattner2009-04-173-0/+17
| | | | | | | this fixes a crash on CodeGen/Generic/externally_available.ll on ppc hosts. Thanks to Nicholas L for pointing this out. llvm-svn: 69333
* Use TargetData::getTypeSizeInBits instead of getPrimitiveSizeInBits()Dan Gohman2009-04-161-5/+5
| | | | | | to get the correct answer for pointer types. llvm-svn: 69321
* make sure to unlock keymgr if the JIT is created and destroyed, allChris Lattner2009-04-161-5/+3
| | | | | | | | locks must be matched with unlocks. Also, use calloc to allocate the block so that it is properly zero'd. Thanks to Nick Kledzik for tracking this down. llvm-svn: 69314
* Fix for PR3944: make mem2reg O(N) instead of O(N^2) in the number of Eli Friedman2009-04-161-19/+11
| | | | | | incoming edges for a block with many predecessors. llvm-svn: 69312
* Handle a pointer type correctly in SCEVExpander::visitAddRecExpr.Dan Gohman2009-04-161-0/+2
| | | | llvm-svn: 69310
* In the list-burr's pseudo two-addr dependency heuristics, don'tDan Gohman2009-04-161-0/+10
| | | | | | | | | add dependencies on nodes with exactly one successor which is a COPY_TO_REGCLASS node. In the case that the copy is coalesced away, the dependence should be on the user of the copy, rather than the copy itself. llvm-svn: 69309
* Handle SUBREG_TO_REG instructions with the same heuristicsDan Gohman2009-04-161-5/+7
| | | | | | as INSERT_SUBREG instructions in the list-burr scheduler. llvm-svn: 69308
* 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
OpenPOWER on IntegriCloud