diff options
author | John David Anglin <dave.anglin@nrc-cnrc.gc.ca> | 2007-07-31 15:46:19 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2007-07-31 15:46:19 +0000 |
commit | 68ae229af3fb05bb303d5f1386baef1529219858 (patch) | |
tree | c148d98249b4977ea0ad6263d1c6a14ebd36c884 /gcc/config/pa | |
parent | 1c1d80eec25ed833f59f05b16886d95c24bb644d (diff) | |
download | gcc-68ae229af3fb05bb303d5f1386baef1529219858.zip gcc-68ae229af3fb05bb303d5f1386baef1529219858.tar.gz gcc-68ae229af3fb05bb303d5f1386baef1529219858.tar.bz2 |
re PR target/32847 (FAIL: tmpdir-g++.dg-struct-layout-1/t028 cp_compat_y_tst.o compile, (ICE))
PR target/32847
* pa.md (casesi32): Use match_scratch. Revise insn condition.
(casesi32p, casesi64p): Likewise.
(casesi): Adjust for above.
From-SVN: r127096
Diffstat (limited to 'gcc/config/pa')
-rw-r--r-- | gcc/config/pa/pa.md | 40 |
1 files changed, 12 insertions, 28 deletions
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index b32f36b..9013187 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -7626,27 +7626,11 @@ if (TARGET_BIG_SWITCH) { if (TARGET_64BIT) - { - rtx tmp1 = gen_reg_rtx (DImode); - rtx tmp2 = gen_reg_rtx (DImode); - - emit_jump_insn (gen_casesi64p (operands[0], operands[3], - tmp1, tmp2)); - } + emit_jump_insn (gen_casesi64p (operands[0], operands[3])); + else if (flag_pic) + emit_jump_insn (gen_casesi32p (operands[0], operands[3])); else - { - rtx tmp1 = gen_reg_rtx (SImode); - - if (flag_pic) - { - rtx tmp2 = gen_reg_rtx (SImode); - - emit_jump_insn (gen_casesi32p (operands[0], operands[3], - tmp1, tmp2)); - } - else - emit_jump_insn (gen_casesi32 (operands[0], operands[3], tmp1)); - } + emit_jump_insn (gen_casesi32 (operands[0], operands[3])); } else emit_jump_insn (gen_casesi0 (operands[0], operands[3])); @@ -7673,8 +7657,8 @@ (mult:SI (match_operand:SI 0 "register_operand" "r") (const_int 4)) (label_ref (match_operand 1 "" ""))))) - (clobber (match_operand:SI 2 "register_operand" "=&r"))] - "!TARGET_64BIT && TARGET_BIG_SWITCH" + (clobber (match_scratch:SI 2 "=&r"))] + "!flag_pic" "ldil L'%l1,%2\;ldo R'%l1(%2),%2\;{ldwx|ldw},s %0(%2),%2\;bv,n %%r0(%2)" [(set_attr "type" "multi") (set_attr "length" "16")]) @@ -7685,9 +7669,9 @@ (mult:SI (match_operand:SI 0 "register_operand" "r") (const_int 4)) (label_ref (match_operand 1 "" ""))))) - (clobber (match_operand:SI 2 "register_operand" "=&a")) - (clobber (match_operand:SI 3 "register_operand" "=&r"))] - "!TARGET_64BIT && TARGET_BIG_SWITCH" + (clobber (match_scratch:SI 2 "=&r")) + (clobber (match_scratch:SI 3 "=&r"))] + "flag_pic" "{bl .+8,%2\;depi 0,31,2,%2|mfia %2}\;ldo {16|20}(%2),%2\;\ {ldwx|ldw},s %0(%2),%3\;{addl|add,l} %2,%3,%3\;bv,n %%r0(%3)" [(set_attr "type" "multi") @@ -7703,9 +7687,9 @@ (match_operand:SI 0 "register_operand" "r")) (const_int 8)) (label_ref (match_operand 1 "" ""))))) - (clobber (match_operand:DI 2 "register_operand" "=&r")) - (clobber (match_operand:DI 3 "register_operand" "=&r"))] - "TARGET_64BIT && TARGET_BIG_SWITCH" + (clobber (match_scratch:DI 2 "=&r")) + (clobber (match_scratch:DI 3 "=&r"))] + "" "mfia %2\;ldo 24(%2),%2\;ldw,s %0(%2),%3\;extrd,s %3,63,32,%3\;\ add,l %2,%3,%3\;bv,n %%r0(%3)" [(set_attr "type" "multi") |