diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2015-11-07 10:19:56 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2015-11-07 10:19:56 +0000 |
commit | 6ca5a44255096cba6a00edad911351fe94dd2e21 (patch) | |
tree | 8372a00b740eeef727fce7449770593c486b85e2 | |
parent | 0aad01985747ab503fd71ccf4767d0069fc3e85a (diff) | |
download | gcc-6ca5a44255096cba6a00edad911351fe94dd2e21.zip gcc-6ca5a44255096cba6a00edad911351fe94dd2e21.tar.gz gcc-6ca5a44255096cba6a00edad911351fe94dd2e21.tar.bz2 |
Handle internal functions in is_tm_pure_call
The upcoming changes to use internal functions for things like sqrt
caused a failure in gcc.dg/tm/20100610.c, because we were trying to get
call flags from the null gimple_call_fn of an IFN_SQRT call. We've been
making fairly heavy use of internal functions for a while now so I think
this might be latent.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* trans-mem.c (is_tm_pure_call): Use gimple_call_flags for
internal functions.
From-SVN: r229925
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/trans-mem.c | 3 |
2 files changed, 8 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6ffc9aa..5d9d2f8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2015-11-07 Richard Sandiford <richard.sandiford@arm.com> + * trans-mem.c (is_tm_pure_call): Use gimple_call_flags for + internal functions. + +2015-11-07 Richard Sandiford <richard.sandiford@arm.com> + * builtins.def: #undef DEF_BUILTIN and DEF_BUILTIN_CHKP * builtins.c, genmatch.c, tree-core.h: Don't undef them here. diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c index 45bc759..4583bd5 100644 --- a/gcc/trans-mem.c +++ b/gcc/trans-mem.c @@ -266,6 +266,9 @@ is_tm_safe (const_tree x) static bool is_tm_pure_call (gimple *call) { + if (gimple_call_internal_p (call)) + return (gimple_call_flags (call) & (ECF_CONST | ECF_TM_PURE)) != 0; + tree fn = gimple_call_fn (call); if (TREE_CODE (fn) == ADDR_EXPR) |