From 0a9eb870f5f85d7d07e020f9998f208cddecc89d Mon Sep 17 00:00:00 2001 From: Alex Bradbury Date: Wed, 6 Jul 2022 13:56:10 +0100 Subject: [PATCH] [WebAssembly][NFC] Reuse the regClassToValType helper in WebAssemblyMCInstLower There's no need for WebAssemblyMCInstLower to carry its own functionally equivalent implementation. --- .../WebAssembly/Utils/WebAssemblyTypeUtilities.cpp | 6 ++++++ .../WebAssembly/Utils/WebAssemblyTypeUtilities.h | 8 ++++++- .../Target/WebAssembly/WebAssemblyMCInstLower.cpp | 25 ++++------------------ 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/llvm/lib/Target/WebAssembly/Utils/WebAssemblyTypeUtilities.cpp b/llvm/lib/Target/WebAssembly/Utils/WebAssemblyTypeUtilities.cpp index e0490c4..f380b25 100644 --- a/llvm/lib/Target/WebAssembly/Utils/WebAssemblyTypeUtilities.cpp +++ b/llvm/lib/Target/WebAssembly/Utils/WebAssemblyTypeUtilities.cpp @@ -13,6 +13,7 @@ #include "WebAssemblyTypeUtilities.h" #include "llvm/ADT/StringSwitch.h" +#include "llvm/CodeGen/TargetRegisterInfo.h" // Get register classes enum. #define GET_REGINFO_ENUM @@ -168,6 +169,11 @@ wasm::ValType WebAssembly::regClassToValType(unsigned RC) { } } +wasm::ValType WebAssembly::regClassToValType(const TargetRegisterClass *RC) { + assert(RC != nullptr); + return regClassToValType(RC->getID()); +} + void WebAssembly::wasmSymbolSetType(MCSymbolWasm *Sym, const Type *GlobalVT, const SmallVector &VTs) { assert(!Sym->getType()); diff --git a/llvm/lib/Target/WebAssembly/Utils/WebAssemblyTypeUtilities.h b/llvm/lib/Target/WebAssembly/Utils/WebAssemblyTypeUtilities.h index 8fc67d3..8621170 100644 --- a/llvm/lib/Target/WebAssembly/Utils/WebAssemblyTypeUtilities.h +++ b/llvm/lib/Target/WebAssembly/Utils/WebAssemblyTypeUtilities.h @@ -22,6 +22,9 @@ #include "llvm/Support/MachineValueType.h" namespace llvm { + +class TargetRegisterClass; + namespace WebAssembly { /// Used as immediate MachineOperands for block signatures @@ -108,9 +111,12 @@ std::string signatureToString(const wasm::WasmSignature *Sig); // Convert a MVT into its corresponding wasm ValType. wasm::ValType toValType(MVT Type); -// Convert a register class to a wasm ValType. +// Convert a register class ID to a wasm ValType. wasm::ValType regClassToValType(unsigned RC); +// Convert a register class to a wasm ValType. +wasm::ValType regClassToValType(const TargetRegisterClass *RC); + /// Sets a Wasm Symbol Type. void wasmSymbolSetType(MCSymbolWasm *Sym, const Type *GlobalVT, const SmallVector &VTs); diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp index 2e6027a..e8b3542 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp @@ -154,25 +154,6 @@ MCOperand WebAssemblyMCInstLower::lowerTypeIndexOperand( return MCOperand::createExpr(Expr); } -// Return the WebAssembly type associated with the given register class. -static wasm::ValType getType(const TargetRegisterClass *RC) { - if (RC == &WebAssembly::I32RegClass) - return wasm::ValType::I32; - if (RC == &WebAssembly::I64RegClass) - return wasm::ValType::I64; - if (RC == &WebAssembly::F32RegClass) - return wasm::ValType::F32; - if (RC == &WebAssembly::F64RegClass) - return wasm::ValType::F64; - if (RC == &WebAssembly::V128RegClass) - return wasm::ValType::V128; - if (RC == &WebAssembly::EXTERNREFRegClass) - return wasm::ValType::EXTERNREF; - if (RC == &WebAssembly::FUNCREFRegClass) - return wasm::ValType::FUNCREF; - llvm_unreachable("Unexpected register class"); -} - static void getFunctionReturns(const MachineInstr *MI, SmallVectorImpl &Returns) { const Function &F = MI->getMF()->getFunction(); @@ -221,10 +202,12 @@ void WebAssemblyMCInstLower::lower(const MachineInstr *MI, const MachineRegisterInfo &MRI = MI->getParent()->getParent()->getRegInfo(); for (const MachineOperand &MO : MI->defs()) - Returns.push_back(getType(MRI.getRegClass(MO.getReg()))); + Returns.push_back( + WebAssembly::regClassToValType(MRI.getRegClass(MO.getReg()))); for (const MachineOperand &MO : MI->explicit_uses()) if (MO.isReg()) - Params.push_back(getType(MRI.getRegClass(MO.getReg()))); + Params.push_back( + WebAssembly::regClassToValType(MRI.getRegClass(MO.getReg()))); // call_indirect instructions have a callee operand at the end which // doesn't count as a param. -- 2.7.4