compiler: Avoid multiple evaluations in interface conversions.

Added assertions for cases that might lead to multiple
evaluations, and fixed all the problems I saw.

Test case already in master Go testsuite
(https://go-review.googlesource.com/#/c/1710/).


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@218884 138bc75d-0d04-0410-961f-82ee72b054a4
* lra-constraints.c (process_address_1): Swap base_term and index_term
  if INDEX_REG_CLASS is assigned to base_term already when INDEX_REG_CLASS
  is a single register class.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@218885 138bc75d-0d04-0410-961f-82ee72b054a4
* Add TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV target macro.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@218886 138bc75d-0d04-0410-961f-82ee72b054a4
* Add TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT target macro.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@218887 138bc75d-0d04-0410-961f-82ee72b054a4
* [SH] Add -mlra option.



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