summaryrefslogtreecommitdiff
path: root/gcc/optabs.c
diff options
context:
space:
mode:
authorerich <erich@138bc75d-0d04-0410-961f-82ee72b054a4>1994-09-15 13:17:28 +0000
committererich <erich@138bc75d-0d04-0410-961f-82ee72b054a4>1994-09-15 13:17:28 +0000
commitb627826da8fcdaf8077a85a179d79c5221988a90 (patch)
treee335b1f677b29bb4781c3cf63d15596582bd23ec /gcc/optabs.c
parent766b0301e2e2b9c40168e9a0475f86b6e24257b9 (diff)
downloadgcc-b627826da8fcdaf8077a85a179d79c5221988a90.tar.gz
(expand_binop, multi-word shifts): Generate rtl
free of conflicts for shifts less than one word. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@8084 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r--gcc/optabs.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 89595c72ece..6cc8510831c 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 ();