[PATCH, i386]: Fix PR78626, wrong code with -fschedule-insns
Uros Bizjak
ubizjak@gmail.com
Fri Nov 11 19:40:00 GMT 2016
On Wed, Nov 9, 2016 at 8:25 PM, Uros Bizjak <ubizjak@gmail.com> wrote:
> Hello!
>
> We need earlyclobber on output operand of doubleword shift insns,
> since we have to prevent (partial) output matching %ecx as count
> argument.
>
> 2016-11-09 Uros Bizjak <ubizjak@gmail.com>
>
> PR target/78262
> * config/i386/i386.md (*<shift_insn><mode>3_doubleword): Mark
> operand 0 as earlyclobber.
>
> testsuite/ChangeLog:
>
> 2016-11-09 Uros Bizjak <ubizjak@gmail.com>
>
> PR target/78262
> * gcc.target/i386/pr78262.c: New test.
>
> Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.
>
> Committed to mainline, will be backported to release branches.
Actually, we have also to add earlyclobber to all operand 0
alternatives of *ashl<mode>3_doubleword pattern to prevent similar
issue.
PR target/78262
* config/i386/i386.md (*<shift_insn><mode>3_doubleword): Mark
operand 0 as earlyclobber.
(*ashl<mode>3_doubleword): Ditto for all operand 0 alternatives.
I have amended the patch with attached part.
Uros.
-------------- next part --------------
Index: config/i386/i386.md
===================================================================
--- config/i386/i386.md (revision 242076)
+++ config/i386/i386.md (working copy)
@@ -9704,7 +9704,7 @@
"ix86_expand_binary_operator (ASHIFT, <MODE>mode, operands); DONE;")
(define_insn "*ashl<mode>3_doubleword"
- [(set (match_operand:DWI 0 "register_operand" "=&r,r")
+ [(set (match_operand:DWI 0 "register_operand" "=&r,&r")
(ashift:DWI (match_operand:DWI 1 "reg_or_pm1_operand" "n,0")
(match_operand:QI 2 "nonmemory_operand" "<S>c,<S>c")))
(clobber (reg:CC FLAGS_REG))]
More information about the Gcc-patches
mailing list