/* SALU / PSEUDO: propagate inline constants */
if (instr->isSALU() || instr->format == Format::PSEUDO) {
+ const bool is_subdword = std::any_of(instr->definitions.begin(), instr->definitions.end(),
+ [] (const Definition& def) { return def.regClass().is_subdword();});
+ // TODO: optimize SGPR and constant propagation for subdword pseudo instructions on gfx9+
+ if (is_subdword)
+ continue;
+
if (info.is_temp() && info.temp.type() == RegType::sgpr) {
- const bool is_subdword = std::any_of(instr->definitions.begin(), instr->definitions.end(),
- [] (const Definition& def) { return def.regClass().is_subdword();});
- if (instr->isSALU() || !is_subdword) {
- instr->operands[i].setTemp(info.temp);
- info = ctx.info[info.temp.id()];
- }
+ instr->operands[i].setTemp(info.temp);
+ info = ctx.info[info.temp.id()];
} else if (info.is_temp() && info.temp.type() == RegType::vgpr) {
/* propagate vgpr if it can take it */
switch (instr->opcode) {