ir3: Disable copy prop for immediate ldlw offsets

Immediate offsets are currently collapsed for ldlw, but ldlw does
behave correctly with immediate values. For example,
`ldlw.u32 r0.x, l[4], 1` actually means to use the value of
regid 4 (r1.x) as the offset when we actually want it to use the
imm value of 4 as the offset.

This commit disables copy prop for ldlw offsets so the same
intrinsic gets compiled to:
  mov.u32u32 r0.y, 0x00000004
  ldlw.u32 r0.x, l[r0.y], 1

Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4439>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4439>
This commit is contained in:
Brian Ho 2020-04-03 11:53:55 -07:00 committed by Marge Bot
parent ea51f8f79a
commit 6e76453472

View file

@ -229,6 +229,9 @@ static bool valid_flags(struct ir3_instruction *instr, unsigned n,
if (instr->opc == OPC_STLW && n == 0)
return false;
if (instr->opc == OPC_LDLW && n == 0)
return false;
/* disallow CP into anything but the SSBO slot argument for
* atomics:
*/