aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2012-01-25 20:32:57 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2012-01-25 20:32:57 +0000
commitdda6ecaea8be6f0dd4a3b7ca5498698702a32ecf (patch)
treecb6bef74675c93b0a3d09cce2920aed03d5a155f
parent21ae439c983250880d3549e89015eea76c7bdbc4 (diff)
downloadgcc-dda6ecaea8be6f0dd4a3b7ca5498698702a32ecf.zip
gcc-dda6ecaea8be6f0dd4a3b7ca5498698702a32ecf.tar.gz
gcc-dda6ecaea8be6f0dd4a3b7ca5498698702a32ecf.tar.bz2
re PR lto/51698 ([trans-mem] TM runtime and application with LTO)
PR lto/51698 * builtin-types.def: (BT_CONST_DOUBLE_PTR): New. (BT_FN_VOID_PTR_CONST_PTR_SIZE): New. (BT_FN_VOID_PTR_INT_SIZE): New. (BT_FN_UINT_UINT_VAR): Remove. (BT_FN_UINT32_UINT32_VAR): New. (BT_FN_DOUBLE_VPTR): Remove. (BT_FN_DOUBLE_CONST_DOUBLE_PTR): New. * gtm-builtins.def (_ITM_abortTransaction): Set return type to void. (_ITM_changeTransactionMode): Same. (_ITM_memmoveRtWt): Change return type to void. (_ITM_memcpyRtWt): Same. (_ITM_memsetW): Same. (_ITM_RaRD): Change types to double. (_ITM_RD): Same. (_ITM_RaWD): Same. (_ITM_RfWD): Same. * builtins.def (DEF_TM_BUILTIN): Set BOTH_P to true. testsuite/ PR lto/51698 * gcc.dg/lto/trans-mem-4_0.c: New. * gcc.dg/lto/trans-mem-4_1.c: New. * gcc.dg/lto/trans-mem-2_0.c: Provide correct argument types for TM builtins. * gcc.dg/lto/trans-mem-1_0.c: Require stdint_types. * gcc.dg/lto/trans-mem-1_1.c: Provide correct argument types for TM builtins. * gcc.dg/lto/trans-mem-3_0.c: Require stdint_types. * gcc.dg/lto/trans-mem-3_1.c: Provide correct argument types for TM builtins. From-SVN: r183537
-rw-r--r--gcc/ChangeLog24
-rw-r--r--gcc/builtin-types.def14
-rw-r--r--gcc/builtins.def2
-rw-r--r--gcc/gtm-builtins.def20
-rw-r--r--gcc/testsuite/ChangeLog14
-rw-r--r--gcc/testsuite/gcc.dg/lto/trans-mem-1_0.c1
-rw-r--r--gcc/testsuite/gcc.dg/lto/trans-mem-1_1.c17
-rw-r--r--gcc/testsuite/gcc.dg/lto/trans-mem-2_0.c18
-rw-r--r--gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c1
-rw-r--r--gcc/testsuite/gcc.dg/lto/trans-mem-3_1.c17
-rw-r--r--gcc/testsuite/gcc.dg/lto/trans-mem-4_0.c12
-rw-r--r--gcc/testsuite/gcc.dg/lto/trans-mem-4_1.c14
12 files changed, 116 insertions, 38 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 81ab217..a044b13 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -165,6 +165,30 @@
to effect no-op split.
2012-01-24 Aldy Hernandez <aldyh@redhat.com>
+
+ PR lto/51698
+ * builtin-types.def: (BT_CONST_DOUBLE_PTR): New.
+ (BT_FN_VOID_PTR_CONST_PTR_SIZE): New.
+ (BT_FN_VOID_PTR_INT_SIZE): New.
+ (BT_FN_UINT_UINT_VAR): Remove.
+ (BT_FN_UINT32_UINT32_VAR): New.
+ (BT_FN_DOUBLE_VPTR): Remove.
+ (BT_FN_DOUBLE_CONST_DOUBLE_PTR): New.
+
+ * gtm-builtins.def (_ITM_abortTransaction): Set return type to
+ void.
+ (_ITM_changeTransactionMode): Same.
+ (_ITM_memmoveRtWt): Change return type to void.
+ (_ITM_memcpyRtWt): Same.
+ (_ITM_memsetW): Same.
+ (_ITM_RaRD): Change types to double.
+ (_ITM_RD): Same.
+ (_ITM_RaWD): Same.
+ (_ITM_RfWD): Same.
+
+ * builtins.def (DEF_TM_BUILTIN): Set BOTH_P to true.
+
+2012-01-24 Aldy Hernandez <aldyh@redhat.com>
Patrick Marlier <patrick.marlier@gmail.com>
* trans-mem.c (requires_barrier): Do not instrument thread local
diff --git a/gcc/builtin-types.def b/gcc/builtin-types.def
index 3a05b3b..fd37c2c 100644
--- a/gcc/builtin-types.def
+++ b/gcc/builtin-types.def
@@ -103,6 +103,10 @@ DEF_PRIMITIVE_TYPE (BT_PTRMODE, (*lang_hooks.types.type_for_mode)(ptr_mode, 0))
DEF_PRIMITIVE_TYPE (BT_INT_PTR, integer_ptr_type_node)
DEF_PRIMITIVE_TYPE (BT_FLOAT_PTR, float_ptr_type_node)
DEF_PRIMITIVE_TYPE (BT_DOUBLE_PTR, double_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_CONST_DOUBLE_PTR,
+ build_pointer_type
+ (build_qualified_type (double_type_node,
+ TYPE_QUAL_CONST)))
DEF_PRIMITIVE_TYPE (BT_LONGDOUBLE_PTR, long_double_ptr_type_node)
DEF_PRIMITIVE_TYPE (BT_PID, pid_type_node)
DEF_PRIMITIVE_TYPE (BT_SIZE, size_type_node)
@@ -342,10 +346,14 @@ DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE)
DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_CONST_PTR_SIZE,
BT_PTR, BT_PTR, BT_CONST_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_CONST_PTR_SIZE,
+ BT_VOID, BT_PTR, BT_CONST_PTR, BT_SIZE)
DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
BT_INT, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_INT_SIZE,
BT_PTR, BT_PTR, BT_INT, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_SIZE,
+ BT_VOID, BT_PTR, BT_INT, BT_SIZE)
DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_INT,
BT_VOID, BT_PTR, BT_INT, BT_INT)
DEF_FUNCTION_TYPE_3 (BT_FN_VOID_CONST_PTR_PTR_SIZE,
@@ -498,8 +506,8 @@ DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_CONST_PTR_VAR,
BT_VOID, BT_CONST_PTR)
DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
BT_INT, BT_CONST_STRING)
-DEF_FUNCTION_TYPE_VAR_1 (BT_FN_UINT_UINT_VAR,
- BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_UINT32_UINT32_VAR,
+ BT_UINT32, BT_UINT32)
DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_FILEPTR_CONST_STRING_VAR,
BT_INT, BT_FILEPTR, BT_CONST_STRING)
@@ -539,7 +547,7 @@ DEF_FUNCTION_TYPE_1 (BT_FN_I2_VPTR, BT_I2, BT_VOLATILE_PTR)
DEF_FUNCTION_TYPE_1 (BT_FN_I4_VPTR, BT_I4, BT_VOLATILE_PTR)
DEF_FUNCTION_TYPE_1 (BT_FN_I8_VPTR, BT_I8, BT_VOLATILE_PTR)
DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_VPTR, BT_FLOAT, BT_VOLATILE_PTR)
-DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_VPTR, BT_DOUBLE, BT_VOLATILE_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_CONST_DOUBLE_PTR, BT_DOUBLE, BT_DOUBLE_PTR)
DEF_FUNCTION_TYPE_1 (BT_FN_LDOUBLE_VPTR, BT_LONGDOUBLE, BT_VOLATILE_PTR)
DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VPTR_I1, BT_VOID, BT_VOLATILE_PTR, BT_I1)
diff --git a/gcc/builtins.def b/gcc/builtins.def
index b5ddace..0fb9286 100644
--- a/gcc/builtins.def
+++ b/gcc/builtins.def
@@ -147,7 +147,7 @@ along with GCC; see the file COPYING3. If not see
#undef DEF_TM_BUILTIN
#define DEF_TM_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
- false, true, true, ATTRS, false, flag_tm)
+ true, true, true, ATTRS, false, flag_tm)
/* Define an attribute list for math functions that are normally
"impure" because some of them may write into global memory for
diff --git a/gcc/gtm-builtins.def b/gcc/gtm-builtins.def
index 77b320c..171019e 100644
--- a/gcc/gtm-builtins.def
+++ b/gcc/gtm-builtins.def
@@ -1,21 +1,21 @@
DEF_TM_BUILTIN (BUILT_IN_TM_START, "_ITM_beginTransaction",
- BT_FN_UINT_UINT_VAR, ATTR_TM_NOTHROW_RT_LIST)
+ BT_FN_UINT32_UINT32_VAR, ATTR_TM_NOTHROW_RT_LIST)
DEF_TM_BUILTIN (BUILT_IN_TM_COMMIT, "_ITM_commitTransaction",
BT_FN_VOID, ATTR_TM_NOTHROW_LIST)
DEF_TM_BUILTIN (BUILT_IN_TM_COMMIT_EH, "_ITM_commitTransactionEH",
BT_FN_VOID_PTR, ATTR_TM_NOTHROW_LIST)
DEF_TM_BUILTIN (BUILT_IN_TM_ABORT, "_ITM_abortTransaction",
- BT_FN_INT, ATTR_TM_NORETURN_NOTHROW_LIST)
+ BT_FN_VOID_INT, ATTR_TM_NORETURN_NOTHROW_LIST)
DEF_TM_BUILTIN (BUILT_IN_TM_IRREVOCABLE, "_ITM_changeTransactionMode",
- BT_FN_INT_INT, ATTR_TM_NOTHROW_LIST)
+ BT_FN_VOID_INT, ATTR_TM_NOTHROW_LIST)
DEF_TM_BUILTIN (BUILT_IN_TM_MEMCPY, "_ITM_memcpyRtWt",
- BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
+ BT_FN_VOID_PTR_CONST_PTR_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
DEF_TM_BUILTIN (BUILT_IN_TM_MEMMOVE, "_ITM_memmoveRtWt",
- BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
+ BT_FN_VOID_PTR_CONST_PTR_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
DEF_TM_BUILTIN (BUILT_IN_TM_MEMSET, "_ITM_memsetW",
- BT_FN_PTR_PTR_INT_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
+ BT_FN_VOID_PTR_INT_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
DEF_TM_BUILTIN (BUILT_IN_TM_GETTMCLONE_IRR, "_ITM_getTMCloneOrIrrevocable",
BT_FN_PTR_PTR, ATTR_TM_CONST_NOTHROW_LIST)
@@ -172,13 +172,13 @@ DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RFW_FLOAT, "_ITM_RfWF",
BT_FN_FLOAT_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_DOUBLE, "_ITM_RD",
- BT_FN_DOUBLE_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+ BT_FN_DOUBLE_CONST_DOUBLE_PTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAR_DOUBLE, "_ITM_RaRD",
- BT_FN_FLOAT_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+ BT_FN_DOUBLE_CONST_DOUBLE_PTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAW_DOUBLE, "_ITM_RaWD",
- BT_FN_FLOAT_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+ BT_FN_DOUBLE_CONST_DOUBLE_PTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RFW_DOUBLE, "_ITM_RfWD",
- BT_FN_FLOAT_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+ BT_FN_DOUBLE_CONST_DOUBLE_PTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
/* These stubs should get defined in the backend if applicable. */
DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_M64, "__builtin__ITM_RM64")
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c135376..60e392b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,17 @@
+2012-01-25 Aldy Hernandez <aldyh@redhat.com>
+
+ PR lto/51698
+ * gcc.dg/lto/trans-mem-4_0.c: New.
+ * gcc.dg/lto/trans-mem-4_1.c: New.
+ * gcc.dg/lto/trans-mem-2_0.c: Provide correct argument types for
+ TM builtins.
+ * gcc.dg/lto/trans-mem-1_0.c: Require stdint_types.
+ * gcc.dg/lto/trans-mem-1_1.c: Provide correct argument types for
+ TM builtins.
+ * gcc.dg/lto/trans-mem-3_0.c: Require stdint_types.
+ * gcc.dg/lto/trans-mem-3_1.c: Provide correct argument types for
+ TM builtins.
+
2012-01-25 Georg-Johann Lay <avr@gjlay.de>
* gcc.target/avr/torture/int24-mul.c: Rename __pgm to __flash.
diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-1_0.c b/gcc/testsuite/gcc.dg/lto/trans-mem-1_0.c
index 87060cc..556c99b 100644
--- a/gcc/testsuite/gcc.dg/lto/trans-mem-1_0.c
+++ b/gcc/testsuite/gcc.dg/lto/trans-mem-1_0.c
@@ -1,5 +1,6 @@
/* { dg-lto-options {{-flto -fgnu-tm}} } */
/* { dg-lto-do link } */
+/* { dg-require-effective-target stdint_types } */
int i;
diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-1_1.c b/gcc/testsuite/gcc.dg/lto/trans-mem-1_1.c
index cb80f32..6dba252 100644
--- a/gcc/testsuite/gcc.dg/lto/trans-mem-1_1.c
+++ b/gcc/testsuite/gcc.dg/lto/trans-mem-1_1.c
@@ -1,9 +1,10 @@
-#define dummy(func) \
- __attribute__((noinline,noclone,used)) void func() { asm (""); }
+#include <stdint.h>
-dummy(_ITM_beginTransaction)
-dummy(_ITM_commitTransaction)
-dummy(_ITM_WU4)
-dummy(_ITM_WU8)
-dummy(_ITM_registerTMCloneTable)
-dummy(_ITM_deregisterTMCloneTable)
+#define noinline __attribute__((noinline,noclone,used))
+
+noinline uint32_t _ITM_beginTransaction(uint32_t a, ...) { asm(""); }
+noinline void _ITM_commitTransaction (void) { asm(""); }
+noinline void _ITM_WU4 (void *a, uint32_t b) { asm(""); }
+noinline void _ITM_WU8 (void *a, uint64_t b) { asm(""); }
+noinline void _ITM_registerTMCloneTable (void) { asm(""); }
+noinline void _ITM_deregisterTMCloneTable (void) { asm(""); }
diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-2_0.c b/gcc/testsuite/gcc.dg/lto/trans-mem-2_0.c
index 301a711..b99c5bf 100644
--- a/gcc/testsuite/gcc.dg/lto/trans-mem-2_0.c
+++ b/gcc/testsuite/gcc.dg/lto/trans-mem-2_0.c
@@ -1,17 +1,19 @@
/* { dg-lto-options {{-flto -fgnu-tm}} } */
/* { dg-lto-do link } */
+/* { dg-require-effective-target stdint_types } */
+
+#include <stdint.h>
extern void foobar() __attribute__((transaction_callable));
-#define dummy(func) \
- __attribute__((noinline,noclone,used)) void func() { asm (""); }
+#define noinline __attribute__((noinline,noclone,used))
-dummy(_ITM_beginTransaction)
-dummy(_ITM_commitTransaction)
-dummy(_ITM_WU4)
-dummy(_ITM_WU8)
-dummy(_ITM_registerTMCloneTable)
-dummy(_ITM_deregisterTMCloneTable)
+noinline uint32_t _ITM_beginTransaction(uint32_t a, ...) { asm(""); }
+noinline void _ITM_commitTransaction (void) { asm(""); }
+noinline void _ITM_WU4 (void *a, uint32_t b) { asm(""); }
+noinline void _ITM_WU8 (void *a, uint64_t b) { asm(""); }
+noinline void _ITM_registerTMCloneTable (void) { asm(""); }
+noinline void _ITM_deregisterTMCloneTable (void) { asm(""); }
main()
{
diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c b/gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c
index dd57890..8a5ca75 100644
--- a/gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c
+++ b/gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c
@@ -1,5 +1,6 @@
/* { dg-lto-options {{-flto}} } */
/* { dg-lto-do link } */
+/* { dg-require-effective-target stdint_types } */
/* Test that we can build one object file with -fgnu-tm
(trans-mem-3_1.c), but do the final link of all objects without
diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-3_1.c b/gcc/testsuite/gcc.dg/lto/trans-mem-3_1.c
index d907f68..6373ecc 100644
--- a/gcc/testsuite/gcc.dg/lto/trans-mem-3_1.c
+++ b/gcc/testsuite/gcc.dg/lto/trans-mem-3_1.c
@@ -1,5 +1,7 @@
/* { dg-options "-fgnu-tm" } */
+#include <stdint.h>
+
extern int i;
main()
@@ -7,12 +9,11 @@ main()
__transaction_atomic { i = 0; }
}
-#define dummy(func) \
- __attribute__((noinline,noclone,used)) void func() { asm (""); }
+#define noinline __attribute__((noinline,noclone,used))
-dummy(_ITM_beginTransaction)
-dummy(_ITM_commitTransaction)
-dummy(_ITM_WU4)
-dummy(_ITM_WU8)
-dummy(_ITM_registerTMCloneTable)
-dummy(_ITM_deregisterTMCloneTable)
+noinline uint32_t _ITM_beginTransaction(uint32_t a, ...) { asm(""); }
+noinline void _ITM_commitTransaction (void) { asm(""); }
+noinline void _ITM_WU4 (void *a, uint32_t b) { asm(""); }
+noinline void _ITM_WU8 (void *a, uint64_t b) { asm(""); }
+noinline void _ITM_registerTMCloneTable (void) { asm(""); }
+noinline void _ITM_deregisterTMCloneTable (void) { asm(""); }
diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-4_0.c b/gcc/testsuite/gcc.dg/lto/trans-mem-4_0.c
new file mode 100644
index 0000000..16332ee
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/trans-mem-4_0.c
@@ -0,0 +1,12 @@
+/* { dg-lto-options {{-flto -fgnu-tm}} } */
+/* { dg-lto-do link } */
+/* { dg-require-effective-target stdint_types } */
+
+extern void foo() __attribute__((transaction_safe));
+
+int main()
+{
+ __transaction_atomic {
+ foo();
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/lto/trans-mem-4_1.c b/gcc/testsuite/gcc.dg/lto/trans-mem-4_1.c
new file mode 100644
index 0000000..a377e66
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/trans-mem-4_1.c
@@ -0,0 +1,14 @@
+#include <stdint.h>
+
+__attribute__((transaction_safe))
+void foo()
+{
+}
+
+uint32_t _ITM_beginTransaction(uint32_t prop, ...)
+{
+}
+
+void __builtin__ITM_commitTransaction (void)
+{
+}