diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2022-05-18 10:27:16 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-18 10:27:16 +0100 |
| commit | b1196bd6592908c32a500ac7aef92b032e900aa2 (patch) | |
| tree | ab7bef187af72ddc413080b133595b00a85f133b /src | |
| parent | 0cc67ff5e348aa2811b0dd3fa81805b9ce93ea4f (diff) | |
| parent | 846930a07fc83873fbbcdde33e48600a6d9a2a8f (diff) | |
Merge pull request #1794 from mollstam/fix/optnone-procs
Emit LLVM IR to never optimize/inline procs when building debug and -o:minimal
Diffstat (limited to 'src')
| -rw-r--r-- | src/llvm_backend_proc.cpp | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index a0e9a5da5..a7f9eb013 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -139,35 +139,40 @@ lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool ignore_body) lb_add_attribute_to_proc(m, p->value, "noredzone"); } - switch (p->inlining) { - case ProcInlining_inline: - lb_add_attribute_to_proc(m, p->value, "alwaysinline"); - break; - case ProcInlining_no_inline: + if (build_context.optimization_level == 0 && build_context.ODIN_DEBUG) { lb_add_attribute_to_proc(m, p->value, "noinline"); - break; + lb_add_attribute_to_proc(m, p->value, "optnone"); + } else { + switch (p->inlining) { + case ProcInlining_inline: + lb_add_attribute_to_proc(m, p->value, "alwaysinline"); + break; + case ProcInlining_no_inline: + lb_add_attribute_to_proc(m, p->value, "noinline"); + break; + } + + switch (entity->Procedure.optimization_mode) { + case ProcedureOptimizationMode_None: + lb_add_attribute_to_proc(m, p->value, "optnone"); + break; + case ProcedureOptimizationMode_Minimal: + lb_add_attribute_to_proc(m, p->value, "optnone"); + break; + case ProcedureOptimizationMode_Size: + lb_add_attribute_to_proc(m, p->value, "optsize"); + break; + case ProcedureOptimizationMode_Speed: + // TODO(bill): handle this correctly + lb_add_attribute_to_proc(m, p->value, "optsize"); + break; + } } if (entity->flags & EntityFlag_Cold) { lb_add_attribute_to_proc(m, p->value, "cold"); } - switch (entity->Procedure.optimization_mode) { - case ProcedureOptimizationMode_None: - lb_add_attribute_to_proc(m, p->value, "optnone"); - break; - case ProcedureOptimizationMode_Minimal: - lb_add_attribute_to_proc(m, p->value, "optnone"); - break; - case ProcedureOptimizationMode_Size: - lb_add_attribute_to_proc(m, p->value, "optsize"); - break; - case ProcedureOptimizationMode_Speed: - // TODO(bill): handle this correctly - lb_add_attribute_to_proc(m, p->value, "optsize"); - break; - } - lbValue proc_value = {p->value, p->type}; lb_add_entity(m, entity, proc_value); lb_add_member(m, p->name, proc_value); |