Layout: add support for multiple return values

This commit is contained in:
Ivan Krysak
2022-10-20 16:12:55 +02:00
committed by Alessandro Di Federico
parent bf8a212281
commit 3196e8b371
4 changed files with 154 additions and 71 deletions
@@ -36,15 +36,13 @@ importPrototype(Module &M,
auto Layout = abi::FunctionType::Layout::make(Prototype);
for (const auto &ArgumentLayout : Layout.Arguments) {
for (Register ArgumentRegister : ArgumentLayout.Registers) {
StringRef Name = model::Register::getCSVName(ArgumentRegister);
if (GlobalVariable *CSV = M.getGlobalVariable(Name, true))
Summary.ABIResults.ArgumentsRegisters.at(CSV) = State::Yes;
}
for (Register ArgumentRegister : Layout.argumentRegisters()) {
StringRef Name = model::Register::getCSVName(ArgumentRegister);
if (GlobalVariable *CSV = M.getGlobalVariable(Name, true))
Summary.ABIResults.ArgumentsRegisters.at(CSV) = State::Yes;
}
for (Register ReturnValueRegister : Layout.ReturnValue.Registers) {
for (Register ReturnValueRegister : Layout.returnValueRegisters()) {
StringRef Name = model::Register::getCSVName(ReturnValueRegister);
if (GlobalVariable *CSV = M.getGlobalVariable(Name, true))
Summary.ABIResults.FinalReturnValuesRegisters.at(CSV) = State::Yes;