[PATCH v4 03/16] qemu/compiler.h: Add optimize_away

Richard Henderson posted 16 patches 6 years, 4 months ago
Maintainers: Richard Henderson <rth@twiddle.net>, Paolo Bonzini <pbonzini@redhat.com>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, Eduardo Habkost <ehabkost@redhat.com>
[PATCH v4 03/16] qemu/compiler.h: Add optimize_away
Posted by Richard Henderson 6 years, 4 months ago
Use this as a compile-time assert that a particular
code path is not reachable.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 include/qemu/compiler.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
index 20780e722d..6604ccea92 100644
--- a/include/qemu/compiler.h
+++ b/include/qemu/compiler.h
@@ -221,4 +221,19 @@
 #define QEMU_GENERIC9(x, a0, ...) QEMU_GENERIC_IF(x, a0, QEMU_GENERIC8(x, __VA_ARGS__))
 #define QEMU_GENERIC10(x, a0, ...) QEMU_GENERIC_IF(x, a0, QEMU_GENERIC9(x, __VA_ARGS__))
 
+/**
+ * optimize_away()
+ *
+ * The compiler, during optimization, is expected to prove that a call
+ * to this function cannot be reached and remove it.  If the compiler
+ * supports QEMU_ERROR, this will be reported at compile time; otherwise
+ * this will be reported at link time, due to the missing symbol.
+ */
+#ifdef __OPTIMIZE__
+extern void QEMU_NORETURN QEMU_ERROR("code path is reachable")
+    optimize_away(void);
+#else
+#define optimize_away()  g_assert_not_reached()
+#endif
+
 #endif /* COMPILER_H */
-- 
2.17.1


Re: [PATCH v4 03/16] qemu/compiler.h: Add optimize_away
Posted by Alex Bennée 6 years, 4 months ago
Richard Henderson <richard.henderson@linaro.org> writes:

> Use this as a compile-time assert that a particular
> code path is not reachable.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>

> ---
>  include/qemu/compiler.h | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
>
> diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
> index 20780e722d..6604ccea92 100644
> --- a/include/qemu/compiler.h
> +++ b/include/qemu/compiler.h
> @@ -221,4 +221,19 @@
>  #define QEMU_GENERIC9(x, a0, ...) QEMU_GENERIC_IF(x, a0, QEMU_GENERIC8(x, __VA_ARGS__))
>  #define QEMU_GENERIC10(x, a0, ...) QEMU_GENERIC_IF(x, a0, QEMU_GENERIC9(x, __VA_ARGS__))
>
> +/**
> + * optimize_away()
> + *
> + * The compiler, during optimization, is expected to prove that a call
> + * to this function cannot be reached and remove it.  If the compiler
> + * supports QEMU_ERROR, this will be reported at compile time; otherwise
> + * this will be reported at link time, due to the missing symbol.
> + */
> +#ifdef __OPTIMIZE__
> +extern void QEMU_NORETURN QEMU_ERROR("code path is reachable")
> +    optimize_away(void);
> +#else
> +#define optimize_away()  g_assert_not_reached()
> +#endif
> +
>  #endif /* COMPILER_H */


--
Alex Bennée

Re: [PATCH v4 03/16] qemu/compiler.h: Add optimize_away
Posted by David Hildenbrand 6 years, 4 months ago
On 24.09.19 00:59, Richard Henderson wrote:
> Use this as a compile-time assert that a particular
> code path is not reachable.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  include/qemu/compiler.h | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
> index 20780e722d..6604ccea92 100644
> --- a/include/qemu/compiler.h
> +++ b/include/qemu/compiler.h
> @@ -221,4 +221,19 @@
>  #define QEMU_GENERIC9(x, a0, ...) QEMU_GENERIC_IF(x, a0, QEMU_GENERIC8(x, __VA_ARGS__))
>  #define QEMU_GENERIC10(x, a0, ...) QEMU_GENERIC_IF(x, a0, QEMU_GENERIC9(x, __VA_ARGS__))
>  
> +/**
> + * optimize_away()

I would have used the compiler-speak "optimized_out()" instead.

> + *
> + * The compiler, during optimization, is expected to prove that a call
> + * to this function cannot be reached and remove it.  If the compiler
> + * supports QEMU_ERROR, this will be reported at compile time; otherwise
> + * this will be reported at link time, due to the missing symbol.
> + */
> +#ifdef __OPTIMIZE__
> +extern void QEMU_NORETURN QEMU_ERROR("code path is reachable")
> +    optimize_away(void);
> +#else
> +#define optimize_away()  g_assert_not_reached()
> +#endif
> +
>  #endif /* COMPILER_H */
> 

Apart from that looks good to me.

-- 

Thanks,

David / dhildenb

Re: [PATCH v4 03/16] qemu/compiler.h: Add optimize_away
Posted by Richard Henderson 6 years, 4 months ago
On 9/24/19 12:47 AM, David Hildenbrand wrote:
> On 24.09.19 00:59, Richard Henderson wrote:
>> +/**
>> + * optimize_away()
> 
> I would have used the compiler-speak "optimized_out()" instead.

Hmm, that's just a matter of present vs past test.

Perhaps, qemu_build_not_reached, to mirror g_assert_not_reached and
QEMU_BUILD_BUG_ON?


r~

Re: [PATCH v4 03/16] qemu/compiler.h: Add optimize_away
Posted by David Hildenbrand 6 years, 4 months ago
On 24.09.19 19:27, Richard Henderson wrote:
> On 9/24/19 12:47 AM, David Hildenbrand wrote:
>> On 24.09.19 00:59, Richard Henderson wrote:
>>> +/**
>>> + * optimize_away()
>>
>> I would have used the compiler-speak "optimized_out()" instead.
> 
> Hmm, that's just a matter of present vs past test.
> 
> Perhaps, qemu_build_not_reached, to mirror g_assert_not_reached and
> QEMU_BUILD_BUG_ON?
> 

Would also work for me.

-- 

Thanks,

David / dhildenb