https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110751
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target| |riscv --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- AVX512 can do zeroing or merging (with existing destination contents) for masked ops, on the GIMPLE side merging would need another source operand so what we effectively only support is zeroing for AVX512. I see aarch64 SVE picks the value from specific operands where I'm assuming that's what the ISA implements (only). For any suggestion can you please elaborate on what MU/TU and TA/MA are? Searching for two-letter things in the RVV spec has way to many hits to find the relevant parts of the spec. If 'undefined' means there's ISA that leaves the choice to implementors and that's usually "cheaper" then rather than a new undef_type I always point to 'error_mark_node' that could be used but you also need a representation on the RTL side. I'd also like to add that 'undefined' is in the end always problematic for an IL. I would assume that in case 'undefined' allows the implementation to completely skip operating on a vector subpart, like not issue it, the actual value will be what's already in the target register so it looks like "merge" to me but for not skipped subparts that adds a data dependence on the previous (sub-)register contents (not an issue for "skipped" parts).