aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/print_llvm.cpp
diff options
context:
space:
mode:
authorgingerBill <ginger.bill.22@gmail.com>2016-08-22 11:52:49 +0100
committergingerBill <ginger.bill.22@gmail.com>2016-08-22 11:52:49 +0100
commita98e93f03f7bd62ebf589b473c61ab5daf37f02c (patch)
tree9ff40a1d753d552425bed795d0a07193a6d4a01b /src/codegen/print_llvm.cpp
parent680274b6f1f1e36e27c94b4e60895338d413c84a (diff)
File Library and TypeDecl syntax change
Diffstat (limited to 'src/codegen/print_llvm.cpp')
-rw-r--r--src/codegen/print_llvm.cpp31
1 files changed, 13 insertions, 18 deletions
diff --git a/src/codegen/print_llvm.cpp b/src/codegen/print_llvm.cpp
index d3974d17c..6a983d09d 100644
--- a/src/codegen/print_llvm.cpp
+++ b/src/codegen/print_llvm.cpp
@@ -219,7 +219,11 @@ void ssa_print_exact_value(gbFile *f, ssaModule *m, ExactValue value, Type *type
if (value.value_integer == 0) {
ssa_fprintf(f, "null");
} else {
- GB_PANIC("TODO(bill): Pointer constant");
+ ssa_fprintf(f, "inttoptr (");
+ ssa_print_type(f, m->sizes, t_int);
+ ssa_fprintf(f, " %llu to ", value.value_integer);
+ ssa_print_type(f, m->sizes, t_rawptr);
+ ssa_fprintf(f, ")");
}
} else {
ssa_fprintf(f, "%lld", value.value_integer);
@@ -241,7 +245,11 @@ void ssa_print_exact_value(gbFile *f, ssaModule *m, ExactValue value, Type *type
if (value.value_pointer == NULL) {
ssa_fprintf(f, "null");
} else {
- GB_PANIC("TODO(bill): ExactValue_Pointer");
+ ssa_fprintf(f, "inttoptr (");
+ ssa_print_type(f, m->sizes, t_int);
+ ssa_fprintf(f, " %llu to ", cast(u64)cast(uintptr)value.value_pointer);
+ ssa_print_type(f, m->sizes, t_rawptr);
+ ssa_fprintf(f, ")");
}
break;
default:
@@ -580,8 +588,7 @@ void ssa_print_instr(gbFile *f, ssaModule *m, ssaValue *value) {
} break;
case ssaInstr_MemCopy: {
- ssa_fprintf(f, "call void @llvm.memmove.p0i8.p0i8.");
- ssa_print_type(f, m->sizes, t_int);
+ ssa_fprintf(f, "call void @memory_move");
ssa_fprintf(f, "(i8* ");
ssa_print_value(f, m, instr->CopyMemory.dst, t_rawptr);
ssa_fprintf(f, ", i8* ");
@@ -590,11 +597,7 @@ void ssa_print_instr(gbFile *f, ssaModule *m, ssaValue *value) {
ssa_print_type(f, m->sizes, t_int);
ssa_fprintf(f, " ");
ssa_print_value(f, m, instr->CopyMemory.len, t_int);
- char *vol_str = "false";
- if (instr->CopyMemory.is_volatile) {
- vol_str = "true";
- }
- ssa_fprintf(f, ", i32 %d, i1 %s)\n", instr->CopyMemory.align, vol_str);
+ ssa_fprintf(f, ")\n");
} break;
@@ -671,7 +674,7 @@ void ssa_print_instr(gbFile *f, ssaModule *m, ssaValue *value) {
void ssa_print_proc(gbFile *f, ssaModule *m, ssaProcedure *proc) {
if (proc->body == NULL) {
- ssa_fprintf(f, "declare ");
+ ssa_fprintf(f, "\ndeclare ");
} else {
ssa_fprintf(f, "\ndefine ");
}
@@ -777,14 +780,6 @@ void ssa_print_llvm_ir(gbFile *f, ssaModule *m) {
}
- ssa_fprintf(f, "declare void @llvm.memmove.p0i8.p0i8.");
- ssa_print_type(f, m->sizes, t_int);
- ssa_fprintf(f, "(i8*, i8*, ");
- ssa_print_type(f, m->sizes, t_int);
- ssa_fprintf(f, ", i32, i1) argmemonly nounwind \n\n");
-
-
-
gb_for_array(member_index, m->members.entries) {
auto *entry = &m->members.entries[member_index];
ssaValue *v = entry->value;