diff options
author | Andreas Krebbel <Andreas.Krebbel@de.ibm.com> | 2013-10-07 07:50:25 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2013-10-07 07:50:25 +0000 |
commit | ee163e721aed1e4f732ad5ca447a0797a9318e23 (patch) | |
tree | 644e37d1107cff6b03cc1ec491d9e08343ab9a94 /gcc | |
parent | 2a1a5775d94b931c52693410393e8ec1b460ddfd (diff) | |
download | gcc-ee163e721aed1e4f732ad5ca447a0797a9318e23.zip gcc-ee163e721aed1e4f732ad5ca447a0797a9318e23.tar.gz gcc-ee163e721aed1e4f732ad5ca447a0797a9318e23.tar.bz2 |
2013-10-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/s390/s390.md ("tbegin", "tbegin_nofloat", "tbegin_retry")
("tbegin_retry_nofloat", "tend", "tabort", "tx_assist"): Remove
constraint letters from expanders.
("tbegin_retry", "tbegin_retry_nofloat"): Change predicate of the
retry count to general_operand.
("tabort"): Give operand 0 a mode.
("tabort_1"): Add mode and constraint letter for operand 0.
* doc/extend.texi: Fix protoype of __builtin_non_tx_store.
2013-10-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* gcc.target/s390/htm-1.c: Add more tests to cover different
operand types.
From-SVN: r203239
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/s390/s390.md | 28 | ||||
-rw-r--r-- | gcc/doc/extend.texi | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/s390/htm-1.c | 48 |
5 files changed, 73 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cf4a45c..d91beec 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2013-10-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> + + * config/s390/s390.md ("tbegin", "tbegin_nofloat", "tbegin_retry") + ("tbegin_retry_nofloat", "tend", "tabort", "tx_assist"): Remove + constraint letters from expanders. + ("tbegin_retry", "tbegin_retry_nofloat"): Change predicate of the + retry count to general_operand. + ("tabort"): Give operand 0 a mode. + ("tabort_1"): Add mode and constraint letter for operand 0. + * doc/extend.texi: Fix protoype of __builtin_non_tx_store. + 2013-10-04 Jeff Law <law@redhat.com> * tree-ssa-threadedge.c: Fix some trailing whitespace problems. diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index cf9ef77..bb1408e 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -9962,8 +9962,8 @@ ; Non-constrained transaction begin (define_expand "tbegin" - [(match_operand:SI 0 "register_operand" "=d") - (match_operand:BLK 1 "memory_operand" "=Q")] + [(match_operand:SI 0 "register_operand" "") + (match_operand:BLK 1 "memory_operand" "")] "TARGET_HTM" { s390_expand_tbegin (operands[0], operands[1], NULL_RTX, true); @@ -9971,8 +9971,8 @@ }) (define_expand "tbegin_nofloat" - [(match_operand:SI 0 "register_operand" "=d") - (match_operand:BLK 1 "memory_operand" "=Q")] + [(match_operand:SI 0 "register_operand" "") + (match_operand:BLK 1 "memory_operand" "")] "TARGET_HTM" { s390_expand_tbegin (operands[0], operands[1], NULL_RTX, false); @@ -9980,9 +9980,9 @@ }) (define_expand "tbegin_retry" - [(match_operand:SI 0 "register_operand" "=d") - (match_operand:BLK 1 "memory_operand" "=Q") - (match_operand 2 "const_int_operand")] + [(match_operand:SI 0 "register_operand" "") + (match_operand:BLK 1 "memory_operand" "") + (match_operand:SI 2 "general_operand" "")] "TARGET_HTM" { s390_expand_tbegin (operands[0], operands[1], operands[2], true); @@ -9990,9 +9990,9 @@ }) (define_expand "tbegin_retry_nofloat" - [(match_operand:SI 0 "register_operand" "=d") - (match_operand:BLK 1 "memory_operand" "=Q") - (match_operand 2 "const_int_operand")] + [(match_operand:SI 0 "register_operand" "") + (match_operand:BLK 1 "memory_operand" "") + (match_operand:SI 2 "general_operand" "")] "TARGET_HTM" { s390_expand_tbegin (operands[0], operands[1], operands[2], false); @@ -10059,7 +10059,7 @@ (define_expand "tend" [(set (reg:CCRAW CC_REGNUM) (unspec_volatile:CCRAW [(const_int 0)] UNSPECV_TEND)) - (set (match_operand:SI 0 "register_operand" "=d") + (set (match_operand:SI 0 "register_operand" "") (unspec:SI [(reg:CCRAW CC_REGNUM)] UNSPEC_CC_TO_INT))] "TARGET_HTM" "") @@ -10074,7 +10074,7 @@ ; Transaction abort (define_expand "tabort" - [(unspec_volatile [(match_operand 0 "shift_count_or_setmem_operand" "")] + [(unspec_volatile [(match_operand:SI 0 "shift_count_or_setmem_operand" "")] UNSPECV_TABORT)] "TARGET_HTM && operands != NULL" { @@ -10089,7 +10089,7 @@ }) (define_insn "*tabort_1" - [(unspec_volatile [(match_operand 0 "shift_count_or_setmem_operand" "")] + [(unspec_volatile [(match_operand:SI 0 "shift_count_or_setmem_operand" "Y")] UNSPECV_TABORT)] "TARGET_HTM && operands != NULL" "tabort\t%Y0" @@ -10118,7 +10118,7 @@ (define_expand "tx_assist" [(set (match_dup 1) (const_int 0)) - (unspec_volatile [(match_operand:SI 0 "register_operand" "d") + (unspec_volatile [(match_operand:SI 0 "register_operand" "") (match_dup 1) (const_int 1)] UNSPECV_PPA)] diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index d722774..782c55e 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -15046,7 +15046,7 @@ depth is returned as integer value. For a nesting depth of 0 the code is not executed as part of an transaction. @end deftypefn -@deftypefn {Built-in Function} void __builtin_non_tx_store (unsigned long long *, unsigned long long) +@deftypefn {Built-in Function} void __builtin_non_tx_store (uint64_t *, uint64_t) Generates the @code{ntstg} machine instruction. The second argument is written to the first arguments location. The store operation will diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 016545a..5dccbe7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-10-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> + + * gcc.target/s390/htm-1.c: Add more tests to cover different + operand types. + 2013-10-06 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58126 diff --git a/gcc/testsuite/gcc.target/s390/htm-1.c b/gcc/testsuite/gcc.target/s390/htm-1.c index e6321de..245ba2c 100644 --- a/gcc/testsuite/gcc.target/s390/htm-1.c +++ b/gcc/testsuite/gcc.target/s390/htm-1.c @@ -7,11 +7,12 @@ #include <stdint.h> #include <htmintrin.h> -int a = 0; +int global = 0; uint64_t g; +struct __htm_tdb global_tdb; int -foo (struct __htm_tdb* tdb) +foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64) { int cc; @@ -19,19 +20,54 @@ foo (struct __htm_tdb* tdb) cc = __builtin_tbegin (0); cc = __builtin_tbegin (tdb); + cc = __builtin_tbegin (&global_tdb); + cc = __builtin_tbegin_nofloat (0); - cc = __builtin_tbegin_nofloat (tdb); + cc = __builtin_tbegin_nofloat (&global_tdb); + cc = __builtin_tbegin_retry (0, 42); + cc = __builtin_tbegin_retry (0, reg); + cc = __builtin_tbegin_retry (0, *mem); + cc = __builtin_tbegin_retry (0, global); cc = __builtin_tbegin_retry (tdb, 42); + cc = __builtin_tbegin_retry (&global_tdb, 42); + cc = __builtin_tbegin_retry_nofloat (0, 42); - cc = __builtin_tbegin_retry_nofloat (tdb, 42); + cc = __builtin_tbegin_retry_nofloat (0, reg); + cc = __builtin_tbegin_retry_nofloat (0, *mem); + cc = __builtin_tbegin_retry_nofloat (0, global); + cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42); + __builtin_tbeginc (); + n = __builtin_tx_nesting_depth(); - __builtin_non_tx_store(&g, n); + + __builtin_non_tx_store(&g, 23); + __builtin_non_tx_store(mem64, 23); + __builtin_non_tx_store(&g, reg); + __builtin_non_tx_store(&g, *mem); + __builtin_non_tx_store(&g, global); + __builtin_tabort (42 + 255); + __builtin_tabort (reg); + /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */ + __builtin_tabort (reg + 255); + __builtin_tabort (*mem); + __builtin_tabort (global); + /* Here global + 255 gets reloaded into a reg. Better would be to + just reload global or *mem and get the +255 for free as address + arithmetic. */ + __builtin_tabort (*mem + 255); + __builtin_tabort (global + 255); + __builtin_tend(); + __builtin_tx_assist (23); + __builtin_tx_assist (reg); + __builtin_tx_assist (*mem); + __builtin_tx_assist (global); } + /* Make sure the tdb NULL argument ends up as immediate value in the instruction. */ -/* { dg-final { scan-assembler-times "tbegin\t0," 4 } } */ +/* { dg-final { scan-assembler-times "tbegin\t0," 10 } } */ |