On Thu, Mar 2, 2017 at 7:52 PM, Uros Bizjak <ubiz...@gmail.com> wrote: > Attached patch adds new insn_and_split pattern to handle pre_modify > XFmode push variant. -m96bit-long-double option sets XFmode size to 12 > bytes that is not divisible with push size (8 bytes), resulting in > pre_modify push variant.
Attached patch is also needed to avoid ICE on x32. 2017-03-03 Uros Bizjak <ubiz...@gmail.com> PR target/79514 * config/i386/i386.md (*pushxf_rounded): Use Pmode instead of DImode. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Committed to mainline, will be backported to release branches. Uros.
Index: config/i386/i386.md =================================================================== --- config/i386/i386.md (revision 245860) +++ config/i386/i386.md (working copy) @@ -3017,14 +3017,14 @@ (define_insn_and_split "*pushxf_rounded" [(set (mem:XF - (pre_modify:DI - (reg:DI SP_REG) - (plus:DI (reg:DI SP_REG) (const_int -16)))) + (pre_modify:P + (reg:P SP_REG) + (plus:P (reg:P SP_REG) (const_int -16)))) (match_operand:XF 0 "nonmemory_no_elim_operand" "f,r,*r,C"))] "TARGET_64BIT" "#" "&& 1" - [(set (reg:DI SP_REG) (plus:DI (reg:DI SP_REG) (const_int -16))) + [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (const_int -16))) (set (match_dup 1) (match_dup 0))] { rtx pat = PATTERN (curr_insn);