| // go-optimize.cc -- Go frontend optimizer flags. |
| |
| // Copyright 2011 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| #include "go-system.h" |
| |
| #include "go-c.h" |
| #include "go-optimize.h" |
| |
| namespace { |
| |
| // The list of optimizations. |
| |
| Go_optimize* optimizations; |
| |
| } // End empty namespace. |
| |
| // Create a new optimization. |
| |
| Go_optimize::Go_optimize(const char* name, bool enabled) |
| : next_(optimizations), name_(name), is_enabled_(enabled) |
| { |
| optimizations = this; |
| } |
| |
| // Enable an optimization by name. |
| |
| bool |
| Go_optimize::enable_by_name(const char* name, bool value) |
| { |
| bool is_all = strcmp(name, "all") == 0; |
| bool found = false; |
| for (Go_optimize* p = optimizations; p != NULL; p = p->next_) |
| { |
| if (is_all || strcmp(name, p->name_) == 0) |
| { |
| p->is_enabled_ = value; |
| found = true; |
| } |
| } |
| return found; |
| } |
| |
| // Enable/disable an optimization. Return 1 if this is a real name, 0 if not. |
| |
| GO_EXTERN_C |
| int |
| go_enable_optimize(const char* name, int value) |
| { |
| return Go_optimize::enable_by_name(name, (bool)value) ? 1 : 0; |
| } |