Chris Lattner
53621a535d
Implement support for formal arguments. We can now compile this:
...
int test(int X, short Y, float Z) {
return (int)(X*Y+Z);
}
to:
define i32 @test(i32 %X, i16 %Y, float %Z) {
entry:
%promote = sext i16 %Y to i32 ; <i32> [#uses=1]
%mul = mul i32 %promote, %X ; <i32> [#uses=1]
%promote3 = sitofp i32 %mul to float ; <float> [#uses=1]
%add = add float %promote3, %Z ; <float> [#uses=1]
%conv = fptosi float %add to i32 ; <i32> [#uses=1]
ret i32 %conv
}
with:
$ clang -emit-llvm t.c | llvm-as | opt -std-compile-opts | llvm-dis
llvm-svn: 39652
2007-06-13 20:44:40 +00:00
Chris Lattner
45bb914249
Convert argument types over, which works for trivial scalars.
...
llvm-svn: 39625
2007-06-09 02:28:57 +00:00
Chris Lattner
d9d2fb1420
Implement array subscripts for non-vla types.
...
llvm-svn: 39622
2007-06-08 23:31:14 +00:00
Chris Lattner
8394d795c3
implement codegen of a bunch more loop constructs and most expressions
...
llvm-svn: 39593
2007-06-05 20:53:16 +00:00
Chris Lattner
b16f455e8c
Type::isSignedInteger() and isUnsignedInteger() did not properly account for
...
'char', which varies based on the target.
Instead of spreading target knowledge throughout the compiler, bifurcate char
into Char_S and Char_U, and have ASTContext create the right one based on the
target, when it starts up.
llvm-svn: 39577
2007-06-03 07:25:34 +00:00
Chris Lattner
6db1fb845a
implement a first hack at codegen'ing the usual unary conversions.
...
This allows us to compile:
int func() {
int A[10];
if (!A) {
to:
define i32 @func() {
entry:
%A = alloca [10 x i32] ; <[10 x i32]*> [#uses=1]
%arraydecay = getelementptr [10 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1]
%tobool = icmp ne i32* %arraydecay, null ; <i1> [#uses=1]
%lnot = xor i1 %tobool, true ; <i1> [#uses=1]
br i1 %lnot, label %ifthen, label %ifend
-Chris
llvm-svn: 39564
2007-06-02 22:49:07 +00:00
Chris Lattner
2b4e21ac3f
Implement translation of pointer, reference and simple array types. We now
...
compile:
void foo() {
int A[10];
int *P;
into:
entry:
%A = alloca [10 x i32] ; <[10 x i32]*> [#uses=0]
%P = alloca i32* ; <i32**> [#uses=0]
llvm-svn: 39561
2007-06-02 19:52:24 +00:00
Chris Lattner
03df12294b
Add initial support for fixed-size local vardecls. This allows us to compile:
...
int func() {
register int X;
{
int Y;
into:
define i32 @func() {
entry:
%X = alloca i32 ; <i32*> [#uses=0]
%Y = alloca i32 ; <i32*> [#uses=0]
%allocapt = bitcast i32 undef to i32 ; <i32> [#uses=0]
...
llvm-svn: 39553
2007-06-02 04:53:11 +00:00
Chris Lattner
84915fa79b
Start stubbing out decl codegen.
...
llvm-svn: 39550
2007-06-02 04:16:21 +00:00
Chris Lattner
3f3dbeedd3
implement codegen support for return of void and simple scalars.
...
llvm-svn: 39547
2007-06-02 03:19:07 +00:00
Chris Lattner
adb6372aa5
Add support for functions that return non-void.
...
llvm-svn: 39546
2007-06-02 03:02:07 +00:00
Chris Lattner
e47e440c42
split stmt/expr codegen into their own files.
...
llvm-svn: 39540
2007-06-01 18:02:12 +00:00
Chris Lattner
dc6e3feade
emit a return at the end of the function. Run the llvm verifier.
...
llvm-svn: 39534
2007-05-30 22:55:31 +00:00
Chris Lattner
5269c0377c
Add support for codegen'ing paren exprs and if stmts. We can now codegen:
...
void test() {
goto l;
l:
if (11) {
j: ;
}
}
into:
define void @test() {
entry:
br label %l
l: ; preds = %entry
icmp ne i32 11, 0 ; <i1>:0 [#uses=1]
br i1 %0, label %ifthen, label %ifend
ifthen: ; preds = %l
br label %j
j: ; preds = %ifthen
br label %ifend
ifend: ; preds = %j, %l
}
whoa... :)
llvm-svn: 39533
2007-05-30 21:03:58 +00:00
Chris Lattner
208ae96a8c
implement codegen of integer literals.
...
llvm-svn: 39530
2007-05-30 17:57:17 +00:00
Chris Lattner
ac24820fa5
Implement codegen support for labels and gotos. We now compile:
...
void test1() {
foo:
goto foo;
goto foo;
goto foo;
}
void test() {
goto l;
l:
;
}
into:
define void @test1() {
entry:
br label %foo
foo: ; preds = %0, %foo, %entry
br label %foo
; No predecessors!
br label %foo
; No predecessors!
}
define void @test() {
entry:
br label %l
l: ; preds = %entry
}
llvm-svn: 39524
2007-05-30 00:13:02 +00:00
Chris Lattner
308f431017
Add codegen support for NullStmt and CompoundStmt. {;;{};;} is now ours!
...
llvm-svn: 39522
2007-05-29 23:50:05 +00:00
Chris Lattner
d1af2d2956
Implement conversion of clang ast types to LLVM types, at least for some trivial
...
cases.
llvm-svn: 39519
2007-05-29 23:17:50 +00:00
Chris Lattner
bed314465a
Reorganize codegen files.
...
llvm-svn: 39504
2007-05-28 01:07:47 +00:00