From 4871e1ed1728da22d48cfad1cb25a0a37f65d1bc Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 3 Jan 2018 07:18:28 +0000 Subject: [PATCH 1/1] poly_int: expand_ifn_atomic_compare_exchange_into_call This patch makes the mode size assumptions in expand_ifn_atomic_compare_exchange_into_call a bit more explicit, so that a later patch can add a to_constant () call. 2018-01-03 Richard Sandiford Alan Hayward David Sherwood gcc/ * builtins.c (expand_ifn_atomic_compare_exchange_into_call): Assert that the mode size is in the set {1, 2, 4, 8, 16}. Co-Authored-By: Alan Hayward Co-Authored-By: David Sherwood From-SVN: r256157 --- gcc/ChangeLog | 7 +++++++ gcc/builtins.c | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fb3d07de0a1..2eea29ba5e0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-01-03 Richard Sandiford + Alan Hayward + David Sherwood + + * builtins.c (expand_ifn_atomic_compare_exchange_into_call): Assert + that the mode size is in the set {1, 2, 4, 8, 16}. + 2018-01-03 Richard Sandiford Alan Hayward David Sherwood diff --git a/gcc/builtins.c b/gcc/builtins.c index 98eb804a275..c5d8435f251 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -5990,9 +5990,12 @@ expand_ifn_atomic_compare_exchange_into_call (gcall *call, machine_mode mode) /* Skip the boolean weak parameter. */ for (z = 4; z < 6; z++) vec->quick_push (gimple_call_arg (call, z)); + /* At present we only have BUILT_IN_ATOMIC_COMPARE_EXCHANGE_{1,2,4,8,16}. */ + unsigned int bytes_log2 = exact_log2 (GET_MODE_SIZE (mode)); + gcc_assert (bytes_log2 < 5); built_in_function fncode = (built_in_function) ((int) BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1 - + exact_log2 (GET_MODE_SIZE (mode))); + + bytes_log2); tree fndecl = builtin_decl_explicit (fncode); tree fn = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fndecl)), fndecl); -- 2.30.2