mirror of https://github.com/inolen/redream.git
81 lines
2.5 KiB
C
81 lines
2.5 KiB
C
#include "jit/ir/ir.h"
|
|
#include "jit/passes/dead_code_elimination_pass.h"
|
|
#include "retest.h"
|
|
|
|
static uint8_t ir_buffer[1024 * 1024];
|
|
static char scratch_buffer[1024 * 1024];
|
|
|
|
/*TEST(dead_code_elimination) {
|
|
static const char input_str[] =
|
|
"i32 %0 = load_context i32 0xbc\n"
|
|
"i32 %1 = load_slow i32 %0\n"
|
|
"i32 %2 = load_slow i32 0x8c000a10\n"
|
|
"i32 %3 = load_slow i32 %2\n"
|
|
"i32 %4 = load_context i32 0xc0\n"
|
|
"i32 %5 = and i32 %3, i32 %4\n"
|
|
"store_context i32 0xb0, i32 %5\n"
|
|
"store_slow i32 %2, i32 %5\n"
|
|
"i32 %6 = load_context i32 0xe4\n"
|
|
"i32 %7 = load_slow i32 %6\n"
|
|
"store_context i32 0xb4, i32 %7\n"
|
|
"i64 %8 = load_context i32 0x18\n"
|
|
"i32 %9 = load_context i32 0x38\n"
|
|
"store_context i32 0x38, i32 %7\n"
|
|
"i64 %10 = zext i32 %9\n"
|
|
"i32 %11 = load_context i32 0x28\n"
|
|
"i32 %12 = sub i32 %11, i32 0xa\n"
|
|
"store_context i32 0x28, i32 %12\n"
|
|
"i32 %13 = load_context i32 0x2c\n"
|
|
"i32 %14 = add i32 %13, i32 0x7\n"
|
|
"store_context i32 0x2c, i32 %14\n"
|
|
"call i64 %8, i64 %10\n"
|
|
"store_context i32 0x30, i32 0x8c000940\n";
|
|
|
|
static const char output_str[] =
|
|
"i32 %0 = load_slow i32 0x8c000a10\n"
|
|
"i32 %1 = load_slow i32 %0\n"
|
|
"i32 %2 = load_context i32 0xc0\n"
|
|
"i32 %3 = and i32 %1, i32 %2\n"
|
|
"store_context i32 0xb0, i32 %3\n"
|
|
"store_slow i32 %0, i32 %3\n"
|
|
"i32 %4 = load_context i32 0xe4\n"
|
|
"i32 %5 = load_slow i32 %4\n"
|
|
"store_context i32 0xb4, i32 %5\n"
|
|
"i64 %6 = load_context i32 0x18\n"
|
|
"i32 %7 = load_context i32 0x38\n"
|
|
"store_context i32 0x38, i32 %5\n"
|
|
"i64 %8 = zext i32 %7\n"
|
|
"i32 %9 = load_context i32 0x28\n"
|
|
"i32 %10 = sub i32 %9, i32 0xa\n"
|
|
"store_context i32 0x28, i32 %10\n"
|
|
"i32 %11 = load_context i32 0x2c\n"
|
|
"i32 %12 = add i32 %11, i32 0x7\n"
|
|
"store_context i32 0x2c, i32 %12\n"
|
|
"call i64 %6, i64 %8\n"
|
|
"store_context i32 0x30, i32 0x8c000940\n";
|
|
|
|
struct ir ir = {0};
|
|
ir.buffer = ir_buffer;
|
|
ir.capacity = sizeof(ir_buffer);
|
|
|
|
FILE *input = tmpfile();
|
|
fwrite(input_str, 1, sizeof(input_str) - 1, input);
|
|
rewind(input);
|
|
int res = ir_read(input, &ir);
|
|
fclose(input);
|
|
CHECK(res);
|
|
|
|
struct dce *dce = dce_create();
|
|
dce_run(dce, &ir);
|
|
dce_destroy(dce);
|
|
|
|
FILE *output = tmpfile();
|
|
ir_write(&ir, output);
|
|
rewind(output);
|
|
size_t n = fread(&scratch_buffer, 1, sizeof(scratch_buffer), output);
|
|
fclose(output);
|
|
CHECK_NE(n, 0u);
|
|
|
|
CHECK_STREQ(scratch_buffer, output_str);
|
|
}*/
|