aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Earnshaw <erich@gnu.org>1994-09-15 13:17:28 +0000
committerRichard Earnshaw <erich@gnu.org>1994-09-15 13:17:28 +0000
commitcf2f711352b94c880dc43f36ab4b58ab4bbf66c4 (patch)
treee335b1f677b29bb4781c3cf63d15596582bd23ec /gcc
parentd90aadbb6db9ad493ffdb1b9e9805af2438f5594 (diff)
downloadgcc-cf2f711352b94c880dc43f36ab4b58ab4bbf66c4.zip
gcc-cf2f711352b94c880dc43f36ab4b58ab4bbf66c4.tar.gz
gcc-cf2f711352b94c880dc43f36ab4b58ab4bbf66c4.tar.bz2
(expand_binop, multi-word shifts): Generate rtl
free of conflicts for shifts less than one word. From-SVN: r8084
Diffstat (limited to 'gcc')
-rw-r--r--gcc/optabs.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 89595c7..6cc8510 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -689,13 +689,6 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods)
if (carries == 0)
inter = 0;
else
- inter = expand_binop (word_mode, binoptab, outof_input,
- op1, outof_target, unsignedp, next_methods);
-
- if (inter != 0 && inter != outof_target)
- emit_move_insn (outof_target, inter);
-
- if (inter != 0)
inter = expand_binop (word_mode, unsigned_shift, into_input,
op1, 0, unsignedp, next_methods);
@@ -705,6 +698,13 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods)
if (inter != 0 && inter != into_target)
emit_move_insn (into_target, inter);
+
+ if (inter != 0)
+ inter = expand_binop (word_mode, binoptab, outof_input,
+ op1, outof_target, unsignedp, next_methods);
+
+ if (inter != 0 && inter != outof_target)
+ emit_move_insn (outof_target, inter);
}
insns = get_insns ();