aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/Support
AgeCommit message (Collapse)Author
2013-01-10Fix a race condition in the lock-file manager: once the lock file isDouglas Gregor
gone, check for the actual file we care about. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172033 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-10Fix include guards so they exactly match file names.Jakub Staszak
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172025 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-09Move the internal PrintStackTrace function that is used for ↵Argyrios Kyrtzidis
llvm::sys::PrintStackTraceOnErrorSignal(), into a new function llvm::sys::PrintStackTrace, so that it's available to clients for logging purposes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171989 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-09PowerPC: EH adjustmentsAdhemerval Zanella
This patch adjust the r171506 to make all DWARF enconding pc-relative for PPC64. It also adds the R_PPC64_REL32 relocation handling in MCJIT (since the eh_frame will not generate PIC-relative relocation) and also adds the emission of stubs created by the TTypeEncoding. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171979 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-09add hexagon flags in ELF.hShankar Easwaran
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171977 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-09Incrase the number of parameters for AlignedCharArrayUnion.Manuel Klimek
We need this to correctly fix ASTMatchers/ASTTypeTraits.h in clang. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171965 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-08Fix memory leak in YAML I/O.Nick Kledzik
Stop using BumpPtrAllocator for HNodes because they have fields (vector, map) which require HNode destructors to be run. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171896 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-08Remove the llvm-local DW_TAG_vector_type tag and add a test toEric Christopher
make sure that vector types do work. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171833 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-08Remove what appears to be a dead llvm-specific debug tag.Eric Christopher
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171821 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-07Change SMRange to be half-open (exclusive end) instead of closed (inclusive)Jordan Rose
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171765 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-07When code size is the priority (Oz, MinSize attribute), help llvmQuentin Colombet
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). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171762 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-05Add an ArrayRecycler class.Jakob Stoklund Olesen
This is similar to the existing Recycler allocator, but instead of recycling individual objects from a BumpPtrAllocator, arrays of different sizes can be allocated. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171581 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-05Provide a default constructor for TimeValue. This was used, but only inChandler Carruth
if-ed out code paths and on Windows. Hopefully restores the Windows build. Thanks to Reid Kleckner for helping triage this. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171568 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-04Add time getters to the process interface for requesting the elapsedChandler Carruth
wall time, user time, and system time since a process started. For walltime, we currently use TimeValue's interface and a global initializer to compute a close approximation of total process runtime. For user time, this adds support for an somewhat more precise timing mechanism -- clock_gettime with the CLOCK_PROCESS_CPUTIME_ID clock selected. For system time, we have to do a full getrusage call to extract the system time from the OS. This is expensive but unavoidable. In passing, clean up the implementation of the old APIs and fix some latent bugs in the Windows code. This might have manifested on Windows ARM systems or other systems with strange 64-bit integer behavior. The old API for this both user time and system time simultaneously from a single getrusage call. While this results in fewer system calls, it also results in a lower precision user time and if only user time is desired, it introduces a higher overhead. It may be worthwhile to switch some of the pass timers to not track system time and directly track user and wall time. The old API also tracked walltime in a confusing way -- it just set it to the current walltime rather than providing any measure of wall time since the process started the way buth user and system time are tracked. The new API is more consistent here. The plan is to eventually implement these methods for a *child* process by using the wait3(2) system call to populate an rusage struct representing the whole subprocess execution. That way, after waiting on a child process its stats will become accurate and cheap to query. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171551 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-04Special case Recycler::clear(BumpPtrAllocator).Jakob Stoklund Olesen
A BumpPtrAllocator has an empty Deallocate() method, but Recycler::clear() would still call it for every single object ever allocated, bringing all those objects into cache. As a bonus, iplist::remove() will also write to the Prev/Next pointers on all the objects, so all those cache lines have to be written back to RAM before the pages are given back to the OS. Stop wasting time and memory bandwith by using the new clearAndLeakUnsafely() function to jettison all the recycled objects. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171541 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-04Fix how YAML I/O detects flow sequences. Nick Kledzik
Update test case to verify flow sequence is written as a flow sequence. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171514 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-04PowerPC: Fix eh_frame relocation for PIC Adhemerval Zanella
This patch fixes the PPC eh_frame definitions for the personality and frame unwinding for PIC objects. It makes PIC build correctly creates relative relocations in the '.rela.eh_frame' segments and thus avoiding a text relocation that generates a DT_TEXTREL segments in link phase. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171506 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-03Compiler.h: Leave LLVM_BUILTIN_UNREACHABLE undefined if it is unavailable in ↵NAKAMURA Takumi
host compiler. Users of LLVM_BUILTIN_UNREACHABLE should be responsible in the case when LLVM_BUILTIN_UNREACHABLE is undefined. Actually, (0, (p)) in LLVM_ASSUME_ALIGNED(p, a) caused thousands of warnings on g++-4.4. It was a motivation in this commit. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171455 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-02Restrict __builtin_assume_aligned to gcc 4.7+Michael J. Spencer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171408 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-02[Support][Endian] Add support for specifying the alignment and native ↵Michael J. Spencer
unaligned types. * Add support for specifying the alignment to use. * Add the concept of native endianness. Used for unaligned native types. The native alignment and read/write simplification is based on a patch by Richard Smith. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171406 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-02Don't #include stuff outside the include guards.Argyrios Kyrtzidis
This defeats the include-guard optimization when parsing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171405 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-02Move all of the header files which are involved in modelling the LLVM IRChandler Carruth
into their new header subdirectory: include/llvm/IR. This matches the directory structure of lib, and begins to correct a long standing point of file layout clutter in LLVM. There are still more header files to move here, but I wanted to handle them in separate commits to make tracking what files make sense at each layer easier. The only really questionable files here are the target intrinsic tablegen files. But that's a battle I'd rather not fight today. I've updated both CMake and Makefile build systems (I think, and my tests think, but I may have missed something). I've also re-sorted the includes throughout the project. I'll be committing updates to Clang, DragonEgg, and Polly momentarily. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171366 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-31Make it explicit that the only entry points to the Program object areChandler Carruth
through the static helper functions. This is already true throughout the codebase. Slowly, I'm going to re-implement these static helpers in terms of a new process based interface which can expose more information, and remove the program object entirely. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171335 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-31Remove an unused method on Program.Chandler Carruth
I'm simplifying this interface as much as I can before merging it with the new process interface. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171334 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-31Remove an unused method on the Program class.Chandler Carruth
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171332 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-31Go ahead and get rid of the old page size interface and convert all theChandler Carruth
users over to the new one. No sense maintaining this "compatibility" layer it seems. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171331 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-31Flesh out a page size accessor in the new API.Chandler Carruth
Implement the old API in terms of the new one. This simplifies the implementation on Windows which can now re-use the self_process's once initialization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171330 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-31Remove the declspecs from small alignments that we can force withChandler Carruth
a union. These don't actually work for by-value function arguments, and MSVC warns if they exist even while (we hope) it aligns the argument correctly due to the other union member. This means MSVC will miss out on optimizations based on the alignment of the buffer, but really, there aren't that many for x86 and MSVC is likely not doing a great job of optimizing LLVM and Clang anyways. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171328 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-31Remove an unused function in the old Process interface.Chandler Carruth
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171327 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-31[AlignOf] Add AlignedCharArray and refactor AlignedCharArrayUnion.Michael J. Spencer
This adds AlignedCharArray<Alignment, Size>. A templated struct that contains a member named buffer of type char[Size] that is aligned to Alignment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171319 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-31Begin sketching out the process interface.Chandler Carruth
The coding style used here is not LLVM's style because this is modeled after a Boost interface and thus done in the style of a candidate C++ standard library interface. I'll probably end up proposing it as a standard C++ library if it proves to be reasonably portable and useful. This is just the most basic parts of the interface -- getting the process ID out of it. However, it helps sketch out some of the boiler plate such as the base class, derived class, shared code, and static factory function. It also introduces a unittest so that I can incrementally ensure this stuff works. However, I've not even compiled this code for Windows yet. I'll try to fix any Windows fallout from the bots, and if I can't fix it I'll revert and get someone on Windows to help out. There isn't a lot more that is mandatory, so soon I'll switch to just stubbing out the Windows side and get Michael Spencer to help with implementation as he can test it directly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171289 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-31Start sketching out a roadmap for better subprocess management in theChandler Carruth
LLVM libraries. Also, clean up the doxygen and formatting of the existing interfaces. With this change I'm calling the existing interface "legacy" because I'd like to replace it with something much better. My end goal is to expose a common set of interfaces for inspecting various properties of a process, and implementations to expose those both for the current process and for child processes. This will also expose more rich interfaces for spawning and controling a subprocess, notably to use system calls like wait3 and wait4 where available and gather detailed resource usage stats about the subprocess. My plan (discussed with Michael Spencer on IRC) is to base this loosely around the proposed Boost.Process interface, but to implement a relatively small subset of that functionality based around the needs of LLVM, Clang, the Clang driver, etc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171285 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-22Change 'AttrVal' to 'AttrKind' to better reflect that it's a kind of ↵Bill Wendling
attribute instead of the value of the attribute. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170972 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-22Fix some undefined behavior when parsing YAML input: don't try to compare anRichard Smith
uninitialized value against a default value. Found by -fsanitize=enum. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170970 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-20Remove MCTargetAsmLexer and its derived classes now that edis,Roman Divacky
its only user, is gone. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170699 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-19Rename the 'Attributes' class to 'Attribute'. It's going to represent a ↵Bill Wendling
single attribute in the future. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170502 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-18Add support for passing -main-file-name all the way through toEric Christopher
the assembler. Part of PR14624 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170390 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-17Use different trait techniques to be compatible with g++Nick Kledzik
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170355 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-14This patch improves the 64-bit PowerPC InitialExec TLS support by providingBill Schmidt
for a wider range of GOT entries that can hold thread-relative offsets. This matches the behavior of GCC, which was not documented in the PPC64 TLS ABI. The ABI will be updated with the new code sequence. Former sequence: ld 9,x@got@tprel(2) add 9,9,x@tls New sequence: addis 9,2,x@got@tprel@ha ld 9,x@got@tprel@l(9) add 9,9,x@tls Note that a linker optimization exists to transform the new sequence into the shorter sequence when appropriate, by replacing the addis with a nop and modifying the base register and relocation type of the ld. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170209 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-13Pattern matching code for intrinsics.Michael Ilseman
Provides m_Argument that allows matching against a CallSite's specified argument. Provides m_Intrinsic pattern that can be templatized over the intrinsic id and bind/match arguments similarly to other pattern matchers. Implementations provided for 0 to 4 arguments, though it's very simple to extend for more. Also provides example template specialization for bswap (m_BSwap) and example of code cleanup for its use. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170091 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-13m_CombineOr and m_CombineAnd pattern combinatorsMichael Ilseman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170086 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-12YAMLIO: Remove all of the template instantiation hacks, I don't see why ↵Benjamin Kramer
they're necessary and it breaks linking of the unit tests. Also comes with a clang-format run on the cpp file, it had major style violations. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170036 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-12AlignedCharArrayUnion is erroring with non-clang compilersNick Kledzik
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170031 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-12Initial implementation of a utility for converting native data Nick Kledzik
structures to and from YAML using traits. The first client will be the test suite of lld. The documentation will show up at: http://llvm.org/docs/YamlIO.html git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170019 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-12This patch implements local-dynamic TLS model support for the 64-bitBill Schmidt
PowerPC target. This is the last of the four models, so we now have full TLS support. This is mostly a straightforward extension of the general dynamic model. I had to use an additional Chain operand to tie ADDIS_DTPREL_HA to the register copy following ADDI_TLSLD_L; otherwise everything above the ADDIS_DTPREL_HA appeared dead and was removed. As before, there are new test cases to test the assembly generation, and the relocations output during integrated assembly. The expected code gen sequence can be read in test/CodeGen/PowerPC/tls-ld.ll. There are a couple of things I think can be done more efficiently in the overall TLS code, so there will likely be a clean-up patch forthcoming; but for now I want to be sure the functionality is in place. Bill git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170003 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-12Pattern matchers for floating point valuesMichael Ilseman
m_ConstantFP - match and bind a float constant m_SpecificConstantFP - match a specific floating point value or vector of floats of that value m_FPOne - match a floating point 1.0 or vector of 1.0s m_NegZero - match -0.0 m_AnyZero - match 0 or -0.0 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169939 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-12Remove FIXMEs surrounding Constant[Data]Vectors, insteadMichael Ilseman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169938 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-11This patch implements the general dynamic TLS model for 64-bit PowerPC.Bill Schmidt
Given a thread-local symbol x with global-dynamic access, the generated code to obtain x's address is: Instruction Relocation Symbol addis ra,r2,x@got@tlsgd@ha R_PPC64_GOT_TLSGD16_HA x addi r3,ra,x@got@tlsgd@l R_PPC64_GOT_TLSGD16_L x bl __tls_get_addr(x@tlsgd) R_PPC64_TLSGD x R_PPC64_REL24 __tls_get_addr nop <use address in r3> The implementation borrows from the medium code model work for introducing special forms of ADDIS and ADDI into the DAG representation. This is made slightly more complicated by having to introduce a call to the external function __tls_get_addr. Using the full call machinery is overkill and, more importantly, makes it difficult to add a special relocation. So I've introduced another opcode GET_TLS_ADDR to represent the function call, and surrounded it with register copies to set up the parameter and return value. Most of the code is pretty straightforward. I ran into one peculiarity when I introduced a new PPC opcode BL8_NOP_ELF_TLSGD, which is just like BL8_NOP_ELF except that it takes another parameter to represent the symbol ("x" above) that requires a relocation on the call. Something in the TblGen machinery causes BL8_NOP_ELF and BL8_NOP_ELF_TLSGD to be treated identically during the emit phase, so this second operand was never visited to generate relocations. This is the reason for the slightly messy workaround in PPCMCCodeEmitter.cpp:getDirectBrEncoding(). Two new tests are included to demonstrate correct external assembly and correct generation of relocations using the integrated assembler. Comments welcome! Thanks, Bill git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169910 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-07s/AttrListPtr/AttributeSet/g to better label what this class is going to be ↵Bill Wendling
in the near future. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169651 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-07Remove trailing whitespaceMichael Ilseman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169637 91177308-0d34-0410-b5e6-96231b3b80d8