-
Notifications
You must be signed in to change notification settings - Fork 15.2k
Description
| Bugzilla Link | 48843 |
| Version | trunk |
| OS | All |
Extended Description
These modifiers are supported for the sake of compatibility with sp3. However use of "no*" modifiers in llvm results in invalid code or counterintuitive behavior.
Examples:
-
GFX8 buffer_store_lds_dword requires "lds" modifier:
buffer_store_lds_dword s[4:7], s0 offset:4095 lds // ok
buffer_store_lds_dword s[4:7], s0 offset:4095 // error
However "nolds" is also accepted and results in the same code as "lds" variant.
buffer_store_lds_dword s[4:7], s0 offset:4095 nolds // ok?
There is a similar issue with buffer_load_* opcodes which support "lds" as an optional modifier. These instruction accept "nolds" but handle it as if it were "lds".
-
exp "done" modifier is optional:
exp mrt0 v0, v0, v0, v0 done // ok
exp mrt0 v0, v0, v0, v0 // ok
However "nodone" is not supported.
-
ds_gws_* opcodes accept both "gds" and "nogds" but produce the same code. Actually these opcodes have no lds variants so "nogds" should be illegal.
-
Most modifiers which affect operand size ("offen", "idxen", "glc", etc) can be omitted, but "no*" variants trigger an error.
buffer_load_format_x v5, off, s[8:11], s3 // ok
buffer_load_format_x v5, off, s[8:11], s3 noidxen // error