From 40117c74b22db9474679d4c5b06fbf7c498ff2dc Mon Sep 17 00:00:00 2001 From: mewmew Date: Wed, 15 Jun 2016 04:03:02 +0200 Subject: [PATCH] irgen: Split unary and binary expression test cases into dedicated test cases. --- irgen/irgen_test.go | 56 +++++++- .../{binary_expr.c => binary_expr_add.c} | 0 .../{binary_expr.ll => binary_expr_add.ll} | 0 testdata/extra/irgen/binary_expr_assign.c | 71 +++++++++++ testdata/extra/irgen/binary_expr_assign.ll | 120 ++++++++++++++++++ testdata/extra/irgen/binary_expr_div.c | 71 +++++++++++ testdata/extra/irgen/binary_expr_div.ll | 120 ++++++++++++++++++ testdata/extra/irgen/binary_expr_eq.c | 71 +++++++++++ testdata/extra/irgen/binary_expr_eq.ll | 120 ++++++++++++++++++ testdata/extra/irgen/binary_expr_ge.c | 71 +++++++++++ testdata/extra/irgen/binary_expr_ge.ll | 120 ++++++++++++++++++ testdata/extra/irgen/binary_expr_gt.c | 71 +++++++++++ testdata/extra/irgen/binary_expr_gt.ll | 120 ++++++++++++++++++ testdata/extra/irgen/binary_expr_land.c | 71 +++++++++++ testdata/extra/irgen/binary_expr_land.ll | 120 ++++++++++++++++++ testdata/extra/irgen/binary_expr_le.c | 71 +++++++++++ testdata/extra/irgen/binary_expr_le.ll | 120 ++++++++++++++++++ testdata/extra/irgen/binary_expr_lt.c | 71 +++++++++++ testdata/extra/irgen/binary_expr_lt.ll | 120 ++++++++++++++++++ testdata/extra/irgen/binary_expr_mul.c | 71 +++++++++++ testdata/extra/irgen/binary_expr_mul.ll | 120 ++++++++++++++++++ testdata/extra/irgen/binary_expr_ne.c | 71 +++++++++++ testdata/extra/irgen/binary_expr_ne.ll | 120 ++++++++++++++++++ testdata/extra/irgen/binary_expr_sub.c | 71 +++++++++++ testdata/extra/irgen/binary_expr_sub.ll | 120 ++++++++++++++++++ testdata/extra/irgen/unary_expr.c | 9 -- testdata/extra/irgen/unary_expr.ll | 16 --- testdata/extra/irgen/unary_expr_not.c | 4 + testdata/extra/irgen/unary_expr_not.ll | 9 ++ testdata/extra/irgen/unary_expr_sub.c | 4 + testdata/extra/irgen/unary_expr_sub.ll | 7 + 31 files changed, 2177 insertions(+), 29 deletions(-) rename testdata/extra/irgen/{binary_expr.c => binary_expr_add.c} (100%) rename testdata/extra/irgen/{binary_expr.ll => binary_expr_add.ll} (100%) create mode 100644 testdata/extra/irgen/binary_expr_assign.c create mode 100644 testdata/extra/irgen/binary_expr_assign.ll create mode 100644 testdata/extra/irgen/binary_expr_div.c create mode 100644 testdata/extra/irgen/binary_expr_div.ll create mode 100644 testdata/extra/irgen/binary_expr_eq.c create mode 100644 testdata/extra/irgen/binary_expr_eq.ll create mode 100644 testdata/extra/irgen/binary_expr_ge.c create mode 100644 testdata/extra/irgen/binary_expr_ge.ll create mode 100644 testdata/extra/irgen/binary_expr_gt.c create mode 100644 testdata/extra/irgen/binary_expr_gt.ll create mode 100644 testdata/extra/irgen/binary_expr_land.c create mode 100644 testdata/extra/irgen/binary_expr_land.ll create mode 100644 testdata/extra/irgen/binary_expr_le.c create mode 100644 testdata/extra/irgen/binary_expr_le.ll create mode 100644 testdata/extra/irgen/binary_expr_lt.c create mode 100644 testdata/extra/irgen/binary_expr_lt.ll create mode 100644 testdata/extra/irgen/binary_expr_mul.c create mode 100644 testdata/extra/irgen/binary_expr_mul.ll create mode 100644 testdata/extra/irgen/binary_expr_ne.c create mode 100644 testdata/extra/irgen/binary_expr_ne.ll create mode 100644 testdata/extra/irgen/binary_expr_sub.c create mode 100644 testdata/extra/irgen/binary_expr_sub.ll delete mode 100644 testdata/extra/irgen/unary_expr.c delete mode 100644 testdata/extra/irgen/unary_expr.ll create mode 100644 testdata/extra/irgen/unary_expr_not.c create mode 100644 testdata/extra/irgen/unary_expr_not.ll create mode 100644 testdata/extra/irgen/unary_expr_sub.c create mode 100644 testdata/extra/irgen/unary_expr_sub.ll 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 +}