aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-11-07 10:19:56 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-11-07 10:19:56 +0000
commit6ca5a44255096cba6a00edad911351fe94dd2e21 (patch)
tree8372a00b740eeef727fce7449770593c486b85e2
parent0aad01985747ab503fd71ccf4767d0069fc3e85a (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/trans-mem.c3
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)