shader: Misc fixes
This commit is contained in:
parent
9170200a11
commit
8af9297f09
10 changed files with 104 additions and 89 deletions
|
@ -113,7 +113,7 @@ static std::string ArgToIndex(const std::map<const Block*, size_t>& block_to_ind
|
|||
if (arg.IsLabel()) {
|
||||
return BlockToIndex(block_to_index, arg.Label());
|
||||
}
|
||||
if (!arg.IsImmediate()) {
|
||||
if (!arg.IsImmediate() || arg.IsIdentity()) {
|
||||
return fmt::format("%{}", InstIndex(inst_to_index, inst_index, arg.Inst()));
|
||||
}
|
||||
switch (arg.Type()) {
|
||||
|
@ -166,7 +166,7 @@ std::string DumpBlock(const Block& block, const std::map<const Block*, size_t>&
|
|||
const std::string arg_str{ArgToIndex(block_to_index, inst_to_index, inst_index, arg)};
|
||||
ret += arg_index != 0 ? ", " : " ";
|
||||
if (op == Opcode::Phi) {
|
||||
ret += fmt::format("[ {}, {} ]", arg_index,
|
||||
ret += fmt::format("[ {}, {} ]", arg_str,
|
||||
BlockToIndex(block_to_index, inst.PhiBlock(arg_index)));
|
||||
} else {
|
||||
ret += arg_str;
|
||||
|
|
|
@ -46,10 +46,12 @@ F64 IREmitter::Imm64(f64 value) const {
|
|||
|
||||
void IREmitter::Branch(Block* label) {
|
||||
label->AddImmediatePredecessor(block);
|
||||
block->SetBranch(label);
|
||||
Inst(Opcode::Branch, label);
|
||||
}
|
||||
|
||||
void IREmitter::BranchConditional(const U1& condition, Block* true_label, Block* false_label) {
|
||||
block->SetBranches(IR::Condition{true}, true_label, false_label);
|
||||
true_label->AddImmediatePredecessor(block);
|
||||
false_label->AddImmediatePredecessor(block);
|
||||
Inst(Opcode::BranchConditional, condition, true_label, false_label);
|
||||
|
|
|
@ -143,19 +143,21 @@ Value Inst::Arg(size_t index) const {
|
|||
}
|
||||
|
||||
void Inst::SetArg(size_t index, Value value) {
|
||||
if (op == Opcode::Phi) {
|
||||
throw LogicError("Setting argument on a phi instruction");
|
||||
}
|
||||
if (index >= NumArgsOf(op)) {
|
||||
if (index >= NumArgs()) {
|
||||
throw InvalidArgument("Out of bounds argument index {} in opcode {}", index, op);
|
||||
}
|
||||
if (!args[index].IsImmediate()) {
|
||||
UndoUse(args[index]);
|
||||
const IR::Value arg{Arg(index)};
|
||||
if (!arg.IsImmediate()) {
|
||||
UndoUse(arg);
|
||||
}
|
||||
if (!value.IsImmediate()) {
|
||||
Use(value);
|
||||
}
|
||||
args[index] = value;
|
||||
if (op == Opcode::Phi) {
|
||||
phi_args[index].second = value;
|
||||
} else {
|
||||
args[index] = value;
|
||||
}
|
||||
}
|
||||
|
||||
Block* Inst::PhiBlock(size_t index) const {
|
||||
|
|
|
@ -76,8 +76,8 @@ void IADD(TranslatorVisitor& v, u64 insn, IR::U32 op_b) {
|
|||
}
|
||||
} // Anonymous namespace
|
||||
|
||||
void TranslatorVisitor::IADD_reg(u64) {
|
||||
throw NotImplementedException("IADD (reg)");
|
||||
void TranslatorVisitor::IADD_reg(u64 insn) {
|
||||
IADD(*this, insn, GetReg20(insn));
|
||||
}
|
||||
|
||||
void TranslatorVisitor::IADD_cbuf(u64 insn) {
|
||||
|
|
|
@ -92,8 +92,8 @@ void TranslatorVisitor::ISETP_cbuf(u64 insn) {
|
|||
ISETP(*this, insn, GetCbuf(insn));
|
||||
}
|
||||
|
||||
void TranslatorVisitor::ISETP_imm(u64) {
|
||||
throw NotImplementedException("ISETP_imm");
|
||||
void TranslatorVisitor::ISETP_imm(u64 insn) {
|
||||
ISETP(*this, insn, GetImm20(insn));
|
||||
}
|
||||
|
||||
} // namespace Shader::Maxwell
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue