| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
types. Fore xample, we used to lower:
struct bar { int a; };
struct foo {
void (*FP)(struct bar);
} G;
to:
%struct.foo = type { {}* }
since the function pointer would cause recursive translation of bar and
we didn't know if that would get us into trouble. We are now smart enough
to know that it is fine, so we get this type instead:
%struct.foo = type { void (i32)* }
Codegen still needs to be prepared for uncooperative types at any place,
which is why I let the maximally uncooperative code sit around for awhile to
help shake out the bugs.
llvm-svn: 135244
|
| |
|
|
|
|
| |
failures.
llvm-svn: 135091
|
| |
|
|
| |
llvm-svn: 135083
|
| |
|
|
|
|
| |
like arguments. Thanks PR10337! :)
llvm-svn: 135030
|
| |
|
|
| |
llvm-svn: 135004
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
us to compile
stuff like this:
typedef struct {
int x, y, z;
} foo_t;
foo_t g;
into:
%"struct.<anonymous>" = type { i32, i32, i32 }
we now get:
%struct.foo_t = type { i32, i32, i32 }
This doesn't change the behavior of the compiler, but makes the IR much easier to read.
llvm-svn: 134969
|
| |
|
|
| |
llvm-svn: 134966
|
| |
|
|
| |
llvm-svn: 134964
|
| |
|
|
|
|
| |
passing.
llvm-svn: 134951
|
| |
|
|
|
|
| |
which is: { <4 x float>, <4 x float> } should continue to go through memory.
llvm-svn: 134946
|
| |
|
|
|
|
| |
add one more testcase.
llvm-svn: 134934
|
| |
|
|
|
|
|
|
|
|
| |
conservative when converting a functiontype to IR when in a "pointer within
a struct" context. This has the unfortunate sideeffect of compiling all
function pointers inside of structs into "{}*" which, though correct, is
ugly. This has the positive side effect of being correct, and it is pretty
straight-forward to improve on this.
llvm-svn: 134861
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
it is a predicate, not an action. Change the return type to be a bool,
not the incomplete member. Enhace it to detect the recursive compilation
case, allowing us to compile Eli's testcase on llvmdev:
struct T {
struct T (*p)(void);
} t;
into:
%struct.T = type { {}* }
@t = common global %struct.T zeroinitializer, align 8
llvm-svn: 134853
|
| |
|
|
| |
llvm-svn: 134831
|
| |
|
|
|
|
| |
asm-errors.c
llvm-svn: 134811
|
| |
|
|
| |
llvm-svn: 134808
|
| |
|
|
| |
llvm-svn: 134774
|
| |
|
|
|
|
|
|
|
|
|
|
| |
should not imply -mno-sse.
Note that because we don't usually touch the MMX registers anyway, all -mno-mmx needs to do is tweak the x86-32 calling convention a little for vectors that look like MMX vectors, and prevent the definition of __MMX__.
clang doesn't actually stop the user from using MMX inline asm operands or MMX builtins in -mno-mmx mode; as a QOI issue, it would be nice to diagnose, but I doubt it really matters much.
<rdar://problem/9694837>
llvm-svn: 134770
|
| |
|
|
| |
llvm-svn: 134765
|
| |
|
|
| |
llvm-svn: 134761
|
| |
|
|
| |
llvm-svn: 134754
|
| |
|
|
| |
llvm-svn: 134743
|
| |
|
|
|
|
|
|
| |
extra register.
Part of PR10299 and rdar://9740322
llvm-svn: 134657
|
| |
|
|
|
|
| |
so roll it out.
llvm-svn: 134638
|
| |
|
|
|
|
| |
function. Fixes PR10233!
llvm-svn: 134634
|
| |
|
|
| |
llvm-svn: 134536
|
| |
|
|
| |
llvm-svn: 134442
|
| |
|
|
|
|
| |
The start of some work on getting -mno-mmx working the way we want it to.
llvm-svn: 134300
|
| |
|
|
|
|
| |
Part of rdar://9714064
llvm-svn: 134295
|
| |
|
|
|
|
| |
replacing -freset-local-blocks. // rdar://9227352
llvm-svn: 134082
|
| |
|
|
|
|
|
| |
wipe out stack blocks when they go out of scope.
// rdar://9227352
llvm-svn: 134045
|
| |
|
|
| |
llvm-svn: 133957
|
| |
|
|
| |
llvm-svn: 133931
|
| |
|
|
|
|
|
|
| |
arithmetic on a VLA as 'nsw', per discussion with djg, and
implement pointer arithmetic (other than array accesses) and
pointer subtraction for VLA types.
llvm-svn: 133855
|
| |
|
|
| |
llvm-svn: 133829
|
| |
|
|
|
|
|
| |
not sizes; so that we use well-typed allocas; and so that we
properly recurse through the full set of variably-modified types.
llvm-svn: 133827
|
| |
|
|
|
|
| |
declared variable and ignore it. // rdar://9538608
llvm-svn: 133654
|
| |
|
|
|
|
| |
Fixes rdar://9425559
llvm-svn: 133486
|
| |
|
|
|
|
|
|
| |
register aliases. Fixes unnecessary renames of clobbers.
Fixes part of rdar://9425559
llvm-svn: 133485
|
| |
|
|
|
|
|
|
|
| |
(or follow up) extern declaration with weak_import as
an actual definition. make clang follows this behavior.
// rdar://9538608
llvm-gcc treats an extern declaration with weak_import
llvm-svn: 133450
|
| |
|
|
|
|
|
|
|
|
|
| |
ConvertType on InitListExprs as they are being converted. This is
needed for a forthcoming patch, and improves the IR generated anyway
(see additional type names in testcases).
This patch also converts a bunch of std::vector's in CGObjCMac to use
C arrays. There are a ton more that should be converted as well.
llvm-svn: 133413
|
| |
|
|
| |
llvm-svn: 133263
|
| |
|
|
| |
llvm-svn: 133262
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
separate aggregate temporary and then memcpy it over to the
destination. This fixes a regression I introduced with r133235, where
the compound literal on the RHS of an assignment makes use of the
structure on the LHS of the assignment.
I'm deeply suspicious of AggExprEmitter::VisitBinAssign()'s
optimization where it emits the RHS of an aggregate assignment
directly into the LHS lvalue without checking whether there is any
aliasing between the LHS/RHS. However, I'm not in a position to
revisit this now.
Big thanks to Eli for finding the regression!
llvm-svn: 133261
|
| |
|
|
|
|
| |
#define.
llvm-svn: 133241
|
| |
|
|
| |
llvm-svn: 133238
|
| |
|
|
|
|
|
|
|
| |
register constraint. Note that we're not checking if the register itself
is valid for the constraint.
Fixes rdar://9382985
llvm-svn: 133226
|
| |
|
|
|
|
|
| |
declaration of global var is __private_extern__.
// rdar://9609649
llvm-svn: 133157
|
| |
|
|
| |
llvm-svn: 133079
|
| |
|
|
|
|
| |
on gcc-testsuite bot.)
llvm-svn: 133069
|