diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-02-07 09:04:58 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-02-07 09:04:58 +0100 |
commit | e3936f47f63c128d6a667596111865f35869392f (patch) | |
tree | 9abbb95b786cbe3bf97cb031b673fdc6a8f3e65e /gcc | |
parent | d96d674b0167195bafacdc7b66aed8723ec74737 (diff) | |
download | gcc-e3936f47f63c128d6a667596111865f35869392f.zip gcc-e3936f47f63c128d6a667596111865f35869392f.tar.gz gcc-e3936f47f63c128d6a667596111865f35869392f.tar.bz2 |
re PR target/56228 (Indirect call fails to assemble)
PR target/56228
* config/rs6000/rs6000.md (ptrm): New mode attr.
(call_indirect_aix<ptrsize>, call_indirect_aix<ptrsize>_nor11,
call_value_indirect_aix<pttrsize>,
call_value_indirect_aix<pttrsize>_nor11): Use <ptrm> instead of
m in constraints.
* gcc.dg/pr56228.c: New test.
From-SVN: r195840
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 19 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr56228.c | 16 |
4 files changed, 41 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9634c05..175b85b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2013-02-07 Jakub Jelinek <jakub@redhat.com> + + PR target/56228 + * config/rs6000/rs6000.md (ptrm): New mode attr. + (call_indirect_aix<ptrsize>, call_indirect_aix<ptrsize>_nor11, + call_value_indirect_aix<pttrsize>, + call_value_indirect_aix<pttrsize>_nor11): Use <ptrm> instead of + m in constraints. + 2013-02-07 Michael Haubenwallner <michael.haubenwallner@salomon.at> * collect2.c (main): Set aix64_flag for -G and -bsvr4 too, disable diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index b3db681..a665fa50 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -292,6 +292,9 @@ (define_mode_attr ptrload [(SI "lwz") (DI "ld")]) +(define_mode_attr ptrm [(SI "m") + (DI "Y")]) + (define_mode_attr rreg [(SF "f") (DF "ws") (V4SF "wf") @@ -10662,8 +10665,8 @@ (define_insn "call_indirect_aix<ptrsize>" [(call (mem:SI (match_operand:P 0 "register_operand" "c,*l")) (match_operand 1 "" "g,g")) - (use (match_operand:P 2 "memory_operand" "m,m")) - (set (reg:P TOC_REGNUM) (match_operand:P 3 "memory_operand" "m,m")) + (use (match_operand:P 2 "memory_operand" "<ptrm>,<ptrm>")) + (set (reg:P TOC_REGNUM) (match_operand:P 3 "memory_operand" "<ptrm>,<ptrm>")) (use (reg:P STATIC_CHAIN_REGNUM)) (clobber (reg:P LR_REGNO))] "DEFAULT_ABI == ABI_AIX && TARGET_POINTERS_TO_NESTED_FUNCTIONS" @@ -10680,8 +10683,8 @@ (define_insn "call_indirect_aix<ptrsize>_nor11" [(call (mem:SI (match_operand:P 0 "register_operand" "c,*l")) (match_operand 1 "" "g,g")) - (use (match_operand:P 2 "memory_operand" "m,m")) - (set (reg:P TOC_REGNUM) (match_operand:P 3 "memory_operand" "m,m")) + (use (match_operand:P 2 "memory_operand" "<ptrm>,<ptrm>")) + (set (reg:P TOC_REGNUM) (match_operand:P 3 "memory_operand" "<ptrm>,<ptrm>")) (clobber (reg:P LR_REGNO))] "DEFAULT_ABI == ABI_AIX && !TARGET_POINTERS_TO_NESTED_FUNCTIONS" "<ptrload> 2,%2\;b%T0l\;<ptrload> 2,%3" @@ -10698,8 +10701,8 @@ [(set (match_operand 0 "" "") (call (mem:SI (match_operand:P 1 "register_operand" "c,*l")) (match_operand 2 "" "g,g"))) - (use (match_operand:P 3 "memory_operand" "m,m")) - (set (reg:P TOC_REGNUM) (match_operand:P 4 "memory_operand" "m,m")) + (use (match_operand:P 3 "memory_operand" "<ptrm>,<ptrm>")) + (set (reg:P TOC_REGNUM) (match_operand:P 4 "memory_operand" "<ptrm>,<ptrm>")) (use (reg:P STATIC_CHAIN_REGNUM)) (clobber (reg:P LR_REGNO))] "DEFAULT_ABI == ABI_AIX && TARGET_POINTERS_TO_NESTED_FUNCTIONS" @@ -10718,8 +10721,8 @@ [(set (match_operand 0 "" "") (call (mem:SI (match_operand:P 1 "register_operand" "c,*l")) (match_operand 2 "" "g,g"))) - (use (match_operand:P 3 "memory_operand" "m,m")) - (set (reg:P TOC_REGNUM) (match_operand:P 4 "memory_operand" "m,m")) + (use (match_operand:P 3 "memory_operand" "<ptrm>,<ptrm>")) + (set (reg:P TOC_REGNUM) (match_operand:P 4 "memory_operand" "<ptrm>,<ptrm>")) (clobber (reg:P LR_REGNO))] "DEFAULT_ABI == ABI_AIX && !TARGET_POINTERS_TO_NESTED_FUNCTIONS" "<ptrload> 2,%3\;b%T1l\;<ptrload> 2,%4" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d3407fd..49f87f1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-02-07 Jakub Jelinek <jakub@redhat.com> + + PR target/56228 + * gcc.dg/pr56228.c: New test. + 2013-02-07 Alan Modra <amodra@gmail.com> PR target/54009 diff --git a/gcc/testsuite/gcc.dg/pr56228.c b/gcc/testsuite/gcc.dg/pr56228.c new file mode 100644 index 0000000..ccdcbe1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr56228.c @@ -0,0 +1,16 @@ +/* PR target/56228 */ +/* { dg-do assemble } */ +/* { dg-options "-O2" } */ + +short a[14] = { 1, 2 }; +short b[15] = { 3, 4 }; + +int +foo () +{ + void (*fna) (void) = (void (*) (void)) a; + void (*fnb) (void) = (void (*) (void)) b; + fna (); + fnb (); + return a[1] == b[1]; +} |