aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2014-02-07 15:35:49 -0700
committerJeff Law <law@gcc.gnu.org>2014-02-07 15:35:49 -0700
commit63e6247dfe1fb16b2c179d1b1e04b7ca0efb506d (patch)
treeab3e633f7ef262d6a3a2e22f5f722d5abe0caaaf /gcc
parentb581c05cd9f25891505720ec8a41bfab5d13eb43 (diff)
downloadgcc-63e6247dfe1fb16b2c179d1b1e04b7ca0efb506d.zip
gcc-63e6247dfe1fb16b2c179d1b1e04b7ca0efb506d.tar.gz
gcc-63e6247dfe1fb16b2c179d1b1e04b7ca0efb506d.tar.bz2
re PR target/40977 (problem with code like this: res = ((uint64_t)resh << 32) | resl;)
PR target/40977 * config/m68k/m68k.md (ashldi_extsi): Turn into a define_insn_and_split. From-SVN: r207615
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/m68k/m68k.md19
2 files changed, 10 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ce9c066..1237904 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2014-02-07 Jeff Law <law@redhat.com>
+ PR target/40977
+ * config/m68k/m68k.md (ashldi_extsi): Turn into a
+ define_insn_and_split.
+
* ipa-inline.c (inline_small_functions): Fix typos.
2014-02-07 Richard Sandiford <rsandifo@linux.vnet.ibm.com>
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md
index 7bf9abd..e61048b 100644
--- a/gcc/config/m68k/m68k.md
+++ b/gcc/config/m68k/m68k.md
@@ -4338,25 +4338,18 @@
;; arithmetic shift instructions
;; We don't need the shift memory by 1 bit instruction
-
-(define_insn "ashldi_extsi"
+(define_insn_and_split "ashldi_extsi"
[(set (match_operand:DI 0 "nonimmediate_operand" "=ro")
(ashift:DI
(match_operator:DI 2 "extend_operator"
[(match_operand:SI 1 "general_operand" "rm")])
(const_int 32)))]
""
-{
- CC_STATUS_INIT;
- if (GET_CODE (operands[0]) == REG)
- operands[2] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
- else
- operands[2] = adjust_address (operands[0], SImode, 4);
- if (ADDRESS_REG_P (operands[0]))
- return "move%.l %1,%0\;sub%.l %2,%2";
- else
- return "move%.l %1,%0\;clr%.l %2";
-})
+ "#"
+ "&& reload_completed"
+ [(set (match_dup 3) (match_dup 1))
+ (set (match_dup 2) (const_int 0))]
+ "split_di(operands, 1, operands + 2, operands + 3);")
(define_insn "ashldi_sexthi"
[(set (match_operand:DI 0 "nonimmediate_operand" "=m,a*d")