compiler: use a single temporary for calls with multiple results

For calls that return multiple results we used to create a temporary
of struct type to hold the results, and also create a separate
temporary for each result.  Then the call expression would copy each
result out of the struct to the temporary, and Call_result_expression
would refer to the desired temporary.

Simplify this to just use a single temporary of struct type, and
change Call_result_expression to fetch a field of the struct.

This may reduce some incorrect tree sharing in the backend code.

Change-Id: I305d8c535c17a3b29bcdbbed16da30cfd0a7b393
Reviewed-on: https://go-review.googlesource.com/51770
Reviewed-by: Than McIntosh <thanm@google.com>
2 files changed