Browse Source

emit optnone and noinline for all procs when opt set to minimal

Tobias Mollstam 3 years ago
parent
commit
846930a07f
1 changed files with 27 additions and 22 deletions
  1. 27 22
      src/llvm_backend_proc.cpp

+ 27 - 22
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);