Skip to content

Commit

Permalink
irgen: Add binary expression test cases.
Browse files Browse the repository at this point in the history
  • Loading branch information
mewmew committed Jun 15, 2016
1 parent 6b2117d commit 2a20291
Show file tree
Hide file tree
Showing 3 changed files with 198 additions and 1 deletion.
8 changes: 7 additions & 1 deletion irgen/irgen_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func TestGen(t *testing.T) {
path: "../testdata/extra/irgen/local_def.c",
want: "../testdata/extra/irgen/local_def.ll",
},
// If statements.
// If and if-else statements.
{
path: "../testdata/extra/irgen/if_stmt.c",
want: "../testdata/extra/irgen/if_stmt.ll",
Expand All @@ -62,10 +62,16 @@ func TestGen(t *testing.T) {
path: "../testdata/extra/irgen/paren_expr.c",
want: "../testdata/extra/irgen/paren_expr.ll",
},
// Unary expressions.
{
path: "../testdata/extra/irgen/unary_expr.c",
want: "../testdata/extra/irgen/unary_expr.ll",
},
// Binary expressions.
{
path: "../testdata/extra/irgen/binary_expr.c",
want: "../testdata/extra/irgen/binary_expr.ll",
},
}

for _, g := range golden {
Expand Down
71 changes: 71 additions & 0 deletions testdata/extra/irgen/binary_expr.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
int f() {
int a;
int b;
return a + b;
}

int g() {
int a;
int b;
return a - b;
}

int h() {
int a;
int b;
return a * b;
}

int i() {
int a;
int b;
return a / b;
}

int j() {
int a;
int b;
return a < b;
}

int k() {
int a;
int b;
return a > b;
}

int l() {
int a;
int b;
return a <= b;
}

int m() {
int a;
int b;
return a >= b;
}

int n() {
int a;
int b;
return a != b;
}

int o() {
int a;
int b;
return a == b;
}

int p() {
int a;
int b;
return a && b;
}

int q() {
int a;
int b;
return a = b;
}
120 changes: 120 additions & 0 deletions testdata/extra/irgen/binary_expr.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
define i32 @f() {
0:
%a = alloca i32
%b = alloca i32
%1 = load i32, i32* %a
%2 = load i32, i32* %b
%3 = add i32 %1, %2
ret i32 %3
}
define i32 @g() {
0:
%a = alloca i32
%b = alloca i32
%1 = load i32, i32* %a
%2 = load i32, i32* %b
%3 = sub i32 %1, %2
ret i32 %3
}
define i32 @h() {
0:
%a = alloca i32
%b = alloca i32
%1 = load i32, i32* %a
%2 = load i32, i32* %b
%3 = mul i32 %1, %2
ret i32 %3
}
define i32 @i() {
0:
%a = alloca i32
%b = alloca i32
%1 = load i32, i32* %a
%2 = load i32, i32* %b
%3 = sdiv i32 %1, %2
ret i32 %3
}
define i32 @j() {
0:
%a = alloca i32
%b = alloca i32
%1 = load i32, i32* %a
%2 = load i32, i32* %b
%3 = icmp slt i32 %1, %2
%4 = zext i1 %3 to i32
ret i32 %4
}
define i32 @k() {
0:
%a = alloca i32
%b = alloca i32
%1 = load i32, i32* %a
%2 = load i32, i32* %b
%3 = icmp sgt i32 %1, %2
%4 = zext i1 %3 to i32
ret i32 %4
}
define i32 @l() {
0:
%a = alloca i32
%b = alloca i32
%1 = load i32, i32* %a
%2 = load i32, i32* %b
%3 = icmp sle i32 %1, %2
%4 = zext i1 %3 to i32
ret i32 %4
}
define i32 @m() {
0:
%a = alloca i32
%b = alloca i32
%1 = load i32, i32* %a
%2 = load i32, i32* %b
%3 = icmp sge i32 %1, %2
%4 = zext i1 %3 to i32
ret i32 %4
}
define i32 @n() {
0:
%a = alloca i32
%b = alloca i32
%1 = load i32, i32* %a
%2 = load i32, i32* %b
%3 = icmp ne i32 %1, %2
%4 = zext i1 %3 to i32
ret i32 %4
}
define i32 @o() {
0:
%a = alloca i32
%b = alloca i32
%1 = load i32, i32* %a
%2 = load i32, i32* %b
%3 = icmp eq i32 %1, %2
%4 = zext i1 %3 to i32
ret i32 %4
}
define i32 @p() {
0:
%a = alloca i32
%b = alloca i32
%1 = load i32, i32* %a
%2 = icmp ne i32 %1, 0
br i1 %2, label %3, label %6
3:
%4 = load i32, i32* %b
%5 = icmp ne i32 %4, 0
br label %6
6:
%7 = phi i1 [ false, %0 ], [ %5, %3 ]
%8 = zext i1 %7 to i32
ret i32 %8
}
define i32 @q() {
0:
%a = alloca i32
%b = alloca i32
%1 = load i32, i32* %b
store i32 %1, i32* %a
ret i32 %1
}

0 comments on commit 2a20291

Please sign in to comment.