Chris Lattner
3dd716c3c3
Change CGCall to handle the "coerce" case where the coerce-to type
...
is a FCA to pass each of the elements as individual scalars. This
produces code fast isel is less likely to reject and is easier on
the optimizers.
For example, before we would compile:
struct DeclGroup { long NumDecls; char * Y; };
char * foo(DeclGroup D) {
return D.NumDecls+D.Y;
}
to:
%struct.DeclGroup = type { i64, i64 }
define i64 @_Z3foo9DeclGroup(%struct.DeclGroup) nounwind {
entry:
%D = alloca %struct.DeclGroup, align 8 ; <%struct.DeclGroup*> [#uses=3]
store %struct.DeclGroup %0, %struct.DeclGroup* %D, align 1
%tmp = getelementptr inbounds %struct.DeclGroup* %D, i32 0, i32 0 ; <i64*> [#uses=1]
%tmp1 = load i64* %tmp ; <i64> [#uses=1]
%tmp2 = getelementptr inbounds %struct.DeclGroup* %D, i32 0, i32 1 ; <i64*> [#uses=1]
%tmp3 = load i64* %tmp2 ; <i64> [#uses=1]
%add = add nsw i64 %tmp1, %tmp3 ; <i64> [#uses=1]
ret i64 %add
}
Now we get:
%0 = type { i64, i64 }
%struct.DeclGroup = type { i64, i8* }
define i8* @_Z3foo9DeclGroup(i64, i64) nounwind {
entry:
%D = alloca %struct.DeclGroup, align 8 ; <%struct.DeclGroup*> [#uses=3]
%2 = insertvalue %0 undef, i64 %0, 0 ; <%0> [#uses=1]
%3 = insertvalue %0 %2, i64 %1, 1 ; <%0> [#uses=1]
%4 = bitcast %struct.DeclGroup* %D to %0* ; <%0*> [#uses=1]
store %0 %3, %0* %4, align 1
%tmp = getelementptr inbounds %struct.DeclGroup* %D, i32 0, i32 0 ; <i64*> [#uses=1]
%tmp1 = load i64* %tmp ; <i64> [#uses=1]
%tmp2 = getelementptr inbounds %struct.DeclGroup* %D, i32 0, i32 1 ; <i8**> [#uses=1]
%tmp3 = load i8** %tmp2 ; <i8*> [#uses=1]
%add.ptr = getelementptr inbounds i8* %tmp3, i64 %tmp1 ; <i8*> [#uses=1]
ret i8* %add.ptr
}
Elimination of the FCA inside the function is still-to-come.
llvm-svn: 107099
2010-06-28 23:44:11 +00:00
Chris Lattner
a7d81ab7f3
X86-64:
...
pass/return structs of float/int as float/i32 instead of double/i64
to make the code generated for ABI cleaner. Passing in the low part
of a double is the same as passing in a float.
For example, we now compile:
struct DeclGroup { float NumDecls; };
float foo(DeclGroup D);
void bar(DeclGroup *D) {
foo(*D);
}
into:
%struct.DeclGroup = type { float }
define void @_Z3barP9DeclGroup(%struct.DeclGroup* %D) nounwind {
entry:
%D.addr = alloca %struct.DeclGroup*, align 8 ; <%struct.DeclGroup**> [#uses=2]
%agg.tmp = alloca %struct.DeclGroup, align 4 ; <%struct.DeclGroup*> [#uses=2]
store %struct.DeclGroup* %D, %struct.DeclGroup** %D.addr
%tmp = load %struct.DeclGroup** %D.addr ; <%struct.DeclGroup*> [#uses=1]
%tmp1 = bitcast %struct.DeclGroup* %agg.tmp to i8* ; <i8*> [#uses=1]
%tmp2 = bitcast %struct.DeclGroup* %tmp to i8* ; <i8*> [#uses=1]
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp1, i8* %tmp2, i64 4, i32 4, i1 false)
%coerce.dive = getelementptr %struct.DeclGroup* %agg.tmp, i32 0, i32 0 ; <float*> [#uses=1]
%0 = load float* %coerce.dive, align 1 ; <float> [#uses=1]
%call = call float @_Z3foo9DeclGroup(float %0) ; <float> [#uses=0]
ret void
}
instead of:
%struct.DeclGroup = type { float }
define void @_Z3barP9DeclGroup(%struct.DeclGroup* %D) nounwind {
entry:
%D.addr = alloca %struct.DeclGroup*, align 8 ; <%struct.DeclGroup**> [#uses=2]
%agg.tmp = alloca %struct.DeclGroup, align 4 ; <%struct.DeclGroup*> [#uses=2]
%tmp3 = alloca double ; <double*> [#uses=2]
store %struct.DeclGroup* %D, %struct.DeclGroup** %D.addr
%tmp = load %struct.DeclGroup** %D.addr ; <%struct.DeclGroup*> [#uses=1]
%tmp1 = bitcast %struct.DeclGroup* %agg.tmp to i8* ; <i8*> [#uses=1]
%tmp2 = bitcast %struct.DeclGroup* %tmp to i8* ; <i8*> [#uses=1]
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp1, i8* %tmp2, i64 4, i32 4, i1 false)
%coerce.dive = getelementptr %struct.DeclGroup* %agg.tmp, i32 0, i32 0 ; <float*> [#uses=1]
%0 = bitcast double* %tmp3 to float* ; <float*> [#uses=1]
%1 = load float* %coerce.dive ; <float> [#uses=1]
store float %1, float* %0, align 1
%2 = load double* %tmp3 ; <double> [#uses=1]
%call = call float @_Z3foo9DeclGroup(double %2) ; <float> [#uses=0]
ret void
}
which is this machine code (at -O0):
__Z3barP9DeclGroup:
subq $24, %rsp
movq %rdi, 16(%rsp)
movq 16(%rsp), %rdi
leaq 8(%rsp), %rax
movl (%rdi), %ecx
movl %ecx, (%rax)
movss 8(%rsp), %xmm0
callq __Z3foo9DeclGroup
addq $24, %rsp
ret
vs this:
__Z3barP9DeclGroup:
subq $24, %rsp
movq %rdi, 16(%rsp)
movq 16(%rsp), %rdi
leaq 8(%rsp), %rax
movl (%rdi), %ecx
movl %ecx, (%rax)
movss 8(%rsp), %xmm0
movss %xmm0, (%rsp)
movsd (%rsp), %xmm0
callq __Z3foo9DeclGroup
addq $24, %rsp
ret
At -O3, it is the difference between this now:
__Z3barP9DeclGroup:
movss (%rdi), %xmm0
jmp __Z3foo9DeclGroup # TAILCALL
vs this before:
__Z3barP9DeclGroup:
movl (%rdi), %eax
movd %rax, %xmm0
jmp __Z3foo9DeclGroup # TAILCALL
llvm-svn: 107048
2010-06-28 19:56:59 +00:00
Fariborz Jahanian
36ad0e99d5
Have __func__ and siblings point to block's implementation function
...
name. Fixes radar 7860965.
llvm-svn: 107044
2010-06-28 18:58:34 +00:00
Chris Lattner
d250b8e9a8
tweak test to pass on windows
...
llvm-svn: 107040
2010-06-28 18:29:14 +00:00
Chris Lattner
c1028f689e
Fix UnitTests/2004-02-02-NegativeZero.c, which regressed when
...
I broke negate of FP values.
llvm-svn: 107019
2010-06-28 17:12:37 +00:00
Chris Lattner
055097f024
If coercing something from int or pointer type to int or pointer type
...
(potentially after unwrapping it from a struct) do it without going through
memory. We now compile:
struct DeclGroup {
unsigned NumDecls;
};
int foo(DeclGroup D) {
return D.NumDecls;
}
into:
%struct.DeclGroup = type { i32 }
define i32 @_Z3foo9DeclGroup(i64) nounwind ssp noredzone {
entry:
%D = alloca %struct.DeclGroup, align 4 ; <%struct.DeclGroup*> [#uses=2]
%coerce.dive = getelementptr %struct.DeclGroup* %D, i32 0, i32 0 ; <i32*> [#uses=1]
%coerce.val.ii = trunc i64 %0 to i32 ; <i32> [#uses=1]
store i32 %coerce.val.ii, i32* %coerce.dive
%tmp = getelementptr inbounds %struct.DeclGroup* %D, i32 0, i32 0 ; <i32*> [#uses=1]
%tmp1 = load i32* %tmp ; <i32> [#uses=1]
ret i32 %tmp1
}
instead of:
%struct.DeclGroup = type { i32 }
define i32 @_Z3foo9DeclGroup(i64) nounwind ssp noredzone {
entry:
%D = alloca %struct.DeclGroup, align 4 ; <%struct.DeclGroup*> [#uses=2]
%tmp = alloca i64 ; <i64*> [#uses=2]
%coerce.dive = getelementptr %struct.DeclGroup* %D, i32 0, i32 0 ; <i32*> [#uses=1]
store i64 %0, i64* %tmp
%1 = bitcast i64* %tmp to i32* ; <i32*> [#uses=1]
%2 = load i32* %1, align 1 ; <i32> [#uses=1]
store i32 %2, i32* %coerce.dive
%tmp1 = getelementptr inbounds %struct.DeclGroup* %D, i32 0, i32 0 ; <i32*> [#uses=1]
%tmp2 = load i32* %tmp1 ; <i32> [#uses=1]
ret i32 %tmp2
}
... which is quite a bit less terrifying.
llvm-svn: 106975
2010-06-27 06:26:04 +00:00
Chris Lattner
895c52ba8b
Same patch as the previous on the store side. Before we compiled this:
...
struct DeclGroup {
unsigned NumDecls;
};
int foo(DeclGroup D) {
return D.NumDecls;
}
to:
%struct.DeclGroup = type { i32 }
define i32 @_Z3foo9DeclGroup(i64) nounwind ssp noredzone {
entry:
%D = alloca %struct.DeclGroup, align 4 ; <%struct.DeclGroup*> [#uses=2]
%tmp = alloca i64 ; <i64*> [#uses=2]
store i64 %0, i64* %tmp
%1 = bitcast i64* %tmp to %struct.DeclGroup* ; <%struct.DeclGroup*> [#uses=1]
%2 = load %struct.DeclGroup* %1, align 1 ; <%struct.DeclGroup> [#uses=1]
store %struct.DeclGroup %2, %struct.DeclGroup* %D
%tmp1 = getelementptr inbounds %struct.DeclGroup* %D, i32 0, i32 0 ; <i32*> [#uses=1]
%tmp2 = load i32* %tmp1 ; <i32> [#uses=1]
ret i32 %tmp2
}
which caused fast isel bailouts due to the FCA load/store of %2. Now
we generate this just blissful code:
%struct.DeclGroup = type { i32 }
define i32 @_Z3foo9DeclGroup(i64) nounwind ssp noredzone {
entry:
%D = alloca %struct.DeclGroup, align 4 ; <%struct.DeclGroup*> [#uses=2]
%tmp = alloca i64 ; <i64*> [#uses=2]
%coerce.dive = getelementptr %struct.DeclGroup* %D, i32 0, i32 0 ; <i32*> [#uses=1]
store i64 %0, i64* %tmp
%1 = bitcast i64* %tmp to i32* ; <i32*> [#uses=1]
%2 = load i32* %1, align 1 ; <i32> [#uses=1]
store i32 %2, i32* %coerce.dive
%tmp1 = getelementptr inbounds %struct.DeclGroup* %D, i32 0, i32 0 ; <i32*> [#uses=1]
%tmp2 = load i32* %tmp1 ; <i32> [#uses=1]
ret i32 %tmp2
}
This avoids fastisel bailing out and is groundwork for future patch.
This reduces bailouts on CGStmt.ll to 911 from 935.
llvm-svn: 106974
2010-06-27 06:04:18 +00:00
Chris Lattner
e01d966ce2
merge two tests.
...
llvm-svn: 106971
2010-06-27 01:08:03 +00:00
Chris Lattner
3fcc790cd8
Change IR generation for return (in the simple case) to avoid doing silly
...
load/store nonsense in the epilog. For example, for:
int foo(int X) {
int A[100];
return A[X];
}
we used to generate:
%arrayidx = getelementptr inbounds [100 x i32]* %A, i32 0, i64 %idxprom ; <i32*> [#uses=1]
%tmp1 = load i32* %arrayidx ; <i32> [#uses=1]
store i32 %tmp1, i32* %retval
%0 = load i32* %retval ; <i32> [#uses=1]
ret i32 %0
}
which codegen'd to this code:
_foo: ## @foo
## BB#0: ## %entry
subq $408, %rsp ## imm = 0x198
movl %edi, 400(%rsp)
movl 400(%rsp), %edi
movslq %edi, %rax
movl (%rsp,%rax,4), %edi
movl %edi, 404(%rsp)
movl 404(%rsp), %eax
addq $408, %rsp ## imm = 0x198
ret
Now we generate:
%arrayidx = getelementptr inbounds [100 x i32]* %A, i32 0, i64 %idxprom ; <i32*> [#uses=1]
%tmp1 = load i32* %arrayidx ; <i32> [#uses=1]
ret i32 %tmp1
}
and:
_foo: ## @foo
## BB#0: ## %entry
subq $408, %rsp ## imm = 0x198
movl %edi, 404(%rsp)
movl 404(%rsp), %edi
movslq %edi, %rax
movl (%rsp,%rax,4), %eax
addq $408, %rsp ## imm = 0x198
ret
This actually does matter, cutting out 2000 lines of IR from CGStmt.ll
for example.
Another interesting effect is that altivec.h functions which are dead
now get dce'd by the inliner. Hence all the changes to
builtins-ppc-altivec.c to ensure the calls aren't dead.
llvm-svn: 106970
2010-06-27 01:06:27 +00:00
Chris Lattner
6c5abe88bf
Implement rdar://7530813 - collapse multiple GEP instructions in IRgen
...
This avoids generating two gep's for common array operations. Before
we would generate something like:
%tmp = load i32* %X.addr ; <i32> [#uses=1]
%arraydecay = getelementptr inbounds [100 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1]
%arrayidx = getelementptr inbounds i32* %arraydecay, i32 %tmp ; <i32*> [#uses=1]
%tmp1 = load i32* %arrayidx ; <i32> [#uses=1]
Now we generate:
%tmp = load i32* %X.addr ; <i32> [#uses=1]
%arrayidx = getelementptr inbounds [100 x i32]* %A, i32 0, i32 %tmp ; <i32*> [#uses=1]
%tmp1 = load i32* %arrayidx ; <i32> [#uses=1]
Less IR is better at -O0.
llvm-svn: 106966
2010-06-26 23:03:20 +00:00
Chris Lattner
431bef4409
fix inc/dec to honor -fwrapv and -ftrapv, implementing PR7426.
...
llvm-svn: 106962
2010-06-26 22:18:28 +00:00
Chris Lattner
0bf27620f0
Fix unary minus to trap on overflow with -ftrapv, refactoring binop
...
code so we can use it from VisitUnaryMinus.
llvm-svn: 106957
2010-06-26 21:48:21 +00:00
Chris Lattner
51924e517b
Implement support for -fwrapv, rdar://7221421
...
As part of this, pull together trapv handling into the same enum.
This also add support for NSW multiplies.
This also makes PCH disagreement on overflow behavior silent, since it
really doesn't matter except for warnings and codegen (no macros get
defined etc).
llvm-svn: 106956
2010-06-26 21:25:03 +00:00
Chris Lattner
217e056e40
implement rdar://7432000 - signed negate should codegen as NSW.
...
While I'm in there, adjust pointer to member adjustments as well.
llvm-svn: 106955
2010-06-26 20:27:24 +00:00
Benjamin Kramer
9aa0d39443
A bug I've introduced in STDIN handling surfaced a few broken tests, fix them.
...
Lexer/hexfloat.cpp is now XFAIL'd, I'd appreciate if someone could look into it.
llvm-svn: 106840
2010-06-25 12:48:07 +00:00
Chris Lattner
3c77a355e0
implement support for -finstrument-functions, patch by Nelson
...
Elhage!
llvm-svn: 106507
2010-06-22 00:03:40 +00:00
Anton Korobeynikov
cc50b7d7d5
More AltiVec support.
...
Patch by Anton Yartsev!
llvm-svn: 106387
2010-06-19 09:47:18 +00:00
Douglas Gregor
77e274fbc6
Merge the "regparm" attribute from a previous declaration of a
...
function to redeclarations of that function. Fixes PR7025.
llvm-svn: 106317
2010-06-18 21:30:25 +00:00
Rafael Espindola
23a8a06554
Change the test for which ABI/CC to use on ARM to be base on the environment
...
(the last argument of the triple).
llvm-svn: 106131
2010-06-16 19:01:17 +00:00
Rafael Espindola
ad64acde72
A a new test for my previous patch.
...
llvm-svn: 106120
2010-06-16 18:02:31 +00:00
Rafael Espindola
b35e7b8659
Fix tests that I missed from my previous commit.
...
llvm-svn: 106118
2010-06-16 17:49:52 +00:00
Benjamin Kramer
c0b8f3bc53
Enable basic testing of __builtin_fpclassify.
...
llvm-svn: 105937
2010-06-14 10:41:45 +00:00
John McCall
875679eea0
Fix the constant evaluator for AltiVec-style vector literals so that the
...
vector is filled with the given constant; we were just initializing the
first element.
llvm-svn: 105824
2010-06-11 17:54:15 +00:00
Rafael Espindola
2569885963
Add a test to the previous commit.
...
llvm-svn: 105596
2010-06-08 03:59:28 +00:00
Rafael Espindola
e971b9a260
Correctly align large arrays in x86-64. This fixes PR5599.
...
llvm-svn: 105500
2010-06-04 23:15:27 +00:00
John McCall
8e346702b6
Preserve more information from a block's original function declarator, if one
...
was given. Remove some unnecessary accounting from BlockScopeInfo. Handle
typedef'ed function types until such time as we decide not.
llvm-svn: 105478
2010-06-04 19:02:56 +00:00
Fariborz Jahanian
6e81492151
Empty enum in c is now error to match gcc's behavior.
...
(radar 8040068).
llvm-svn: 105011
2010-05-28 22:23:22 +00:00
Fariborz Jahanian
93bef10131
Fix a miscompile of wchar pascal strings.
...
(radar 8020384)
llvm-svn: 104996
2010-05-28 19:40:48 +00:00
John McCall
02269a66b3
Enable the implementation of __builtin_setjmp and __builtin_longjmp. Not all
...
LLVM backends support these yet.
llvm-svn: 104867
2010-05-27 18:47:06 +00:00
Douglas Gregor
aab11ede6e
Fix testsuite for blocks mangling change
...
llvm-svn: 104618
2010-05-25 17:46:21 +00:00
Benjamin Kramer
fdb61d78e9
Implement codegen for __builtin_isnormal.
...
llvm-svn: 104118
2010-05-19 11:24:26 +00:00
Douglas Gregor
162b419a02
Add missing test case, provided by Steven Watanabe.
...
llvm-svn: 104037
2010-05-18 17:43:51 +00:00
Douglas Gregor
a941dcae16
Add support for Microsoft's __thiscall, from Steven Watanabe!
...
llvm-svn: 104026
2010-05-18 16:57:00 +00:00
Eli Friedman
b41ad0fbea
PR7117: Make sure we don't lose the calling convention for K&R-style
...
definitions.
llvm-svn: 103932
2010-05-17 02:50:18 +00:00
John McCall
b1fb0d3610
The FP constant evaluator was missing a few cases of unary operators that return floats
...
but whose operand isn't a float: specifically, __real__ and __imag__. Instead
of filtering these out, just implement them.
Fixes <rdar://problem/7958272>.
llvm-svn: 103307
2010-05-07 22:08:54 +00:00
Chris Lattner
dbff4bf5f4
implement codegen support for __builtin_isfinite, part of PR6083
...
llvm-svn: 103168
2010-05-06 06:04:13 +00:00
Chris Lattner
68784efaf6
optimize builtin_isnan/isinf to not do an extraneous extension from
...
float -> double (which happens because they are modelled as int(...)
functions), and add a testcase for isinf.
llvm-svn: 103167
2010-05-06 05:50:07 +00:00
John McCall
4a39ab8078
Emit the globals, metadata, etc. associated with static variables even when
...
they're unreachable. This matters because (if they're POD, or if this is C)
the scope containing the variable might be reachable even if the variable
isn't. Fixes PR7044.
llvm-svn: 103052
2010-05-04 20:45:42 +00:00
Devang Patel
dfcd0661a1
Use clang::VarDecl name instead of llvm::GlobalVariable name.
...
llvm::GLobalVariable name may not match user visibile name for function static variables.
llvm-svn: 102644
2010-04-29 17:48:37 +00:00
Mon P Wang
75c645c6d7
A not equal for an unordered relation should return true as specified in IEEE-754, e.g.,
...
NAN != NAN ? 1 : 0 should return 1. Also fix the case for complex.
llvm-svn: 102598
2010-04-29 05:53:29 +00:00
John McCall
d06fb865eb
Properly pass the address of a lazily-generated function declaration with
...
incomplete type. Fixes PR6911.
llvm-svn: 102473
2010-04-28 00:00:30 +00:00
Chris Lattner
db6d5cb892
Implement PR6845. We allow matching constraints to have different
...
input and output types when the smaller value isn't mentioned in the
asm string. Extend this support from integers to also allowing
fp values to be mismatched (if not mentioned in the asm string).
llvm-svn: 102188
2010-04-23 17:27:29 +00:00
Chris Lattner
6bcf2d81e8
rename test
...
llvm-svn: 102182
2010-04-23 16:30:17 +00:00
Chris Lattner
1a8f394a1f
david conrad points out that {|} in inline assembly on arm are not asm
...
variants. This fixes neon inline asm which my patch for PR6780 broke.
llvm-svn: 102181
2010-04-23 16:29:58 +00:00
Daniel Dunbar
f812506912
ARM/APCS: Don't respect bit-field types when laying out structures.
...
- This fixes the last known ABI issues with ARM/APCS.
- I've run the first 1k ABITests with '--no-unsigned --no-vector --no-complex'
on {armv6, armv7} x {-mno-thumb, -mthumb}, and the first 10k tests for armv7
-mthumb, for both function return types and single argument calls. These all
pass now (they failed horribly before without --no-bitfield).
llvm-svn: 102070
2010-04-22 16:14:54 +00:00
Daniel Dunbar
5981377698
IRgen: Fix another case where we generated an invalid access component when we
...
immediately narrowed the access size. Fix this (and previous case) by just
choosing a better access size up-front.
llvm-svn: 102068
2010-04-22 15:22:33 +00:00
Daniel Dunbar
5d6c07e0e9
IRgen: Fix case where we might generate an access component with width == 0, if
...
we have to narrow the access side immediately (can happen with packed,
-fno-bitfield-type-align).
llvm-svn: 102067
2010-04-22 14:56:10 +00:00
Daniel Dunbar
fc66e0ed87
IRgen: Set alignment correctly on bit-field accesses.
...
llvm-svn: 102046
2010-04-22 03:17:04 +00:00
Daniel Dunbar
488f55c271
IRgen: Rewrite bit-field access policy to not access data beyond the bounds of the structure, which we also now verify as part of the post-layout consistency checks.
...
- This fixes some pedantic bugs with packed structures, as well as major problems with -fno-bitfield-type-align.
- Fixes PR5591, PR5567, and all known -fno-bitfield-type-align issues.
- Review appreciated.
llvm-svn: 102045
2010-04-22 02:35:46 +00:00
Daniel Dunbar
53fac692fa
ABI/x86-32 & x86-64: Alignment on 'byval' must be set when when the alignment
...
exceeds the minimum ABI alignment.
llvm-svn: 102019
2010-04-21 19:49:55 +00:00
Daniel Dunbar
f5dbc072a6
Convert test to FileCheck.
...
llvm-svn: 102018
2010-04-21 19:34:17 +00:00
Daniel Dunbar
14ec60024c
Convert test to FileCheck.
...
llvm-svn: 102016
2010-04-21 19:10:54 +00:00
Daniel Dunbar
20b551a443
IRgen: Always use i8 arrays to access union bit-fields. This is ugly, but
...
matches how we currently handle structs, and this correctly handles
-fno-bitfield-type-align.
llvm-svn: 101918
2010-04-20 17:52:30 +00:00
Chris Lattner
9cffdf1331
don't slap noalias attribute on stret result arguments.
...
This mirror's Dan's patch for llvm-gcc in r97989, and
fixes the miscompilation in PR6525. There is some contention
over whether this is the right thing to do, but it is the
conservative answer and demonstrably fixes a miscompilation.
llvm-svn: 101877
2010-04-20 05:44:43 +00:00
Nuno Lopes
247a138ec6
recommit r101568 to fix PR6766
...
as a side-effect, remove two FIXMEs now fixed
llvm-svn: 101726
2010-04-18 19:06:43 +00:00
Anders Carlsson
8345a70c67
Fix an assert when assigning a boolean value to a bitfield of type _Bool.
...
llvm-svn: 101678
2010-04-17 21:52:22 +00:00
Chris Lattner
b714a4b4a0
revert r101568, which miscompiles this testcase, distilled from ldecod:
...
void exit_picture()
{
char yuv_types[4][6]= {"4:0:0","4:2:0","4:2:2","4:4:4"};
foo(yuv_types);
}
llvm-svn: 101623
2010-04-17 06:53:44 +00:00
Nuno Lopes
74b595256a
fix PR6766: codegen of var initialized with wide char
...
llvm-svn: 101568
2010-04-16 23:19:41 +00:00
Nuno Lopes
1c5c30fdd3
add another test for the undef patch just for to have peace of mind :)
...
this follows from C99 6.7.8p10: if it is a union, the first named member is initialized
llvm-svn: 101539
2010-04-16 21:19:39 +00:00
Chris Lattner
3cff64ab58
fix a bogus assertion exposed by a recent change: packing the
...
struct may cause it to shrink more than one byte. Before
my recent changes we compiled the new test into:
%0 = type { [6 x i8] }
@x = global %0 { [6 x i8] undef }, align 2 ; <%0*> [#uses=0]
which is obviously bogus. Now we compile it into:
%0 = type <{ i32, i8, i8 }>
@x = global %0 zeroinitializer, align 2 ; <%0*> [#uses=0]
Where the last byte only is tail padding.
llvm-svn: 101536
2010-04-16 21:02:32 +00:00
Nuno Lopes
5863c999e7
emit padding as undef values, take 2
...
merge also a few tests I had here for this feature, and FileCheck'ize one file
llvm-svn: 101535
2010-04-16 20:56:35 +00:00
Daniel Dunbar
67aba79b74
IRgen: (Reapply 101222, with fixes) Move EmitStoreThroughBitfieldLValue to use new CGBitfieldInfo::AccessInfo decomposition, instead of computing the access policy itself.
...
- Sadly, this doesn't seem to give any .ll size win so far. It is possible to make this routine significantly smarter & avoid various shifting, masking, and zext/sext, but I'm not really convinced it is worth it. It is tricky, and this is really instcombine's job.
- No intended functionality change; the test case is just to increase coverage & serves as a demo file, it worked before this commit.
The new fixes from r101222 are:
1. The shift to the target position needs to occur after the value is extended to the correct size. This broke Clang bootstrap, among other things no doubt.
2. Swap the order of arguments to OR, to get a tad more constant folding.
llvm-svn: 101339
2010-04-15 03:47:33 +00:00
Eric Christopher
1bbc7086ff
Rewrite handling of 64-bit palignr intrinsics to be vector shuffles.
...
Stop multiplying constant by 8 accordingly in the header and change
intrinsic definition for what types we expect.
Add to existing palignr test to check that we're emitting the correct things.
llvm-svn: 101332
2010-04-15 01:43:08 +00:00
Chris Lattner
dd6697b4fa
improve altivec c++ support by adding casts, patch by
...
Anton Yartsev!
llvm-svn: 101281
2010-04-14 20:35:39 +00:00
Daniel Dunbar
91ea6ac3e9
Speculatively revert "IRgen: Move EmitStoreThroughBitfieldLValue to use new CGBitfieldInfo::AccessInfo decomposition, instead of computing the access policy itself.", I think it might be breaking bootstrap.
...
llvm-svn: 101235
2010-04-14 05:48:35 +00:00
Daniel Dunbar
230e1541b3
IRgen: Move EmitStoreThroughBitfieldLValue to use new CGBitfieldInfo::AccessInfo decomposition, instead of computing the access policy itself.
...
- Sadly, this doesn't seem to give any .ll size win so far. It is possible to make this routine significantly smarter & avoid various shifting, masking, and zext/sext, but I'm not really convinced it is worth it. It is tricky, and this is really instcombine's job.
- No intended functionality change; the test case is just to increase coverage & serves as a demo file, it worked before this commit.
llvm-svn: 101222
2010-04-14 04:08:03 +00:00
Chris Lattner
dad4062b4d
implement altivec.h and a bunch of support code, patch by Anton Yartsev!
...
llvm-svn: 101215
2010-04-14 03:54:58 +00:00
Chris Lattner
ff0e2a36e2
Rework the ConstStructBuilder code to emit missing initializer
...
elements with explicit zero values instead of with tail padding.
On an example like this:
struct foo { int a; int b; };
struct foo fooarray[] = {
{1, 2},
{4},
};
We now lay this out as:
@fooarray = global [2 x %struct.foo] [%struct.foo { i32 1, i32 2 }, %struct.foo { i32 4, i32 0 }]
instead of as:
@fooarray = global %0 <{ %struct.foo { i32 1, i32 2 }, %1 { i32 4, [4 x i8] zeroinitializer } }>
Preserving both the struct type of the second element, but also the array type of the entire thing.
llvm-svn: 101155
2010-04-13 18:16:19 +00:00
Chris Lattner
933f67887f
fix PR6660/6168: emit padding as zeros instead of undef. Because
...
trailing fields may not be represented in initializer lists, they
are being handled as padding and those fields *must* be zero
initialized.
llvm-svn: 101067
2010-04-12 21:10:05 +00:00
Benjamin Kramer
249f50ca04
Fix run line so this test actually tests something.
...
llvm-svn: 100962
2010-04-11 09:39:39 +00:00
Chris Lattner
bc3be65d2e
fix PR6805: llvm.objectsize changed to take an i1 instead of an i32.
...
llvm-svn: 100938
2010-04-10 18:34:14 +00:00
John McCall
8586bfd85d
@llvm.sqrt isn't really close enough to C's sqrt to justify emitting calls
...
to the intrinsic, even when math-errno is off.
Fixes rdar://problem/7828230 by falling back on the library function.
llvm-svn: 100613
2010-04-07 08:20:20 +00:00
Chris Lattner
e6485c5873
add a testcase that the integrated assembler rejects, this verifies
...
that the integrated assembler is working.
llvm-svn: 100545
2010-04-06 18:46:25 +00:00
Chris Lattner
da081a8e1f
fix PR6780, properly handling the IR {|} escapes in inline asm strings.
...
llvm-svn: 100449
2010-04-05 18:44:00 +00:00
Mon P Wang
cc2ab0cdc9
Reapply patch for adding support for address spaces and added a isVolatile field to memcpy, memmove, and memset.
...
llvm-svn: 100305
2010-04-04 03:10:52 +00:00
Daniel Dunbar
8f0be43669
Avoid unneeded calls to opt/llvm-dis.
...
llvm-svn: 100236
2010-04-02 22:29:38 +00:00
Daniel Dunbar
87c1991bb4
Merge several tests into switch.c.
...
llvm-svn: 100235
2010-04-02 22:29:35 +00:00
Mon P Wang
f7f3bff646
Revert r100193 since it causes failures in objc in clang
...
llvm-svn: 100200
2010-04-02 18:43:42 +00:00
Mon P Wang
4b82a88764
Reapply patch for adding support for address spaces and added a isVolatile field to memcpy, memmove, and memset.
...
llvm-svn: 100193
2010-04-02 18:04:30 +00:00
Jakob Stoklund Olesen
4d2972d793
Slightly relax test case. An upcoming LLVM commit will change the xor instruction.
...
llvm-svn: 99962
2010-03-30 23:57:49 +00:00
Daniel Dunbar
c4d551b6ff
Fix test in -Asserts build.
...
llvm-svn: 99960
2010-03-30 23:50:00 +00:00
Bob Wilson
adb58e32cc
Revert Mon Ping's 99930 due to broken llvm-gcc buildbots.
...
llvm-svn: 99949
2010-03-30 22:28:46 +00:00
Rafael Espindola
49b85ab6e6
Remember the regparm attribute in FunctionType::ExtInfo.
...
Fixes PR3782.
llvm-svn: 99940
2010-03-30 22:15:11 +00:00
Rafael Espindola
5c61cbeb58
Fix this test on windows. When running on windows we print
...
double 0.000000e+000
instead of
double 0.000000e+00
llvm-svn: 99932
2010-03-30 21:19:02 +00:00
Mon P Wang
231e99743a
Added support for address spaces and added a isVolatile field to memcpy, memmove, and memset
...
llvm-svn: 99930
2010-03-30 21:02:45 +00:00
Rafael Espindola
c50c27cca8
the big refactoring bits of PR3782.
...
This introduces FunctionType::ExtInfo to hold the calling convention and the
noreturn attribute. The next patch will extend it to include the regparm
attribute and fix the bug.
llvm-svn: 99920
2010-03-30 20:24:48 +00:00
John McCall
39ec71f2e9
When mapping restrict to noalias, look for 'restrict' on the parameter variable
...
instead of the canonical parameter type (which has correctly dropped all such
direct qualifiers). Fixes PR6695.
llvm-svn: 99688
2010-03-27 00:47:27 +00:00
Nick Lewycky
3cfe6af8b5
Implement new mangling for vectors.
...
llvm-svn: 99616
2010-03-26 07:18:04 +00:00
Daniel Dunbar
3f540c0d7d
Remove support for nand atomic builtins. They are inconsistently implemented in
...
gcc, and the common expectation seems to be that they are unused. If and when
someone cares we can add them back with well documented demantics.
llvm-svn: 99522
2010-03-25 17:13:09 +00:00
Daniel Dunbar
4ff562d557
IRgen: Wrap atomic intrinsics with memory barriers, to ensure we honor the semantics.
...
- This should be conservatively correct, we eventually should have target hooks for platforms that are less strict.
llvm-svn: 99050
2010-03-20 07:04:11 +00:00
Daniel Dunbar
4c43e31d21
Evaluate: Fix a subtle bug in the pointer evaluator in which we would do an
...
expression computation in the wrong bit-width, and end up generating a totally
bogus array reference (_g0+8589934546).
- This showed up on Prolangs/cdecl.
llvm-svn: 99042
2010-03-20 05:53:45 +00:00
Chris Lattner
9723d6c699
fix PR6433, crash on va_arg of typedef.
...
llvm-svn: 98264
2010-03-11 18:19:55 +00:00
Devang Patel
93f274c161
Fix file reference for derived and composite types. Now, dwarf writer uses strict verifier that ignores debug info for such types if their file info is unknown.
...
llvm-svn: 98096
2010-03-09 22:49:11 +00:00
Chris Lattner
e18aaf2c4b
add a codegen hack to work around an AST bug, allowing us to compile the
...
code in PR6537. This should be reverted when the ast bug is fixed.
llvm-svn: 97981
2010-03-08 21:08:07 +00:00
Eli Friedman
99d20f83ba
PR6515: Implement __builtin_signbit and friends.
...
I'm reasonably sure my implementation is correct, but it would be nice if
someone could double-check.
llvm-svn: 97864
2010-03-06 02:17:52 +00:00
Fariborz Jahanian
2574577828
Remove header file dependencies in block patch
...
test case.
llvm-svn: 97777
2010-03-05 01:49:18 +00:00
Blaine Garst
f27ab71d9f
add support for a 1<<29 bit in the block flags field to mark blocks using alternate struct return ABI
...
llvm-svn: 97775
2010-03-05 01:29:59 +00:00
Rafael Espindola
bef98689ad
really fix 6473 by handling weakref in constant expressions.
...
llvm-svn: 97750
2010-03-04 21:26:03 +00:00
Rafael Espindola
2e42fec3a0
Fix PR6473.
...
Clang's support for weakref is now better than llvm-gcc's :-)
We don't introduce a new symbol and we correctly mark undefined references weak only if there is no
definition or regular undefined references in the same file.
llvm-svn: 97733
2010-03-04 18:17:24 +00:00
John McCall
731be6620c
Revert changes r97693, r97700, and r97718.
...
Our testing framework can't deal with disabled targets yet.
llvm-svn: 97719
2010-03-04 04:29:44 +00:00
John McCall
61076e1d87
XFAIL these tests on win32, since the win32 buildbot apparently disables all
...
targets except X86.
llvm-svn: 97718
2010-03-04 04:14:44 +00:00
Eric Christopher
45fa7e60fb
Fix __builtin_ia32_roundss and __builtin_ia32_roundsd definitions.
...
Re-enable test.
llvm-svn: 97707
2010-03-04 01:34:19 +00:00
John McCall
81d4d12504
Implement __builtin_dwarf_sp_column().
...
llvm-svn: 97700
2010-03-04 00:44:01 +00:00
Chris Lattner
eaa2778f27
fix a buildbot failure, this was passing for me because the
...
'%t' file was left around on my disk. doh.
llvm-svn: 97699
2010-03-04 00:38:16 +00:00
Chris Lattner
aabec2fb84
merge asm-2.c into asm.c, remove asm-inout.c because it is
...
XFAIL and already tracked in bugzilla.
llvm-svn: 97671
2010-03-03 21:56:57 +00:00
Chris Lattner
576def7fbe
fix PR6475, we were doing side-effecting stuff in an assert.
...
llvm-svn: 97669
2010-03-03 21:52:23 +00:00
Chris Lattner
5cc15e058b
add framework for ARM builtins, Patch by Edmund Grimley Evans!
...
llvm-svn: 97656
2010-03-03 19:03:45 +00:00
John McCall
1629149103
Support constant-evaluation of __builtin_nans* as well as the correct constant
...
evaluation of __builtin_nan*. Most of the work to make this work is in LLVM.
Fixes <rdar://problem/7696712> and part of PR 5255.
llvm-svn: 97383
2010-02-28 13:00:19 +00:00
John McCall
8bf8ac0775
Make this test portable to ABIs that use sret.
...
llvm-svn: 97035
2010-02-24 08:14:27 +00:00
John McCall
1826980fc8
Fix test case and convert fully to FileCheck.
...
llvm-svn: 97032
2010-02-24 07:33:39 +00:00
John McCall
8ee376f08a
Canonicalize parameter and return types before computing ABI info. Eliminates
...
a common source of oddities and, in theory, removes some redundant ABI
computations. Also fixes a miscompile I introduced yesterday by refactoring
some code and causing a slightly different code path to be taken that
didn't perform *parameter* type canonicalization, just normal type
canonicalization; this in turn caused a bit of ABI code to misfire because
it was looking for 'double' or 'float' but received 'const float'.
llvm-svn: 97030
2010-02-24 07:14:12 +00:00
Devang Patel
b407338fe2
Emit debug info for VectorType.
...
llvm-svn: 96999
2010-02-23 22:59:39 +00:00
Blaine Garst
dffb51bac8
fix buildbot failure on windows by slightly trimming test output to ignore temporary name
...
llvm-svn: 96998
2010-02-23 22:59:01 +00:00
Rafael Espindola
c18086ae17
Add support for the weakref attribute. We still produce "alias weak" as llvm-gcc does, but are more strict on what uses of weakref we accept.
...
llvm-svn: 96992
2010-02-23 22:00:30 +00:00
Blaine Garst
fc83aa04db
Unconditionally support block introspection data in a new field at the end
...
of the block descriptor field. This field is the ObjC style @encode
signature of the implementation function, and was to this point
conditionally provided in the block literal data structure. That
provisional support is removed.
Additionally, eliminate unused enumerations for the block literal flags field.
The first shipping ABI unconditionally set (1<<29) but this bit is unused
by the runtime, so the second ABI will unconditionally have (1<<30) set so
that the runtime can in fact distinguish whether the additional data is
present or not.
llvm-svn: 96989
2010-02-23 21:51:17 +00:00
Eli Friedman
d2c0de6b44
PR6386: Fix a recent regression in IRGen of cast-to-union constructs.
...
llvm-svn: 96958
2010-02-23 17:58:35 +00:00
Charles Davis
fea4845609
Allow redefinitions of extern inline functions in GNU89 mode, just as GCC
...
does. Fixes PR5253.
llvm-svn: 96553
2010-02-18 02:00:42 +00:00
Devang Patel
7585580ccc
Distinguish two lexical blocks at the same level.
...
llvm-svn: 96397
2010-02-16 21:41:20 +00:00
Charles Davis
163855f46d
dllimport and dllexport are declspec attributes, too. They're also
...
Win32-specific.
Also, fix a test to use FileCheck instead of grepping LLVM IR.
llvm-svn: 96364
2010-02-16 18:27:26 +00:00
Devang Patel
e8814ce0a6
Use getLocStart(), instead of getLocEnd(), to record starting location of objc method. :)
...
llvm-svn: 96245
2010-02-15 18:08:38 +00:00
Charles Davis
4ea31ab369
Emit the 'alignstack' LLVM function attribute when we encounter a function
...
marked 'force_align_arg_pointer'. Almost there; now all I need to do is finish
up the backend.
llvm-svn: 96100
2010-02-13 15:54:06 +00:00
Devang Patel
1b5330afe9
Use current location as the location of compiler generated arguments, e.g. self, _cmd etc.
...
llvm-svn: 95743
2010-02-10 01:09:50 +00:00
Daniel Dunbar
a7566f163a
IRgen: Add CreateMemTemp, for creating an temporary memory object for a particular type, and flood fill. - CreateMemTemp sets the alignment on the alloca correctly, which fixes a great many places in IRgen where we were doing the wrong thing.
...
- This fixes many many more places than the test case, but my feeling is we need to audit alignment systematically so I'm not inclined to try hard to test the individual fixes in this patch. If this bothers you, patches welcome!
PR6240.
llvm-svn: 95648
2010-02-09 02:48:28 +00:00
John McCall
ab26cfa58d
Standardize the parsing of function type attributes in a way that
...
follows (as conservatively as possible) gcc's current behavior: attributes
written on return types that don't apply there are applied to the function
instead, etc. Only parse CC attributes as type attributes, not as decl attributes;
don't accepet noreturn as a decl attribute on ValueDecls, either (it still
needs to apply to other decls, like blocks). Consistently consume CC/noreturn
information throughout codegen; enforce this by removing their default values
in CodeGenTypes::getFunctionInfo().
llvm-svn: 95436
2010-02-05 21:31:56 +00:00
Charles Davis
2b2864c436
Convert this test to FileCheck instead of grepping LLVM IR.
...
llvm-svn: 95428
2010-02-05 20:45:48 +00:00
Charles Davis
5a5473f0f8
Now that we store calling conventions in the types, use them instead of
...
getting the calling convention from the target function, which may or may not
exist. Fixes PR5280.
llvm-svn: 95399
2010-02-05 18:13:10 +00:00
Douglas Gregor
a71cc15361
Implement promotion for enumeration types.
...
WHAT!?!
It turns out that Type::isPromotableIntegerType() was not considering
enumeration types to be promotable, so we would never do the
promotion despite having properly computed the promotion type when the
enum was defined. Various operations on values of enum type just
"worked" because we could still compute the integer rank of an enum
type; the oddity, however, is that operations such as "add an enum and
an unsigned" would often have an enum result type (!). The bug
actually showed up as a spurious -Wformat diagnostic
(<rdar://problem/7595366>), but in theory it could cause miscompiles.
In this commit:
- Enum types with a promotion type of "int" or "unsigned int" are
promotable.
- Tweaked the computation of promotable types for enums
- For all of the ABIs, treat enum types the same way as their
underlying types (*not* their promotion types) for argument passing
and return values
- Extend the ABI tester with support for enumeration types
llvm-svn: 95117
2010-02-02 20:10:50 +00:00
Daniel Dunbar
96ebba5770
ARM/APCS: Fix classification of small complex integer types as "integer like".
...
llvm-svn: 95030
2010-02-01 23:31:26 +00:00
Daniel Dunbar
eedf151cb1
ARM/APCS: Pass Complex types following llvm-gcc.
...
llvm-svn: 95029
2010-02-01 23:31:19 +00:00
Chris Lattner
5b5d2db3f6
Don't explicitly force utf strings into the __TEXT,__ustring
...
by setting the section of the generated global. This is an
optimization done by the code generator, and the code being
removed didn't handle the case when the string contained an
embedded nul (which the code generator does correctly
handle). This is rdar://7589850
llvm-svn: 95003
2010-02-01 20:59:08 +00:00
Devang Patel
156b11368a
New test case.
...
llvm-svn: 94821
2010-01-29 18:32:33 +00:00
Daniel Dunbar
45c7ff1d79
ARM/APCS ABI: Fix some problems with bit-fields in structures. After rereading
...
the ABI spec, this turns out to simplify the code. We still have some annoying
code which mismatches the spec with regard to empty structures.
llvm-svn: 94796
2010-01-29 03:22:29 +00:00
Anders Carlsson
b1ef991097
Fix an incorrect union layout assert. Fixes PR6164.
...
llvm-svn: 94754
2010-01-28 18:22:03 +00:00
Benjamin Kramer
b2abc13f28
Adjust testcase for recent DWARF printer changes.
...
llvm-svn: 94306
2010-01-23 10:14:58 +00:00
Mike Stump
92d487712e
Fix for Release-Asserts.
...
llvm-svn: 93340
2010-01-13 19:40:37 +00:00
Dan Gohman
d1e76b957b
Use -fno-math-errno by default, and remove the IsMathErrnoDefault
...
targethook, which is no longer being used. This fixes PR5971.
llvm-svn: 92987
2010-01-08 02:20:44 +00:00
Benjamin Kramer
0128f668a9
__builtin_object_size(ptr, type) returns -1 for type = {0,1} if there are any side-effects.
...
llvm-svn: 92453
2010-01-03 18:18:37 +00:00
Eli Friedman
906be1b580
Add test for annotate attribute for coverage.
...
llvm-svn: 92435
2010-01-03 00:51:58 +00:00
Eli Friedman
090adddf15
Fix minor oversight for increment/decrement of complex int. Add tests for
...
coverage.
llvm-svn: 92433
2010-01-03 00:20:48 +00:00
Eli Friedman
bb333722c1
Add a couple more tests for coverage.
...
llvm-svn: 92430
2010-01-02 23:21:40 +00:00
Eli Friedman
e14b1997db
Don't look through casts when looking for the underlying decl for a function
...
call; the standard doesn't expect us to, and the program could be doing
something crazy. Fixes PR5882.
llvm-svn: 92166
2009-12-26 03:35:45 +00:00
Chris Lattner
9ac2b586c7
fix typo
...
llvm-svn: 92065
2009-12-23 22:06:12 +00:00
Chris Lattner
4e1a323b85
fix opencl extvector element extraction on rvalues. We previously
...
error_unsupported on test10 and crashed on test11.
llvm-svn: 92056
2009-12-23 21:31:11 +00:00
Eric Christopher
c87915629b
Update for the intrinsic changes in llvm: the object size intrinsic
...
only takes a boolean second argument now. Update tests accordingly.
Currently the builtin still accepts the full range for compatibility.
llvm-svn: 91983
2009-12-23 03:49:37 +00:00
Daniel Dunbar
a7d0231b66
clang -cc1: Rename -mcpu to -target-cpu to match other target options and not alias driver/backend option.
...
llvm-svn: 91671
2009-12-18 06:30:12 +00:00
Daniel Dunbar
5618e98f33
Update tests to use %clang instead of 'clang', and forcibly disable use of '
...
clang ' or ' clang -cc1 ' or ' clang-cc ' in test lines (by substituting them to
garbage).
llvm-svn: 91460
2009-12-15 22:01:24 +00:00
Daniel Dunbar
8fbe78f6fc
Update tests to use %clang_cc1 instead of 'clang-cc' or 'clang -cc1'.
...
- This is designed to make it obvious that %clang_cc1 is a "test variable"
which is substituted. It is '%clang_cc1' instead of '%clang -cc1' because it
can be useful to redefine what gets run as 'clang -cc1' (for example, to set
a default target).
llvm-svn: 91446
2009-12-15 20:14:24 +00:00
Fariborz Jahanian
a01b67d7b0
Make tests use the new clang -cc1 flag.
...
llvm-svn: 91303
2009-12-14 18:00:56 +00:00
Nate Begeman
67dfd4236a
Revert mmx palignr to use an intrinsic, since mmx shuffle patterns are missing.
...
llvm-svn: 91269
2009-12-14 05:15:02 +00:00
Nate Begeman
72ec6bc6f4
Support x86's PALIGNR instruction without the use of a palignr intrinsic.
...
llvm-svn: 91264
2009-12-14 04:57:03 +00:00
Eli Friedman
4f678f3de1
Fix for PR5709: use the computed type of the declaration instead of the
...
type of the builtin when generating the function declaration for a builtin
library call.
llvm-svn: 90936
2009-12-09 03:05:59 +00:00
Daniel Dunbar
f51087656d
Remove include of system header.
...
llvm-svn: 90883
2009-12-08 21:52:24 +00:00
Daniel Dunbar
888a89ccf2
Use clang-cc in this test.
...
llvm-svn: 90872
2009-12-08 19:49:40 +00:00
Mike Stump
b2a568d9e5
Switch over to checking .ll files instead of .s files.
...
llvm-svn: 90786
2009-12-07 19:22:29 +00:00
Chris Lattner
0f3a228e73
add 'F' to a bunch of libm builtins so that codegen doesn't die on them,
...
pointed out by Charles Davis.
llvm-svn: 90736
2009-12-07 02:09:14 +00:00
Chris Lattner
2da786f794
fix comment.
...
llvm-svn: 90660
2009-12-05 08:33:21 +00:00
Chris Lattner
ded98d4172
consolidate some tests.
...
llvm-svn: 90659
2009-12-05 08:30:04 +00:00
Chris Lattner
e99c110d06
implement rdar://7346691 by codegen'ing struct/array initializers
...
to a memset or a memcpy from a global when possible.
llvm-svn: 90658
2009-12-05 08:22:11 +00:00
Chris Lattner
ffcd06ea7c
simplify a condition and add a testcase.
...
llvm-svn: 90652
2009-12-05 06:49:57 +00:00
Daniel Dunbar
e97582406b
Use '-FOO' 'BAR' instead of '-FOO=BAR' for FOO in -stack-protector, -fvisibility, and -fconstant-string-class.
...
llvm-svn: 90072
2009-11-29 09:33:20 +00:00
Daniel Dunbar
4e7596cc3a
Normalize options to use '-FOO' instead of '--FOO'.
...
llvm-svn: 90071
2009-11-29 09:33:10 +00:00
Anders Carlsson
1299f36af1
Update a test to FileCheck.
...
llvm-svn: 89610
2009-11-22 18:56:40 +00:00
Ken Dyck
65da2db736
Use intptr_t from stdint.h (in freestanding mode) instead of redefining it here
...
with __INTPTR_TYPE__.
llvm-svn: 89609
2009-11-22 18:29:06 +00:00
Daniel Dunbar
c2588c3bd9
Convert test to FileCheck.
...
llvm-svn: 89514
2009-11-20 23:46:56 +00:00
Daniel Dunbar
32164f4bdb
Driver: Use '-target-abi' 'FOO' instead of '-target-abi=FOO'.
...
llvm-svn: 89501
2009-11-20 22:32:30 +00:00
Daniel Dunbar
4274685b63
Pass '-mcpu' 'FOO' instead of '-mcpu=FOO'.
...
llvm-svn: 89498
2009-11-20 22:21:52 +00:00
Daniel Dunbar
9c7efbb996
Fix some codegen tests to include positive checks.
...
llvm-svn: 89465
2009-11-20 17:23:39 +00:00
Daniel Dunbar
484afa2d3b
Switch -f{builtin,math-errno,rtti} and -analyzer-purge-dead to -...no... variants instead of using llvm: 🆑 :init(true) arguments.
...
llvm-svn: 89315
2009-11-19 04:55:23 +00:00
Daniel Dunbar
ba0c9e8685
Remove unnecessary &&s.
...
llvm-svn: 89153
2009-11-17 22:25:07 +00:00
David Chisnall
950a9518b1
Added block type introspection support.
...
As per Fariborz's suggestion, committed now but can be reverted later if the used flag is problematic for Apple.
llvm-svn: 89134
2009-11-17 19:33:30 +00:00
Daniel Dunbar
feedba68b5
Don't #include <stdio.h> when tests don't need it, or use clang instead of clang-cc when they do.
...
llvm-svn: 89070
2009-11-17 08:57:36 +00:00
Daniel Dunbar
f85fabec35
Remove some redundant tests.
...
llvm-svn: 89069
2009-11-17 08:57:06 +00:00
Daniel Dunbar
4930e3357b
Add -fblocks, -stack-protector, and -fobjc-nonfragile-abi defaulting to driver,
...
instead of using getDefaultLangOptions.
- Remove unused -fobjc-tight-layout while at it.
llvm-svn: 89065
2009-11-17 08:07:36 +00:00
Jakob Stoklund Olesen
4359796e52
Fix tests after enabling -split-phi-edges.
...
object-size.c aws simply too fragile.
constructor-default-arg.cpp triggers an issue when LiveVariables is run before RALocal.
llvm-svn: 89025
2009-11-17 01:47:01 +00:00
Eli Friedman
b0bc559b19
PR5526: Make sure to set the right cast kinds for the inserted implicit casts.
...
llvm-svn: 89023
2009-11-17 01:22:05 +00:00
Eli Friedman
b210fc598f
Make __func__ and friends work correctly within the initializer for a static
...
local variable.
llvm-svn: 88766
2009-11-14 08:37:13 +00:00
Eli Friedman
6f04b1e605
Obvious fix for PR5474.
...
llvm-svn: 88696
2009-11-13 21:23:46 +00:00
Daniel Dunbar
775f18520c
And now a test fix in +Asserts mode, which I broke.
...
llvm-svn: 86801
2009-11-11 03:48:34 +00:00
Daniel Dunbar
568e302a7f
Fix some tests in -Asserts mode.
...
- FileCheck is a *huuuuge* improvement here.
- Still feels like we could use a better tool for this though, either teach
llvm-dis to spit out the FileCheck syntax, or provide another tool to turn a
.ll into a "matchable" input.
- Also on my Christmas list is better FileCheck diagnostics with missing
variables or mismatches.
llvm-svn: 86800
2009-11-11 03:48:26 +00:00
Mike Stump
68ec7ee0e8
Enable the use of the new llvm objectsize intrinsic.
...
llvm-svn: 86607
2009-11-09 22:40:09 +00:00
Daniel Dunbar
34546ce43d
Remove RUN: true lines.
...
llvm-svn: 86432
2009-11-08 01:47:25 +00:00
Daniel Dunbar
8b57697954
Eliminate &&s in tests.
...
- 'for i in $(find . -type f); do sed -e 's#\(RUN:.*[^ ]\) *&& *$#\1#g' $i | FileUpdate $i; done', for the curious.
llvm-svn: 86430
2009-11-08 01:45:36 +00:00
Chris Lattner
3f5124815d
commit test update
...
llvm-svn: 86396
2009-11-07 18:59:51 +00:00
Devang Patel
22053c0f46
MIPS linkage name confuses gdb here. Generate and test DW_AT_name here.
...
llvm-svn: 86318
2009-11-07 00:41:37 +00:00
Mike Stump
6de15a8881
Test case for recent checkin.
...
llvm-svn: 85972
2009-11-03 23:32:42 +00:00
Daniel Dunbar
a530841b4f
Switch XFAIL format to match LLVM.
...
llvm-svn: 85880
2009-11-03 07:25:45 +00:00
Benjamin Kramer
170a56f135
Add missing colons for FileCheck.
...
llvm-svn: 85683
2009-10-31 20:42:26 +00:00
Mike Stump
f3eb5ec2c0
Fix one more bug with __builtin_object_size.
...
llvm-svn: 85538
2009-10-29 23:34:20 +00:00
Mike Stump
dc28a8b997
Add yet more testcases.
...
llvm-svn: 85535
2009-10-29 23:29:54 +00:00
Mike Stump
eb5c92b399
Add some more testcases.
...
llvm-svn: 85534
2009-10-29 23:22:14 +00:00
Nuno Lopes
09bd8656c3
make clang emit undefs for padding of structs and unions instead of zeros. this enables constant compaction optimizations.
...
llvm-svn: 85504
2009-10-29 11:27:06 +00:00
Chris Lattner
08bb9ef7f7
make this interpretable.
...
llvm-svn: 85487
2009-10-29 05:25:27 +00:00
Chris Lattner
29fb551a36
make this more interesting, test the static const array.
...
llvm-svn: 85464
2009-10-29 01:20:34 +00:00
Douglas Gregor
05925031f7
Mangle based on the declaration we're given, not the canonical
...
declaration, since attributes that affect mangling may have been added
to subsequent declarations. However, to determine the linkage of the
declaration, we need to look at the canonical declaration. Fixes PR4412.
llvm-svn: 85400
2009-10-28 16:31:34 +00:00
Daniel Dunbar
c369d73405
Set OptimizeForSize LLVM function attribute with -Os.
...
llvm-svn: 85278
2009-10-27 19:48:08 +00:00
Daniel Dunbar
59ca7f1a1e
Convert test to FileCheck.
...
llvm-svn: 85277
2009-10-27 19:48:00 +00:00
Benjamin Kramer
59b7cf6a6d
Make test independent of darwin system headers.
...
llvm-svn: 85232
2009-10-27 12:19:13 +00:00
Mike Stump
5183a14bfb
__builtin_object_size refinements. Also handle stack based objects. WIP.
...
llvm-svn: 85174
2009-10-26 23:05:19 +00:00
Mike Stump
10bd7e1c5b
__builtin_object_size refinements. When we run out of object, be sure
...
to clamp at 0 bytes left. WIP.
llvm-svn: 85157
2009-10-26 21:38:39 +00:00
Edward O'Callaghan
72af806797
Convert a few tests to FileCheck for PR5307.
...
llvm-svn: 85154
2009-10-26 20:49:20 +00:00
Mike Stump
722cedfb0d
__builtin_object_size refinements. WIP.
...
llvm-svn: 85136
2009-10-26 18:35:08 +00:00
Mike Stump
9bb0059449
Add radar number.
...
llvm-svn: 84923
2009-10-23 02:13:20 +00:00
Mike Stump
ae2559a221
Fixup the return type of functions.
...
llvm-svn: 84922
2009-10-23 01:52:13 +00:00
Benjamin Kramer
53b4041151
Force triple; this test was failing on non-darwin platforms due to different
...
asm comment styles (## vs #).
llvm-svn: 84777
2009-10-21 19:59:43 +00:00
Devang Patel
e4f2b2a8ac
Encode global variable name in debug info.
...
llvm-svn: 84653
2009-10-20 18:26:30 +00:00
Nate Begeman
72eabcb5b1
Add test for OpenCL vector initializer codegen
...
llvm-svn: 84445
2009-10-18 21:04:35 +00:00
Chris Lattner
9b24e8aba6
daniel really wants this in the testsuite.
...
llvm-svn: 84354
2009-10-17 20:37:18 +00:00
John Thompson
146b025c39
Sorry! Accidentally checked in experimental change.
...
llvm-svn: 84183
2009-10-15 14:34:41 +00:00
Mike Stump
bf186694b0
Make this at least compile.
...
llvm-svn: 84167
2009-10-15 02:10:57 +00:00
John Thompson
3254182bfa
Removed math.h include, as Windows math.h has a compile error.
...
llvm-svn: 84160
2009-10-15 00:39:58 +00:00
Chris Lattner
4f8a2e22c0
fix some cfstring related issues:
...
1) -fwritable-string does affect the non-utf16 version of cfstrings
just not the utf16 ones.
2) utf16 strings should always be marked constant, as the __TEXT segment
is readonly.
3) The name of the global doesn't matter, remove it from TargetInfo.
4) Trust the asmprinter to drop cstrings into the right section, like llvmgcc does now.
This fixes rdar://7115750
llvm-svn: 84077
2009-10-14 05:55:45 +00:00
Chris Lattner
3eb172a02b
Teach sema and codegen about the difference between address of labels,
...
which is a common idiom to improve PIC'ness of code using the addr of
label extension. This implementation is a gross hack, but the only other
alternative would be to teach evalutate about this horrid combination.
While GCC allows things like "&&foo - &&bar + 1", people don't use this
in practice. This implements PR5131.
llvm-svn: 83957
2009-10-13 07:14:16 +00:00
Chris Lattner
9842a4dcb1
merge an indirect goto test into statements, add another
...
hairier (but nonsensical) example.
llvm-svn: 83951
2009-10-13 06:52:43 +00:00
Chris Lattner
f315471e24
fix PR4938 by recognizing % as a modifier on outputs,
...
previously we only recognized it on inputs.
llvm-svn: 83939
2009-10-13 04:32:07 +00:00
Devang Patel
232f278fc1
Disable tests that check debug info intrinsic. This does not work if debug info intrinsics are not used to encode debug info.
...
llvm-svn: 83929
2009-10-12 23:46:58 +00:00
Mike Stump
f8c1f0d1f0
Speed up testing by avoiding stdio.h, also helps testing on windows.
...
Patch by John Thompson.
llvm-svn: 83593
2009-10-08 23:05:06 +00:00
Mike Stump
03686660b1
In VC++, the *printf functions put an extra "0" in the exponent part
...
of a floating point number. This add regular expressions to account
for this. Patch by John Thompson.
llvm-svn: 83581
2009-10-08 21:57:41 +00:00
Mike Stump
c2eeac617d
Convert some tests to FileCheck to be more portable. Patch by John Thompson.
...
llvm-svn: 83578
2009-10-08 21:52:07 +00:00
Mike Stump
da6822f584
Add codegen for __builtin_abort. Convert to FileCheck.
...
llvm-svn: 83427
2009-10-06 22:58:45 +00:00
Chris Lattner
78a2e6356b
remove this test, grepping for define isn't really testing anything.
...
llvm-svn: 83325
2009-10-05 21:16:22 +00:00
Benjamin Kramer
80401b96c2
FileCheckize test case.
...
llvm-svn: 83244
2009-10-02 10:32:51 +00:00
Anders Carlsson
8a744ad8a6
Don't update the struct alignment when adding fields to a packed struct. Fixes PR5118.
...
llvm-svn: 83235
2009-10-02 04:52:12 +00:00
Anders Carlsson
39e3eb12ae
When building constant structs, check if the resulting LLVM struct will be bigger than the record layout size and use a packed struct if that's the case. Fixes PR5108.
...
llvm-svn: 83230
2009-10-02 02:15:20 +00:00
Douglas Gregor
3dc959f88b
Tweak CHECK lines to eliminate a failure on i686-apple-darwin10
...
llvm-svn: 83173
2009-09-30 21:39:51 +00:00
Chris Lattner
24440102aa
Convert from nonportable grep to filecheck, patch by John Thompson
...
llvm-svn: 83158
2009-09-30 19:55:07 +00:00
Anders Carlsson
e33eed5c1e
Set alignment on static function level decls and VLAs. Fixes PR5060.
...
llvm-svn: 82868
2009-09-26 18:16:06 +00:00
Daniel Dunbar
b3b1e53d33
Darwin/x86-32: Enumerated types and block pointer types in structures were not
...
handled correctly.
- <rdar://problem/7247671> Function arguments incorrect when function returns a
struct on i386 w/ llvm-g++ and clang
llvm-svn: 82681
2009-09-24 05:12:36 +00:00
Daniel Dunbar
1da76c4e58
Add ARM register names and aliases.
...
- Patch by Shantonu Sen!
<rdar://problem/6922650> clang doesn't know about ARM registers for inline asm clobber lists
llvm-svn: 82132
2009-09-17 07:03:19 +00:00
Daniel Dunbar
09d3362bf5
ARM/[A]APCS: Ignore empty records passed as arguments.
...
llvm-svn: 81798
2009-09-14 21:54:03 +00:00
Daniel Dunbar
ff0553ec61
Fix subtle bug in generating LLVM function declarations for builtin functions.
...
The decl wasn't being passed down, which meant that function attributes were not
being set correctly. This is particularly important for ARM, since it wants to
override the calling convention. Instead we would emit the builtin with the
wrong calling convention, and instcombine would come along and merrily shred all
the calls to it. :)
llvm-svn: 81756
2009-09-14 04:33:21 +00:00
Daniel Dunbar
d53bac7fa4
ARM/APCS: Don't treat structs w/ floating point types as "integer like".
...
llvm-svn: 81748
2009-09-14 02:20:34 +00:00
Daniel Dunbar
1ce7251a0a
Some minor clang/ARM/AAPCS tweaks.
...
llvm-svn: 81737
2009-09-14 00:56:55 +00:00
Daniel Dunbar
b4091a9c6a
Add TargetInfo::getABI(), and base ARM APCS vs AAPCS choice on that.
...
llvm-svn: 81735
2009-09-14 00:35:03 +00:00
Anders Carlsson
ccbabc9645
Fix another byref bug. This should hopefully get QuickLookPlugins building successfully.
...
llvm-svn: 81681
2009-09-13 17:55:13 +00:00
Daniel Dunbar
626f1d8c3a
ARM/APCS: Only "integer like" aggregates should be returned in r0 (following
...
gcc's interpretation of APCS' somewhat loose specification).
llvm-svn: 81671
2009-09-13 08:03:58 +00:00
Douglas Gregor
299d76e901
Rework the way we determine whether an externally visible symbol is
...
generated for an inline function definition, taking into account C99
and GNU inline/extern inline semantics. This solution is simpler,
cleaner, and fixes PR4536.
llvm-svn: 81670
2009-09-13 07:46:26 +00:00
Daniel Dunbar
0482cfd790
Don't use the PredefinedExpr string as the global variable name, these don't
...
make very nice symbols, just use the function name.
llvm-svn: 81653
2009-09-12 23:06:21 +00:00
Anders Carlsson
f8e94f2008
Add support for __block variables with alignment greater than __alignof(void *).
...
llvm-svn: 81602
2009-09-12 02:44:18 +00:00
Daniel Dunbar
020daa9476
Stub out room for ARM APCS ABI implementation (and AAPCS_VFP, although you can't
...
hit this via command line options yet).
llvm-svn: 81595
2009-09-12 01:00:39 +00:00
Dan Gohman
0533ffa2a6
Update this test to expect the "inbounds" keyword, which LLVM's constant
...
folder is now automatically adding.
llvm-svn: 81491
2009-09-11 00:27:06 +00:00
Anders Carlsson
10f2c10b83
Make the forwarding member of block byref structs be a pointer to the block byref struct itself.
...
llvm-svn: 81423
2009-09-10 01:32:12 +00:00
Mike Stump
11289f4280
Remove tabs, and whitespace cleanups.
...
llvm-svn: 81346
2009-09-09 15:08:12 +00:00
Chris Lattner
6426345b8f
convert this to filecheck, hopefully it will fix PR4888. If nothing
...
else it will make tests run faster and make 4888 easier to diagnose.
llvm-svn: 81238
2009-09-08 18:43:45 +00:00
Anders Carlsson
2fb0824197
Vastly improve PredefinedExpr output, both in Sema and CodeGen. Patch by Sam Weinig!
...
llvm-svn: 81237
2009-09-08 18:24:21 +00:00
Anders Carlsson
0e91275ab4
If the alignment of the chosen field in a union is greater than the alignment of the union, we need to use a packed LLVM struct. Fixes <rdar://problem/7184250>.
...
llvm-svn: 80964
2009-09-03 22:56:02 +00:00
Anders Carlsson
09a3774cd3
Packed unions should be packed. Fixes an assert Daniel reported.
...
llvm-svn: 80808
2009-09-02 17:51:33 +00:00
Eli Friedman
1c277d0fe8
PR4836, part 2: CodeGen for __builtin_isnan.
...
llvm-svn: 80655
2009-09-01 04:19:44 +00:00
Chris Lattner
7ef882dca0
convert to filecheck and force a triple so that this passes on big
...
endian hosts. Fixes PR4792
llvm-svn: 80301
2009-08-27 23:22:19 +00:00
Eli Friedman
95f896380f
Make address-space qualification work correctly for compound literals.
...
Issue reported on cfe-dev.
Also fixed the code to use isConstant to determine whether to generate a
constant global, to be consistent with CodeGenModule. This probably
needs to be refactored to deal with C++, though.
llvm-svn: 80131
2009-08-26 20:01:39 +00:00
Dan Gohman
a98e0e73de
Update clang for raw_fd_ostream no longer requiring F_Force.
...
llvm-svn: 79991
2009-08-25 15:36:09 +00:00
Daniel Dunbar
87db734400
Fix a few tests to be -Asserts agnostic.
...
- Ugh.
llvm-svn: 79860
2009-08-23 19:28:59 +00:00
Daniel Dunbar
2a4061929f
Fix some made up triples.
...
llvm-svn: 79316
2009-08-18 05:30:27 +00:00
Eli Friedman
c0f6d44ef6
Make test a bit more precise.
...
llvm-svn: 79073
2009-08-15 03:35:55 +00:00
Eli Friedman
04fddf0d1f
Fix for PR4721: adjust CodeGen and ASTContext so that we have a
...
consistent model for handling size expressions for VLAs.
The model is essentially as follows: VLA types own their associated
expression. In some cases, we need to create multiple VLA types to
represent a given VLA (for canonical types, or qualifiers on array types,
or type merging). If we need to create multiple types based off of
the same VLA declaration, we use the new refcounting functionality so they can
all own the expression. The VLASizeMap in CodeGenFunction then uses the size
expression to identify the group of VLA types based off of the same original
declaration.
I'm not particularly attached to the VLA types owning the expression,
but we're stuck with at least until someone comes up with a way
to walk the VLA expressions for a declaration.
I did the parallel fix in ASTContext for DependentSizedArrayType, but I
haven't really looked closely at it, so there might still be issues
there.
I'll clean up the code duplication in ASTContext in a followup commit.
llvm-svn: 79071
2009-08-15 02:50:32 +00:00
Daniel Dunbar
e5515289fa
Update test
...
llvm-svn: 78877
2009-08-13 01:27:45 +00:00
Daniel Dunbar
d362857f4c
Update test case.
...
llvm-svn: 78699
2009-08-11 18:37:40 +00:00
Chris Lattner
2375952a47
these tests include section specifiers that aren't valid on the
...
mac, use an explicit triple.
llvm-svn: 78583
2009-08-10 18:56:44 +00:00
Anders Carlsson
e139f868b7
Add tests.
...
llvm-svn: 78491
2009-08-08 19:43:14 +00:00
Chris Lattner
f49573d1ee
weak globals that are const should get weak_odr linkage.
...
add a fixme about C++ const.
llvm-svn: 78159
2009-08-05 05:20:29 +00:00
Chris Lattner
c0693bc2ea
rdar://7119244 - globals with an explicit section specified don't get
...
common linkage.
llvm-svn: 78158
2009-08-05 04:56:58 +00:00
Anders Carlsson
5638895b2a
Revert the fix for PR3800, it broke things.
...
llvm-svn: 78084
2009-08-04 18:18:36 +00:00
Daniel Dunbar
e9863976b3
Fix test case for Darwin10 (which sets ssp), and move to CodeGen/
...
llvm-svn: 78049
2009-08-04 04:38:31 +00:00
Daniel Dunbar
4d93a4f9d4
Make sure UTF-16 strings end with a 16-bit null (as opposed to 8-bit).
...
llvm-svn: 78001
2009-08-03 21:47:08 +00:00
Anders Carlsson
7df966e040
Don't evaluate inout constraints twice. Fixes PR3800.
...
llvm-svn: 77854
2009-08-02 03:40:19 +00:00
Eli Friedman
62561fe9b0
Fix a minor issue with unions in the new struct building code.
...
llvm-svn: 77829
2009-08-01 23:11:24 +00:00
Devang Patel
fe6bbd1145
New test case for rev. 77694.
...
llvm-svn: 77698
2009-07-31 18:24:12 +00:00
Anders Carlsson
72fb384a65
Enable the new struct type builder now that the constant struct builder works. (The old code will still be there until we know that everything works well.
...
llvm-svn: 77190
2009-07-27 15:31:55 +00:00
Anders Carlsson
b7130ed888
Enable the new constant struct builder by default. The old code is still in place but will be removed shortly. The new struct builder works on big endian systems.
...
llvm-svn: 77185
2009-07-27 05:54:15 +00:00
Mike Stump
8c5d7996e8
Add noreturn as a type attribute, handle printing for them and handle
...
calls to noreturn function pointers when CFG building.
llvm-svn: 77089
2009-07-25 21:26:53 +00:00
Daniel Dunbar
6d8adef9a0
Remove empty tests, left over from an svn revert.
...
llvm-svn: 77068
2009-07-25 12:41:25 +00:00
Daniel Dunbar
97ea867690
MultiTestRunner: Validate '&&' at the end of RUN lines.
...
- This is just to normalize, these will go away soon hopefully.
Added all the missing '&&'s that have crept in. :)
llvm-svn: 77062
2009-07-25 11:27:37 +00:00
John McCall
02dee0a46a
Semantic checking for main().
...
Fix some invalid main() methods in the test suite that were nicely
exposed by the new checks.
llvm-svn: 77047
2009-07-25 04:36:53 +00:00
Mike Stump
8e79f99b16
Implement new warning for functions declared 'noreturn' when they fall off the end.
...
llvm-svn: 76932
2009-07-24 02:49:01 +00:00
Daniel Dunbar
91ade14197
Output UTF-16 string literals independent of host byte order.
...
- Steve, can you take a look at this? It seems like this code should live
elsewhere, and there is a FIXME about having Sema validates the UTF-8 to
UTF-16 conversion.
llvm-svn: 76915
2009-07-23 23:41:22 +00:00
Anders Carlsson
516e5e7835
Correct a thinko in bitfield layout code. Fixes PR4611.
...
llvm-svn: 76898
2009-07-23 21:16:33 +00:00
Anders Carlsson
d78fc89fcb
We don't need to keep track of the packed alignment, just whether the struct is packed or not. Fixes PR4610.
...
llvm-svn: 76884
2009-07-23 17:24:40 +00:00
Anders Carlsson
718a89a501
Use arrays as union padding. Also, since the resulting struct will always contain a single element and either a single i8 element or an array of i8s, there's no reason to use a packed struct.
...
llvm-svn: 76854
2009-07-23 04:50:01 +00:00
Eli Friedman
5ac69057c0
Make vectorized floating-point comparisons work without crashing.
...
llvm-svn: 76726
2009-07-22 06:07:16 +00:00
Mon P Wang
acedf7768f
Preserve address space information through member accesses, e.g.,
...
__attribute__((address_space(1))) struct {int arr[ 3 ]; } *p1;
... = p1->arr[2]; // load from address space 1
llvm-svn: 76717
2009-07-22 03:08:17 +00:00
Mike Stump
5c1acd1f33
Revert this, was a bug in my new warning code, not the test case.
...
llvm-svn: 76690
2009-07-21 23:50:15 +00:00
Mike Stump
5e7869f63e
Prep for new warning.
...
llvm-svn: 76638
2009-07-21 20:52:43 +00:00
Daniel Dunbar
c3ab4c6c98
Detect when the current generation point is unreachable after emitting
...
expressions.
- This generally catches the important case of noreturn functions.
- With the last two changes, we are down to 152 unreachable blocks emitted on
403.gcc, vs the 1805 we started with.
llvm-svn: 76364
2009-07-19 08:23:12 +00:00
Daniel Dunbar
b6adc43f6e
Avoid generation of dead code in a few more situations.
...
- Emit variable declarations as "simple", we want to avoid forcing the creation
of a dummy basic block, but still need to make the variable available for
later use.
- With that, we can now skip IRgen for other unreachable statements (which
don't define a label).
- Anders, I added two fixmes on calls to EmitVLASize, can you check them?
llvm-svn: 76361
2009-07-19 06:58:07 +00:00
Chris Lattner
3afa3e1d91
codegen string literals using private linkage now like llvm-gcc, eliminating
...
some target hooks.
llvm-svn: 75895
2009-07-16 05:03:48 +00:00
Chris Lattner
2a7deb64c0
reimplement vector comparisons as [fi]cmp+sext instead of using v[if]cmp.
...
Also, enable them in sema so that they are tested, and now that the x86 backend
has stablized.
llvm-svn: 74983
2009-07-08 01:08:03 +00:00
Chris Lattner
877a48e67a
make these tests pass with the stack canary stuff even on targets where they default to on.
...
llvm-svn: 74412
2009-06-28 19:49:49 +00:00
Bill Wendling
d63bbadbef
Add stack protector support to clang. This generates the 'ssp' and 'sspreq'
...
function attributes. There are predefined macros that are defined when stack
protectors are used: __SSP__=1 with -fstack-protector and __SSP_ALL__=2 with
-fstack-protector-all.
llvm-svn: 74405
2009-06-28 07:36:13 +00:00
Devang Patel
0d425350b2
Revrt PR4228 fix for now.
...
llvm-svn: 74304
2009-06-26 18:32:22 +00:00
Chris Lattner
4c8da96ea9
fix PR4423.
...
llvm-svn: 73938
2009-06-23 01:38:41 +00:00
Eli Friedman
c619d6fab5
Add a target triple to a couple of tests which depend on it. Reported
...
by Mark Cianciosa on cfe-dev.
llvm-svn: 73672
2009-06-18 02:04:19 +00:00
Devang Patel
9fc4341eec
It is possible that main input file does not have any symbol with debug info. To handle this edge case, always create main compile unit first.
...
This fixes PR 4228.
llvm-svn: 73520
2009-06-16 18:02:02 +00:00
Chris Lattner
943658f00b
testcase for r72869, it turns out that it happens in Ruby.
...
llvm-svn: 73514
2009-06-16 17:39:02 +00:00
Eli Friedman
6282b3cff8
PR4390: Make sure to handle anonymous unions correctly while building
...
static intializers for structs.
llvm-svn: 73349
2009-06-14 21:41:37 +00:00
Eli Friedman
3192cc8526
Fix the calling convention for structs/unions containing SSE vectors on
...
x86-32. This is slightly messy, but I think it's consistent with gcc.
llvm-svn: 73306
2009-06-13 21:37:10 +00:00
Chris Lattner
4ca97c3b9e
Fix PR4372, another case where non-prototyped functions can prevent
...
always_inline from working.
llvm-svn: 73273
2009-06-13 00:26:38 +00:00
Daniel Dunbar
fd262b4a62
Fix test, which could miss failures, and also avoid leaving temporary .i file in
...
source directory.
llvm-svn: 73094
2009-06-08 22:44:26 +00:00
Daniel Dunbar
eed62b7c4b
Add stack alignment to x86_64 target data.
...
- <rdar://problem/6948443> WARNING: Linking two modules of different data
layouts!
llvm-svn: 73093
2009-06-08 22:39:13 +00:00
Eli Friedman
e9ff191459
Remove a few more vector builtins.
...
llvm-svn: 73022
2009-06-07 09:32:56 +00:00
Eli Friedman
5a996fc0fc
Now that LLVM CodeGen can handle the generic variations a bit better,
...
get rid of a few more clang vector builtins.
llvm-svn: 73015
2009-06-07 07:12:56 +00:00
Eli Friedman
07bbeca406
PR4339: make sure to properly extend/trunc the index of a vector element
...
insert/extract; the relevant instructions are defined to take only an
i32.
llvm-svn: 73005
2009-06-06 19:09:26 +00:00
Eli Friedman
5f75ff84b7
Test changes to account for removed builtins.
...
llvm-svn: 73004
2009-06-06 18:15:42 +00:00
Daniel Dunbar
feeeda70e2
weak_import should not make definitions have weak linkage.
...
- <rdar://problem/6948703> clang treats weak_import like weak
llvm-svn: 72967
2009-06-05 22:58:34 +00:00
Daniel Dunbar
4be99ff767
ABI handling: Fix nasty thinko where IRgen could generate an out-of-bounds read
...
when generating a coercion for ABI handling purposes.
- This may only manifest itself when building at -O0, but the practical effect
is that other arguments may get clobbered.
- <rdar://problem/6930451> [irgen] ABI coercion clobbers other arguments
llvm-svn: 72932
2009-06-05 07:58:54 +00:00
Eli Friedman
dd27484888
PR4316: Fix IRGen for cast-to-union extension.
...
llvm-svn: 72803
2009-06-03 20:45:06 +00:00
Daniel Dunbar
877b30f83c
Driver: Support -mllvm; this just forwards options to clang-cc.
...
llvm-svn: 72780
2009-06-03 16:16:27 +00:00
Daniel Dunbar
4b665ebb01
Add clang-cc support for -disable-llvm-optzns.
...
- Avoids running any LLVM optimizations, even at -O2, etc., while still keeping
any language changes these optimizations imply.
llvm-svn: 72742
2009-06-02 22:07:45 +00:00
Eli Friedman
cb9d07caeb
Add support for __builtin_unwind_init.
...
Also, committing an #if 0'ed __builtin_setjmp and __builtin_longjmp
implementation I've had sitting in my tree for a while. I haven't
enabled it because the LLVM backend support isn't complete yet.
llvm-svn: 72727
2009-06-02 09:37:50 +00:00
Eli Friedman
e32c02114f
PR4289: Make sure "&func" has the right LLVM type when "func" is a
...
K&R-style definition.
llvm-svn: 72690
2009-06-01 10:04:20 +00:00
Eli Friedman
202a68a917
Simplify run line.
...
llvm-svn: 72687
2009-06-01 08:55:08 +00:00
Mike Stump
2346cd2a10
Improve __builtin_nanf support; we now can deal with them as constants.
...
llvm-svn: 72607
2009-05-30 03:56:50 +00:00
Eli Friedman
9444638e4e
Re-add a slightly more general version of the check from r72578; it is
...
actually necessary in some obscure cases.
llvm-svn: 72585
2009-05-29 19:23:46 +00:00
Mike Stump
de83126b80
We don't want to validate bad code,
...
llvm-svn: 72574
2009-05-29 16:24:13 +00:00
Mike Stump
f9f89a3fee
Note another case that doesn't work yet.
...
llvm-svn: 72573
2009-05-29 16:12:36 +00:00
Mike Stump
df0fe27b66
Fixup the rest of the trivial cases of the codegen of volatile. If
...
any body can spot codegen bugs with volatile, or knows of any in the
bug database, let me know.
llvm-svn: 72572
2009-05-29 15:46:01 +00:00
Eli Friedman
2a69547f38
PR4281: Fix bogus CodeGen assertion. The issue is that
...
getUnqualifiedType() doesn't strip off all qualifiers for non-canonical
types.
llvm-svn: 72552
2009-05-28 23:04:00 +00:00
Daniel Dunbar
16f422ec86
Fix a use-of-undefined, IRgen expects the RValue for "void" to be a scalar RValue.
...
llvm-svn: 72504
2009-05-27 23:45:33 +00:00
Mike Stump
de79ea2f51
Update comment.
...
llvm-svn: 72444
2009-05-26 23:35:31 +00:00
Mike Stump
6adbd62790
And an additional testcase that also works.
...
llvm-svn: 72441
2009-05-26 23:10:55 +00:00
Mike Stump
ec3cbfe8c6
Fixup codegen for volatile structs in the trivial cases (a a=a and a=a=a).
...
llvm-svn: 72439
2009-05-26 22:03:21 +00:00
Daniel Dunbar
1518b64ddc
When trying to pass an argument on the stack, assume LLVM will do the right
...
thing for non-aggregate types.
- Otherwise we unnecessarily pin values to the stack and currently end up
triggering a backend bug in one case.
- This loose cooperation with LLVM to implement the ABI is pretty ugly.
- <rdar://problem/6918722> [irgen] clang miscompile of many pointer varargs on
x86-64
llvm-svn: 72419
2009-05-26 16:37:37 +00:00
Eli Friedman
895771aa4b
Handle the edge case of a weak function with incomplete type correctly.
...
Found by code inspection; I haven't seen this in real-world code.
llvm-svn: 72408
2009-05-26 01:22:57 +00:00
Mike Stump
c63428b192
Fixup codegen for __block int i; i += rhs();. Should also slightly
...
improve codegen in some cases.
llvm-svn: 72273
2009-05-22 19:07:20 +00:00
Daniel Dunbar
499f3f9c5d
x86_64 ABI: Account for sret parameters consuming an integer register.
...
- PR4242.
llvm-svn: 72268
2009-05-22 17:33:44 +00:00
Torok Edwin
5b34933b90
Set correct calling convention even if there is a bitcast in the way.
...
This attempts to fix PR4239.
llvm-svn: 72251
2009-05-22 07:25:06 +00:00
Mike Stump
aed08f9929
Fixup blocks codegen for { __block i; i = rhs(); }, we want the rhs
...
evaluated first. This can also improve codegen just a bit as we might
have another register to play with for the evaluation of the rhs.
llvm-svn: 72226
2009-05-21 21:05:15 +00:00
Daniel Dunbar
018958d94d
Update test
...
llvm-svn: 72110
2009-05-19 16:09:59 +00:00
Eli Friedman
45966b4671
Remove the -arch option from clang-cc: for all practical purposes, it's
...
redundant with -triple.
llvm-svn: 72108
2009-05-19 11:12:40 +00:00
Anders Carlsson
8dd2947696
Remove an unused builtin.
...
llvm-svn: 72033
2009-05-18 19:25:54 +00:00
Anders Carlsson
2081200b8c
Add 'cmp' SSE builtins and get rid of a bunch of other builtins.
...
llvm-svn: 72032
2009-05-18 19:16:46 +00:00
Daniel Dunbar
2daacd1f08
Avoid generating temp in source directory
...
llvm-svn: 71776
2009-05-14 17:00:11 +00:00
Daniel Dunbar
ffdb8439d7
ABI handling: Fix invalid assertion, it is possible for a valid
...
coercion to be specified which truncates padding bits. It would be
nice to still have the assert, but we don't have any API call for the
unpadding size of a type yet.
llvm-svn: 71695
2009-05-13 18:54:26 +00:00
Chris Lattner
afde259240
implement __sync_synchronize and __sync_lock_release,
...
rdar://6880573
llvm-svn: 71637
2009-05-13 04:46:13 +00:00
Chris Lattner
e541ea3a61
implement l-value codegen of comma expr
...
llvm-svn: 71595
2009-05-12 21:28:12 +00:00
Daniel Dunbar
bbfd054746
Darwin x86-32 ABI: Now that structure passing is farther along, we
...
don't need special treatment for unions.
llvm-svn: 71559
2009-05-12 17:00:20 +00:00
Daniel Dunbar
203e2e8dd8
x86-64 ABI: clang incorrectly passes union { long double, float } in
...
register.
- Merge algorithm was returning MEMORY as it should.
llvm-svn: 71556
2009-05-12 15:22:40 +00:00
Daniel Dunbar
097353cbb5
Darwin x86-32: Multi-dimensional arrays were not handled correctly,
...
spotted by Eli!
llvm-svn: 71490
2009-05-11 23:01:34 +00:00
Daniel Dunbar
e92449e4cc
Make cleanup-stack.c test stronger, and work in release-asserts mode.
...
llvm-svn: 71484
2009-05-11 22:30:29 +00:00
Daniel Dunbar
2ce6b3f91c
Darwin x86_32: Treat records with unnamed bit-fields as "empty".
...
llvm-svn: 71461
2009-05-11 18:58:49 +00:00
Chris Lattner
da38fda583
force a target triple so that the right greppable output happens.
...
llvm-svn: 71361
2009-05-09 17:36:58 +00:00
Daniel Dunbar
b997f3bcc3
x86_64 ABI: Ignore padding bit-fields during classification.
...
- {return-types,single-args}-{32,64} pass the first 1k ABI tests with
bit-fields enabled.
llvm-svn: 71272
2009-05-08 22:26:44 +00:00
Daniel Dunbar
4752783057
Darwin x86_32: When coercing a "single element" structure, make sure
...
to use a wide enough type. This might be wider than the "single
element"'s type in the presence of padding bit-fields.
- Darwin x86_32 now passes the first 1k ABI tests with bit-field
generation enabled.
llvm-svn: 71270
2009-05-08 21:30:11 +00:00
Daniel Dunbar
fdda3501a0
Darwin x86_32: Ignore padding bit-fields when looking for "single
...
element" structures.
llvm-svn: 71266
2009-05-08 21:04:47 +00:00
Daniel Dunbar
4861346c44
Darwin x86_32: Improve bit-field handling for returning records.
...
- This turns out to be a no-op now that most of the handling for
everything else is in place.
llvm-svn: 71261
2009-05-08 20:55:49 +00:00
Daniel Dunbar
85f4028f2e
Darwin x86_32: Ignore arrays of empty structures inside records.
...
- This eliminates 5/1000 failures on return-types-32, on the current
ABITest config.
llvm-svn: 71250
2009-05-08 20:21:04 +00:00
Chris Lattner
5b9241b2a6
Fix the atomics sema code to convert operands to the argument types
...
of the underlying _N builtin, not the the type of the pointee of the
actual type. This ensures that atomics involving pointers end up
using the correct integer type when they are resolved, avoiding
aborts in codegen.
llvm-svn: 71218
2009-05-08 15:36:58 +00:00
Chris Lattner
dc04654697
reimplement __sync_* builtins to be variadic and to follow the same
...
semantic rules that gcc and icc use. This implements the variadic
and concrete versions as builtins and has sema do the
disambiguation. There are probably a bunch of details to finish up
but this seems like a large monotonic step forward :)
llvm-svn: 71212
2009-05-08 06:58:22 +00:00
Eli Friedman
7ce29a18e1
Fix crash with constant initialization of bit-fields in unions.
...
llvm-svn: 71194
2009-05-07 23:42:42 +00:00
Daniel Dunbar
4dbaaa6f43
Improve handling of (X86) target features.
...
- This is a WIP...
- This adds -march= handling to the driver, and fixes the defaulting
of -mcpu on Darwin (which was using the wrong test).
Instead of handling -m{sse, ...} in the driver, pass them to clang-cc as
-target-feature [+-]name
In clang-cc, communicate with the (clang) target to discover the legal
features of a target, and the features which are enabled based on
-mcpu. This is currently hardcoded just enough to not be a feature
regression, we need to get this information from the backend's
TableGen information somehow.
This is used to construct the full list of features which are being
used, which is in turn used to initialize the predefines.
llvm-svn: 71061
2009-05-06 03:16:41 +00:00
Chris Lattner
36797ab251
When defining a function whose type has no prototype, make an effort
...
to go back and clean up existing uses of the bitcasted function. This
is not just an optimization: it is required for correctness to get
always inline functions to work, see testcases in function-attributes.c.
llvm-svn: 70971
2009-05-05 06:16:31 +00:00
Eli Friedman
2ad7e17096
PR4143: don't crash generating debug info for incomplete enum types.
...
llvm-svn: 70825
2009-05-04 04:39:55 +00:00
Eli Friedman
5b73b5e197
PR4134: Implement __builtin_extract_return_addr.
...
llvm-svn: 70794
2009-05-03 19:23:23 +00:00
Eli Friedman
c0042d804c
PR4133: fix always_inline implementation to be consistent with gcc.
...
llvm-svn: 70786
2009-05-03 18:13:43 +00:00
Chris Lattner
61af27860d
look at the right operand when increasing the size of an asm output,
...
this fixes http://llvm.org/bugs/show_bug.cgi?id=3373#c20
llvm-svn: 70685
2009-05-03 09:05:53 +00:00
Chris Lattner
cc1cde9c57
allow references to the larger value in a tied constraint
...
from the asm string, but reject references to the smaller one.
llvm-svn: 70679
2009-05-03 08:32:32 +00:00
Chris Lattner
59c3a9cd54
add support for tying asm operands where the result is smaller than
...
the input. This is part of PR3373.
llvm-svn: 70677
2009-05-03 08:21:20 +00:00
Daniel Dunbar
c7121faa71
Remove typo
...
llvm-svn: 70676
2009-05-03 08:00:14 +00:00
Chris Lattner
10f221f321
implement support for asm outputs targetting non-simple lvalue destinations
...
like bitfields. incidentally llvm-gcc crashes on this sort of thing also. :)
llvm-svn: 70675
2009-05-03 07:53:25 +00:00
Chris Lattner
b65933eaa2
handle codegen of asms where a small input is tied to a large output.
...
llvm-svn: 70672
2009-05-03 07:27:51 +00:00
Douglas Gregor
8d9c509975
Implement bit-field promotion rules for C99. Fixes PR3500.
...
llvm-svn: 70571
2009-05-01 20:41:21 +00:00
Douglas Gregor
72a57b89aa
Add testcase that illustrates the problem from r69699 regarding tentative definitions of statics
...
llvm-svn: 70543
2009-05-01 15:45:53 +00:00
Mike Stump
d898026e8a
Don't assert when we think we need copy/dispose, but don't need them.
...
Radar 6838889
llvm-svn: 70525
2009-05-01 01:31:57 +00:00
Anders Carlsson
b4e463287e
Don't use indirect memory destinations for inline asm. Fixes 6841383.
...
llvm-svn: 70523
2009-05-01 00:16:04 +00:00
Eli Friedman
902fddd1cf
Fix for PR4108: be a bit looser with the casts that we accept in
...
constant initializers.
llvm-svn: 70483
2009-04-30 07:03:22 +00:00
Chris Lattner
7d4f5c47ce
only support int128_t on 64-bit and larger targets. 32-bit targets don't
...
have support for __divti3 and friends.
llvm-svn: 70480
2009-04-30 06:18:40 +00:00
Chris Lattner
f122cef4df
initial support for __[u]int128_t, which should be basically
...
compatible with VC++ and GCC. The codegen/mangling angle hasn't
been fully ironed out yet. Note that we accept int128_t even in
32-bit mode, unlike gcc.
llvm-svn: 70464
2009-04-30 02:43:43 +00:00
Douglas Gregor
76fe50c654
Improve compatibility with GCC regarding inline semantics in GNU89
...
mode and in the presence of __gnu_inline__ attributes. This should fix
both PR3989 and PR4069.
As part of this, we now keep track of all of the attributes attached
to each declaration even after we've performed declaration
merging. This fixes PR3264.
llvm-svn: 70292
2009-04-28 06:37:30 +00:00
Eli Friedman
2b680b43e9
Simplify the scheme used for keywords, and change the classification
...
scheme to be more useful.
The new scheme introduces a set of categories that should be more
readable, and also reflects what we want to consider as an extension
more accurately. Specifically, it makes the "what is a keyword"
determination accurately reflect whether the keyword is a GNU or
Microsoft extension.
I also introduced separate flags for keyword aliases; this is useful
because the classification of the aliases is mostly unrelated to the
classification of the original keyword.
This patch treats anything that's in the implementation
namespace (prefixed with "__", or "_X" where "X" is any upper-case
letter) as a keyword without marking it as an extension. This is
consistent with the standards in that an implementation is allowed to define
arbitrary extensions in the implementation namespace without violating
the standard. This gets rid of all the nasty "extension used" warnings
for stuff like __attribute__ in -pedantic mode. We still warn for
extensions outside of the the implementation namespace, like typeof.
If someone wants to implement -Wextensions or something like that, we
could add additional information to the keyword table.
This also removes processing for the unused "Boolean" language option;
such an extension isn't supported on any other C implementation, so I
don't see any point to adding it.
The changes to test/CodeGen/inline.c are required because previously, we
weren't actually disabling the "inline" keyword in -std=c89 mode.
I'll remove Boolean and NoExtensions from LangOptions in a follow-up
commit.
llvm-svn: 70281
2009-04-28 03:13:54 +00:00
Daniel Dunbar
01910a50c4
x86-32 ABI: Fix crash on return of structure with flexible array
...
member.
Also, spell bitfield more consistently as bit-field.
llvm-svn: 70220
2009-04-27 18:31:32 +00:00
Anders Carlsson
6f5c15688d
When calling the cleanup function specified by __attribute__((cleanup)), make sure to bitcast the argument so it has the same type as the first argument of the cleanup function. Fixes <rdar://problem/6827047>.
...
llvm-svn: 70098
2009-04-26 00:34:20 +00:00
Chris Lattner
a4185c543e
fix PR4067: [Linux kernel] cannot aggregate codegen stmtexpr as lvalue
...
llvm-svn: 70067
2009-04-25 19:35:26 +00:00
Douglas Gregor
89c8e000cf
Fix handling of C99 "extern inline" semantics when dealing with
...
multiple declarations of the function. Should fix PR3989 and
<rdar://problem/6818429>.
llvm-svn: 69905
2009-04-23 18:22:55 +00:00
Devang Patel
a6acb390e7
Handle corner case where clang-cc is invoked directly to compile preprocessed source file without -main-file-name. In this case, CDDebugInfo is not able identify correct main source file becase SM.isFromMainFile() returns true for locations from header files as well as locations from main source file.
...
This patch takes conservative approach by not emitting more then one compile unit with isMain bit set.
llvm-svn: 69902
2009-04-23 18:09:16 +00:00
Chris Lattner
f8dc07369a
Fix some mishandling of the attr(gnu_inline) mode when used with
...
extern. Previously we would warn about it and ignore the attribute.
This is incorrect, it should be handled as a c89 "extern inline"
function. Many thanks to Matthieu Castet for pointing this out and
beating me over the head until I got it.
PR3988: extern inline function are not externally visible
llvm-svn: 69756
2009-04-22 00:03:30 +00:00
Chris Lattner
2f343dd5c8
fix PR4026: Clang can't codegen __func__ without implicit cast
...
llvm-svn: 69747
2009-04-21 23:00:09 +00:00
Chris Lattner
a9aeea9f27
use of predefined identifiers like __func__ at global scope warn in sema,
...
but crashed codegen. Fix this to report the name of the llvm function.
This fixes rdar://6808051
llvm-svn: 69658
2009-04-21 04:41:23 +00:00
Chris Lattner
ddf6ca0355
the __gnuc_inline__ attribute is actually named __gnu_inline__,
...
PR4023
llvm-svn: 69618
2009-04-20 19:12:28 +00:00
Devang Patel
45dfbd16b0
Add test case to check line number in debug info.
...
llvm-svn: 69617
2009-04-20 19:07:55 +00:00
Eli Friedman
bc633beda4
PR3247: Handle a couple of cases where we weren't emitting VLA sizes (and
...
subsequently crashed).
llvm-svn: 69567
2009-04-20 03:54:15 +00:00
Eli Friedman
3253e189c6
PR3248: Make sure the evaluate the operand of a sizeof when it has a VLA type.
...
Adapted from patch by Tim Northover.
llvm-svn: 69566
2009-04-20 03:21:44 +00:00
Eli Friedman
daea3f62b5
Print an error for uses of __thread on targets which don't support it.
...
llvm-svn: 69553
2009-04-19 21:48:33 +00:00
Eli Friedman
4f856744e5
PR3853: Add CodeGen support for __thread.
...
llvm-svn: 69545
2009-04-19 21:05:03 +00:00
Chris Lattner
c2e868fd14
fix incorrect lowering of __builtin_ia32_shufpd, rdar://6803924
...
llvm-svn: 69428
2009-04-18 07:01:54 +00:00
Chris Lattner
032f7665d0
rename file.
...
llvm-svn: 69427
2009-04-18 07:00:54 +00:00
Chris Lattner
85e4dd4055
don't dump .ll file in this dir.
...
llvm-svn: 69426
2009-04-18 07:00:06 +00:00
Daniel Dunbar
c3e7cff6d3
Attributes on block functions were not being set.
...
- <rdar://problem/6800351> clang not producing correct large struct
return code for Blocks
llvm-svn: 69337
2009-04-17 00:48:04 +00:00
Daniel Dunbar
426b5cf16a
Ensure that the most recent declaration of a tentative definition wins
...
when generating a common definition.
llvm-svn: 69287
2009-04-16 15:34:14 +00:00
Daniel Dunbar
7dd749e6fd
Defer generation of tentative definitions.
...
- PR3980.
- <rdar://problem/6762287> [irgen] crash when generating tentative
definition of incomplete structure
- This also avoids creating common definitions for things which are
later overwritten.
- XFAIL'ed external-defs.c, it isn't completing types properly yet.
llvm-svn: 69231
2009-04-15 22:08:45 +00:00
Devang Patel
9074ed8c6a
Set DebugInfo at the beginning of GenerateBlockFunction().
...
llvm-svn: 69228
2009-04-15 21:51:44 +00:00
Chris Lattner
e94e13ca35
remove #include of system header, making this a) not apple specific, and
...
b) test dramatically faster.
llvm-svn: 69135
2009-04-15 04:26:10 +00:00
Chris Lattner
bae0e68930
Fix PR3988: extern inline functions get strong symbol definitions in
...
C99 mode. This is a regression from an earlier patch of mine.
This also simplifies the linkage enums a bit.
llvm-svn: 69069
2009-04-14 20:25:53 +00:00
Chris Lattner
02e987f3e8
implement codegen support for __attribute((__gnuc_inline__)),
...
pulling some attribute munging stuff into GetLinkageForFunction.
This should fix PR3986
llvm-svn: 69045
2009-04-14 16:44:36 +00:00
Chris Lattner
92028dad66
defer emission of always_inline, extern_inline, and inline functions (when
...
not in c89 mode).
llvm-svn: 69032
2009-04-14 06:44:48 +00:00
Chris Lattner
256c9507c8
set the linkage of an inline function according to its language rules.
...
llvm-svn: 69030
2009-04-14 06:27:57 +00:00
Steve Naroff
e4e55d2706
Fix crasher in ASTContext::getObjCEncodingForMethodDecl().
...
This was exposed as a result of something else that was recently fixed.
llvm-svn: 69004
2009-04-14 00:03:58 +00:00
Steve Naroff
84073ec51f
Fixed crasher in <rdar://problem/6780904> [irgen] Assertion failed: (Result == conversionOK && "UTF-8 to UTF-16 conversion failed"), function GetAddrOfConstantCFString, file CodeGenModule.cpp, line 1063.
...
Still a diagnostic related FIXME (will discuss with Daniel/Fariborz offline).
llvm-svn: 68975
2009-04-13 19:08:08 +00:00
Chris Lattner
03a6cbbd91
pass -fblocks
...
llvm-svn: 68878
2009-04-11 19:49:49 +00:00
Fariborz Jahanian
aae4349df9
Fixes a ir-gen crash for K&R style blocks.
...
llvm-svn: 68865
2009-04-11 17:55:15 +00:00
Daniel Dunbar
8c920c9220
Don't set both readnone and readonly.
...
llvm-svn: 68833
2009-04-10 22:14:52 +00:00
Daniel Dunbar
d272cca527
Internal variables could mistakenly have "hidden" visibility when
...
their emission was deferred.
- <rdar://problem/6775234> variables with internal linkage should not
be exposed with -fvisibility=hidden.
llvm-svn: 68818
2009-04-10 20:26:50 +00:00
Mike Stump
6764593098
Fixup codegen for nested blocks that use copy/dispose in the inner
...
blocks, so that the outer blocks use it as well. Radar 6762279
llvm-svn: 68811
2009-04-10 18:52:28 +00:00
Daniel Dunbar
b041085c17
Add more builtin definitions, including strcmp.
...
- PR3964.
llvm-svn: 68710
2009-04-09 16:42:50 +00:00
Anders Carlsson
a60cbcdfe6
Don't assume that a block always has a FunctionProtoType. Fixes rdar://6768379.
...
llvm-svn: 68583
2009-04-08 02:55:55 +00:00
Daniel Dunbar
ea10ab668f
Visibility attributes should only be set on definition.
...
llvm-svn: 68561
2009-04-07 22:36:33 +00:00
Eli Friedman
574c745370
Diagnose uses of function specifiers on declarations which don't declare
...
functions. Fixes PR3941.
llvm-svn: 68541
2009-04-07 19:37:57 +00:00
Daniel Dunbar
4fab57ddea
Implement __sync_{add,sub,and,or,xor}_and_fetch and
...
__sync_bool_compare_and_swap.
- <rdar://problem/6762223> [sema/irgen] support
__sync_bool_compare_and_swap and __sync_add_and_fetch
llvm-svn: 68482
2009-04-07 00:55:51 +00:00
Anton Korobeynikov
18e831dcc9
Testcase for regparm codegen
...
llvm-svn: 68415
2009-04-04 00:49:38 +00:00
Anders Carlsson
16b1461c21
Ignore plus operands when looking up the operand number from a named operand. This matches llvm-gcc and fixes PR3908.
...
llvm-svn: 68371
2009-04-03 05:57:08 +00:00
Fariborz Jahanian
befc9dfbff
Implement -fvisibility.
...
llvm-svn: 68369
2009-04-03 03:28:57 +00:00
Daniel Dunbar
fd6cfcffa2
Add target hook for setting symbol prefix and section of unicode
...
string literals.
llvm-svn: 68363
2009-04-03 00:57:44 +00:00
Mike Stump
d3e3885f2d
Remove -ftrapu.
...
llvm-svn: 68330
2009-04-02 18:15:54 +00:00
Mike Stump
36c36ebc8b
Oops, almost forgot the testcases.
...
llvm-svn: 68270
2009-04-02 01:14:26 +00:00
Daniel Dunbar
e80bd1897c
x86-32 Darwin ABI: Handle small structures correctly.
...
- Small structures are returned in a register if:
1. They fit nicely in a register.
2. All fields fit nicely in a register.
(more or less)
- We now pass the first 5000 ABITests if unions are disabled.
- <rdar://problem/6497882> [irgen] x86-32 ABI compatibility with
small structs
llvm-svn: 68197
2009-04-01 07:45:00 +00:00
Daniel Dunbar
58e2971bb0
x86-32 Darwin ABI: Single element arrays can be part of "single
...
element structures", which have different ABI rules.
- Current return-arguments-32 status is: 1 out of 1000 failures (-7)
- Also, vectors inside "single element structs" require special
handling.
llvm-svn: 68196
2009-04-01 07:08:38 +00:00
Daniel Dunbar
cd76e673eb
x86-32 Darwin ABI: Handle direct return of vectors.
...
- Current return-arguments-32 status is: 8 out of 1000 failures (-7)
llvm-svn: 68192
2009-04-01 06:13:08 +00:00
Daniel Dunbar
f77e292a0f
Fix a subtle bug where the cleanup scope entries had a dangling block reference
...
- <rdar://problem/6732143> Crash when generating @synchronize for
zero-cost exception
- Thanks to Anders for helping track down the problem.
llvm-svn: 68186
2009-04-01 04:37:47 +00:00
Eli Friedman
1c3fb22cad
Fix pascal string support; testcase from mailing list message.
...
llvm-svn: 68181
2009-04-01 03:17:08 +00:00
Daniel Dunbar
08b216abf1
Add Target hooks for IRgen of [cf]string literals.
...
- Notably, set section on cfstring literal string data (for now, this
is done everywhere because it matches what we were already doing
for the CFString data itself)
- <rdar://problem/6599098> [irgen] linker requires objc string data
to go into cstring
llvm-svn: 68160
2009-03-31 23:42:16 +00:00
Chris Lattner
f41e87f4cd
Change UsedArray to be a vector of WeakVH to fix a dangling pointer problem that occurs when
...
attribute(used) and asm renaming are used together.
llvm-svn: 68155
2009-03-31 22:37:52 +00:00
Daniel Dunbar
35579146aa
x86_32 Darwin ABI: Treat empty unions like empty structures.
...
- Current return-arguments-32 status: 15/1000 failures
llvm-svn: 68132
2009-03-31 19:01:39 +00:00
Chris Lattner
5d68896c7b
Codegen sometimes crashes on comparisons that aren't legal, just
...
disable this feature for now, to err on the side of rejecting instead
of sometimes crashing. rdar://6326239
llvm-svn: 68088
2009-03-31 07:46:52 +00:00
Eli Friedman
09a9b6e335
Move where block-related variables are initialized so that block
...
types don't get generated when blocks aren't used.
llvm-svn: 67898
2009-03-28 03:24:54 +00:00
Eli Friedman
7c7a0e86ae
Fix silly mistake in test.
...
llvm-svn: 67897
2009-03-28 03:14:28 +00:00
Eli Friedman
e381f7e3e9
Misc small fixes/cleanups/comment changes.
...
llvm-svn: 67895
2009-03-28 02:45:41 +00:00
Eli Friedman
8b7b1b1aee
Change compound assignment operators to keep track of both the promoted
...
LHS type and the computation result type; this encodes information into
the AST which is otherwise non-obvious. Fix Sema to always come up with the
right answer for both of these types. Fix IRGen and the analyzer to
account for these changes. This fixes PR2601. The approach is inspired
by PR2601 comment 2.
Note that this changes real *= complex in CodeGen from a silent
miscompilation to an explicit error.
I'm not really sure that the analyzer changes are correct, or how to
test them... someone more familiar with the analyzer should check those
changes.
llvm-svn: 67889
2009-03-28 01:22:36 +00:00
Douglas Gregor
8aa6bf5b8e
Fix <rdar://problem/6724396>, where we were silently dropping
...
GNU-style array designators, causing us to emit broken initializers.
llvm-svn: 67878
2009-03-27 23:40:29 +00:00
Daniel Dunbar
adf511c056
Driver: Forward -fno-common to clang.
...
- <rdar://problem/6710978> ccc/clang-driver ignore -fno-common
llvm-svn: 67762
2009-03-26 16:37:00 +00:00
Eli Friedman
8d7ff4098c
Fix for PR3869: actually enforce that the argument of an indirect goto
...
is of type void*. I'll try to add the appropriate checking later.
llvm-svn: 67721
2009-03-26 00:18:06 +00:00
Mike Stump
871c1f6f88
Remove -f__block as codegen for __block variables should be solid.
...
llvm-svn: 67697
2009-03-25 18:05:39 +00:00
Mike Stump
d2142cffbf
Fixup codegen for block literals that bleed copy/dispose information
...
from previous block literals.
llvm-svn: 67696
2009-03-25 17:58:24 +00:00
Daniel Dunbar
bf1fe8c36c
Support member reference on ?: of struct type.
...
llvm-svn: 67603
2009-03-24 02:38:23 +00:00
Daniel Dunbar
a45cf5b6b0
Rename clang to clang-cc.
...
Tests and drivers updated, still need to shuffle dirs.
llvm-svn: 67602
2009-03-24 02:24:46 +00:00
Daniel Dunbar
4aacad1f93
Use not instead of ! in tests.
...
llvm-svn: 67601
2009-03-24 01:59:55 +00:00
Eli Friedman
703a77f313
Fix a couple of tests.
...
llvm-svn: 67592
2009-03-24 01:11:18 +00:00
Eli Friedman
7b4716750b
Fix a subtle bug in CodeGen for the increment of a bitfield.
...
llvm-svn: 67499
2009-03-23 03:00:06 +00:00
Chris Lattner
e64911a4ae
switch getBuiltinLibFunction to use the new GetOrCreateLLVMFunction
...
functionality, fixing a crash on the attached testcase. Eliminate the
BuiltinFunctions cache, as it can contain dangling pointers. This fixes
a bunch of valgrind errors on test/CodeGen/builtins.c
llvm-svn: 67484
2009-03-22 21:56:56 +00:00
Chris Lattner
827a3552a4
make alias definition logic more similar to functions/globals.
...
llvm-svn: 67481
2009-03-22 21:39:12 +00:00
Chris Lattner
a5ae54acc4
fix PR3200 by making alias emission use the new infrastructure. Fold
...
some tests into the alias.c file.
llvm-svn: 67479
2009-03-22 21:21:57 +00:00
Chris Lattner
75acb0c356
fix a fixme: non-proto struct returning function definitions should be compiled
...
to something like:
define void @bar(%struct.foo* noalias sret %agg.result) nounwind {
instead of:
define void @bar(%struct.foo* noalias sret %agg.result, ...) nounwind {
llvm-svn: 67475
2009-03-22 19:35:37 +00:00
Mike Stump
efd7caa825
Fixup codegen for nested block literals so that we generate
...
copy_helpers and dispose_helpers as necessary for them.
llvm-svn: 67453
2009-03-21 21:00:35 +00:00
Chris Lattner
a85d68e5d8
fix a crash that could occur when a variable declaration became a
...
function definition.
llvm-svn: 67446
2009-03-21 09:25:43 +00:00
Chris Lattner
149927c9f8
simplify and cleanup global variable creation stuff to all go through one
...
code path.
llvm-svn: 67445
2009-03-21 09:16:30 +00:00
Chris Lattner
6574906818
fix several problems with asm renaming, by pulling it into the mangling code:
...
1. it wasn't applying to definitions, only declarations, e.g. int x __asm("foo")
2. multiple definitions were conflicting, they weren't getting merged.
3. the code was duplicated in several places.
llvm-svn: 67442
2009-03-21 08:24:40 +00:00
Douglas Gregor
07d8e3a500
Allow flexible array initializers that are not surrounded by
...
braces. We now build the appropriate fully-structured initializer list
for such things. Per PR3618, verified that we're getting the right
code generation.
llvm-svn: 67353
2009-03-20 00:32:56 +00:00
Daniel Dunbar
4e004ed124
IRgen support for alias of global variable.
...
- PR3818.
llvm-svn: 67297
2009-03-19 08:27:24 +00:00
Daniel Dunbar
c230443178
PR3835: Interaction with ABI structure passing can inhibit
...
readnone/readonly attributes.
llvm-svn: 67224
2009-03-18 19:51:01 +00:00
Chris Lattner
ab17fb2c98
fix the more complex cases by actually codegen'ing the right expr :)
...
llvm-svn: 67219
2009-03-18 18:30:44 +00:00
Chris Lattner
28bcf1a429
add codegen support for casting an element to a union.
...
There are some more complex cases (_Complex and structs)
that I'm still working on.
llvm-svn: 67218
2009-03-18 18:28:57 +00:00
Mike Stump
bc7d67ce08
Add codegen support for aggregate BlockDeclRefExprs.
...
llvm-svn: 67207
2009-03-18 15:54:29 +00:00
Chris Lattner
c2a0b97950
fix PR3809, codegen for inc/dec of function pointers.
...
llvm-svn: 67165
2009-03-18 04:25:13 +00:00
Chris Lattner
63d06ab65a
teach codegen to handle noop casts as lvalues.
...
llvm-svn: 67164
2009-03-18 04:02:57 +00:00
Anders Carlsson
fe2e680509
Fix failing test case.
...
llvm-svn: 67147
2009-03-18 01:10:22 +00:00
Anders Carlsson
e73e3ecc04
Initialize the cleanup.dst variable if necessary. Fixes PR3789.
...
llvm-svn: 67075
2009-03-17 05:53:35 +00:00
Anders Carlsson
e8911a9a13
We want to grep the output, not the input :-)
...
llvm-svn: 67074
2009-03-17 05:49:13 +00:00
Mike Stump
5469f29aa9
Do up codegen for function static data and externs in functions in block
...
literals.
llvm-svn: 66984
2009-03-13 23:34:28 +00:00
Daniel Dunbar
8ce48d8c10
x86_32 ABI: Don't try and expand structures with bitfields.
...
- This is an ABI incompatiblity, but this is not likely to be a huge
deal in practice. For now we at least generate self consistent code
instead of crashing.
- <rdar://problem/6657601> x86-32 ABI: Bitfields in small structures
are not passed correctly
llvm-svn: 66713
2009-03-11 22:05:26 +00:00
Chris Lattner
f85a938985
Fix PR3682 by just disabling a broken assertion. This check should be
...
done in sema, and is reflected by the existing PR3258. In the meantime,
fix PR3682 by disabling a bogus assertion (which doesn't account for +
operands).
llvm-svn: 66533
2009-03-10 06:42:37 +00:00
Chris Lattner
6dd0f9263d
reduce duplication of parsing code between %0 and %x0 and
...
add support for modifiers on named references, like %c[foo].
llvm-svn: 66532
2009-03-10 06:38:02 +00:00
Chris Lattner
d7d5fdf090
move matching of named operands into AsmStmt class. At the same
...
time handle + operands in operand counting, fixing asm.c:t7 to
expand into $2 instead of $1.
llvm-svn: 66531
2009-03-10 06:33:24 +00:00
Mike Stump
6f7d9f8774
codegen support for dispose helpers for block literals.
...
llvm-svn: 66320
2009-03-07 02:53:18 +00:00
Mike Stump
aeb0ffd56c
Codegen support for copy helpers for block literals.
...
llvm-svn: 66319
2009-03-07 02:35:30 +00:00
Daniel Dunbar
94911a91d5
x86_64 ABI: Handle long double in union when upper eightbyte results
...
in a lone X87 class.
- PR3735.
llvm-svn: 66277
2009-03-06 17:50:25 +00:00
Daniel Dunbar
8e79b8491f
IRgen support for weak_import.
...
- <rdar://problem/6652110> clang should support weak_import
llvm-svn: 66270
2009-03-06 16:20:49 +00:00
Mike Stump
cfc045e36c
Testcase for last fix.
...
llvm-svn: 66258
2009-03-06 06:35:21 +00:00
Mike Stump
fbe25dd1e4
Finish off __Block_byref_id_object_dispose codegen for block literals.
...
llvm-svn: 66247
2009-03-06 04:53:30 +00:00
Mike Stump
ee2a5ee5f7
More codegen support for the copy/dispose helpers for block literals.
...
llvm-svn: 66241
2009-03-06 02:29:21 +00:00
Mike Stump
0c74327715
Framework for codegen for copy/dispose helpers.
...
llvm-svn: 66231
2009-03-06 01:33:24 +00:00
Eli Friedman
cecc21d2f6
Make IRGen compatible with declaring a function with incomplete
...
return/argument types. (The generated IR isn't ideal, but we can't
really do better in general.)
llvm-svn: 66132
2009-03-05 04:18:07 +00:00
Eli Friedman
22fcc24b30
Initial implementation of CodeGen for incomplete function types; fixes
...
PR3688. (The FIXME is a rather big performance issue, but it only
affects code using this feature, which is relatively rare.)
llvm-svn: 66128
2009-03-05 03:16:41 +00:00
Mike Stump
626aecc4be
Add codegen support for __block variables to call _Block_object_dispose as necessary.
...
llvm-svn: 66117
2009-03-05 01:23:13 +00:00
Mike Stump
2d33d6300c
Fixup __block codegen in nested block literals.
...
llvm-svn: 66091
2009-03-04 22:48:06 +00:00
Daniel Dunbar
5b9e9682f1
Support "asm" renaming of external symbols.
...
- PR3698.
llvm-svn: 66038
2009-03-04 17:31:19 +00:00
Mike Stump
0874160bd5
Add __block codegen testcase. We introduce a temporary flag to enable
...
codegen, until such time as codegen is complete enough to turn on with
-fblocks.
llvm-svn: 66031
2009-03-04 13:17:22 +00:00
Eli Friedman
3efa41a478
Continuation of PR3687: fix more places to use the right type for
...
booleans.
llvm-svn: 66012
2009-03-04 04:25:14 +00:00
Eli Friedman
42d2a3add6
Attempt to fix PR3709: when converting from an integer to a pointer,
...
first extend the integer to the correct width.
llvm-svn: 66009
2009-03-04 04:02:35 +00:00
Eli Friedman
78350edafb
Fix for PR3687: use the memory representation for booleans when a
...
sub-type describes a memory location, like the pointee type of a pointer
or the element type of an array.
llvm-svn: 65925
2009-03-03 04:48:01 +00:00
Daniel Dunbar
e2e704752c
Attempt to make test more robust (fails for users who put LLVM in
...
/path/with/store/in/it").
llvm-svn: 65852
2009-03-02 18:50:36 +00:00
Chris Lattner
d3fd8fb3ac
testcase for mike's fix for PR3612
...
llvm-svn: 65757
2009-03-01 03:26:22 +00:00
Anders Carlsson
ed5e69fe50
Do some blocks cleanup and simplification. Fix a crash, and add a test case.
...
llvm-svn: 65746
2009-03-01 01:09:12 +00:00
Chris Lattner
e87da66562
adjust to changes in the mainline llvm .ll printer.
...
llvm-svn: 65745
2009-03-01 00:59:19 +00:00
Chris Lattner
3ef668c27a
after going around in circles a few times, finally cave and emit structure
...
copies with memcpy instead of memmove. This matches what GCC does and if it
causes a problem with a particular libc we can always fix it with a target
hook.
llvm-svn: 65699
2009-02-28 18:18:58 +00:00
Chris Lattner
d42c29f9a2
fix some sema problems with wide strings and hook up basic codegen for them.
...
llvm-svn: 65582
2009-02-26 23:01:51 +00:00
Mike Stump
92000e54ac
Add end of line at end.
...
llvm-svn: 65557
2009-02-26 19:00:14 +00:00
Anders Carlsson
43e8a2b36e
Add test for enum types
...
llvm-svn: 65540
2009-02-26 17:38:19 +00:00
Daniel Dunbar
4208835eec
Temporarily disable clearing of insert point (to indicate unreachable
...
code) when calling noreturn functions; general expression emission
isn't ready to do the right thing in all cases.
llvm-svn: 65473
2009-02-25 20:59:29 +00:00
Daniel Dunbar
1cdbc5404b
Allow constant initializers to reference their defining decl.
...
- PR3662.
llvm-svn: 65472
2009-02-25 20:08:33 +00:00
Daniel Dunbar
a1047857f7
Remove a FIXME; I was mistaken in believing gcc rejected this.
...
llvm-svn: 65420
2009-02-25 00:22:25 +00:00
Daniel Dunbar
d4ecca135a
Fix IRgen of constant expressions referring to external/static
...
variables.
- PR3657.
llvm-svn: 65381
2009-02-24 18:41:57 +00:00
Douglas Gregor
e62c0a45dd
Improve merging of function declarations. Specifically:
...
- When we are declaring a function in local scope, we can merge with
a visible declaration from an outer scope if that declaration
refers to an entity with linkage. This behavior now works in C++
and properly ignores entities without linkage.
- Diagnose the use of "static" on a function declaration in local
scope.
- Diagnose the declaration of a static function after a non-static
declaration of the same function.
- Propagate the storage specifier to a function declaration from a
prior declaration (PR3425)
- Don't name-mangle "main"
llvm-svn: 65360
2009-02-24 01:23:02 +00:00
Mike Stump
624497c29a
Cleanp code with some recent suggestions.
...
llvm-svn: 65285
2009-02-22 13:27:11 +00:00
Anders Carlsson
b8482c5d5d
Match gcc and always perform array/function conversion for asm input exprs. Fixes PR3641.
...
llvm-svn: 65256
2009-02-22 02:11:23 +00:00
Daniel Dunbar
9cbbd99c4b
Force arch for these test cases.
...
llvm-svn: 65252
2009-02-21 23:45:41 +00:00
Daniel Dunbar
3c81dabd76
Emit extern_weak when needed.
...
- PR3629.
llvm-svn: 65203
2009-02-21 00:24:10 +00:00
Daniel Dunbar
0c4eda5923
We must always mangle attribute overloadable functions; even if in a
...
system header.
- Prevents a codegen crash when anything used anything in tgmath! :)
llvm-svn: 65200
2009-02-20 23:09:27 +00:00
Daniel Dunbar
ce39954d5d
Handle constant int -> ptr casts of lvalue results.
...
- PR3463 (again).
llvm-svn: 65133
2009-02-20 18:22:23 +00:00
Daniel Dunbar
cdbb5e336d
Set call attribute for direct calls (i.e. noreturn).
...
- Remove an unused variant of EmitCallExpr overload.
llvm-svn: 65130
2009-02-20 18:06:48 +00:00
Daniel Dunbar
e4be42c17f
Add some stdlib builtins
...
llvm-svn: 65115
2009-02-20 06:36:40 +00:00
Daniel Dunbar
1c8560d93e
Extend Evaluate() to fold (int) <pointer type>.
...
- PR3463, PR3398, <rdar://problem/6553401> crash on relocatable
symbol addresses as constants in static locals.
- There are many more scenarious we could handle (like arithmetic on
such an int) but this is the main use case.
llvm-svn: 65074
2009-02-19 22:24:01 +00:00
Anders Carlsson
f96954ca30
Add irgen support for the noinline attribute.
...
llvm-svn: 65056
2009-02-19 19:22:11 +00:00
Daniel Dunbar
f0acf7bd4c
Don't emit K&R unprototyped function definitions as varargs.
...
- <rdar://problem/6584606> clang/x86-64 - too many reg saves
llvm-svn: 65032
2009-02-19 07:15:39 +00:00
Daniel Dunbar
b2f4cdb233
Emission of global variable initialializer was broken in rare
...
situation where a tentative decl was emitted *after* the actual
initialization. This occurs in some rare situations with static decls.
- PR3613.
- I'm not particularly happy with this fix, but I don't see a simpler
or more elegant solution yet.
llvm-svn: 65018
2009-02-19 05:36:41 +00:00
Daniel Dunbar
43a5d9e409
Eek! getDeclAlign sometimes returned alignment in bits.
...
- Renamed to getDeclAlignInBytes since most other query functions
work in bits.
- Fun to track down as isIntegerConstantExpr was getting it right,
but Evaluate() was getting it wrong. Maybe we should assert they
compute the same thing when they succeed?
llvm-svn: 64828
2009-02-17 22:16:19 +00:00
Daniel Dunbar
38ad1e6138
Change EmitConstantExpr to allow failure.
...
IRgen no longer relies on isConstantInitializer, instead we just try
to emit the constant. If that fails then in C we emit an error
unsupported (this occurs when Sema accepted something that it doesn't
know how to fold, and IRgen doesn't know how to emit) and in C++ we
emit a guarded initializer.
This ends up handling a few more cases, because IRgen was actually
able to emit some of the constants Sema accepts but can't Evaluate().
For example, PR3398.
llvm-svn: 64780
2009-02-17 18:43:32 +00:00
Daniel Dunbar
8eb018ab9c
Support IRgen of sqrt -> llvm.sqrt, pow -> llvm.pow.
...
- Define pow[lf]?, sqrt[lf]? as builtins.
- Add -fmath-errno option which binds to LangOptions.MathErrno
- Add new builtin flag Builtin::Context::isConstWithoutErrno for
functions which can be marked as const if errno isn't respected for
math functions. Sema automatically marks these functions as const
when they are defined, if MathErrno=0.
- IRgen uses const attribute on sqrt and pow library functions to
decide if it can use the llvm intrinsic.
llvm-svn: 64689
2009-02-16 22:43:43 +00:00
Daniel Dunbar
e28b359881
Fix IRgen of __builtin_memset.
...
- Fix test case to not only have negative tests.
llvm-svn: 64674
2009-02-16 21:52:05 +00:00
Douglas Gregor
bfdd607372
When merging from a function with a prototype to a function without a
...
prototype, synthesize ParmVarDecls for prototype-less FunctionDecl.
llvm-svn: 64666
2009-02-16 20:58:07 +00:00
Daniel Dunbar
f898638eee
PR3589: Don't simplify libcalls with -ffreestanding.
...
llvm-svn: 64599
2009-02-15 20:00:15 +00:00
Daniel Dunbar
019ef0bbfe
x86_64 ABI: Pass simple types directly when possible. This is
...
important for both keeping the generated LLVM simple and for ensuring
that integer types are passed/promoted correctly.
llvm-svn: 64529
2009-02-14 02:09:24 +00:00
Chris Lattner
cd7bc144f6
fix rdar://6586493, a bug in codegen of the GNU
...
missing-?:-true-value extension.
llvm-svn: 64505
2009-02-13 23:35:32 +00:00
Douglas Gregor
b9063fc1b3
Implicitly declare certain C library functions (malloc, strcpy, memmove,
...
etc.) when we perform name lookup on them. This ensures that we
produce the correct signature for these functions, which has two
practical impacts:
1) When we're supporting the "implicit function declaration" feature
of C99, these functions will be implicitly declared with the right
signature rather than as a function returning "int" with no
prototype. See PR3541 for the reason why this is important (hint:
GCC always predeclares these functions).
2) If users attempt to redeclare one of these library functions with
an incompatible signature, we produce a hard error.
This patch does a little bit of work to give reasonable error
messages. For example, when we hit case #1 we complain that we're
implicitly declaring this function with a specific signature, and then
we give a note that asks the user to include the appropriate header
(e.g., "please include <stdlib.h> or explicitly declare 'malloc'"). In
case #2 , we show the type of the implicit builtin that was incorrectly
declared, so the user can see the problem. We could do better here:
for example, when displaying this latter error message we say
something like:
'strcpy' was implicitly declared here with type 'char *(char *, char
const *)'
but we should really print out a fake code line showing the
declaration, like this:
'strcpy' was implicitly declared here as:
char *strcpy(char *, char const *)
This would also be good for printing built-in candidates with C++
operator overloading.
The set of C library functions supported by this patch includes all
functions from the C99 specification's <stdlib.h> and <string.h> that
(a) are predefined by GCC and (b) have signatures that could cause
codegen issues if they are treated as functions with no prototype
returning and int. Future work could extend this set of functions to
other C library functions that we know about.
llvm-svn: 64504
2009-02-13 23:20:09 +00:00
Daniel Dunbar
f9f039865f
Set constant bit on static block vars as well. Patch by Anders Johnson!q
...
llvm-svn: 64502
2009-02-13 22:58:39 +00:00
Daniel Dunbar
128a138a57
IRgen support for attribute used.
...
- PR3566
llvm-svn: 64492
2009-02-13 22:08:43 +00:00
Daniel Dunbar
6b8720e723
Pull MayDeferGeneration out of EmitGlobal.
...
- Fix emission of static functions with constructor attribute while I
was here.
<rdar://problem/6140899> [codegen] "static" and attribute-constructor interact poorly
llvm-svn: 64488
2009-02-13 21:18:01 +00:00
Anders Carlsson
63784f4e5e
Add CodeGen support for the nodebug attribute.
...
llvm-svn: 64445
2009-02-13 08:11:52 +00:00
Douglas Gregor
adb0201418
Add mangling for variadic functions and conversion functions
...
llvm-svn: 64425
2009-02-13 01:28:03 +00:00
Douglas Gregor
5fec5b0495
Add basic support for C++ name mangling according to the Itanium C++
...
ABI to the CodeGen library. Since C++ code-generation is so
incomplete, we can't exercise much of this mangling code. However, a
few smoke tests show that it's doing the same thing as GCC. When C++
codegen matures, we'll extend the ABI tester to verify name-mangling
as well, and complete the implementation here.
At this point, the major client of name mangling is in the uses of the
new "overloadable" attribute in C, which allows overloading. Any
"overloadable" function in C (or in an extern "C" block in C++) will
be mangled the same way that the corresponding C++ function would be
mangled.
llvm-svn: 64413
2009-02-13 00:10:09 +00:00
Daniel Dunbar
53bf741208
Honor attribute section on static block var decls.
...
llvm-svn: 64411
2009-02-12 23:32:54 +00:00
Daniel Dunbar
648bf78333
Support __attribute__(section(<name>))
...
llvm-svn: 64380
2009-02-12 17:28:23 +00:00
Daniel Dunbar
eef883327a
Test case for emitting va_arg as l-value; apparently I only *thought* I had committed this.
...
llvm-svn: 64368
2009-02-12 08:41:10 +00:00
Chris Lattner
60dcdc7062
finish off codegen support for sub of pointer to functions,
...
finishing off rdar://6520707
llvm-svn: 64295
2009-02-11 07:21:43 +00:00
Anders Carlsson
7ccf3e4e28
Handle the case where EmitBlock might be called multiple times for the same block. Fixes PR3536.
...
llvm-svn: 64252
2009-02-10 22:50:24 +00:00
Daniel Dunbar
2daa142765
Enable parameter passing test for x86_64.
...
llvm-svn: 64195
2009-02-10 01:53:22 +00:00
Daniel Dunbar
d5f1f55e28
Make sure to initialize local variables, even if they were ignored by
...
ABI.
llvm-svn: 64187
2009-02-10 00:06:49 +00:00
Anders Carlsson
d19fd0dd57
Move previously unsupported VLA test to vla.c
...
llvm-svn: 64173
2009-02-09 21:48:07 +00:00
Daniel Dunbar
7aa851246e
Update test case; VLA's are now supported.
...
llvm-svn: 64168
2009-02-09 21:19:23 +00:00
Daniel Dunbar
fe2fb0af5a
Use 'compile' instead of 'codegen' when reporting error to user.
...
llvm-svn: 63952
2009-02-06 19:18:03 +00:00
Daniel Dunbar
3b2dd4368a
Add bare bones test that parameter passing is consistent for
...
scalar/complex/aggregate cases.
- Currently disabled for x86_64, triggering a misoptimization
(PR3489).
llvm-svn: 63864
2009-02-05 11:21:33 +00:00
Daniel Dunbar
fa803cd260
Test case for -femit-all-decls.
...
llvm-svn: 63777
2009-02-04 21:20:25 +00:00
Daniel Dunbar
c41a0b8a3c
Force -triple/-fnext-runtime for a few more test cases.
...
llvm-svn: 63679
2009-02-03 23:04:31 +00:00
Daniel Dunbar
25bd032084
Force triple for codegen tests which have expectations on output
...
types.
llvm-svn: 63669
2009-02-03 21:54:49 +00:00
Douglas Gregor
d42a0fb41b
Upgrade the "excess elements in array initializer" warning to an
...
error, since both C99 and C++ consider it an error. For reference, GCC
makes this a warning while G++ makes it an error.
llvm-svn: 63435
2009-01-30 22:26:29 +00:00
Anders Carlsson
221483dd4e
Make sure to cast the VLA size of array to the type of size_t. Fixes PR3442.
...
llvm-svn: 63394
2009-01-30 16:41:04 +00:00
Nuno Lopes
92f95eb739
enable test as it already works
...
llvm-svn: 63390
2009-01-30 12:58:18 +00:00
Douglas Gregor
0202cb406e
Introduce a new expression node, ImplicitValueInitExpr, that
...
represents an implicit value-initialization of a subobject of a
particular type. This replaces the (ab)use of CXXZeroValueInitExpr
within initializer lists for the "holes" that occur due to the use of
C99 designated initializers.
The new test case is currently XFAIL'd, because CodeGen's
ConstExprEmitter (in lib/CodeGen/CGExprConstant.cpp) needs to be
taught to value-initialize when it sees ImplicitValueInitExprs.
llvm-svn: 63317
2009-01-29 17:44:32 +00:00
Daniel Dunbar
74f2425b89
Evaluate ==,!= for complex types.
...
llvm-svn: 63280
2009-01-29 06:43:41 +00:00
Daniel Dunbar
f50e60b23a
Implement basic _Complex integer constant folding.
...
- Merged into single ComplexEvaluator, these share too much logic to
be worth splitting for float/int (IMHO). Will split on request.
llvm-svn: 63248
2009-01-28 22:24:07 +00:00
Nuno Lopes
bb537dc189
fix PR3427: fix debuginfo for incomplete array types
...
llvm-svn: 63158
2009-01-28 00:35:17 +00:00
Anders Carlsson
570c357ded
If an input constraint refers to an output constraint, it should have the same constraint info as the output constraint. Fixes PR3417
...
llvm-svn: 63127
2009-01-27 20:38:24 +00:00
Chris Lattner
75441a3870
eliminate some random .ll file outputs
...
llvm-svn: 63117
2009-01-27 18:56:08 +00:00
Daniel Dunbar
7a88d1fcc4
Fix definition of __builtin_ia32_vec_set_v2di and de-XFAIL
...
builtins-x86.c.
llvm-svn: 63069
2009-01-26 23:43:02 +00:00
Eli Friedman
c69d454d5a
Make the constant folder aware of
...
__builtin___CFStringMakeConstantString. (We get into trouble in
GenerateStaticBlockVarDecl if the constant folder isn't accurate.)
llvm-svn: 62949
2009-01-25 01:54:01 +00:00
Eli Friedman
529a99bcf4
Fix the address of a label to be properly considered and emitted as a
...
constant.
llvm-svn: 62948
2009-01-25 01:21:06 +00:00
Eli Friedman
8549e5dcc8
Fix for PR2910: implement CodeGen for non-constant offsetof.
...
Note that there are still other issues in this area; see PR3396.
llvm-svn: 62942
2009-01-24 22:38:55 +00:00
Daniel Dunbar
42a8cd37b2
Handle pointer arithmetic on function pointers.
...
- <rdar://problem/6518844> Clang-generated bitcode crashes LLVM while compiling function pointer addition expression
llvm-svn: 62857
2009-01-23 18:51:09 +00:00
Daniel Dunbar
56493b0d54
Allow creation of "dummy" compile units for debug information.
...
- Although gross, this is needed currently to ensure that we produce
well formed debug information (to match pace with the assertions
being added to DebugInfo in LLVM).
llvm-svn: 62734
2009-01-22 00:09:25 +00:00
Nate Begeman
b699c9bf57
Vector codegen improvements
...
llvm-svn: 62458
2009-01-18 06:42:49 +00:00
Nate Begeman
2f2bdeb5df
Support evaluation of vector constant expressions, and codegen of same.
...
llvm-svn: 62455
2009-01-18 03:20:47 +00:00
Nate Begeman
7e5185b264
A couple more vector component access fixes.
...
llvm-svn: 62443
2009-01-18 02:01:21 +00:00
Nuno Lopes
4d78cf0fa7
add support for usage of cast to union thing with static vars
...
llvm-svn: 62387
2009-01-17 00:48:48 +00:00
Nuno Lopes
7ffcf93b24
add codegen support to union casts
...
init of static vars still not working. I'll get back to it tomorrow or so
llvm-svn: 62278
2009-01-15 20:14:33 +00:00
Daniel Dunbar
dec798bf37
Bug fix, __private_extern__ globals were always introducing a definition.
...
llvm-svn: 62139
2009-01-13 02:25:00 +00:00
Anders Carlsson
00057e4e09
Handle multi-value inputs
...
llvm-svn: 62069
2009-01-12 02:22:13 +00:00
Anders Carlsson
431acd1129
More inline asm fixes
...
llvm-svn: 62049
2009-01-11 21:23:27 +00:00
Anders Carlsson
a948c34b0b
Handle readwrite constraints correctly
...
llvm-svn: 62043
2009-01-11 19:46:50 +00:00
Chris Lattner
610c87cad6
rename these tests to match the attribute.
...
llvm-svn: 61770
2009-01-05 23:10:19 +00:00
Daniel Dunbar
0d2bfec51d
Remainder is only valid on integer vector operands.
...
Improve ext vector test case.
llvm-svn: 61766
2009-01-05 22:55:36 +00:00
Anders Carlsson
762e162284
Fix the bug that would cause Python to crash at startup.
...
When emitting the static variables we need to make sure that the order is preserved.
Fix this by making StaticDecls a std::list which has O(1) random removal.
llvm-svn: 61621
2009-01-04 02:08:04 +00:00
Anton Korobeynikov
d72f47aa05
Add full dllimport / dllexport support: both sema checks and codegen.
...
Patch by Ilya Okonsky
llvm-svn: 61437
2008-12-26 00:52:02 +00:00
Anders Carlsson
118467dfb7
Commit the right version of the test
...
llvm-svn: 61302
2008-12-21 03:40:32 +00:00
Anders Carlsson
76dbc0423e
Make sure to emit the size expression for sizeof(type)
...
llvm-svn: 61301
2008-12-21 03:33:21 +00:00
Eli Friedman
f4084708cd
Make VLAs usable, and make basic usage work correctly. Also, add a
...
simple test that actually does VLA codegen.
Note that despite the fact that the alloca isn't in the entry block, it
should dominate all uses; this is guaranteed by the restrictions on goto
into VLA scope in C99.
llvm-svn: 61291
2008-12-20 23:11:59 +00:00
Anders Carlsson
6200f0c533
Add some ErrorUnsupported calls and turn on VLA codegen again.
...
llvm-svn: 61283
2008-12-20 19:33:21 +00:00
Chris Lattner
3d72297909
diagnose C99 6.9.1p5, C arguments in definitions that are lacking
...
a name. This implements PR3208.
llvm-svn: 61127
2008-12-17 07:32:46 +00:00
Sebastian Redl
19ed30be38
stdlib.h is the wrong header for printf, and introduces test-breaking definitions of inlines on Linux
...
llvm-svn: 60981
2008-12-13 15:31:28 +00:00
Daniel Dunbar
a4daf203fe
Add test case for using mmintrin (and making sure that inlining is
...
working with and without debug info).
llvm-svn: 60960
2008-12-12 19:12:02 +00:00
Anders Carlsson
45f4b8c0f2
Fix invalid bit-field.
...
llvm-svn: 60627
2008-12-06 20:32:39 +00:00
Anders Carlsson
1e495d9860
Make Sema::CheckForConstantInitializer use Expr::Evaluate. This fixes PR3130.
...
llvm-svn: 60580
2008-12-05 05:09:56 +00:00
Anders Carlsson
6a113d9ddb
If a global var decl has an initializer, make sure to always set its linkage to external.
...
llvm-svn: 60462
2008-12-03 05:51:23 +00:00
Eli Friedman
e918435f94
Fix for PR3150: obvious copy-paste bug in
...
ScalarExprEmitter::VisitBinLOr.
llvm-svn: 60415
2008-12-02 16:02:46 +00:00
Anders Carlsson
f7a9a92359
Convert incomplete array types before emitting debug info for them, fixes PR3134.
...
llvm-svn: 60109
2008-11-26 17:40:42 +00:00
Anders Carlsson
32ef8ceaa1
Handle returning complex types that get coerced. Fixes PR3131
...
llvm-svn: 60058
2008-11-25 22:21:48 +00:00
Anders Carlsson
a7c5eb72a0
Reimplement Expr::isConstantExpr in terms of Expr::Evaluate. This fixes PR2832.
...
llvm-svn: 59946
2008-11-24 05:23:59 +00:00
Anders Carlsson
87da2b5dce
Forgot the newline :)
...
llvm-svn: 59942
2008-11-24 05:13:45 +00:00
Anders Carlsson
3abcb58a35
Add test case for bug that's been fixed.
...
llvm-svn: 59941
2008-11-24 05:11:21 +00:00
Anders Carlsson
4d5f2e532c
Add test for PR2992.
...
llvm-svn: 59861
2008-11-22 06:42:54 +00:00
Nuno Lopes
0e33c688d5
fix folding of '*doubleArray'
...
llvm-svn: 59647
2008-11-19 17:44:31 +00:00
Daniel Dunbar
9b1335eca8
Fix redundant load of bit-fields on assignment (to get the updated
...
value).
- Use extra argument to EmitStoreThroughLValue to provide place to
write update bit-field value if caller requires it.
- This fixes several FIXMEs.
llvm-svn: 59615
2008-11-19 09:36:46 +00:00
Nuno Lopes
e236a48210
fix folding of comma if given a non-constant operand.
...
Eli please take a look, as I'm not sure if this gets the extension warning in the right place
llvm-svn: 59422
2008-11-16 20:09:07 +00:00
Sebastian Redl
85a4019167
Fix testcase for 64-bit systems.
...
llvm-svn: 59099
2008-11-12 00:18:32 +00:00
Anton Korobeynikov
fdf389b9e4
Codegen support for fastcall & stdcall CC.
...
Patch by Ilya Okonsky!
llvm-svn: 59080
2008-11-11 20:21:14 +00:00
Chris Lattner
bd178d51ff
merge some testcases together.
...
llvm-svn: 59031
2008-11-11 06:42:53 +00:00
Chris Lattner
4497fbf6e0
remove the wrong PR # from the file name.
...
llvm-svn: 59029
2008-11-11 06:28:10 +00:00
Chris Lattner
d75e4e59b9
add PR#
...
llvm-svn: 59028
2008-11-11 06:27:34 +00:00
Daniel Dunbar
471d9ddeab
These tests have no needed to redirect stderr to stdout.
...
llvm-svn: 59019
2008-11-11 04:09:47 +00:00
Daniel Dunbar
8ec8048f93
"Fix" PR3021, don't crash on generating record types when we can't
...
generate the type of a member.
llvm-svn: 58889
2008-11-08 04:42:29 +00:00
Daniel Dunbar
d678ae2da3
Quick fix for PR2950, infinite loop generating debug info for
...
recursive types.
- Style will be clean up in further patches.
llvm-svn: 58490
2008-10-31 04:04:54 +00:00
Daniel Dunbar
03a3844c66
Add attribute always_inline support.
...
llvm-svn: 58304
2008-10-28 00:17:57 +00:00
Daniel Dunbar
0b288b8a59
Add test case to exercise IRgen "unsupported" path (mostly cleanup).
...
llvm-svn: 58286
2008-10-27 22:11:01 +00:00
Mon P Wang
179a72f000
Added vec_set intrinsics
...
llvm-svn: 57749
2008-10-18 02:43:25 +00:00
Daniel Dunbar
380827cfa1
Quick patch for PR2784, assert genereting debug info for opaque
...
structure.
- I'm not sure yet about the behavior, but this at least prevents the
crash.
Add some asserts on RegionStack usage.
llvm-svn: 57661
2008-10-17 01:07:56 +00:00
Chris Lattner
25728d931a
fix incorrect rdar number.
...
llvm-svn: 57165
2008-10-06 07:43:28 +00:00
Chris Lattner
1b0a00a4c9
__CONSTANT_CFSTRINGS__ should be defined even in C mode, otherwise the CFSTR
...
won't expand to the builtin. This fixes rdar://6248329
llvm-svn: 57164
2008-10-06 07:43:09 +00:00
Chris Lattner
a97132a9c4
Make sema and codegen allow __builtin___CFStringMakeConstantString as a valid
...
constant lvalue. Implement this in codegen by moving the code out of CGBuiltin
into EmitConstantExpr.
llvm-svn: 57163
2008-10-06 07:26:43 +00:00
Daniel Dunbar
93bc49d882
Add X86 builtin code generation test case.
...
llvm-svn: 57104
2008-10-05 06:38:36 +00:00
Daniel Dunbar
b11d5d65e8
Add some builtins to codegen test case.
...
llvm-svn: 57101
2008-10-05 06:34:45 +00:00
Nuno Lopes
a459f12862
fix test for latest changes in llvm asm representation
...
llvm-svn: 56842
2008-09-30 14:37:33 +00:00
Daniel Dunbar
00e36f4c5c
Fix function-attributes test case to not rely on llvm-gcc.
...
llvm-svn: 56734
2008-09-27 00:44:01 +00:00
Daniel Dunbar
23b46ca198
Fix attributes test case to not run clang umpteen times.
...
llvm-svn: 56733
2008-09-27 00:39:13 +00:00
Daniel Dunbar
c6fdac260b
Bug fix, result of isIntegerConstantExpr could be of incorrect width
...
for type.
- PR2817
llvm-svn: 56482
2008-09-22 23:53:24 +00:00
Argyrios Kyrtzidis
07052350f0
Implement CodeGen support for the 'CXXConditionDeclExpr' expression node, which represents a 'condition' declaration, e.g: "if (int x=0) {...}".
...
llvm-svn: 56045
2008-09-10 02:36:38 +00:00
Daniel Dunbar
0beedc1684
Fix a number of issues w.r.t. emission of global for functions and
...
aliases.
- Attributes specific to a definition are only set when the
definition is seen.
- Alias generation is delayed until the end of the module; necessary
since the alias may reference forward.
- Fixes: PR2743, <rdr://6140807&6094512>
- Improves: <rdr://6095112> (added XFAIL)
Also, print module on verification failures.
llvm-svn: 55966
2008-09-08 23:44:31 +00:00
Daniel Dunbar
47be094138
Add missing RUN line
...
llvm-svn: 55934
2008-09-08 18:01:15 +00:00
Argyrios Kyrtzidis
91c3f526dc
Line endings: CRLF -> LF
...
llvm-svn: 55829
2008-09-05 08:53:53 +00:00
Daniel Dunbar
2ffee610da
Set sext/zext on function result.
...
- <rdar://problem/6156739>
llvm-svn: 55815
2008-09-05 00:57:45 +00:00
Daniel Dunbar
8cde00a510
Implement codegen of aggregates as lvalues in binary expressions,
...
e.g. "(a = b).somefield".
llvm-svn: 55758
2008-09-04 03:20:13 +00:00
Daniel Dunbar
20e5db77a3
Add two test cases for builtins (mostly related to object size
...
builtins).
llvm-svn: 55736
2008-09-03 21:17:21 +00:00
Daniel Dunbar
40bf7fe20e
In incompatible pointer-typed ?: expressions, add implicit conversion
...
of RHSs to id type instead of void* if either has Objective-C object
type.
- This ensures the result can still be used in normal places an
object can be used, like a message send.
Add implicit conversions for ?: applied to qualified id types to
ensure that the RHSs are compatible.
- This prevents a codegen crash (creating invalid PHI nodes).
- Again, this relates to the fact that qualified id types have no
canonical types.
- Note that the implicit type casted to is incorrect, however this
doesn't currently cause problems because of the flexibility of the
id type.
Test cases for above.
llvm-svn: 55346
2008-08-26 00:41:39 +00:00
Eli Friedman
3d421e190a
Do typechecking and codegen for K&R-style function declarations
...
correctly. Not a regression, but made more obvious by my recent fix
which made function type compatibility checking a bit more strict.
llvm-svn: 55339
2008-08-25 21:31:01 +00:00
Argyrios Kyrtzidis
ce4528f008
Add CodeGen support for CXXZeroInitValueExpr.
...
llvm-svn: 55249
2008-08-23 19:35:47 +00:00
Daniel Dunbar
5f977e7b15
Missed a test case writing a .ll file.
...
Suppress count output from 'make test' on errors (used to generate
result code).
llvm-svn: 55107
2008-08-21 04:30:23 +00:00
Daniel Dunbar
19d84c3c51
Update a number of CodeGen tests to not create .ll files in the test
...
directory.
- Removed .ll from the svn:ignore lists to try and prevent this.
- Added svn:ignore on test/Misc/Output
llvm-svn: 55104
2008-08-21 02:51:29 +00:00
Daniel Dunbar
94834d8883
Fix subtle bug introduced in r54852.
...
- UsualUnaryConversions takes an Expr *& and may modify its argument,
this broke when it was refactored into Sema::CheckCastTypes. This
meant that we were missing implicit casts in some places.
- Seems pretty sad that this got through our tests.
llvm-svn: 55039
2008-08-20 03:55:42 +00:00
Daniel Dunbar
5a42754328
Fix test case RUN: line (thanks Argiris)
...
llvm-svn: 54922
2008-08-18 17:52:17 +00:00
Nuno Lopes
cb46c144bc
make sure the size of constant arrays is respected
...
llvm-svn: 54769
2008-08-13 23:28:57 +00:00
Daniel Dunbar
c4baa06d15
Add GetAddrOfConstantCString method
...
- Returns addr of constant for argument + '\0'.
- I couldn't think of a better name.
- Move appropriate users of GetAddrOfConstantString to this.
Rename getStringForStringLiteral to GetStringForStringLiteral.
Add GetAddrOfConstantStringFromLiteral
- This combines GetAddrOfConstantString and
GetStringForStringLiteral. This method can be, but is not yet, more
efficient.
Change GetAddrOfConstantString to not add terminating '\0'
- <rdar://problem/6140956>
llvm-svn: 54768
2008-08-13 23:20:05 +00:00
Daniel Dunbar
2de4b5e2fc
Add test case for -fexceptions
...
llvm-svn: 54647
2008-08-11 18:40:47 +00:00
Daniel Dunbar
07bb087ac1
Fix crash during initialization of a bitfield which followed a zero
...
length element.
Fix some 80-col violations.
llvm-svn: 54610
2008-08-10 07:00:24 +00:00
Daniel Dunbar
8d81683554
Replace old bitfield test.
...
- Change hardcoded assembly instructions to a use of 'opt' (still
waiting for someone to yell at me for this).
- Add some cases to cover behavior fixed by previous commit.
llvm-svn: 54413
2008-08-06 16:07:39 +00:00
Daniel Dunbar
e8bdce441b
Fix EmitNullInitializationToLValue for bitfield lvalues.
...
- PR2643
llvm-svn: 54397
2008-08-06 05:32:55 +00:00
Daniel Dunbar
ead7c91240
Fix bitfield accesses which straddle the boundary of the underlying
...
type.
- This generates somewhat less optimal code than before but this is
not hard to rectify once stable (at the cost of slightly more
complex code).
- This currently always uses little-endian ordering of the bitfield.
- This breaks the CodeGen/bitfield.c test because it was grepping for
hard-coded assembly instructions. Will fix once a better test case
is constructed (hard to do without execution).
- This fixes SingleSource/UnitTests/2006-01-23-InitializedBitField.c
and Regression/C/PR1386.c from the test suite.
- <rdar://problem/6085090>, <rdar://problem/6094169>
llvm-svn: 54395
2008-08-06 05:08:45 +00:00
Daniel Dunbar
bfb1cd7454
Fix CodeGen of pointer arithmetic in compound assignment statements.
...
- Changed EmitSub to work on all cases (arithmetic, ptr - int, ptr -
ptr) so that implementation matches that of other operators.
- Modify EmitCompoundAssign to compute and perform the appropriate
casts of left, right, and result types for the assorted pointer
arithmetic cases.
- Fix EmitSub (ptr - int) case to negate the rhs *after*
extension. This is critical when the rhs is unsigned (and needs
extension).
- This fixes cfrac.
- <rdr://6115726>
llvm-svn: 54392
2008-08-06 02:00:38 +00:00
Daniel Dunbar
ffc29be83f
Implement GNU asm-label extension support in CodeGen. This fixes
...
scimark2 on Darwin.
- Added Sema support for asm-label on variables, which I forgot before.
- Update CodeGen to use GlobalDeclMap to determine if static Decls
require emission (instead of LLVM module name lookup). Important
since the Decl name and the LLVM module name can differ.
- <rdar://problem/6116729>
llvm-svn: 54388
2008-08-06 00:03:29 +00:00
Daniel Dunbar
829e988899
Change CodeGen of global decls to key off of the name (instead of
...
having multiple bindings from all the possible decls which
conceptually map to the same global).
- This eliminates CodeGen depending on the LLVM module for name
lookup.
- This also eliminates the need for ReplaceMapValuesWith (hurrah).
- This handles lookups for FunctionDecls correctly in the presence of
aliases, this was previously broken.
- WIP: Can still clean up & unify variable and function emission.
llvm-svn: 54382
2008-08-05 23:31:02 +00:00
Daniel Dunbar
eca183bad2
Add test case for PR2001.
...
llvm-svn: 54352
2008-08-05 16:15:29 +00:00
Daniel Dunbar
d548c79eaf
Fix const-init test case
...
- Use -verify and added expected warnings for EXTWARN change.
llvm-svn: 54342
2008-08-05 06:30:41 +00:00
Daniel Dunbar
5aa55d51ca
Bug fix, CodeGen of (void*) - (void*) was broken.
...
- <rdar://problem/6122967>
llvm-svn: 54338
2008-08-05 00:47:03 +00:00
Daniel Dunbar
88402ce8d0
Add CodeGen support for indirect goto.
...
- Follows emission scheme used by llvm-gcc, i.e. invent an id for
each label whose address is taken and replace each indirect goto by
a switch to each possible target.
- Currently we emit a switch for each indirect goto instead of
merging them as llvm-gcc does.
llvm-svn: 54318
2008-08-04 16:51:22 +00:00
Daniel Dunbar
74aa7e1eae
Support constructor and destructor attributes in CodeGen
...
- There is an miscompilation issue remaining due to a poor
interaction between the delayed emission of static functions and
the emission of constructors, but that already existed prior to
this change.
llvm-svn: 54258
2008-08-01 00:01:51 +00:00
Chris Lattner
330f0f2567
Fix a regression I introduced in r54107:
...
http://llvm.org/viewvc/llvm-project?view=rev&revision=54107
llvm-svn: 54242
2008-07-31 04:58:58 +00:00
Daniel Dunbar
b39b1cd7c3
Fix implicit initialization of structures.
...
<rdar://problem/6113085>
llvm-svn: 54237
2008-07-30 21:00:24 +00:00
Daniel Dunbar
e49df9b58f
Change CodeGenModule GlobalDeclMap to directly reference globals
...
instead of mapping the decl to a bitcast of the global to the correct
type.
- GetAddrOf{Function,GlobalVar} introduce the bitcast on every use now.
- This solves a problem where a dangling pointer could be introduced
by the RAUW done when replacing a forward or tentative
definition. See testcase for more details.
- Fixes <rdar://problem/6108358>
llvm-svn: 54211
2008-07-30 16:32:24 +00:00
Daniel Dunbar
837fd272f8
Fix codegen of chained declarations
...
- Killed useless CodeGenModule::EmitGlobalVarDeclarator, instead just
recurse on any ScopedDecl.
- Fix for <rdar://problem/6093838>
llvm-svn: 54162
2008-07-29 17:47:36 +00:00
Chris Lattner
4591fd0aac
Fix rdar://6103124, the only dummy blocks are ones without names. Named blocks
...
are important part of control flow structures.
llvm-svn: 54078
2008-07-25 23:40:10 +00:00
Daniel Dunbar
b5586dad97
Fix long double test case
...
- Had wrong sizeof(long double) encoded into test case
- Results now agree with llvm-gcc
llvm-svn: 54059
2008-07-25 20:54:30 +00:00
Daniel Dunbar
0e5845c13a
Rework codegen of case ranges
...
- Fix multiple issues with the way case ranges were emitted, see test
cases details about the specific issues.
- The root issue was not being careful about how basic blocks were
emitted which led to them being chained together incorrectly,
resulting in improper control flow.
- Fixes <rdar://problem/6098585>
llvm-svn: 54006
2008-07-25 01:11:38 +00:00
Chris Lattner
d258325c2b
Fix a codegen crash on:
...
int foo(void) {
float x[2];
return x;
}
rdar://6093986
llvm-svn: 53946
2008-07-23 06:31:27 +00:00
Daniel Dunbar
327acd7a6c
Implement bzero, memset, memmove builtins.
...
This subsumes Nico Weber's patch and implements bzero in terms
of llvm.memset to match llvm-gcc.
llvm-svn: 53888
2008-07-22 00:26:45 +00:00
Daniel Dunbar
c2f67966f4
Add __builtin_powi[fl] support
...
llvm-svn: 53866
2008-07-21 18:44:41 +00:00
Daniel Dunbar
d93abc3bb0
Implement ffs, parity, and popcount builtins.
...
+ test case
llvm-svn: 53851
2008-07-21 17:19:41 +00:00
Daniel Dunbar
155ed24359
Prevent clang from emitting output when input has errors
...
+ test case
<rdar://problem/6080040>
http://llvm.org/bugs/show_bug.cgi?id=2280
llvm-svn: 53756
2008-07-18 16:38:05 +00:00
Chris Lattner
e6c693d932
Fix a bug where we didn't promote 'const float' (or typedefs) to
...
double in some places.
llvm-svn: 52846
2008-06-27 22:48:56 +00:00
Chris Lattner
4b413ea3bf
fix a bug handling type attributes in the declspec. declspec processing
...
used to mutate the attribute list for declspecs when the type was
converted, breaking the case where one declspec was shared by multiple
declarators.
This fixes rdar://6032532.
llvm-svn: 52769
2008-06-26 06:27:57 +00:00
Chris Lattner
64d8d074a8
fix this testcase after Mon Ping's intrinsic rename.
...
llvm-svn: 52754
2008-06-26 04:06:27 +00:00
Chris Lattner
5a92bab4f0
"This moves built-in Objective-C types up the scope chains to where they can be replaced by versions included from the runtime library's headers."
...
This makes it ok to use @"foo" without a declaration for NSConstantString.
Patch by David Chisnall!
llvm-svn: 52593
2008-06-21 20:20:39 +00:00
Eli Friedman
fd4c32164c
Make this test actually pass, in addition to the previous patch
...
which made it work.
llvm-svn: 52382
2008-06-17 05:36:46 +00:00
Eli Friedman
327944b343
Basic support for volatile loads and stores. Stores the volatile
...
qualifier in the lvalue, and changes lvalue loads/stores to honor
the volatile flag. Places which need some further attention are marked
with FIXMEs.
Patch by Cédric Venet.
llvm-svn: 52264
2008-06-13 23:01:12 +00:00
Argyrios Kyrtzidis
caec17eab9
Fix broken test.
...
llvm-svn: 52232
2008-06-12 12:44:52 +00:00
Argyrios Kyrtzidis
351763e156
Multiple tests in a single test file must be linked with '&&'.
...
Otherwise, failing tests other than the last one will not be reported.
llvm-svn: 52231
2008-06-12 12:40:02 +00:00
Argyrios Kyrtzidis
34fe86cd9c
Fix the setup of CodeGen/bitfield.c test.
...
Due to the broken setup it was passing the test while it should have failed.
llvm-svn: 52181
2008-06-10 15:48:26 +00:00
Eli Friedman
d5b11a3adc
Don't include complex.h or tgmath.h for this test; they aren't needed,
...
and including tgmath.h causes the test to fail for no good reason.
llvm-svn: 52167
2008-06-10 05:09:36 +00:00
Eli Friedman
e6e0f23a29
Add code to make test/CodeGen/struct-init.c work correctly without the
...
pointer cast hack currently in isIntegerConstantExpr
(in lib/AST/Expr.cpp). Also removes an odd test that even gcc doesn't accept.
The reason the pointer cast hack is relevant here is that it makes Sema
end up misinterpreting the relevant expression as a null pointer constant.
The reason for this patch is that I plan to remove the pointer cast hack
sometime soon because it causes strange issues, especially in its
current form; see my recent email to cfe-dev
"[PATCH] add constant expression evaluation to the AST and fix PR2413".
llvm-svn: 52120
2008-06-09 05:05:07 +00:00
Nuno Lopes
b6f7953818
implement the alias attirbute (in both Sema and Codegen)
...
llvm-svn: 52092
2008-06-08 15:45:52 +00:00
Eli Friedman
c98a7add43
Don't crash emitting an initializer for a static local with union type.
...
This fix just makes sure to construct the global with the appropriate
type, and fixes up the one user this affects to compensate.
llvm-svn: 52084
2008-06-08 01:23:18 +00:00
Eli Friedman
3ce7b20590
Fix crash with conversion to an address-space-qualified pointer. Bug
...
reported on cfe-dev by Cédric Venet.
Note that I seriously doubt that this perticular construct is useful,
though: it's a pointer in an alternate address space pointing into
unqualified address space.
llvm-svn: 52076
2008-06-07 17:27:51 +00:00
Eli Friedman
fd1e32b1f3
Reorganize this loop a bit so it doesn't crash for empty unions. Fixes
...
PR2419.
llvm-svn: 52060
2008-06-06 20:12:37 +00:00
Nuno Lopes
9b07b7b099
implement constant expr. sub ptr ptr
...
llvm-svn: 52049
2008-06-06 16:41:08 +00:00
Eli Friedman
2425cd8158
For setting attributes, don't assume there are ParamVarDecls available,
...
because trying to access non-existent ParamVarDecls can crash.
Testcase from the original source for PR2414.
llvm-svn: 51960
2008-06-04 19:41:28 +00:00
Nuno Lopes
7bd6e58ddc
fix crash when codegening 'cond ? lhs : call-to-void-func()'
...
llvm-svn: 51958
2008-06-04 19:15:45 +00:00
Eli Friedman
8547e1d129
Don't assume that the type of a FunctionDecl is a FunctionType; that
...
assumption isn't accurate in the presence of typedefs.
llvm-svn: 51951
2008-06-04 17:58:41 +00:00
Nuno Lopes
3fe4651e2e
fix decl attributes cleaning
...
this plugs the leak of attributes and also fixes a crash in the test
llvm-svn: 51862
2008-06-01 22:53:53 +00:00
Eli Friedman
10c2417570
Make sure _Bool globals have the correct type.
...
llvm-svn: 51838
2008-06-01 15:31:44 +00:00
Eli Friedman
252e5f1b29
Calculate alignment for local variables.
...
llvm-svn: 51826
2008-05-31 21:20:41 +00:00
Eli Friedman
6859a1b961
PR1893: Fix up the type of tentative definitions of incomplete array
...
types so that they end up the correct size.
llvm-svn: 51787
2008-05-30 20:39:54 +00:00
Eli Friedman
34994cbcbf
Fix and enable generating general union initializers. Essentially, what
...
this does is reconstruct the type for structs and arrays if the type
wouldn't be compatible otherwise.
The assertion about packing in the struct type reconstruction code
sucks, but I don't see any obvious way to fix it. Maybe we need a general
utility method to take a list of types and alignments and try to construct an
unpacked type if possible?
llvm-svn: 51785
2008-05-30 19:58:50 +00:00
Eli Friedman
f7fe41656c
Fix constant vector init for initializer lists with an incomplete list
...
of elements.
llvm-svn: 51769
2008-05-30 12:02:14 +00:00
Eli Friedman
617ba48fd5
Always check that the definition of a function has the correct type.
...
This fixes a crash on the included testcase (found in NetHack).
llvm-svn: 51767
2008-05-30 11:13:18 +00:00
Eli Friedman
43a6d51494
More complete/correct implementation of the comparison operators for
...
constant expressions.
llvm-svn: 51682
2008-05-29 15:17:49 +00:00
Eli Friedman
3c28524632
Fix an extremely subtle bug with pointer comparisons: they have to be
...
unsigned because it's possible (at least in theory) to have
have both positive and negative pointers pointing to the same object.
llvm-svn: 51681
2008-05-29 15:09:15 +00:00
Eli Friedman
133e8040ca
Rearrange EmitLValueForField a bit to work properly for _Bool bitfields
...
in unions (we don't want to do the union-specific bitcast for
bit-fields).
llvm-svn: 51678
2008-05-29 11:33:25 +00:00
Eli Friedman
045bf4ff82
Add codegen support for a few more kinds of initializer constant
...
expressions.
llvm-svn: 51677
2008-05-29 11:22:45 +00:00
Eli Friedman
174d9c26f1
Add CodeGen support for alignment on globals, both for unusual natural
...
alignment and alignment attributes.
llvm-svn: 51676
2008-05-29 11:10:27 +00:00
Eli Friedman
d72a9624a1
Tentative declarations are supposed to have common linkage, not weak.
...
This change makes clang generate the same thing as llvm-gcc.
llvm-svn: 51674
2008-05-29 11:03:17 +00:00
Eli Friedman
5a6d0ede91
Always use packed structs. This isn't really very nice, but there's
...
nothing fundamentally wrong with it. Emitting unpacked structs where
possible is more work for almost no practical benefit. We'll probably
want to fix it at some point anyway, but it's low priority.
The issue with long double in particular is that LLVM thinks an X86 long
double is 10 bytes, while clang considers it for all purposes to be
either 12 or 16 bytes, depending on the platform, even in a packed
struct.
llvm-svn: 51673
2008-05-29 10:58:49 +00:00
Devang Patel
1c56ace4df
Check first member alignment and uses packed struct if required.
...
llvm-svn: 51619
2008-05-27 22:45:40 +00:00
Devang Patel
d608074e09
Fix test case
...
llvm-svn: 51618
2008-05-27 22:44:22 +00:00
Eli Friedman
21911e89d5
A few more cases for aggregate values.
...
llvm-svn: 51596
2008-05-27 15:51:49 +00:00
Eli Friedman
5e2281ede8
Implementation of __builtin_ctlz.
...
llvm-svn: 51595
2008-05-27 15:32:46 +00:00
Eli Friedman
aee9e54dca
Don't swap function decls, and add them to the scope as they are
...
encountered. Mixing up the decls is unintuitive, and confuses the AST
destruction code. Fixes PR2360.
Note that there is a need to look up the characteristics and
declarations of a function associated with a particular name or decl,
but the original swapping code doesn't solve it properly.
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2008-May/001644.html is one
suggestion for how to fix that.
llvm-svn: 51584
2008-05-27 05:07:37 +00:00
Eli Friedman
078c963a31
Add a more reliable check for whether a static declaration has already
...
been used. In preparation for the fix to PR2360, but also a minor bug
in its own right.
llvm-svn: 51583
2008-05-27 04:58:01 +00:00
Eli Friedman
bdef5df44e
Generalize the float type generation code, and specifically fix the
...
codegen of X86 long double.
llvm-svn: 51578
2008-05-27 04:20:05 +00:00
Eli Friedman
43f6b67135
A small testcase; no patch, since it was a bug in a patch I never
...
committed.
llvm-svn: 51370
2008-05-21 13:21:01 +00:00
Eli Friedman
f77daf5e58
Fix test (it was incorrectly succeeding).
...
llvm-svn: 51310
2008-05-20 09:04:19 +00:00
Eli Friedman
53e38bd6b6
Add codegen support for stack address intrinsics.
...
llvm-svn: 51309
2008-05-20 08:59:34 +00:00
Eli Friedman
4b0e2a30e0
Implement codegen for comma operator for structs.
...
llvm-svn: 51304
2008-05-20 07:56:31 +00:00
Eli Friedman
a3a4068949
Implement CodeGen for __builtin_memcpy.
...
llvm-svn: 51282
2008-05-19 23:27:48 +00:00
Eli Friedman
541268086a
Remove illegal test.
...
llvm-svn: 51267
2008-05-19 20:17:34 +00:00
Eli Friedman
f23b6fa41f
Fix the emission of expressions like char a[10] = "asdf"; previously,
...
they were causing bad code to be emitted. There are two fixes here: one
makes sure we emit a string that is long enough, and one makes sure we
properly handle string initialization in init lists.
llvm-svn: 51259
2008-05-19 17:51:16 +00:00
Eli Friedman
f2442dcc8d
Fix support for _Bool bitfields. The issue is that the bitfield width
...
used for _Bool is not the same as the primitive width (which for _Bool
is 1 bit). The load and store changes add some casts to make the
types consistent. The EmitLValue changes make sure that the pointer is
of an appropriate type for loading the bitfield.
This isn't perfect, but it's an improvement, and getting everything
right depends on actually laying out structs in an ABI-compliant way.
llvm-svn: 51224
2008-05-17 20:03:47 +00:00
Eli Friedman
cb92a3f03b
Patch for PR2334, and a similar ObjC bug.
...
llvm-svn: 51193
2008-05-16 17:37:11 +00:00
Eli Friedman
a1b4ed8003
Implementation of __builtin_shufflevector, a portable builtin capable of
...
expressing the full flexibility of the LLVM shufflevector instruction.
The expected immediate usage is in *mmintrin.h, so that they don't
depend on the mess of gcc-inherited (and not completely implemented)
shuffle builtins.
llvm-svn: 51113
2008-05-14 19:38:39 +00:00
Eli Friedman
9fd8b68568
Add codegen support for block-level compound literals.
...
llvm-svn: 51081
2008-05-13 23:18:27 +00:00
Eli Friedman
6a7087e455
Emit basic block for switch body; fixes PR2307.
...
llvm-svn: 50968
2008-05-12 16:08:04 +00:00
Eli Friedman
6e31321043
Don't try to take the address of a bitfield; fixes PR2310.
...
llvm-svn: 50966
2008-05-12 15:06:05 +00:00
Mon P Wang
b84407d6ec
Added support to generate some atomic operators (add, sub, and, or etc..)
...
llvm-svn: 50919
2008-05-09 22:40:52 +00:00
Devang Patel
ac25fc6f2e
Begin handling union bitfields.
...
Note, this is just beginning.
llvm-svn: 50835
2008-05-07 22:28:29 +00:00
Devang Patel
243d5cd283
Fix PR2101 - Codegen crash during bitfield initialization.
...
llvm-svn: 50769
2008-05-06 19:57:59 +00:00
Chris Lattner
033352b036
add a testcase
...
llvm-svn: 50608
2008-05-04 00:56:25 +00:00
Chris Lattner
73669defed
remove the 'unused static' diagnostic from codegen. This should be
...
reimplemented in Sema someday. This is tracked in PR2236. Until then
disabling it removes some bogus diagnostics (see 2236).
llvm-svn: 50263
2008-04-25 15:47:13 +00:00
Nate Begeman
1c906206b8
Fix PR2236
...
Add test
Implement feedback from Chris re: PR1998
llvm-svn: 50001
2008-04-20 20:38:08 +00:00
Nate Begeman
ce4d7fce6b
OCUVector -> ExtVector, shorthand for extended vector, per feedback from Chris.
...
llvm-svn: 49942
2008-04-18 23:10:10 +00:00
Chris Lattner
d71f83a8cb
this started failing because a GEP was constant folded,
...
improve the robustness of the test.
llvm-svn: 49618
2008-04-13 19:54:28 +00:00
Chris Lattner
aa9c7aed0f
Add support for C++ default arguments, and rework Parse-Sema
...
interaction for function parameters, fixing PR2046.
Patch by Doug Gregor!
llvm-svn: 49369
2008-04-08 04:40:51 +00:00
Chris Lattner
579a05d767
Fix PR2049, updating Eli's patch that fixes to mainline. This produces incorrect
...
code, but the codegen doesn't crash. I'll file a bugzilla for the AST being wrong.
llvm-svn: 49226
2008-04-04 18:42:16 +00:00
Chris Lattner
f3bc75afcf
Since isComplexType() no longer returns true for _Complex integers, the code
...
generator needs to call isAnyComplexType(). This fixes PR1960.
llvm-svn: 49220
2008-04-04 16:54:41 +00:00
Chris Lattner
e799eb5daa
Fix PR2081 (problems codegen'ing some recursive structures) patch
...
by Lauro Venancio!
llvm-svn: 49144
2008-04-03 05:50:42 +00:00
Chris Lattner
a21ad8058a
Fix several bugs in array -> pointer decomposition.
...
First, we got several CVR propagation cases wrong, which Eli pointed
out in PR2039.
Second, we didn't propagate address space qualifiers correctly, leading
to incorrect lowering of code in CodeGen/address-space.c.
Third, we didn't uniformly propagate the specifier in the array to the
pointer ("int[restrict 4]" -> "int *restrict").
This adds an ASTContext::getArrayDecayedType member that handles the
non-trivial logic for this seemingly simple operation.
llvm-svn: 49078
2008-04-02 05:18:44 +00:00
Chris Lattner
0fdc379475
The operand to the visibility attribute is required to be a quoted string, not a bare identifier.
...
llvm-svn: 47893
2008-03-04 18:08:48 +00:00
Gabor Greif
e2e5c3f394
The attribute nothrow maps to llvm attribute nounwind. Fix testcase.
...
llvm-svn: 47841
2008-03-03 14:53:09 +00:00
Chris Lattner
65079bd9be
fix codegen support for functions that are nothrow and noreturn.
...
llvm-svn: 47838
2008-03-03 03:45:26 +00:00
Chris Lattner
8496639787
Add a bunch of attributes, patch by Nuno Lopes.
...
llvm-svn: 47837
2008-03-03 03:28:21 +00:00
Lauro Ramos Venancio
01a72ff5d3
Implement codegen for the following static var init.
...
void g() {
static char a[10];
static char *b = a;
}
Now we can compile wget!
llvm-svn: 47627
2008-02-26 21:41:45 +00:00
Lauro Ramos Venancio
8af648ac55
Fix a bug in ConvertAsmString function.
...
llvm-svn: 47618
2008-02-26 19:19:58 +00:00
Lauro Ramos Venancio
c9fbd7301a
Convert x86 target specific inline asm constraints to LLVM.
...
llvm-svn: 47609
2008-02-26 18:33:46 +00:00
Eli Friedman
c62dd9d345
Some const initializer tests for stuff I just committed.
...
llvm-svn: 47442
2008-02-21 18:07:36 +00:00
Chris Lattner
3b418d8446
implement codegen support for sizeof(void), fixing PR2080.
...
llvm-svn: 47429
2008-02-21 05:45:29 +00:00
Lauro Ramos Venancio
e2162c6549
Simplify aggregate initilizer implementation. Use the CodeGenModule::EmitConstantExpr method when
...
possible.
Fix mediabench/mpeg2/mpeg2dec test.
llvm-svn: 47336
2008-02-19 19:27:31 +00:00
Lauro Ramos Venancio
c58fc4052e
A global without initializer must be emitted as weak.
...
Fix Olden/bh test.
llvm-svn: 47292
2008-02-19 00:04:15 +00:00
Lauro Ramos Venancio
dec89733a7
Implement multi-dimension array initalizer.
...
Fix McCat/08-main test.
llvm-svn: 47286
2008-02-18 22:44:02 +00:00
Chris Lattner
df53e20f2d
implement codegen support for aggregates casted to void.
...
llvm-svn: 47226
2008-02-16 23:55:16 +00:00
Lauro Ramos Venancio
bada8d4b5b
Implement extern block var.
...
llvm-svn: 47223
2008-02-16 22:30:38 +00:00
Eli Friedman
de4496bb9e
Basic codegen test for conditional with void*.
...
llvm-svn: 46940
2008-02-10 23:18:23 +00:00
Lauro Ramos Venancio
d74057fa87
Fix a bitfield regression. Reported by Anders Carlsson.
...
llvm-svn: 46889
2008-02-08 19:46:46 +00:00
Lauro Ramos Venancio
9eff02d9f8
Simplify bitfield codegen.
...
Fix codegen of struct { short a[3]; int b:15; }.
llvm-svn: 46859
2008-02-07 19:29:53 +00:00
Lauro Ramos Venancio
0f166de892
Fix codegen of
...
struct {
char a[3];
unsigned char b:1;
};
Fix PR1990.
llvm-svn: 46856
2008-02-07 18:18:58 +00:00
Chris Lattner
871e0ceffb
explicitly document that return statement argument does not necessarily follow the result type of the function. Add testcase.
...
llvm-svn: 46823
2008-02-06 21:20:34 +00:00
Eli Friedman
220ee41011
Fix the codegen of structs with flexible array members.
...
llvm-svn: 46806
2008-02-06 05:33:51 +00:00
Chris Lattner
a5e4d30942
Finish off the refactoring of type handling stuff. Now we recompile every
...
tag decl after it has been completed
llvm-svn: 46798
2008-02-06 04:51:19 +00:00
Chris Lattner
b5eda6253b
pull .ll and .bc writing out of the ASTConsumer destructors into some top
...
level code in clang. This is a cleanup, but does implement "-o" for
-emit-llvm. One effect of this is that "clang foo.c -emit-llvm" will now
emit into foo.ll instead of stdout. Use "clang foo.c -emit-llvm -o -" or
"clang < foo.c -emit-llvm" to get the old behavior.
llvm-svn: 46791
2008-02-06 01:42:25 +00:00
Chris Lattner
b1537ebdd4
rewrite some of the type refinement code to eliminate dangling pointers
...
simplify the code and generally make it more robust.
llvm-svn: 46745
2008-02-05 08:06:13 +00:00
Chris Lattner
b977b6a59b
Relax an assertion, fixing PR1968
...
llvm-svn: 46742
2008-02-05 06:37:34 +00:00
Devang Patel
a703a67384
Cleanup InitListExpr code generation code.
...
Handle padding fields while initializing struct (fix PR 1962)
llvm-svn: 46736
2008-02-05 02:39:50 +00:00
Christopher Lamb
da8e5d979e
Add ending newline to test.
...
llvm-svn: 46692
2008-02-04 02:35:11 +00:00
Christopher Lamb
025b5fb883
Add experimental support for address space qualified types. Address space
...
qualifiers use the __attribute__((address_space(id))) syntax.
llvm-svn: 46691
2008-02-04 02:31:56 +00:00
Anders Carlsson
6fa0813186
Add RUN line.
...
llvm-svn: 46663
2008-02-02 04:49:12 +00:00
Chris Lattner
bfc2d8acd9
testcase for previous patch.
...
llvm-svn: 46662
2008-02-02 04:45:42 +00:00
Anders Carlsson
53fef5d9d6
Add trailing newline.
...
llvm-svn: 46652
2008-02-01 23:27:51 +00:00
Anders Carlsson
0b05d041f2
Only OCU vectors can be splatted.
...
llvm-svn: 46651
2008-02-01 23:17:55 +00:00
Chris Lattner
a94035bbb8
Fix PR1921 by promoting negative indices to intptrty.
...
llvm-svn: 46599
2008-01-31 04:12:50 +00:00
Lauro Ramos Venancio
86b99c1b79
getLLVMFieldNo can't be called before emitting the base value.
...
llvm-svn: 46576
2008-01-30 21:23:20 +00:00
Lauro Ramos Venancio
f5291d2871
A pointer to an opaque type is an "opaque type definition".
...
llvm-svn: 46575
2008-01-30 21:21:08 +00:00
Eli Friedman
1bc0fed9a5
Fix codegen for conditionals with incommpatible pointer types. Code
...
that causes this isn't really correct, but if we're going to accept
this, it should come up with a consistent AST.
llvm-svn: 46557
2008-01-30 17:02:03 +00:00
Chris Lattner
05ba4cbe17
fix a problem reported by Eli, caused by not keeping bool as i1
...
when in a register.
llvm-svn: 46552
2008-01-30 07:01:17 +00:00
Devang Patel
45a65d2ee1
Handle incomplete struct initializer.
...
llvm-svn: 46534
2008-01-29 23:23:18 +00:00
Eli Friedman
7031d734ed
Fix a bug where CodeGen would attempt to erase an instruction that was
...
already used.
llvm-svn: 46519
2008-01-29 18:13:51 +00:00
Anders Carlsson
ce0740e1f5
Handle binary or in constant expressions.
...
llvm-svn: 46482
2008-01-29 01:33:32 +00:00
Anders Carlsson
0674a7417f
Correctly handle constants that refer to enums.
...
llvm-svn: 46481
2008-01-29 01:28:48 +00:00
Anders Carlsson
6f2a10e8c9
Correctly handle scalars in braces.
...
llvm-svn: 46480
2008-01-29 01:15:48 +00:00
Nate Begeman
43eec490fb
Support checking and codegen of constant vector globals
...
llvm-svn: 46343
2008-01-25 05:34:48 +00:00
Lauro Ramos Venancio
09af71c2a6
Implement bitfield write.
...
llvm-svn: 46258
2008-01-22 22:36:45 +00:00
Lauro Ramos Venancio
2ddcb25a3b
Implement bitfield read.
...
llvm-svn: 46257
2008-01-22 20:17:04 +00:00
Lauro Ramos Venancio
37bae3e8aa
Simplify the bitfield codegen.
...
llvm-svn: 46230
2008-01-21 22:54:57 +00:00
Anders Carlsson
60bfc161a0
Assert that the type of the cast is equal to the _unqualified_ type of the subexpression. Fixes a problem spotted by Nuno Lopes.
...
llvm-svn: 46158
2008-01-18 02:25:57 +00:00
Chris Lattner
a65e1f3b31
Move promoteExprToType from being a static method in SemaExpr.cpp to being
...
a method named ImpCastExprToType in Sema.
Use this method to insert implicit casts for case statements from their
operand type to the condition type of the switch. This fixes a crash on
test/CodeGen/statements.c, reported by Eli Friedman.
llvm-svn: 46083
2008-01-16 19:17:22 +00:00
Anders Carlsson
1ba25ca171
Add codegen upport for implicit casts to aggregate exprs.
...
llvm-svn: 45954
2008-01-14 06:28:57 +00:00
Chris Lattner
41a1ef0dfe
implement proper support for _Bool in memory, which is usually i8, not i1.
...
This fixes a crash reported by Seo Sanghyeon
llvm-svn: 45778
2008-01-09 18:47:25 +00:00
Chris Lattner
20455f204f
Fix a crash reported by Seo Sanghyeon.
...
llvm-svn: 45530
2008-01-03 06:36:51 +00:00
Chris Lattner
7977cca8e8
Fix PR1895: a crash on an ugly gcc extension.
...
llvm-svn: 45505
2008-01-02 21:54:09 +00:00
Nate Begeman
330aaa79e0
Allow implicit casts during arithmetic for OCUVector operations
...
Add codegen support and test for said casts.
llvm-svn: 45443
2007-12-30 02:59:45 +00:00
Christopher Lamb
d91c3d4926
Enable CodeGen for member expressions based on call expressions returning aggregate types. This enables expressions like 'foo().member.submember'.
...
llvm-svn: 45395
2007-12-29 05:02:41 +00:00
Chris Lattner
807979824e
use -emit-llvm-bc
...
llvm-svn: 45372
2007-12-27 20:35:58 +00:00
Chris Lattner
40ad6cd854
no need to verify this, no errors/warnings are expected.
...
llvm-svn: 45371
2007-12-27 20:31:56 +00:00
Seo Sanghyeon
acb00f4a73
Remove broken assert from CodeGen. Better check is done in Sema.
...
llvm-svn: 45358
2007-12-26 05:21:37 +00:00
Seo Sanghyeon
6f1b274976
String literal in aggregate expression
...
llvm-svn: 45330
2007-12-23 03:11:58 +00:00
Devang Patel
505b4f1fd4
Convert opaque type when struct definition is seen.
...
llvm-svn: 45287
2007-12-21 19:35:28 +00:00
Chris Lattner
37bd2ecb11
local static vars are globals also. This fixes a testcase
...
reported by Seo.
llvm-svn: 45156
2007-12-18 08:16:44 +00:00
Seo Sanghyeon
d4d8c3c717
Array subscription in aggregate expression
...
llvm-svn: 45023
2007-12-14 02:04:12 +00:00
Seo Sanghyeon
3abb6d8435
Implement dereference operator in aggregate expression
...
llvm-svn: 45020
2007-12-14 01:09:11 +00:00
Chris Lattner
c6208a72f7
Fix a codegen crash on test/CodeGen/cast.c, reported by Keith.
...
llvm-svn: 44908
2007-12-12 04:13:20 +00:00
Devang Patel
b37b12d102
Match union field type when member expression is u->x
...
llvm-svn: 44879
2007-12-11 21:33:16 +00:00
Chris Lattner
11fbda2b5a
Reimplement support for strings that initialize global inits now that
...
the types are right in sema. Thanks Steve.
llvm-svn: 44834
2007-12-11 01:38:45 +00:00
Devang Patel
ab6aadb34a
Add support to share llvm fields for bit-fields.
...
For example, struct { char a; short b:2; };
llvm-svn: 44830
2007-12-11 00:49:18 +00:00
Steve Naroff
f727faf2ed
Explicitly set the string literal type from "char *" to "constant array of char".
...
At this point, I am fairly certain the front-end is correct. Unfortunately, the back-end is still unhappy.
That said, I've commented out the two lines in globalinit.c that are causing problems.
Chris, please have a look...thanks!
llvm-svn: 44823
2007-12-11 00:00:01 +00:00
Chris Lattner
433fb26707
add support for implicit cast from array to pointer that is not the element
...
type.
llvm-svn: 44809
2007-12-10 19:50:32 +00:00
Chris Lattner
e665077f9a
disable case that makes this fail.
...
llvm-svn: 44807
2007-12-10 19:44:50 +00:00
Devang Patel
bb5c0d8960
Use getABITypeSizeInBits() instead of getTypeSizeInBits() during struct layout.
...
llvm-svn: 44798
2007-12-10 18:25:34 +00:00
Chris Lattner
686628e052
extend or truncate the initializer for a string initializer to match its type.
...
llvm-svn: 44751
2007-12-10 00:00:56 +00:00
Chris Lattner
c25c42f3ca
Implement codegen support for:
...
char text[8] = "string";
Big fixme remains.
llvm-svn: 44750
2007-12-09 23:49:42 +00:00
Chris Lattner
283d094b75
implement support for functions that initialize globals.
...
llvm-svn: 44730
2007-12-09 00:36:01 +00:00
Devang Patel
65a2288eef
More struct bitfields layout work. Now handle,
...
struct STestB1 {char a; char b:2; } stb1;
struct STestB2 {char a; char b:5; char c:4} stb2;
llvm-svn: 44664
2007-12-06 19:16:05 +00:00
Seo Sanghyeon
3d072bea09
Ignore typedefs in pointer arithmetic codegen.
...
llvm-svn: 44529
2007-12-03 06:23:43 +00:00
Seo Sanghyeon
828429fea9
Fix isStructureType and isUnionType to ignore typedefs, as stated
...
in the header. Patch by Cédric Venet.
llvm-svn: 44519
2007-12-02 16:57:27 +00:00
Christopher Lamb
0cbd8723f3
Treat discarding array initializer elements as an extwarn (so -pedantic-errors flags it). Allow CodeGen to truncate the initializer if needed.
...
llvm-svn: 44518
2007-12-02 08:49:54 +00:00
Christopher Lamb
39aeb4069b
Commit test for CL 44440.
...
llvm-svn: 44514
2007-12-02 07:47:19 +00:00
Chris Lattner
e4f0feb534
Fix buggy test
...
llvm-svn: 44513
2007-12-02 07:46:00 +00:00
Chris Lattner
d8d18d561e
add codegen support for global inits that require array decay.
...
llvm-svn: 44511
2007-12-02 07:30:13 +00:00
Chris Lattner
5bcdf24a50
Handle global variable definitions which change the type of a definition, such as:
...
extern int x[];
void foo() { x[0] = 1; }
int x[10];
void bar() { x[0] = 1; }
llvm-svn: 44509
2007-12-02 07:09:19 +00:00
Chris Lattner
41af8182d8
implement codegen for functions whose function body type don't match
...
their prototype.
llvm-svn: 44506
2007-12-02 06:27:33 +00:00
Oliver Hunt
aefc8fd415
Support initalisers for more than just int-typed static variables.
...
We now use the CodeGenModule logic for generating the constant
initialiser expression, so happily further initialiser fixes should
automatically work for statics as well.
llvm-svn: 44495
2007-12-02 00:11:25 +00:00
Chris Lattner
9e137aad78
fix a couple switch codegen problems Oliver reported.
...
llvm-svn: 44484
2007-12-01 05:27:33 +00:00
Chris Lattner
1386de8757
fix a bug handling typedefs in member expr codegen. Patch
...
by Seo Sanghyeon
llvm-svn: 44455
2007-11-30 18:02:19 +00:00
Chris Lattner
b6a7b582ee
Fix a codegen crash on void ?: reported by Oliver
...
llvm-svn: 44454
2007-11-30 17:56:23 +00:00
Chris Lattner
aa0b570dfb
Support fully general case expressions, patch by Sanghyeon Seo!
...
llvm-svn: 44453
2007-11-30 17:44:57 +00:00
Oliver Hunt
93c4ce650c
Fix typo in writable string test
...
llvm-svn: 44398
2007-11-28 06:52:03 +00:00
Oliver Hunt
a951571941
Adding code gen tests for writable and shared string literals.
...
llvm-svn: 44397
2007-11-28 06:27:12 +00:00
Chris Lattner
2ab40a6207
Fix sema support for the gnu ?: expression with a
...
missing middle expression, and fix a codegen bug where
we didn't correctly promote the condition to the right
result type. This fixes PR1824.
llvm-svn: 44322
2007-11-26 01:40:58 +00:00
Chris Lattner
a3ee6fa84f
this works.
...
llvm-svn: 44321
2007-11-26 01:39:17 +00:00
Chris Lattner
136449a6d7
improve codegen for global variable initializers, implementing
...
test/CodeGen/global-with-initialiser.c
Patch by Oliver Hunt!
llvm-svn: 44290
2007-11-23 22:07:55 +00:00
Anders Carlsson
9c1011c090
Put back the flags field in the constant CF string type.
...
llvm-svn: 44222
2007-11-19 00:25:30 +00:00
Anders Carlsson
bfd60eedd7
Generate code for member exprs.
...
llvm-svn: 43641
2007-11-02 16:59:10 +00:00
Devang Patel
ad175428c6
start adding pading fields.
...
llvm-svn: 43590
2007-11-01 00:07:12 +00:00
Anders Carlsson
e89b84ab29
Fix a typo that prevented pointer-to-int conversions from working.
...
llvm-svn: 43588
2007-10-31 23:18:02 +00:00
Anders Carlsson
0370eb2034
Handle function calls that return aggregate expressions.
...
llvm-svn: 43581
2007-10-31 22:04:46 +00:00
Devang Patel
cc4c2930ae
New test to verify llvm struct layout.
...
llvm-svn: 43577
2007-10-31 21:02:10 +00:00
Chris Lattner
595db86c9d
__real__ and __imag__ can be lvalues. Add support to ast and codegen for them.
...
llvm-svn: 43525
2007-10-30 22:53:42 +00:00
Devang Patel
ed93c3c3b3
Codegen union member references.
...
llvm-svn: 43390
2007-10-26 19:42:18 +00:00
Devang Patel
7718d7a2eb
Handle non LValue base expressions.
...
llvm-svn: 43387
2007-10-26 18:15:21 +00:00
Devang Patel
ffdb07c939
Code gen static initializer.
...
llvm-svn: 43386
2007-10-26 17:50:58 +00:00
Devang Patel
8717417b3b
Codegen array initializers.
...
llvm-svn: 43385
2007-10-26 17:44:44 +00:00
Devang Patel
19c2b9a66f
Codegen global array initializers.
...
llvm-svn: 43383
2007-10-26 16:31:40 +00:00
Devang Patel
b989c9e65c
Fix "strbuf += stufflen;" crash.
...
llvm-svn: 43365
2007-10-25 22:19:13 +00:00
Devang Patel
d68df20620
Handle
...
foo()->a = 42;
llvm-svn: 43315
2007-10-24 22:26:28 +00:00
Devang Patel
b67e596d86
Handle non-constant initializers.
...
llvm-svn: 43301
2007-10-24 18:05:48 +00:00
Devang Patel
61eaea88f8
Fix typo.
...
llvm-svn: 43269
2007-10-23 23:29:51 +00:00
Devang Patel
65c4afb940
Handle nested structs.
...
typdef struct A { int i; struct A *next; } A
llvm-svn: 43268
2007-10-23 23:26:46 +00:00
Devang Patel
30efa2eec9
Handle simple struct member expr.
...
llvm-svn: 43258
2007-10-23 20:28:39 +00:00
Devang Patel
152f18f671
Recognize while(1) and avoid extra blocks.
...
llvm-svn: 42811
2007-10-09 20:51:27 +00:00
Devang Patel
f8a76755df
new test
...
llvm-svn: 42810
2007-10-09 20:37:41 +00:00
Devang Patel
1166312e8b
Code gen case statement ranges.
...
llvm-svn: 42766
2007-10-08 20:57:48 +00:00
Devang Patel
64a9ca7c58
Support case statement ranges.
...
llvm-svn: 42648
2007-10-05 20:54:07 +00:00
Devang Patel
da5d6bbc40
switch statement code gen.
...
llvm-svn: 42616
2007-10-04 23:45:31 +00:00
Chris Lattner
8a241f9359
Teach Type::is[un]SignedIntegerType about enum decls. This allows the code generator
...
to emit signed comparisons when needed for enum decl references. This implements
test/CodeGen/enum.c. I think enums should be good now.
llvm-svn: 41572
2007-08-29 17:48:46 +00:00
Chris Lattner
23bf38b8c5
add some more testcases now that sema is happier :)
...
llvm-svn: 41492
2007-08-27 16:37:44 +00:00
Chris Lattner
61f6077814
testcase that doesn't work quite yet
...
llvm-svn: 41478
2007-08-27 05:23:45 +00:00
Chris Lattner
02aac86549
new testcases
...
llvm-svn: 41465
2007-08-26 22:41:57 +00:00
Chris Lattner
1bc6fac5c6
new testcase
...
llvm-svn: 41406
2007-08-25 21:57:08 +00:00
Chris Lattner
9f0ad96b3e
implement codegen for real/imag. TODO: imag of non-complex.
...
llvm-svn: 41376
2007-08-24 21:20:17 +00:00
Chris Lattner
3d966d6556
Teach emit-llvm for scalars to properly handle compound assignment
...
operators in all their glory :)
llvm-svn: 41373
2007-08-24 21:00:35 +00:00
Chris Lattner
afd455c0cf
make this harder
...
llvm-svn: 41346
2007-08-23 23:49:47 +00:00
Chris Lattner
725c6a4279
this test is passing, though it is generating bogus code at the moment.
...
llvm-svn: 41314
2007-08-23 05:47:53 +00:00
Chris Lattner
76ba849ed3
Fix array->pointer decay. This unbreaks test/CodeGen/array.c
...
llvm-svn: 41202
2007-08-20 22:37:10 +00:00
Chris Lattner
afada9b077
xfail this for now.
...
llvm-svn: 41015
2007-08-11 00:05:07 +00:00
Chris Lattner
e9a91ae4ea
make this harder
...
llvm-svn: 40994
2007-08-10 17:02:59 +00:00
Chris Lattner
b20b94de3a
testcase for vector element access stuff.
...
llvm-svn: 40783
2007-08-03 16:42:43 +00:00
Gabor Greif
e97cd7e65c
add FIXME and un-XFAIL test
...
llvm-svn: 39858
2007-07-14 20:05:18 +00:00
Gabor Greif
03a0073b36
fix type of main, use !=
...
llvm-svn: 39842
2007-07-13 23:40:27 +00:00
Gabor Greif
d4606aa36e
implement _Complex * == and !=
...
llvm-svn: 39841
2007-07-13 23:33:18 +00:00
Gabor Greif
f7b1f667d4
a simple _Complex testcase
...
llvm-svn: 39836
2007-07-13 22:15:44 +00:00
Chris Lattner
91dacfec85
Check in these testcases.
...
llvm-svn: 39829
2007-07-13 20:18:44 +00:00