Minor fixes when accesing CallInst operands

Summary: Fix minor issues found while adding support for emitting textual function names when calling non-callables.

Reviewed By: tmikov, avp

Differential Revision: D40617534

fbshipit-source-id: 02b8782159d4f30f10fc875f47a947fd822e9f57
This commit is contained in:
John Porto 2022-10-24 22:16:30 -07:00 коммит произвёл Facebook GitHub Bot
Родитель bb0aa44866
Коммит f6bb69c6a0
4 изменённых файлов: 9 добавлений и 5 удалений

Просмотреть файл

@ -699,6 +699,10 @@ class CallInst : public Instruction {
CallInst(const CallInst &) = delete; CallInst(const CallInst &) = delete;
void operator=(const CallInst &) = delete; void operator=(const CallInst &) = delete;
// Forces the code to use the appropriate getters instead of relying on
// hard-coded offsets when accessing the arguments.
using Instruction::getOperand;
public: public:
enum { CalleeIdx, ThisIdx }; enum { CalleeIdx, ThisIdx };
@ -721,7 +725,7 @@ class CallInst : public Instruction {
} }
unsigned getNumArguments() const { unsigned getNumArguments() const {
return getNumOperands() - 1; return getNumOperands() - ThisIdx;
} }
explicit CallInst( explicit CallInst(

Просмотреть файл

@ -811,7 +811,7 @@ bool SpillRegisters::requiresShortOperand(Instruction *I, int op) {
case ValueKind::CallBuiltinInstKind: case ValueKind::CallBuiltinInstKind:
case ValueKind::HBCConstructInstKind: case ValueKind::HBCConstructInstKind:
case ValueKind::HBCCallDirectInstKind: case ValueKind::HBCCallDirectInstKind:
return op == 0; return op == CallInst::CalleeIdx;
default: default:
return true; return true;
} }

Просмотреть файл

@ -149,11 +149,11 @@ static bool performFSO(Function *F, std::vector<Function *> &worklist) {
// Replace all unused arguments with undef. // Replace all unused arguments with undef.
for (auto &arg : unusedParams) { for (auto &arg : unusedParams) {
auto *prevArg = arg.first->getOperand(arg.second + 1); auto *prevArg = arg.first->getArgument(arg.second);
if (!llvh::isa<Literal>(prevArg)) if (!llvh::isa<Literal>(prevArg))
toRedo.insert(arg.first->getParent()->getParent()); toRedo.insert(arg.first->getParent()->getParent());
arg.first->setOperand(undef, arg.second + 1); arg.first->setArgument(undef, arg.second);
NumArgsOpt++; NumArgsOpt++;
} }

Просмотреть файл

@ -99,7 +99,7 @@ void IRPrinter::printTypeLabel(Type T) {
void IRPrinter::printValueLabel(Instruction *I, Value *V, unsigned opIndex) { void IRPrinter::printValueLabel(Instruction *I, Value *V, unsigned opIndex) {
auto &ctx = I->getContext(); auto &ctx = I->getContext();
if (isa<CallBuiltinInst>(I) && opIndex == 0) { if (isa<CallBuiltinInst>(I) && opIndex == CallInst::CalleeIdx) {
os << "[" os << "["
<< getBuiltinMethodName(cast<CallBuiltinInst>(I)->getBuiltinIndex()) << getBuiltinMethodName(cast<CallBuiltinInst>(I)->getBuiltinIndex())
<< "]"; << "]";