aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2015-01-08Add saving and restoring of r30 to the prologue and epilogue, respectivelyJustin Hibbits4-2/+23
Summary: The PIC additions didn't update the prologue and epilogue code to save and restore r30 (PIC base register). This does that. Test Plan: Tests updated. Reviewers: hfinkel Reviewed By: hfinkel Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D6876 llvm-svn: 225450
2015-01-08Explicitly handle LinkOnceODRAutoHideLinkage. NFC. We already have a test.Rafael Espindola1-0/+2
llvm-svn: 225449
2015-01-08Update naming style and clang-format. NFC.Rafael Espindola1-17/+30
llvm-svn: 225448
2015-01-08Improve clang-format.el.Manuel Klimek1-48/+117
- includes header/footer as required by MELPA - correctly handles buffers that are not associated with a file - displays stderr and exit code of clang-format process - customizable via the emacs customization interface and file-/directory- local variables Patch by Johann Klähn. llvm-svn: 225447
2015-01-08Fix large stack alignment codegen for ARM and Thumb2 targetsKristof Beyls9-37/+263
This partially fixes PR13007 (ARM CodeGen fails with large stack alignment): for ARM and Thumb2 targets, but not for Thumb1, as it seems stack alignment for Thumb1 targets hasn't been supported at all. Producing an aligned stack pointer is done by zero-ing out the lower bits of the stack pointer. The BIC instruction was used for this. However, the immediate field of the BIC instruction only allows to encode an immediate that can zero out up to a maximum of the 8 lower bits. When a larger alignment is requested, a BIC instruction cannot be used; llvm was silently producing incorrect code in this case. This commit fixes code generation for large stack aligments by using the BFC instruction instead, when the BFC instruction is available. When not, it uses 2 instructions: a right shift, followed by a left shift to zero out the lower bits. The lowering of ARM::Int_eh_sjlj_dispatchsetup still has code that unconditionally uses BIC to realign the stack pointer, so it very likely has the same problem. However, I wasn't able to produce a test case for that. This commit adds an assert so that the compiler will fail the assert instead of silently generating wrong code if this is ever reached. llvm-svn: 225446
2015-01-08R600/SI: Remove SIISelLowering::legalizeOperands()Tom Stellard12-188/+34
Its functionality has been replaced by calling SIInstrInfo::legalizeOperands() from SIISelLowering::AdjstInstrPostInstrSelection() and running the SIFoldOperands and SIShrinkInstructions passes. llvm-svn: 225445
2015-01-08clang-format: Force line break between "endl" and "<<".Daniel Jasper2-28/+30
This makes piped output easier to read in many instances. Before: llvm::errs() << aaaa << std::endl << bbbb << std::endl; After: llvm::errs() << aaaa << std::endl << bbbb << std::endl; Also fix a few instance of "don't use else after return" as per the coding standards. llvm-svn: 225444
2015-01-08[Sanitizers] Fix internal_lseek() to work on FreeBSDViktor Kutuzov2-4/+8
Differential Revision: http://reviews.llvm.org/D6825 llvm-svn: 225443
2015-01-08Frontend: Fix SourceColumnMap assertion failure on non-ascii characters.Logan Chien2-9/+48
If there are some non-ascii character in the input source code, the column index might be smallar than the byte index. This will result in two possible assertion failures. This CL fixes the computation of the column index and byte index. 1. The assertion in startOfNextColumn() and startOfPreviousColumn() should not be raised when the byte index is greater than the column index since the non-ascii characters may use more than one bytes to store a character in a column. 2. The length of the caret line should be equal to the number of columns of source line, instead of the length of the source line. Otherwise, the assertion in selectInterestingSourceRegion will be raised because the removed columns plus the kept columns are not greater than the max column, which means that we should not remove any column at all. llvm-svn: 225442
2015-01-08Masked Load/Store - fixed a bug in type legalization.Elena Demikhovsky4-3/+156
llvm-svn: 225441
2015-01-08Fix a think-o in the test for r225438.Michael Kuperstein1-1/+1
llvm-svn: 225440
2015-01-08Fix include ordering, NFC.Michael Kuperstein1-1/+1
llvm-svn: 225439
2015-01-08[X86] Don't try to generate direct calls to TLS globalsMichael Kuperstein2-1/+21
The call lowering assumes that if the callee is a global, we want to emit a direct call. This is correct for regular globals, but not for TLS ones. Differential Revision: http://reviews.llvm.org/D6862 llvm-svn: 225438
2015-01-08Move SPAdj logic from PEI into the targets (NFC)Michael Kuperstein3-11/+40
PEI tries to keep track of how much starting or ending a call sequence adjusts the stack pointer by, so that it can resolve frame-index references. Currently, it takes a very simplistic view of how SP adjustments are done - both FrameStartOpcode and FrameDestroyOpcode adjust it exactly by the amount written in its first argument. This view is in fact incorrect for some targets (e.g. due to stack re-alignment, or because it may want to adjust the stack pointer in multiple steps). However, that doesn't cause breakage, because most targets (the only in-tree exception appears to be 32-bit ARM) rely on being able to simplify the call frame pseudo-instructions earlier, so this code is never hit. Moving the computation into TargetInstrInfo allows targets to override the way the adjustment is computed if they need to have a non-zero SPAdj. Differential Revision: http://reviews.llvm.org/D6863 llvm-svn: 225437
2015-01-08[LLDB][MIPS] Adding SoftwareBreakpointTrapOpcode and RelocationJumpSlotType ↵Mohit K. Bhakkad2-0/+10
for MIPS Patch by Bhushan Attarde Reviewers: clayborg Reviewed By: clayborg Subscribers: petarj, dsanders, mohit.bhakkad, lldb-commits Differential Revision: http://reviews.llvm.org/D6861 llvm-svn: 225436
2015-01-08clang-format: Improve template parameter detection.Daniel Jasper2-2/+6
Before: struct A < std::enable_if<sizeof(T2) <sizeof(int32)>::type>; After: struct A<std::enable_if<sizeof(T2) < sizeof(int32)>::type>; llvm-svn: 225435
2015-01-08Fix test case I missed in r225432.Craig Topper1-1/+1
llvm-svn: 225434
2015-01-08[llgo] irgen: generate switch instructionsAndrew Wilkins3-1/+216
Summary: With this patch, llgo uses ssautil.Switches to reconstitute (and synthesise) switches, which can then be lowered to lookup tables, trees, etc. We currently only handle integer const case switches. We erase the comparison blocks (other than the initial block), and generate a switch instruction at the end of the block starting the if-else-if chain. ssautil.Switches does not remove duplicate const cases (e.g. same operands for "||"), so we do this in llgo for now. Test Plan: lit test added Reviewers: pcc Reviewed By: pcc Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D6831 llvm-svn: 225433
2015-01-08[X86] Don't print 'dword ptr' or 'qword ptr' on the operand to some of the ↵Craig Topper8-5/+63
LEA variants in Intel syntax. The memory operand is inherently unsized. llvm-svn: 225432
2015-01-08Have AssemblyParse_x86::get_non_call_site_unwind_plan trackJason Molenda1-2/+13
which registers have been spilled (saved to the stack) - and if we see that same register being saved to the stack again, don't record that, it's something specific to this stack frame. I found a code sequence for i386 where clang did a push %esi and then later in the function it did movl %esi, -0x7c(%ebp) and that second save of a scratch value overrode the original push location. <rdar://problem/19171178> llvm-svn: 225431
2015-01-08In early C++11 standard drafts, std::function derived from ↵Marshall Clow1-29/+88
std::unary_function or std::binary_function if there was only one (or two) parameters. Before C++11 shipped, this restiction was lifted, but libc++ still does this (which is fine). However, the tests still check for this outdated requiremnt. Change then to check for the nested typedefs instead (which are still required by the standard). No change to the library. llvm-svn: 225430
2015-01-08Add checks to make sure the hash functor has the right typedefsMarshall Clow1-0/+4
llvm-svn: 225429
2015-01-08PE/COFF: add support to import functions in ARM NTSaleem Abdulrasool5-7/+117
This is necessary to support linking a basic program which references symbols outside of the module itself. Add the import thunk for ARM NT style imports. This allows us to create the reference. However, it is still insufficient to generate executables that will run due to base relocations not being emitted for the import. llvm-svn: 225428
2015-01-08Rearrange RegisterContextLLDB::SavedLocationForRegister a tiny bitJason Molenda1-18/+22
so that we will use the UnwindPlan's rule for providing the stack pointer BEFORE we use the trick of using the callee's CFA address as the stack pointer. When we're in a _sigtramp frame, the CFA of the _sigtramp stack frame is not the same as the stack pointer value when the async interrupt occurred -- we need to use the eh_frame rules for retrieving the correct value. <rdar://problem/18913548> llvm-svn: 225427
2015-01-08Attempt to fix test from r225423 to get build bots green.Richard Trieu1-7/+7
llvm-svn: 225426
2015-01-08Added documentation for test timeoutVince Harron1-7/+37
Differential Revision: http://reviews.llvm.org/D6669 Submitted for Chaoren Lin llvm-svn: 225425
2015-01-08Revert "Reapply: Teach SROA how to update debug info for fragmented variables."Adrian Prantl5-326/+12
This reverts commit r225379 while investigating an assertion failure reported by Alexey. llvm-svn: 225424
2015-01-08When the diagnostic text is simply "%0", sanitize the string for anyRichard Trieu2-0/+26
unprintable characters. Fixes PR22048. llvm-svn: 225423
2015-01-08[RegAllocGreedy] Introduce a late pass to repair broken hints.Quentin Colombet4-2/+357
A broken hint is a copy where both ends are assigned different colors. When a variable gets evicted in the neighborhood of such copies, it is likely we can reconcile some of them. ** Context ** Copies are inserted during the register allocation via splitting. These split points are required to relax the constraints on the allocation problem. When such a point is inserted, both ends of the copy would not share the same color with respect to the current allocation problem. When variables get evicted, the allocation problem becomes different and some split point may not be required anymore. However, the related variables may already have been colored. This usually shows up in the assembly with pattern like this: def A ... save A to B def A use A restore A from B ... use B Whereas we could simply have done: def B ... def A use A ... use B ** Proposed Solution ** A variable having a broken hint is marked for late recoloring if and only if selecting a register for it evict another variable. Indeed, if no eviction happens this is pointless to look for recoloring opportunities as it means the situation was the same as the initial allocation problem where we had to break the hint. Finally, when everything has been allocated, we look for recoloring opportunities for all the identified candidates. The recoloring is performed very late to rely on accurate copy cost (all involved variables are allocated). The recoloring is simple unlike the last change recoloring. It propagates the color of the broken hint to all its copy-related variables. If the color is available for them, the recoloring uses it, otherwise it gives up on that hint even if a more complex coloring would have worked. The recoloring happens only if it is profitable. The profitability is evaluated using the expected frequency of the copies of the currently recolored variable with a) its current color and b) with the target color. If a) is greater or equal than b), then it is profitable and the recoloring happen. ** Example ** Consider the following example: BB1: a = b = BB2: ... = b = a Let us assume b gets split: BB1: a = b = BB2: c = b ... d = c = d = a Because of how the allocation work, b, c, and d may be assigned different colors. Now, if a gets evicted to make room for c, assuming b and d were assigned to something different than a. We end up with: BB1: a = st a, SpillSlot b = BB2: c = b ... d = c = d e = ld SpillSlot = e This is likely that we can assign the same register for b, c, and d, getting rid of 2 copies. ** Performances ** Both ARM64 and x86_64 show performance improvements of up to 3% for the llvm-testsuite + externals with Os and O3. There are a few regressions too that comes from the (in)accuracy of the block frequency estimate. <rdar://problem/18312047> llvm-svn: 225422
2015-01-08[SelectionDAG] Allow targets to specify legality of extloads' resultAhmed Bougacha21-183/+246
type (in addition to the memory type). The *LoadExt* legalization handling used to only have one type, the memory type. This forced users to assume that as long as the extload for the memory type was declared legal, and the result type was legal, the whole extload was legal. However, this isn't always the case. For instance, on X86, with AVX, this is legal: v4i32 load, zext from v4i8 but this isn't: v4i64 load, zext from v4i8 Whereas v4i64 is (arguably) legal, even without AVX2. Note that the same thing was done a while ago for truncstores (r46140), but I assume no one needed it yet for extloads, so here we go. Calls to getLoadExtAction were changed to add the value type, found manually in the surrounding code. Calls to setLoadExtAction were mechanically changed, by wrapping the call in a loop, to match previous behavior. The loop iterates over the MVT subrange corresponding to the memory type (FP vectors, etc...). I also pulled neighboring setTruncStoreActions into some of the loops; those shouldn't make a difference, as the additional types are illegal. (e.g., i128->i1 truncstores on PPC.) No functional change intended. Differential Revision: http://reviews.llvm.org/D6532 llvm-svn: 225421
2015-01-08Remove empty statement. No functionality change.Nick Lewycky1-1/+0
llvm-svn: 225420
2015-01-08X86: VZeroUpperInserter: shortcut should not trigger if we have any function ↵Matthias Braun1-8/+12
live-ins. llvm-svn: 225419
2015-01-08Fix a problem where a ValueObject could fail to update itself, but since it ↵Enrico Granata1-1/+1
was previously valid, we'd have an old checksum to compare aginst no new checksum (because failure to update), and assert() and die. Fix the problem by only caring about this assertion logic if updates succeed llvm-svn: 225418
2015-01-08Run clang-format on tools/llvm-objdump/MachODump.cpp again as some of myKevin Enderby1-27/+28
previous changes got in with incorrect formatting. No functional change. llvm-svn: 225417
2015-01-08RegisterCoalescer: Do not remove IMPLICIT_DEFS if they are required for ↵Matthias Braun1-1/+7
subranges. The register coalescer used to remove implicit_defs when they are covered by the main range anyway. With subreg liveness tracking we can't do that anymore in places where the IMPLICIT_DEF is required as begin of a subregister liverange. llvm-svn: 225416
2015-01-07RegisterCoalescer: Fix valuesIdentical() in some subrange merge cases.Matthias Braun2-90/+126
I got confused and assumed SrcIdx/DstIdx of the CoalescerPair is a subregister index in SrcReg/DstReg, but they are actually subregister indices of the coalesced register that get you back to SrcReg/DstReg when applied. Fixed the bug, improved comments and simplified code accordingly. Testcase by Tom Stellard! llvm-svn: 225415
2015-01-07Wrap to 80 columns. No behavior change.Nico Weber1-29/+20
llvm-svn: 225414
2015-01-07LiveInterval: Implement feedback by Quentin Colombet.Matthias Braun1-25/+32
llvm-svn: 225413
2015-01-07[GC] improve testing around gc.relocate and fix a testPhilip Reames3-14/+51
Patch by: Ramkumar Ramachandra <artagnon@gmail.com> "This patch started out as an exploration of gc.relocate, and an attempt to write a simple test in call-lowering. I then noticed that the arguments of gc.relocate were not checked fully, so I went in and fixed a few things. Finally, the most important outcome of this patch is that my new error handling code caught a bug in a callsite in stackmap-format." Differential Revision: http://reviews.llvm.org/D6824 llvm-svn: 225412
2015-01-07[CodeGen] Add MVT::isValid to replace manual validity checks. NFC.Ahmed Bougacha2-9/+13
Now that we have MVT::FIRST_VALUETYPE (r225362), we can provide a method checking that the MVT is valid, that is, it's in [FIRST_VALUETYPE, LAST_VALUETYPE[. This commit also uses it in a few asserts, that would previously accept invalid MVTs, such as the default constructed -1. In that case, the code following those asserts would do an out-of-bounds array access. Using MVT::isValid, those assertions fail as expected when passed invalid MVTs. It feels clunky to have such a validity checking function, but it's at least better than the alternative of broken manual checks. llvm-svn: 225411
2015-01-07R600/SI: Commute instructions to enable more folding opportunitiesTom Stellard5-23/+55
llvm-svn: 225410
2015-01-07Add help text for mmacosx-version-min=, mios-version-min=.Nico Weber1-2/+4
I keep forgetting the exact spelling of -macosx-version-min=, and now I can run `bin/clang --help | grep version -A 2` to remind myself. While here, also document -mios-version-min=. Don't document -mios-simulator-version-min= as it's just an alias for -mios-version-min= these days. llvm-svn: 225409
2015-01-07Missed a typenameMarshall Clow1-2/+2
llvm-svn: 225408
2015-01-07Fix inlined test cases so they print out the correct command to run when ↵Greg Clayton2-47/+46
they fail instead of printing out incorrect information. To fix this I added a new method to TestBase: def getRerunArgs(self): return " -f %s.%s" % (self.__class__.__name__, self._testMethodName) The InlineTest which inherits from TestBase then overrides this function with a custom version which does the right thing. llvm-svn: 225407
2015-01-07IR: Add MDNode::getDistinct()Duncan P. N. Exon Smith3-4/+62
Allow distinct `MDNode`s to be explicitly created. There's no way (yet) of representing their distinctness in assembly/bitcode, however, so this still isn't first-class. Part of PR22111. llvm-svn: 225406
2015-01-07R600/SI: Only fold immediates that have one useTom Stellard2-1/+43
Folding the same immediate into multiple instruction will increase program size, which can hurt performance. llvm-svn: 225405
2015-01-07Test commit.Sean Silva1-2/+2
Hopefully this one won't kill the git mirror... llvm-svn: 225404
2015-01-07libc++ implements its' hash objects as deriving from std::unary_function, ↵Marshall Clow11-24/+35
and the tests test for that. STL @ MS pointed out that the standard doesn't requie these objects to derive from unary_function, and so the tests should not require that either. Change the tests to check for the embedded typedefs - which ARE required. No change to the library. llvm-svn: 225403
2015-01-07In C++03, a bunch of the arithmetic/logical/comparison functors (such as ↵Marshall Clow4-4/+8
negate/bit_not.pass/logical_not) were defined as deriving from unary_funtion. That restriction was removed in C++11, but the tests still check for this. Change the test to look for the embedded types first_argument/second_argument/result_type. No change to the library, just more standards-compliant tests. Thanks to STL @ Microsoft for the suggestion. llvm-svn: 225402
2015-01-07IR: Add MDNode::isDistinct()Duncan P. N. Exon Smith2-0/+33
Add API to indicate whether an `MDNode` is distinct. A distinct node is not stored in the MDNode uniquing tables, and will never be returned by `MDNode::get()`. Although distinct nodes are only currently created by uniquing collisions (when operands change), PR22111 will allow these nodes to be explicitly created. llvm-svn: 225401