As discussed with Julian Seward, host_s390_isel.c contains some questionable logic where registers returned from isel functions are potentially modified, or where it is not sufficiently made clear that they are always left unmodified. As a general rule, rather than modifying a register returned by one of the isel functions, the register should be copied first and the copy modified instead.
Created attachment 127167 [details] Original "CHECK" markers for host_s390_isel.c by Julian This is a "patch" that marks the questionable logic in host_s390_isel.c Julian detected during his review.
Created attachment 127245 [details] Drop register arg to s390_isel_int1_expr()
Created attachment 127246 [details] Fix typos in comments for sub_from_SP and add_to_SP in isel
Created attachment 127247 [details] Introduce and exploit new ALU operator S390_ALU_ILIH
Created attachment 127248 [details] Fix Iex_Load instruction selectors for F128/D128
Created attachment 127249 [details] Drop spurious register moves in CDAS instruction selector
See the above attachments for fixes of the findings related to this Bug.
Pushed all of the changes proposed above: 6a90a15b9 - s390x: Drop spurious register moves in CDAS instruction selector 4970e2002 - s390x: Fix Iex_Load instruction selectors for F128/D128 types 4e9763c61 - s390x: Introduce and exploit new ALU operator S390_ALU_ILIH 1008ab726 - s390x: Fix typos in comments for sub_from_SP and add_to_SP in isel