PR middle-end/53623
	* ree.c (combine_set_extension): Handle case where source
	and destination registers in an extension insn are different.
	(combine_reaching_defs): Allow source and destination
	registers in extension to be different under limited
	circumstances.
	(add_removable_extension): Remove restriction that the
	source and destination registers in the extension are the
	same.
	(find_and_remove_re): Emit a copy from the extension's
	destination to its source after the defining insn if
	the source and destination registers are different.

	PR middle-end/53623
	* gcc.target/i386/pr53623.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@206418 138bc75d-0d04-0410-961f-82ee72b054a4