diff options
author | erich <erich@138bc75d-0d04-0410-961f-82ee72b054a4> | 1994-09-15 13:17:28 +0000 |
---|---|---|
committer | erich <erich@138bc75d-0d04-0410-961f-82ee72b054a4> | 1994-09-15 13:17:28 +0000 |
commit | b627826da8fcdaf8077a85a179d79c5221988a90 (patch) | |
tree | e335b1f677b29bb4781c3cf63d15596582bd23ec /gcc/optabs.c | |
parent | 766b0301e2e2b9c40168e9a0475f86b6e24257b9 (diff) | |
download | gcc-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.c | 14 |
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 (); |