diff options
| author | gingerBill <bill@gingerbill.org> | 2020-03-15 14:31:26 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2020-03-15 14:31:26 +0000 |
| commit | 18fb6a4be41f30de75b445266b958e153ecc16d9 (patch) | |
| tree | 6770795d754effc1751d8c7beb13652db39f3770 /src/ir_print.cpp | |
| parent | bf0c6f5a30e406a0e0f73014c024ba63dcb47b43 (diff) | |
| parent | 8dba0e332c73a08301c5ac6c0d310c483c66cb11 (diff) | |
Merge branch 'master' into llvm-integration
Diffstat (limited to 'src/ir_print.cpp')
| -rw-r--r-- | src/ir_print.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/ir_print.cpp b/src/ir_print.cpp index 4e5838785..32cc3809d 100644 --- a/src/ir_print.cpp +++ b/src/ir_print.cpp @@ -341,6 +341,10 @@ void ir_print_proc_type_without_pointer(irFileBuffer *f, irModule *m, Type *t) { // ir_fprintf(f, "* sret noalias "); // ir_write_string(f, str_lit("* noalias ")); ir_write_string(f, str_lit("*")); + if (build_context.ODIN_OS == "darwin" || + build_context.ODIN_OS == "linux") { + ir_fprintf(f, " byval"); + } if (param_count > 0 || t->Proc.calling_convention == ProcCC_Odin) { ir_write_string(f, str_lit(", ")); } @@ -363,6 +367,9 @@ void ir_print_proc_type_without_pointer(irFileBuffer *f, irModule *m, Type *t) { if (e->flags&EntityFlag_NoAlias) { ir_write_str_lit(f, " noalias"); } + if (e->flags&EntityFlag_ByVal) { + ir_write_str_lit(f, " byval"); + } ir_write_byte(f, ' '); param_index++; } @@ -2183,6 +2190,9 @@ void ir_print_instr(irFileBuffer *f, irModule *m, irValue *value) { if (e->flags&EntityFlag_NoAlias) { ir_write_str_lit(f, " noalias"); } + if (e->flags&EntityFlag_ByVal) { + ir_write_str_lit(f, " byval"); + } ir_write_byte(f, ' '); ir_print_value(f, m, arg, t); param_index++; @@ -2195,6 +2205,9 @@ void ir_print_instr(irFileBuffer *f, irModule *m, irValue *value) { if (e->flags&EntityFlag_ImplicitReference) { ir_write_str_lit(f, " nonnull dereferenceable"); } + if (e->flags&EntityFlag_ByVal) { + ir_write_str_lit(f, " byval"); + } ir_write_byte(f, ' '); irValue *arg = call->args[arg_index++]; ir_print_value(f, m, arg, t); @@ -2235,6 +2248,9 @@ void ir_print_instr(irFileBuffer *f, irModule *m, irValue *value) { if (e->flags&EntityFlag_NoAlias) { ir_write_str_lit(f, " noalias"); } + if (e->flags&EntityFlag_ByVal) { + ir_write_str_lit(f, " byval"); + } ir_write_byte(f, ' '); ir_print_value(f, m, arg, t); param_index++; @@ -2245,6 +2261,9 @@ void ir_print_instr(irFileBuffer *f, irModule *m, irValue *value) { if (e->flags&EntityFlag_NoAlias) { ir_write_str_lit(f, " noalias"); } + if (e->flags&EntityFlag_ByVal) { + ir_write_str_lit(f, " byval"); + } ir_write_byte(f, ' '); ir_print_value(f, m, arg, t); param_index++; @@ -2363,6 +2382,10 @@ void ir_print_proc(irFileBuffer *f, irModule *m, irProcedure *proc) { if (proc_type->return_by_pointer) { ir_print_type(f, m, reduce_tuple_to_single_type(proc_type->results)); ir_write_str_lit(f, "* sret noalias "); + if (build_context.ODIN_OS == "darwin" || + build_context.ODIN_OS == "linux") { + ir_fprintf(f, "byval "); + } ir_write_str_lit(f, "%agg.result"); param_index += 1; } @@ -2389,6 +2412,10 @@ void ir_print_proc(irFileBuffer *f, irModule *m, irProcedure *proc) { if (e->flags&EntityFlag_NoAlias) { ir_write_str_lit(f, " noalias"); } + if (e->flags&EntityFlag_ByVal) { + ir_write_str_lit(f, " byval"); + } + if (proc->body != nullptr) { ir_fprintf(f, " %%_.%td", parameter_index+j); @@ -2401,6 +2428,9 @@ void ir_print_proc(irFileBuffer *f, irModule *m, irProcedure *proc) { if (e->flags&EntityFlag_NoAlias) { ir_write_str_lit(f, " noalias"); } + if (e->flags&EntityFlag_ByVal) { + ir_write_str_lit(f, " byval"); + } if (proc->body != nullptr) { ir_fprintf(f, " %%_.%td", parameter_index); } |