summaryrefslogtreecommitdiffstats
path: root/llvm/lib
Commit message (Collapse)AuthorAgeFilesLines
...
* Consider expression "0.0 - X" as the negation of X ifShuxin Yang2013-01-094-6/+18
| | | | | | | - this expression is explicitly marked no-signed-zero, or - no-signed-zero of this expression can be derived from some context. llvm-svn: 171922
* Move the string pools down into the units. No functional change.Eric Christopher2013-01-082-22/+14
| | | | llvm-svn: 171905
* Simplify the code a bit: MCRelaxableFragment doesn't need a separate getInstSizeEli Bendersky2013-01-081-3/+2
| | | | | | | | | | method because getContents().size() already covers it. So computeFragmentSize can use the generic MCEncodedFragment interface when querying both Data and Relaxable fragments for contents sizes. No change in functionality llvm-svn: 171903
* Fix memory leak in YAML I/O.Nick Kledzik2013-01-081-9/+32
| | | | | | | | Stop using BumpPtrAllocator for HNodes because they have fields (vector, map) which require HNode destructors to be run. llvm-svn: 171896
* This patch produces the correct addend value forJack Carter2013-01-081-0/+1
| | | | | | | | an R_MIPS_GPREL16 relocation. Contributer: Jack Carter llvm-svn: 171882
* This patch produces the correct pointer size Jack Carter2013-01-081-0/+4
| | | | | | | | | | | | value in the 64 bit .eh_frame section. It doesn't however allow exception handling to work yet since it depends on the correct relocation model being set in the ELF header flags. Contributer: Jack Carter llvm-svn: 171881
* Pad Short Functions for Intel AtomPreston Gurd2013-01-087-3/+194
| | | | | | | | | | | | | | | | | | | | | | | | The current Intel Atom microarchitecture has a feature whereby when a function returns early then it is slightly faster to execute a sequence of NOP instructions to wait until the return address is ready, as opposed to simply stalling on the ret instruction until the return address is ready. When compiling for X86 Atom only, this patch will run a pass, called "X86PadShortFunction" which will add NOP instructions where less than four cycles elapse between function entry and return. It includes tests. This patch has been updated to address Nadav's review comments - Optimize only at >= O1 and don't do optimization if -Os is set - Stores MachineBasicBlock* instead of BBNum - Uses DenseMap instead of std::map - Fixes placement of braces Patch by Andy Zhang. llvm-svn: 171879
* Rename statistic for instruction fragments -> relaxableEli Bendersky2013-01-081-3/+3
| | | | llvm-svn: 171872
* Code cleanup: refactor the switch statements in the generation of reduction ↵Nadav Rotem2013-01-081-59/+28
| | | | | | variables into an IR builder call. llvm-svn: 171871
* Rename the enum members to match the LLVM coding style.Nadav Rotem2013-01-081-25/+25
| | | | llvm-svn: 171868
* Add fp128 rtlib function names to LLVMTim Northover2013-01-082-18/+138
| | | | llvm-svn: 171867
* Allow the asm printer to print fp128 values properly.Tim Northover2013-01-081-9/+12
| | | | llvm-svn: 171866
* Make sure we don't emit instructions before a landingpad instruction.Bill Wendling2013-01-081-1/+6
| | | | | | PR14782 llvm-svn: 171846
* Sink a function that refers to the SelectionDAG into that library in theChandler Carruth2013-01-082-21/+21
| | | | | | | | | | | | | | one file where it is called as a static function. Nuke the declaration and the definition in lib/CodeGen, along with the include of SelectionDAG.h from this file. There is no dependency edge from lib/CodeGen to lib/CodeGen/SelectionDAG, so it isn't valid for a routine in lib/CodeGen to reference the DAG. There is a dependency from lib/CodeGen/SelectionDAG on lib/CodeGen. This breaks one violation of this layering. llvm-svn: 171842
* Remove the llvm-local DW_TAG_vector_type tag and add a test toEric Christopher2013-01-084-8/+8
| | | | | | make sure that vector types do work. llvm-svn: 171833
* Fix comment.Eric Christopher2013-01-081-1/+2
| | | | llvm-svn: 171832
* Split changeset_ty using iterators instead of loops.Lenny Maiorani2013-01-081-6/+8
| | | | llvm-svn: 171829
* Mark artificial types as such in the annotated debug output.David Blaikie2013-01-081-0/+3
| | | | llvm-svn: 171826
* Renamed MCInstFragment to MCRelaxableFragment and added some comments.Eli Bendersky2013-01-0810-36/+38
| | | | | | No change in functionality. llvm-svn: 171822
* Remove what appears to be a dead llvm-specific debug tag.Eric Christopher2013-01-082-2/+0
| | | | llvm-svn: 171821
* Pack MachineOperand bitfields better.Jakob Stoklund Olesen2013-01-071-1/+1
| | | | | | Previously, 4 bits were unused. llvm-svn: 171814
* Pack MachineInstr fields better.Jakob Stoklund Olesen2013-01-071-5/+3
| | | | | | This shrinks MachineInstr to 64 bytes (from 72). llvm-svn: 171813
* LoopVectorizer: Add support for floating point reductionsNadav Rotem2013-01-071-58/+91
| | | | llvm-svn: 171812
* Cosmetical changne in order to conform to coding std.Shuxin Yang2013-01-071-5/+6
| | | | | | Thank Eric Christopher for figuring out these problems! llvm-svn: 171805
* Whitespace and 80-col.Eric Christopher2013-01-072-4/+6
| | | | llvm-svn: 171804
* Whitespace and 80-col.Eric Christopher2013-01-073-5/+6
| | | | llvm-svn: 171803
* LoopVectorizer: When we vectorizer and widen loops we process many elements ↵Nadav Rotem2013-01-071-3/+15
| | | | | | | | | at once. This is a good thing, except for small loops. On small loops post-loop that handles scalars (and runs slower) can take more time to execute than the rest of the loop. This patch disables widening of loops with a small static trip count. llvm-svn: 171798
* Add the align_to_end option to .bundle_lock in the MC implementation of alignedEli Bendersky2013-01-076-17/+66
| | | | | | | | | bundling. The document describing this feature and the implementation has also been updated: https://sites.google.com/a/chromium.org/dev/nativeclient/pnacl/aligned-bundling-support-in-llvm llvm-svn: 171797
* This change is to implement following rules:Shuxin Yang2013-01-072-0/+129
| | | | | | | | | | | o. X/C1 * C2 => X * (C2/C1) (if C2/C1 is neither special FP nor denormal) o. X/C1 * C2 -> X/(C1/C2) (if C2/C1 is either specical FP or denormal, but C1/C2 is a normal Fp) Let MDC denote multiplication or dividion with one & only one operand being a constant o. (MDC ± C1) * C2 => (MDC * C2) ± (C1 * C2) (so long as the constant-folding doesn't yield any denormal or special value) llvm-svn: 171793
* Fixed EOL whitespace.Michael Gottesman2013-01-071-29/+29
| | | | llvm-svn: 171791
* ARM: Copy-paste error.Jim Grosbach2013-01-071-1/+1
| | | | llvm-svn: 171790
* ARM: Fix a few copy-paste errors.Jim Grosbach2013-01-072-3/+3
| | | | | | s/X86/ARM/ llvm-svn: 171789
* [ms-inline asm] Make sure the NullStreamParser doesn't try to emit labels whenChad Rosier2013-01-071-1/+2
| | | | | | parsing MS-style inline assembly. llvm-svn: 171784
* Add more comments to what's going on here.Eric Christopher2013-01-071-1/+3
| | | | llvm-svn: 171780
* Add support for separating strings for the split debug info DWARF5Eric Christopher2013-01-0711-15/+116
| | | | | | | | | | | | | proposal. This leaves the strings in the skeleton die as strp, but in all dwo files they're accessed now via DW_FORM_GNU_str_index. Add support for dumping these sections and modify the fission-cu.ll testcase to have the correct strings and form. Fix a small bug in the fixed form sizes routine that involved out of array accesses for the table and add a FIXME in the extractFast routine to fix this up. llvm-svn: 171779
* This patch addresses bug 14678 by fixing two problems in medium code modelBill Schmidt2013-01-072-12/+29
| | | | | | | | | code generation. Variables addressed through a GlobalAlias were not being handled, and variables with available_externally linkage were treated incorrectly. The patch contains two new tests to verify the correct code generation for these cases. llvm-svn: 171778
* Change SMRange to be half-open (exclusive end) instead of closed (inclusive)Jordan Rose2013-01-077-169/+178
| | | | | | | | | | This is necessary not only for representing empty ranges, but for handling multibyte characters in the input. (If the end pointer in a range refers to a multibyte character, should it point to the beginning or the end of the character in a char array?) Some of the code in the asm parsers was already assuming this anyway. llvm-svn: 171765
* Implement APFloat::isDenormal()Shuxin Yang2013-01-071-0/+7
| | | | llvm-svn: 171764
* When code size is the priority (Oz, MinSize attribute), help llvmQuentin Colombet2013-01-072-0/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | turning a code like this: if (foo) free(foo) into that: free(foo) Move a call to free from basic block FB into FB's predecessor, P, when the path from P to FB is taken only if the argument of free is not equal to NULL. Some restrictions apply on P and FB to be sure that this code motion is profitable. Namely: 1. FB must have only one predecessor P. 2. FB must contain only the call to free plus an unconditional branch to S. 3. P's successors are FB and S. Because of 1., we will not increase the code size when moving the call to free from FB to P. Because of 2., FB will be empty after the move. Because of 2. and 3., P's branch instruction becomes useless, so as FB (simplifycfg will do the job). llvm-svn: 171762
* Move TypeFinder.h into the IR tree, it clearly belongs with the IR library.Chandler Carruth2013-01-075-5/+5
| | | | llvm-svn: 171749
* Move CallGraphSCCPass.h into the Analysis tree; that's where theChandler Carruth2013-01-074-4/+4
| | | | | | implementation lives already. llvm-svn: 171746
* Remove the long defunct 'DefaultPasses' header. We have a pass managerChandler Carruth2013-01-071-1/+0
| | | | | | | builder these days, and this thing hasn't seen updates for a very long time. llvm-svn: 171741
* Sink AddrMode back into TargetLowering, removing one of the mostChandler Carruth2013-01-073-3/+3
| | | | | | | | | peculiar headers under include/llvm. This struct still doesn't make a lot of sense, but it makes more sense down in TargetLowering than it did before. llvm-svn: 171739
* Remove LSR's use of the random AddrMode struct. These variables wereChandler Carruth2013-01-071-68/+76
| | | | | | | | | | | | already in a class, just inline the four of them. I suspect that this class could be simplified some to not always keep distinct variables for these things, but it wasn't clear to me how given the usage so I opted for a trivial and mechanical translation. This removes one of the two remaining users of a header in include/llvm which does nothing more than define a 4 member struct. llvm-svn: 171738
* Switch the SCEV expander and LoopStrengthReduce to useChandler Carruth2013-01-074-168/+147
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | TargetTransformInfo rather than TargetLowering, removing one of the primary instances of the layering violation of Transforms depending directly on Target. This is a really big deal because LSR used to be a "special" pass that could only be tested fully using llc and by looking at the full output of it. It also couldn't run with any other loop passes because it had to be created by the backend. No longer is this true. LSR is now just a normal pass and we should probably lift the creation of LSR out of lib/CodeGen/Passes.cpp and into the PassManagerBuilder. =] I've not done this, or updated all of the tests to use opt and a triple, because I suspect someone more familiar with LSR would do a better job. This change should be essentially without functional impact for normal compilations, and only change behvaior of targetless compilations. The conversion required changing all of the LSR code to refer to the TTI interfaces, which fortunately are very similar to TargetLowering's interfaces. However, it also allowed us to *always* expect to have some implementation around. I've pushed that simplification through the pass, and leveraged it to simplify code somewhat. It required some test updates for one of two things: either we used to skip some checks altogether but now we get the default "no" answer for them, or we used to have no information about the target and now we do have some. I've also started the process of removing AddrMode, as the TTI interface doesn't use it any longer. In some cases this simplifies code, and in others it adds some complexity, but I think it's not a bad tradeoff even there. Subsequent patches will try to clean this up even further and use other (more appropriate) abstractions. Yet again, almost all of the formatting changes brought to you by clang-format. =] llvm-svn: 171735
* There was a switch fall-through in the parser for textual LLVM that causedDavid Tweed2013-01-071-2/+2
| | | | | | | | bogus comparison operands to default to eq/oeq. Fix that, fix a couple of tests that accidentally passed and test for bogus comparison opeartors explicitly. llvm-svn: 171733
* Make the MergeGlobals pass correctly handle the address space qualifiers of ↵Silviu Baranga2013-01-071-11/+24
| | | | | | the global variables. We partition the set of globals by their address space, and apply the same the trasnformation as before to merge them. llvm-svn: 171730
* R600/SIISelLowering.cpp: Suppress a warning. [-Wunused-variable]NAKAMURA Takumi2013-01-071-3/+2
| | | | llvm-svn: 171728
* Simplify LoopVectorize to require target transform info and rely on itChandler Carruth2013-01-071-55/+43
| | | | | | | | | being present. Make a member of one of the helper classes a reference as part of this. Reformatting goodness brought to you by clang-format. llvm-svn: 171726
* Merge the unused header file for LoopVectorizer into the source file.Chandler Carruth2013-01-072-538/+519
| | | | | | | | | | | | | | This makes the loop vectorizer match the pattern followed by roughly all other passses. =] Notably, this header file was braken in several regards: it contained a using namespace directive, global #define's that aren't globaly appropriate, and global constants defined directly in the header file. As a side benefit, lots of the types in this file become internal, which will cause the optimizer to chew on this pass more effectively. llvm-svn: 171723
OpenPOWER on IntegriCloud