Compile in different optimization modes
This commit is contained in:
parent
43472683b3
commit
5174819a5b
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@ -17,7 +17,7 @@ jobs:
|
|||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
- name: Build and test
|
- name: Build and test
|
||||||
run: |
|
run: |
|
||||||
./run_tests.sh
|
./run_tests.sh 1
|
||||||
# macos_build_and_test:
|
# macos_build_and_test:
|
||||||
# runs-on: macos-latest
|
# runs-on: macos-latest
|
||||||
# timeout-minutes: 15
|
# timeout-minutes: 15
|
||||||
|
@ -857,7 +857,7 @@ fn int syscall_fstat(int fd, struct stat *buffer)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
fn u64 file_get_size(int fd)
|
may_be_unused fn u64 file_get_size(int fd)
|
||||||
{
|
{
|
||||||
struct stat stat_buffer;
|
struct stat stat_buffer;
|
||||||
int stat_result = syscall_fstat(fd, &stat_buffer);
|
int stat_result = syscall_fstat(fd, &stat_buffer);
|
||||||
@ -1282,13 +1282,13 @@ fn String arena_join_string(Arena* arena, Slice(String) pieces)
|
|||||||
memcpy(it, piece.pointer, piece.length);
|
memcpy(it, piece.pointer, piece.length);
|
||||||
it += piece.length;
|
it += piece.length;
|
||||||
}
|
}
|
||||||
assert(it - pointer == size);
|
assert((u64)(it - pointer) == size);
|
||||||
*it = 0;
|
*it = 0;
|
||||||
|
|
||||||
return (String) { .pointer = pointer, .length = size };
|
return (String) { .pointer = pointer, .length = size };
|
||||||
}
|
}
|
||||||
|
|
||||||
#define arena_allocate(arena, T, count) arena_allocate_bytes(arena, sizeof(T) * count, alignof(T))
|
#define arena_allocate(arena, T, count) (T*)(arena_allocate_bytes(arena, sizeof(T) * count, alignof(T)))
|
||||||
#define arena_allocate_slice(arena, T, count) (Slice(T)){ .pointer = arena_allocate(arena, T, count), .length = count }
|
#define arena_allocate_slice(arena, T, count) (Slice(T)){ .pointer = arena_allocate(arena, T, count), .length = count }
|
||||||
|
|
||||||
fn void arena_reset(Arena* arena)
|
fn void arena_reset(Arena* arena)
|
||||||
@ -1323,16 +1323,18 @@ fn s32 string_map_find_slot(StringMap* map, u32 original_index, String key, u32
|
|||||||
for (u32 i = 0; i < existing_capacity; i += 1)
|
for (u32 i = 0; i < existing_capacity; i += 1)
|
||||||
{
|
{
|
||||||
auto index = it_index & (existing_capacity - 1);
|
auto index = it_index & (existing_capacity - 1);
|
||||||
u32 key = map->pointer[index];
|
u32 existing_key = map->pointer[index];
|
||||||
|
|
||||||
// Not set
|
// Not set
|
||||||
if (key == 0)
|
if (existing_key == 0)
|
||||||
{
|
{
|
||||||
result = index;
|
result = index;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
unused(value);
|
||||||
|
unused(key);
|
||||||
trap();
|
trap();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1467,7 +1469,8 @@ fn int file_write(String file_path, String file_data)
|
|||||||
assert(file_descriptor != -1);
|
assert(file_descriptor != -1);
|
||||||
|
|
||||||
auto bytes = syscall_write(file_descriptor, file_data.pointer, file_data.length);
|
auto bytes = syscall_write(file_descriptor, file_data.pointer, file_data.length);
|
||||||
assert(bytes == file_data.length);
|
assert(bytes >= 0);
|
||||||
|
assert((u64)bytes == file_data.length);
|
||||||
|
|
||||||
int close_result = syscall_close(file_descriptor);
|
int close_result = syscall_close(file_descriptor);
|
||||||
assert(close_result == 0);
|
assert(close_result == 0);
|
||||||
@ -1487,7 +1490,7 @@ fn String file_read(Arena* arena, String path)
|
|||||||
u64 file_size = stat_buffer.st_size;
|
u64 file_size = stat_buffer.st_size;
|
||||||
|
|
||||||
result = (String){
|
result = (String){
|
||||||
.pointer = (u8*)arena_allocate_bytes(arena, file_size, 64),
|
.pointer = arena_allocate_bytes(arena, file_size, 64),
|
||||||
.length = file_size,
|
.length = file_size,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1721,12 +1724,12 @@ fn u8* vb_generic_add_assume_capacity(VirtualBuffer(u8)* vb, u32 item_size, u32
|
|||||||
return vb->pointer + (index * item_size);
|
return vb->pointer + (index * item_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn u8* vb_generic_append_assume_capacity(VirtualBuffer(u8)* vb, void* item_pointer, u32 item_size, u32 item_count)
|
// fn u8* vb_generic_append_assume_capacity(VirtualBuffer(u8)* vb, void* item_pointer, u32 item_size, u32 item_count)
|
||||||
{
|
// {
|
||||||
u8* new_memory = vb_generic_add_assume_capacity(vb, item_size, item_count);
|
// u8* new_memory = vb_generic_add_assume_capacity(vb, item_size, item_count);
|
||||||
memcpy(new_memory, item_pointer, item_size * item_count);
|
// memcpy(new_memory, item_pointer, item_size * item_count);
|
||||||
return new_memory;
|
// return new_memory;
|
||||||
}
|
// }
|
||||||
|
|
||||||
fn u8* vb_generic_add(VirtualBuffer(u8)* vb, u32 item_size, u32 item_count)
|
fn u8* vb_generic_add(VirtualBuffer(u8)* vb, u32 item_size, u32 item_count)
|
||||||
{
|
{
|
||||||
@ -1735,11 +1738,11 @@ fn u8* vb_generic_add(VirtualBuffer(u8)* vb, u32 item_size, u32 item_count)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn u8* vb_generic_append(VirtualBuffer(u8)* vb, void* item_pointer, u32 item_size, u32 item_count)
|
// fn u8* vb_generic_append(VirtualBuffer(u8)* vb, void* item_pointer, u32 item_size, u32 item_count)
|
||||||
{
|
// {
|
||||||
vb_generic_ensure_capacity(vb, item_size, item_count);
|
// vb_generic_ensure_capacity(vb, item_size, item_count);
|
||||||
return vb_generic_append_assume_capacity(vb, item_pointer, item_size, item_count);
|
// return vb_generic_append_assume_capacity(vb, item_pointer, item_size, item_count);
|
||||||
}
|
// }
|
||||||
|
|
||||||
#define vb_add(a, count) (typeof((a)->pointer)) vb_generic_add((VirtualBuffer(u8)*)(a), sizeof(*((a)->pointer)), count)
|
#define vb_add(a, count) (typeof((a)->pointer)) vb_generic_add((VirtualBuffer(u8)*)(a), sizeof(*((a)->pointer)), count)
|
||||||
#define vb_append_one(a, item) (typeof((a)->pointer)) vb_generic_append((VirtualBuffer(u8)*)(a), &(item), sizeof(*((a)->pointer)), 1)
|
#define vb_append_one(a, item) (typeof((a)->pointer)) vb_generic_append((VirtualBuffer(u8)*)(a), &(item), sizeof(*((a)->pointer)), 1)
|
||||||
@ -4705,7 +4708,7 @@ void entry_point(int argc, const char* argv[])
|
|||||||
arguments.pointer = arena_allocate(global_arena, String, argc);
|
arguments.pointer = arena_allocate(global_arena, String, argc);
|
||||||
arguments.length = argc;
|
arguments.length = argc;
|
||||||
|
|
||||||
for (u32 i = 0; i < argc; i += 1)
|
for (int i = 0; i < argc; i += 1)
|
||||||
{
|
{
|
||||||
u64 len = strlen(argv[i]);
|
u64 len = strlen(argv[i]);
|
||||||
arguments.pointer[i] = (String) {
|
arguments.pointer[i] = (String) {
|
||||||
@ -4736,15 +4739,15 @@ void entry_point(int argc, const char* argv[])
|
|||||||
NodeIndex start_node_index = function->start;
|
NodeIndex start_node_index = function->start;
|
||||||
NodeIndex stop_node_index = function->stop;
|
NodeIndex stop_node_index = function->stop;
|
||||||
iterate_peepholes(thread, stop_node_index);
|
iterate_peepholes(thread, stop_node_index);
|
||||||
print_string(strlit("Before optimizations\n"));
|
// print_string(strlit("Before optimizations\n"));
|
||||||
print_function(thread, function);
|
// print_function(thread, function);
|
||||||
gcm_build_cfg(thread, start_node_index, stop_node_index);
|
gcm_build_cfg(thread, start_node_index, stop_node_index);
|
||||||
print_string(strlit("After optimizations\n"));
|
// print_string(strlit("After optimizations\n"));
|
||||||
print_function(thread, function);
|
// print_function(thread, function);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto lowered_source = c_lower(thread);
|
auto lowered_source = c_lower(thread);
|
||||||
print("Transpiled to C:\n```\n{s}\n```\n", lowered_source);
|
// print("Transpiled to C:\n```\n{s}\n```\n", lowered_source);
|
||||||
|
|
||||||
auto c_source_path = arena_join_string(thread->arena, (Slice(String)) array_to_slice(((String[]) {
|
auto c_source_path = arena_join_string(thread->arena, (Slice(String)) array_to_slice(((String[]) {
|
||||||
strlit("nest/"),
|
strlit("nest/"),
|
||||||
|
44
run_tests.sh
44
run_tests.sh
@ -2,25 +2,47 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
source ./compile.sh
|
source ./compile.sh
|
||||||
|
all=$1
|
||||||
build_dir="build"
|
build_dir="build"
|
||||||
exe_name="nest"
|
exe_name="nest"
|
||||||
exe_path=$build_dir/$exe_name
|
exe_path=$build_dir/$exe_name
|
||||||
debug_flags="-g"
|
debug_flags="-g"
|
||||||
no_optimization_flags=""
|
no_optimization_flags=""
|
||||||
optimization_flags="-O3 -march=native"
|
|
||||||
test_names="first"
|
test_names="first"
|
||||||
|
|
||||||
compile $build_dir $exe_name $debug_flags $no_optimization_flags;
|
if [ "$all" == "1" ]
|
||||||
|
then
|
||||||
|
optimization_modes=("" "-O1" "-O2 march=native", "-Os march=native" "-Oz march=native" "-O3 march=native")
|
||||||
|
else
|
||||||
|
optimization_modes=("")
|
||||||
|
fi
|
||||||
|
|
||||||
printf "\n======================\n"
|
for optimization_mode in "${optimization_modes[@]}"
|
||||||
printf "TESTS"
|
|
||||||
printf "\n======================\n\n"
|
|
||||||
for test_name in "${test_names[@]}"
|
|
||||||
do
|
do
|
||||||
echo "$test_name..."
|
|
||||||
build/nest "tests/$test_name.nat"
|
printf "\n===========================\n"
|
||||||
echo "$test_name [COMPILATION] [OK]"
|
echo "TESTS ($optimization_mode)"
|
||||||
nest/$test_name
|
printf "===========================\n\n"
|
||||||
echo "$test_name [RUN] [OK]"
|
|
||||||
|
compile $build_dir $exe_name $debug_flags $optimization_mode;
|
||||||
|
|
||||||
|
printf "\n===========================\n"
|
||||||
|
echo "COMPILER BUILD OK"
|
||||||
|
printf "===========================\n\n"
|
||||||
|
|
||||||
|
for test_name in "${test_names[@]}"
|
||||||
|
do
|
||||||
|
printf "\n===========================\n"
|
||||||
|
echo "$test_name..."
|
||||||
|
printf "===========================\n\n"
|
||||||
|
build/nest "tests/$test_name.nat"
|
||||||
|
printf "\n===========================\n"
|
||||||
|
echo "$test_name [COMPILATION] [OK]"
|
||||||
|
printf "===========================\n\n"
|
||||||
|
nest/$test_name
|
||||||
|
printf "\n===========================\n"
|
||||||
|
echo "$test_name [RUN] [OK]"
|
||||||
|
printf "===========================\n\n"
|
||||||
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user