[build] Default to -O2 instead of -O3.

This moderately reduces code size without large regressions on Golem. Going further to -Os still produces noticeable regressions.

TEST=ci
Bug: https://github.com/dart-lang/sdk/issues/38647
Change-Id: I8409908ca37d4a2b18cb989d9748e35a15072df6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/217504
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
Ryan Macnak 2023-01-24 00:54:29 +00:00 committed by Commit Queue
parent 2ca588fce8
commit 1aa7f17b56
4 changed files with 20 additions and 57 deletions

View file

@ -815,13 +815,9 @@ if (is_win) {
# Default "optimization on" config. On Windows, this favors size over speed. # Default "optimization on" config. On Windows, this favors size over speed.
config("optimize") { config("optimize") {
if (is_win) { if (is_win) {
# Favor size over speed, /O1 must be before the common flags. The GYP
# build also specifies /Os and /GF but these are implied by /O1.
cflags = [ "/O2" ] + common_optimize_on_cflags + [ "/Oi" ] cflags = [ "/O2" ] + common_optimize_on_cflags + [ "/Oi" ]
} else if (is_android) {
cflags = [ "-Os" ] + common_optimize_on_cflags # Favor size over speed.
} else { } else {
cflags = [ "-O3" ] + common_optimize_on_cflags cflags = [ "-O2" ] + common_optimize_on_cflags
} }
ldflags = common_optimize_on_ldflags ldflags = common_optimize_on_ldflags
} }

View file

@ -245,7 +245,7 @@ config("dart_config") {
} else if (dart_debug) { } else if (dart_debug) {
cflags += [ "-O${dart_debug_optimization_level}" ] cflags += [ "-O${dart_debug_optimization_level}" ]
} else { } else {
cflags += [ "-O3" ] cflags += [ "-O2" ]
} }
if (is_fuchsia) { if (is_fuchsia) {

View file

@ -79,12 +79,24 @@ static BoolPtr CopyData(const TypedDataBase& dst_array,
src_array.LengthInBytes())); src_array.LengthInBytes()));
ASSERT(Utils::RangeCheck(dst_offset_in_bytes, length_in_bytes, ASSERT(Utils::RangeCheck(dst_offset_in_bytes, length_in_bytes,
dst_array.LengthInBytes())); dst_array.LengthInBytes()));
if (length_in_bytes > 0) {
NoSafepointScope no_safepoint;
if (clamped) { if (clamped) {
TypedData::ClampedCopy(dst_array, dst_offset_in_bytes, src_array, uint8_t* dst_data =
src_offset_in_bytes, length_in_bytes); reinterpret_cast<uint8_t*>(dst_array.DataAddr(dst_offset_in_bytes));
int8_t* src_data =
reinterpret_cast<int8_t*>(src_array.DataAddr(src_offset_in_bytes));
for (intptr_t ix = 0; ix < length_in_bytes; ix++) {
int8_t v = *src_data;
if (v < 0) v = 0;
*dst_data = v;
src_data++;
dst_data++;
}
} else { } else {
TypedData::Copy(dst_array, dst_offset_in_bytes, src_array, memmove(dst_array.DataAddr(dst_offset_in_bytes),
src_offset_in_bytes, length_in_bytes); src_array.DataAddr(src_offset_in_bytes), length_in_bytes);
}
} }
return Bool::True().ptr(); return Bool::True().ptr();
} }

View file

@ -11431,51 +11431,6 @@ class TypedData : public TypedDataBase {
intptr_t len, intptr_t len,
Heap::Space space = Heap::kNew); Heap::Space space = Heap::kNew);
static void Copy(const TypedDataBase& dst,
intptr_t dst_offset_in_bytes,
const TypedDataBase& src,
intptr_t src_offset_in_bytes,
intptr_t length_in_bytes) {
ASSERT(Utils::RangeCheck(src_offset_in_bytes, length_in_bytes,
src.LengthInBytes()));
ASSERT(Utils::RangeCheck(dst_offset_in_bytes, length_in_bytes,
dst.LengthInBytes()));
{
NoSafepointScope no_safepoint;
if (length_in_bytes > 0) {
memmove(dst.DataAddr(dst_offset_in_bytes),
src.DataAddr(src_offset_in_bytes), length_in_bytes);
}
}
}
static void ClampedCopy(const TypedDataBase& dst,
intptr_t dst_offset_in_bytes,
const TypedDataBase& src,
intptr_t src_offset_in_bytes,
intptr_t length_in_bytes) {
ASSERT(Utils::RangeCheck(src_offset_in_bytes, length_in_bytes,
src.LengthInBytes()));
ASSERT(Utils::RangeCheck(dst_offset_in_bytes, length_in_bytes,
dst.LengthInBytes()));
{
NoSafepointScope no_safepoint;
if (length_in_bytes > 0) {
uint8_t* dst_data =
reinterpret_cast<uint8_t*>(dst.DataAddr(dst_offset_in_bytes));
int8_t* src_data =
reinterpret_cast<int8_t*>(src.DataAddr(src_offset_in_bytes));
for (intptr_t ix = 0; ix < length_in_bytes; ix++) {
int8_t v = *src_data;
if (v < 0) v = 0;
*dst_data = v;
src_data++;
dst_data++;
}
}
}
}
static bool IsTypedData(const Instance& obj) { static bool IsTypedData(const Instance& obj) {
ASSERT(!obj.IsNull()); ASSERT(!obj.IsNull());
intptr_t cid = obj.ptr()->GetClassId(); intptr_t cid = obj.ptr()->GetClassId();