From 9850ce4d7bb89d4f9216dd5eebc88156bf31b70b Mon Sep 17 00:00:00 2001 From: Nick Alcock Date: Wed, 3 Jun 2020 13:23:42 +0100 Subject: libctf: add ctf_forwardable_kind The internals of the deduplicator want to know if something is a type that can have a forward to it fairly often, often enough that inlining it brings a noticeable performance gain. Convert the one place in libctf that can already benefit, even though it doesn't bring any sort of performance gain there. libctf/ * ctf-inlines.h (ctf_forwardable_kind): New. * ctf-create.c (ctf_add_forward): Use it. --- libctf/ChangeLog | 5 +++++ libctf/ctf-create.c | 2 +- libctf/ctf-inlines.h | 6 ++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/libctf/ChangeLog b/libctf/ChangeLog index b3a816c..c22cba0 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,5 +1,10 @@ 2020-07-22 Nick Alcock + * ctf-inlines.h (ctf_forwardable_kind): New. + * ctf-create.c (ctf_add_forward): Use it. + +2020-07-22 Nick Alcock + * ctf-impl.h (ctf_get_ctt_size): Move definition from here... * ctf-inlines.h (ctf_get_ctt_size): ... to here. diff --git a/libctf/ctf-create.c b/libctf/ctf-create.c index c13b83d..d50367d 100644 --- a/libctf/ctf-create.c +++ b/libctf/ctf-create.c @@ -1241,7 +1241,7 @@ ctf_add_forward (ctf_file_t *fp, uint32_t flag, const char *name, ctf_dtdef_t *dtd; ctf_id_t type = 0; - if (kind != CTF_K_STRUCT && kind != CTF_K_UNION && kind != CTF_K_ENUM) + if (!ctf_forwardable_kind (kind)) return (ctf_set_errno (fp, ECTF_NOTSUE)); /* If the type is already defined or exists as a forward tag, just diff --git a/libctf/ctf-inlines.h b/libctf/ctf-inlines.h index 4bec97b..3b912bd 100644 --- a/libctf/ctf-inlines.h +++ b/libctf/ctf-inlines.h @@ -40,6 +40,12 @@ ctf_get_ctt_size (const ctf_file_t *fp, return (fp->ctf_fileops->ctfo_get_ctt_size (fp, tp, sizep, incrementp)); } +static inline int +ctf_forwardable_kind (int kind) +{ + return (kind == CTF_K_STRUCT || kind == CTF_K_UNION || kind == CTF_K_ENUM); +} + static inline int ctf_dynhash_cinsert (ctf_dynhash_t *h, const void *k, const void *v) -- cgit v1.1