From 89e44ce8e9909d63389e2422aabb5a91b8a9027b Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 1 Feb 2023 21:48:28 -0800 Subject: [PATCH] ircd: Apply branch expectation attributes to various case labels. --- ircd/allocator.cc | 5 +++++ ircd/db.cc | 9 +++++++++ ircd/db_database.cc | 5 ++++- ircd/fs.cc | 9 +++++++-- ircd/net.cc | 8 +++++++- ircd/net_dns_resolver.cc | 2 ++ ircd/resource.cc | 1 + ircd/server.cc | 3 +++ 8 files changed, 38 insertions(+), 4 deletions(-) diff --git a/ircd/allocator.cc b/ircd/allocator.cc index 17c2bbc2b..220e93474 100644 --- a/ircd/allocator.cc +++ b/ircd/allocator.cc @@ -56,12 +56,15 @@ ircd::allocator::allocate(const size_t alignment, void *ret; switch(int errc(::posix_memalign(&ret, alignment, size)); errc) { + [[likely]] case 0: break; + [[unlikely]] case int(std::errc::not_enough_memory): throw std::bad_alloc{}; + [[unlikely]] default: throw_system_error(); __builtin_unreachable(); @@ -249,9 +252,11 @@ ircd::allocator::advise(const const_buffer &buf, assert(aligned(data(buf), info::page_size)); switch(const auto r(::madvise(mutable_cast(data(buf)), size(buf), advice)); r) { + [[likely]] case 0: return size(buf); // success + [[unlikely]] default: throw_system_error(r); // error } diff --git a/ircd/db.cc b/ircd/db.cc index 23aeb30bb..9e9433b9f 100644 --- a/ircd/db.cc +++ b/ircd/db.cc @@ -4398,6 +4398,7 @@ ircd::db::throw_on_error::throw_on_error(const rocksdb::Status &status) switch(status.code()) { + [[likely]] case Status::kOk: return; @@ -4412,6 +4413,7 @@ ircd::db::throw_on_error::throw_on_error(const rocksdb::Status &status) [[fallthrough]]; #endif + [[unlikely]] default: throw error { @@ -4444,6 +4446,7 @@ ircd::db::error_to_status::error_to_status(const std::error_code &e) switch(e.value()) { + [[likely]] case 0: return Status::OK(); @@ -4529,6 +4532,7 @@ ircd::db::append(rocksdb::WriteBatch &batch, const auto v(slice(std::get<2>(delta))); switch(std::get<0>(delta)) { + [[unlikely]] case op::GET: assert(0); break; case op::SET: batch.Put(c, k, v); break; case op::MERGE: batch.Merge(c, k, v); break; @@ -5120,11 +5124,13 @@ ircd::db::valid(const rocksdb::Iterator &it) { using rocksdb::Status; + [[likely]] case Status::kOk: case Status::kNotFound: case Status::kIncomplete: return it.Valid(); + [[unlikely]] default: throw_on_error { @@ -5142,13 +5148,16 @@ ircd::db::valid(const rocksdb::Status &s) { using rocksdb::Status; + [[likely]] case Status::kOk: return true; + [[likely]] case Status::kNotFound: case Status::kIncomplete: return false; + [[unlikely]] default: throw_on_error{s}; __builtin_unreachable(); diff --git a/ircd/db_database.cc b/ircd/db_database.cc index 116381e12..7cd6d3ad5 100644 --- a/ircd/db_database.cc +++ b/ircd/db_database.cc @@ -523,7 +523,7 @@ ircd::db::loglevel(const database &d) switch(level) { - default: + [[unlikely]] case rocksdb::NUM_INFO_LOG_LEVELS: assert(0); @@ -534,6 +534,9 @@ ircd::db::loglevel(const database &d) case rocksdb::INFO_LEVEL: return log::level::INFO; case rocksdb::DEBUG_LEVEL: return log::level::DEBUG; } + + assert(0); + __builtin_unreachable(); } ircd::db::options diff --git a/ircd/fs.cc b/ircd/fs.cc index 74210d7e7..fdbf11f7f 100644 --- a/ircd/fs.cc +++ b/ircd/fs.cc @@ -2332,8 +2332,13 @@ ircd::fs::advise(const fd &fd, cnt = std::min(opts.offset + count - off, max_count); switch(const auto r(::posix_fadvise(fd, off, cnt, advice)); r) { - case 0: break; - default: throw_system_error(r); + [[likely]] + case 0: + break; + + [[unlikely]] + default: + throw_system_error(r); } } while(off + cnt < opts.offset + count); diff --git a/ircd/net.cc b/ircd/net.cc index bd891d52d..e49453dcc 100644 --- a/ircd/net.cc +++ b/ircd/net.cc @@ -1671,6 +1671,7 @@ try }; break; + [[unlikely]] default: throw ircd::not_implemented{}; } @@ -1760,7 +1761,9 @@ try return; } - default: throw ircd::not_implemented{}; + [[unlikely]] + default: + throw ircd::not_implemented{}; } } catch(const boost::system::system_error &e) @@ -2188,6 +2191,7 @@ noexcept try } // A cancelation means there was no timeout. + [[likely]] case int(std::errc::operation_canceled): { assert(ec.category() == std::system_category()); @@ -2196,6 +2200,7 @@ noexcept try } // All other errors are unexpected, logged and ignored here. + [[unlikely]] default: throw panic { "socket(%p): unexpected :%s", @@ -2520,6 +2525,7 @@ noexcept try if(!valid) switch(err) { + [[unlikely]] case X509_V_OK: assert(0); diff --git a/ircd/net_dns_resolver.cc b/ircd/net_dns_resolver.cc index 11e9631a1..ef00fbd20 100644 --- a/ircd/net_dns_resolver.cc +++ b/ircd/net_dns_resolver.cc @@ -172,6 +172,7 @@ ircd::net::dns::resolver::make_query(const mutable_buffer &buf, string_view hoststr; switch(tag.opts.qtype) { + [[unlikely]] case 0: throw error { "Query type is required to form a question." @@ -803,6 +804,7 @@ ircd::net::dns::resolver::handle_error(const header &header, { switch(header.rcode) { + [[likely]] case 0: // NoError; continue return true; diff --git a/ircd/resource.cc b/ircd/resource.cc index fd2cfa146..8020e416e 100644 --- a/ircd/resource.cc +++ b/ircd/resource.cc @@ -1117,6 +1117,7 @@ try return; } + [[unlikely]] default: throw http::error { "Cannot send json::%s as response content", diff --git a/ircd/server.cc b/ircd/server.cc index 98cb175ee..359acdc93 100644 --- a/ircd/server.cc +++ b/ircd/server.cc @@ -1236,6 +1236,7 @@ ircd::server::peer::handle_error(link &link, if(system_category(ec)) switch(ec.value()) { + [[unlikely]] case 0: assert(0); break; @@ -2414,6 +2415,7 @@ noexcept try if(system_category(ec)) switch(ec.value()) { + [[likely]] case 0: handle_writable_success(); return; @@ -2601,6 +2603,7 @@ noexcept try if(system_category(ec)) switch(ec.value()) { + [[likely]] case 0: handle_readable_success(); return;