> Since there is > > /* X86_TUNE_SPLIT_LONG_MOVES: Avoid instructions moving immediates > directly to memory. */ > DEF_TUNE (X86_TUNE_SPLIT_LONG_MOVES, "split_long_moves", m_PPRO)
If I recall correctly, this tune was added for PentiumPro which had problem decoding moves with long immediate and is a performance optimization rather than code size one. As you discuss in the PR, i686 preffers xorl %eax, %eax movl %eax, aligned_heap_area over movl $0, aligned_heap_area which has too long encoding. > > to avoid long immediate store instructions, like > > c7 02 00 00 00 00 movl $0x0,(%rdx) > c7 02 ff ff ff ff movl $0xffffffff,(%rdx) > > add TARGET_USE_AND0_ORM1_STORE and enable *mov<mode>_(and|or) for > TARGET_USE_AND0_ORM1_STORE, which is true for TARGET_SPLIT_LONG_MOVES or > -Oz, to also generate: > > 83 22 00 andl $0x0,(%rdx) > 83 0a ff orl $0xffffffff,(%rdx) I think this will not work well on PPro hardware since it will do it as read-modify-write, while xorl %eax, %eax movl %eax, (%rdx) is executed as store saving the useless load. Honza