diff --git a/irgen/irgen_test.go b/irgen/irgen_test.go index 979737e..aa5514a 100644 --- a/irgen/irgen_test.go +++ b/irgen/irgen_test.go @@ -64,13 +64,61 @@ func TestGen(t *testing.T) { }, // Unary expressions. { - path: "../testdata/extra/irgen/unary_expr.c", - want: "../testdata/extra/irgen/unary_expr.ll", + path: "../testdata/extra/irgen/unary_expr_sub.c", + want: "../testdata/extra/irgen/unary_expr_sub.ll", + }, + { + path: "../testdata/extra/irgen/unary_expr_not.c", + want: "../testdata/extra/irgen/unary_expr_not.ll", }, // Binary expressions. { - path: "../testdata/extra/irgen/binary_expr.c", - want: "../testdata/extra/irgen/binary_expr.ll", + path: "../testdata/extra/irgen/binary_expr_add.c", + want: "../testdata/extra/irgen/binary_expr_add.ll", + }, + { + path: "../testdata/extra/irgen/binary_expr_sub.c", + want: "../testdata/extra/irgen/binary_expr_sub.ll", + }, + { + path: "../testdata/extra/irgen/binary_expr_mul.c", + want: "../testdata/extra/irgen/binary_expr_mul.ll", + }, + { + path: "../testdata/extra/irgen/binary_expr_div.c", + want: "../testdata/extra/irgen/binary_expr_div.ll", + }, + { + path: "../testdata/extra/irgen/binary_expr_lt.c", + want: "../testdata/extra/irgen/binary_expr_lt.ll", + }, + { + path: "../testdata/extra/irgen/binary_expr_gt.c", + want: "../testdata/extra/irgen/binary_expr_gt.ll", + }, + { + path: "../testdata/extra/irgen/binary_expr_le.c", + want: "../testdata/extra/irgen/binary_expr_le.ll", + }, + { + path: "../testdata/extra/irgen/binary_expr_ge.c", + want: "../testdata/extra/irgen/binary_expr_ge.ll", + }, + { + path: "../testdata/extra/irgen/binary_expr_ne.c", + want: "../testdata/extra/irgen/binary_expr_ne.ll", + }, + { + path: "../testdata/extra/irgen/binary_expr_eq.c", + want: "../testdata/extra/irgen/binary_expr_eq.ll", + }, + { + path: "../testdata/extra/irgen/binary_expr_land.c", + want: "../testdata/extra/irgen/binary_expr_land.ll", + }, + { + path: "../testdata/extra/irgen/binary_expr_assign.c", + want: "../testdata/extra/irgen/binary_expr_assign.ll", }, } diff --git a/testdata/extra/irgen/binary_expr.c b/testdata/extra/irgen/binary_expr_add.c similarity index 100% rename from testdata/extra/irgen/binary_expr.c rename to testdata/extra/irgen/binary_expr_add.c diff --git a/testdata/extra/irgen/binary_expr.ll b/testdata/extra/irgen/binary_expr_add.ll similarity index 100% rename from testdata/extra/irgen/binary_expr.ll rename to testdata/extra/irgen/binary_expr_add.ll diff --git a/testdata/extra/irgen/binary_expr_assign.c b/testdata/extra/irgen/binary_expr_assign.c new file mode 100644 index 0000000..5002f10 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_assign.c @@ -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; +} diff --git a/testdata/extra/irgen/binary_expr_assign.ll b/testdata/extra/irgen/binary_expr_assign.ll new file mode 100644 index 0000000..65b6096 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_assign.ll @@ -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 +} diff --git a/testdata/extra/irgen/binary_expr_div.c b/testdata/extra/irgen/binary_expr_div.c new file mode 100644 index 0000000..5002f10 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_div.c @@ -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; +} diff --git a/testdata/extra/irgen/binary_expr_div.ll b/testdata/extra/irgen/binary_expr_div.ll new file mode 100644 index 0000000..65b6096 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_div.ll @@ -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 +} diff --git a/testdata/extra/irgen/binary_expr_eq.c b/testdata/extra/irgen/binary_expr_eq.c new file mode 100644 index 0000000..5002f10 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_eq.c @@ -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; +} diff --git a/testdata/extra/irgen/binary_expr_eq.ll b/testdata/extra/irgen/binary_expr_eq.ll new file mode 100644 index 0000000..65b6096 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_eq.ll @@ -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 +} diff --git a/testdata/extra/irgen/binary_expr_ge.c b/testdata/extra/irgen/binary_expr_ge.c new file mode 100644 index 0000000..5002f10 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_ge.c @@ -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; +} diff --git a/testdata/extra/irgen/binary_expr_ge.ll b/testdata/extra/irgen/binary_expr_ge.ll new file mode 100644 index 0000000..65b6096 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_ge.ll @@ -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 +} diff --git a/testdata/extra/irgen/binary_expr_gt.c b/testdata/extra/irgen/binary_expr_gt.c new file mode 100644 index 0000000..5002f10 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_gt.c @@ -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; +} diff --git a/testdata/extra/irgen/binary_expr_gt.ll b/testdata/extra/irgen/binary_expr_gt.ll new file mode 100644 index 0000000..65b6096 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_gt.ll @@ -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 +} diff --git a/testdata/extra/irgen/binary_expr_land.c b/testdata/extra/irgen/binary_expr_land.c new file mode 100644 index 0000000..5002f10 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_land.c @@ -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; +} diff --git a/testdata/extra/irgen/binary_expr_land.ll b/testdata/extra/irgen/binary_expr_land.ll new file mode 100644 index 0000000..65b6096 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_land.ll @@ -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 +} diff --git a/testdata/extra/irgen/binary_expr_le.c b/testdata/extra/irgen/binary_expr_le.c new file mode 100644 index 0000000..5002f10 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_le.c @@ -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; +} diff --git a/testdata/extra/irgen/binary_expr_le.ll b/testdata/extra/irgen/binary_expr_le.ll new file mode 100644 index 0000000..65b6096 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_le.ll @@ -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 +} diff --git a/testdata/extra/irgen/binary_expr_lt.c b/testdata/extra/irgen/binary_expr_lt.c new file mode 100644 index 0000000..5002f10 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_lt.c @@ -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; +} diff --git a/testdata/extra/irgen/binary_expr_lt.ll b/testdata/extra/irgen/binary_expr_lt.ll new file mode 100644 index 0000000..65b6096 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_lt.ll @@ -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 +} diff --git a/testdata/extra/irgen/binary_expr_mul.c b/testdata/extra/irgen/binary_expr_mul.c new file mode 100644 index 0000000..5002f10 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_mul.c @@ -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; +} diff --git a/testdata/extra/irgen/binary_expr_mul.ll b/testdata/extra/irgen/binary_expr_mul.ll new file mode 100644 index 0000000..65b6096 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_mul.ll @@ -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 +} diff --git a/testdata/extra/irgen/binary_expr_ne.c b/testdata/extra/irgen/binary_expr_ne.c new file mode 100644 index 0000000..5002f10 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_ne.c @@ -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; +} diff --git a/testdata/extra/irgen/binary_expr_ne.ll b/testdata/extra/irgen/binary_expr_ne.ll new file mode 100644 index 0000000..65b6096 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_ne.ll @@ -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 +} diff --git a/testdata/extra/irgen/binary_expr_sub.c b/testdata/extra/irgen/binary_expr_sub.c new file mode 100644 index 0000000..5002f10 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_sub.c @@ -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; +} diff --git a/testdata/extra/irgen/binary_expr_sub.ll b/testdata/extra/irgen/binary_expr_sub.ll new file mode 100644 index 0000000..65b6096 --- /dev/null +++ b/testdata/extra/irgen/binary_expr_sub.ll @@ -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 +} diff --git a/testdata/extra/irgen/unary_expr.c b/testdata/extra/irgen/unary_expr.c deleted file mode 100644 index 49729db..0000000 --- a/testdata/extra/irgen/unary_expr.c +++ /dev/null @@ -1,9 +0,0 @@ -int f() { - int x; - return -x; -} - -int g() { - int y; - return !y; -} diff --git a/testdata/extra/irgen/unary_expr.ll b/testdata/extra/irgen/unary_expr.ll deleted file mode 100644 index b9986be..0000000 --- a/testdata/extra/irgen/unary_expr.ll +++ /dev/null @@ -1,16 +0,0 @@ -define i32 @f() { -0: - %x = alloca i32 - %1 = load i32, i32* %x - %2 = sub i32 0, %1 - ret i32 %2 -} -define i32 @g() { -0: - %y = alloca i32 - %1 = load i32, i32* %y - %2 = icmp ne i32 %1, 0 - %3 = xor i1 %2, true - %4 = zext i1 %3 to i32 - ret i32 %4 -} diff --git a/testdata/extra/irgen/unary_expr_not.c b/testdata/extra/irgen/unary_expr_not.c new file mode 100644 index 0000000..f778573 --- /dev/null +++ b/testdata/extra/irgen/unary_expr_not.c @@ -0,0 +1,4 @@ +int f() { + int a; + return !a; +} diff --git a/testdata/extra/irgen/unary_expr_not.ll b/testdata/extra/irgen/unary_expr_not.ll new file mode 100644 index 0000000..aecc531 --- /dev/null +++ b/testdata/extra/irgen/unary_expr_not.ll @@ -0,0 +1,9 @@ +define i32 @f() { +0: + %a = alloca i32 + %1 = load i32, i32* %a + %2 = icmp ne i32 %1, 0 + %3 = xor i1 %2, true + %4 = zext i1 %3 to i32 + ret i32 %4 +} diff --git a/testdata/extra/irgen/unary_expr_sub.c b/testdata/extra/irgen/unary_expr_sub.c new file mode 100644 index 0000000..177c10a --- /dev/null +++ b/testdata/extra/irgen/unary_expr_sub.c @@ -0,0 +1,4 @@ +int f() { + int a; + return -a; +} diff --git a/testdata/extra/irgen/unary_expr_sub.ll b/testdata/extra/irgen/unary_expr_sub.ll new file mode 100644 index 0000000..9969193 --- /dev/null +++ b/testdata/extra/irgen/unary_expr_sub.ll @@ -0,0 +1,7 @@ +define i32 @f() { +0: + %a = alloca i32 + %1 = load i32, i32* %a + %2 = sub i32 0, %1 + ret i32 %2 +}