- Dec 29, 2007
-
-
Chris Lattner authored
llvm-svn: 45415
-
Chris Lattner authored
have potential side-effects. llvm-svn: 45392
-
- Dec 25, 2007
-
-
Gordon Henriksen authored
define void @f() { ... call i32 @g() ... } define void @g() { ... } The hazards are: - @f and @g have GC, but they differ GC. Inlining is invalid. This may never occur. - @f has no GC, but @g does. g's GC must be propagated to @f. The other scenarios are safe: - @f and @g have the same GC. - @f and @g have no GC. - @g has no GC. This patch adds inliner checks for the former two scenarios. llvm-svn: 45351
-
- Dec 22, 2007
-
-
Devang Patel authored
not merge current bb and succ even if bb's terminator is unconditional branch to succ. llvm-svn: 45305
-
- Dec 19, 2007
-
-
Duncan Sands authored
calls 'nounwind'. It is important for correct C++ exception handling that nounwind markings do not get lost, so this transformation is actually needed for correctness. llvm-svn: 45218
-
- Dec 18, 2007
-
-
Duncan Sands authored
doesNotThrow. llvm-svn: 45160
-
- Dec 17, 2007
-
-
Duncan Sands authored
how to lower them (with no attempt made to be efficient, since they should only occur for unoptimized code). llvm-svn: 45108
-
David Greene authored
GLIBCXX_DEBUG fix. std::vector<>::end() is invalidated by erase. llvm-svn: 45101
-
Christopher Lamb authored
Change the PointerType api for creating pointer types. The old functionality of PointerType::get() has become PointerType::getUnqual(), which returns a pointer in the generic address space. The new prototype of PointerType::get() requires both a type and an address space. llvm-svn: 45082
-
- Dec 16, 2007
-
-
Duncan Sands authored
changed not to reject invoke of inline asm. llvm-svn: 45077
-
Duncan Sands authored
calls. Remove special casing of inline asm from the inliner. There is a potential problem: the verifier rejects invokes of inline asm (not sure why). If an asm call is not marked "nounwind" in some .ll, and instcombine is not run, but the inliner is run, then an illegal module will be created. This is bad but I'm not sure what the best approach is. I'm tempted to remove the check in the verifier... llvm-svn: 45073
-
- Dec 10, 2007
-
-
Chris Lattner authored
Reimplement the xform in Analysis/ConstantFolding.cpp where we can use targetdata to validate that it is safe. While I'm in there, fix some const correctness issues and generalize the interface to the "operand folder". llvm-svn: 44817
-
Gordon Henriksen authored
methods are new to Function: bool hasCollector() const; const std::string &getCollector() const; void setCollector(const std::string &); void clearCollector(); The assembly representation is as such: define void @f() gc "shadow-stack" { ... The implementation uses an on-the-side table to map Functions to collector names, such that there is no overhead. A StringPool is further used to unique collector names, which are extremely likely to be unique per process. llvm-svn: 44769
-
- Dec 03, 2007
-
-
Duncan Sands authored
throw exceptions", just mark intrinsics with the nounwind attribute. Likewise, mark intrinsics as readnone/readonly and get rid of special aliasing logic (which didn't use anything more than this anyway). llvm-svn: 44544
-
- Nov 27, 2007
-
-
Duncan Sands authored
the function type, instead they belong to functions and function calls. This is an updated and slightly corrected version of Reid Spencer's original patch. The only known problem is that auto-upgrading of bitcode files doesn't seem to work properly (see test/Bitcode/AutoUpgradeIntrinsics.ll). Hopefully a bitcode guru (who might that be? :) ) will fix it. llvm-svn: 44359
-
Owen Anderson authored
Make LoopInfoBase more generic, in preparation for having MachineLoopInfo. This involves a small interface change. llvm-svn: 44348
-
- Nov 09, 2007
-
-
Anton Korobeynikov authored
llvm-svn: 43941
-
Anton Korobeynikov authored
llvm-svn: 43940
-
Anton Korobeynikov authored
llvm-svn: 43939
-
- Nov 04, 2007
-
-
Gordon Henriksen authored
Also cleaned up some comments in source files. llvm-svn: 43674
-
- Nov 02, 2007
-
-
Dan Gohman authored
llvm-svn: 43652
-
Dan Gohman authored
llvm-svn: 43651
-
- Nov 01, 2007
-
-
Duncan Sands authored
The meaning of getTypeSize was not clear - clarifying it is important now that we have x86 long double and arbitrary precision integers. The issue with long double is that it requires 80 bits, and this is not a multiple of its alignment. This gives a primitive type for which getTypeSize differed from getABITypeSize. For arbitrary precision integers it is even worse: there is the minimum number of bits needed to hold the type (eg: 36 for an i36), the maximum number of bits that will be overwriten when storing the type (40 bits for i36) and the ABI size (i.e. the storage size rounded up to a multiple of the alignment; 64 bits for i36). This patch removes getTypeSize (not really - it is still there but deprecated to allow for a gradual transition). Instead there is: (1) getTypeSizeInBits - a number of bits that suffices to hold all values of the type. For a primitive type, this is the minimum number of bits. For an i36 this is 36 bits. For x86 long double it is 80. This corresponds to gcc's TYPE_PRECISION. (2) getTypeStoreSizeInBits - the maximum number of bits that is written when storing the type (or read when reading it). For an i36 this is 40 bits, for an x86 long double it is 80 bits. This is the size alias analysis is interested in (getTypeStoreSize returns the number of bytes). There doesn't seem to be anything corresponding to this in gcc. (3) getABITypeSizeInBits - this is getTypeStoreSizeInBits rounded up to a multiple of the alignment. For an i36 this is 64, for an x86 long double this is 96 or 128 depending on the OS. This is the spacing between consecutive elements when you form an array out of this type (getABITypeSize returns the number of bytes). This is TYPE_SIZE in gcc. Since successive elements in a SequentialType (arrays, pointers and vectors) need to be aligned, the spacing between them will be given by getABITypeSize. This means that the size of an array is the length times the getABITypeSize. It also means that GEP computations need to use getABITypeSize when computing offsets. Furthermore, if an alloca allocates several elements at once then these too need to be aligned, so the size of the alloca has to be the number of elements multiplied by getABITypeSize. Logically speaking this doesn't have to be the case when allocating just one element, but it is simpler to also use getABITypeSize in this case. So alloca's and mallocs should use getABITypeSize. Finally, since gcc's only notion of size is that given by getABITypeSize, if you want to output assembler etc the same as gcc then getABITypeSize is the size you want. Since a store will overwrite no more than getTypeStoreSize bytes, and a read will read no more than that many bytes, this is the notion of size appropriate for alias analysis calculations. In this patch I have corrected all type size uses except some of those in ScalarReplAggregates, lib/Codegen, lib/Target (the hard cases). I will get around to auditing these too at some point, but I could do with some help. Finally, I made one change which I think wise but others might consider pointless and suboptimal: in an unpacked struct the amount of space allocated for a field is now given by the ABI size rather than getTypeStoreSize. I did this because every other place that reserves memory for a type (eg: alloca) now uses getABITypeSize, and I didn't want to make an exception for unpacked structs, i.e. I did it to make things more uniform. This only effects structs containing long doubles and arbitrary precision integers. If someone wants to pack these types more tightly they can always use a packed struct. llvm-svn: 43620
-
- Oct 29, 2007
-
-
Chris Lattner authored
can have uses too. Wouldn't it be nice if invoke didn't exist? :) llvm-svn: 43426
-
- Oct 22, 2007
-
-
Anton Korobeynikov authored
- enable phi instructions demotion to stack - create alloca instructions in the entry block llvm-svn: 43208
-
- Oct 18, 2007
-
-
Owen Anderson authored
in CodeExtractor and LoopSimplify unnecessary. Hartmut, could you confirm that this fixes the issues you were seeing? llvm-svn: 43115
-
- Oct 17, 2007
-
-
Hartmut Kaiser authored
llvm-svn: 43081
-
- Sep 17, 2007
-
-
Devang Patel authored
llvm-svn: 42048
-
Chris Lattner authored
Add a new DenseMapInfo::isEqual method to allow clients to redefine the equality predicate used when probing the hash table. llvm-svn: 42042
-
- Sep 04, 2007
-
-
Devang Patel authored
llvm-svn: 41713
-
David Greene authored
Update GEP constructors to use an iterator interface to fix GLIBCXX_DEBUG issues. llvm-svn: 41697
-
- Sep 03, 2007
-
-
Anton Korobeynikov authored
llvm-svn: 41676
-
- Aug 27, 2007
-
-
David Greene authored
Update InvokeInst to work like CallInst llvm-svn: 41506
-
- Aug 26, 2007
-
-
Anton Korobeynikov authored
Don't promote volatile loads/stores. This is needed (for example) to handle setjmp/longjmp properly. This fixes PR1520. llvm-svn: 41461
-
- Aug 21, 2007
-
-
Devang Patel authored
llvm-svn: 41207
-
- Aug 17, 2007
-
-
Devang Patel authored
branch is not necessary immediate dominators of merge blcok in all cases. llvm-svn: 41144
-
- Aug 15, 2007
-
-
Devang Patel authored
llvm-svn: 41091
-
- Aug 13, 2007
-
-
Devang Patel authored
llvm-svn: 41051
-
- Aug 10, 2007
-
-
Devang Patel authored
llvm-svn: 40997
-
- Aug 06, 2007
-
-
Chris Lattner authored
llvm-svn: 40859
-