diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2018-07-30 16:33:32 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2018-07-30 16:33:32 +0000 |
| commit | 51315c45ff5643a27f9c84b816db54ee870ba29b (patch) | |
| tree | 1d87443fa0e53d3e6b315ce25787e64be0906bf7 /contrib/llvm/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h | |
| parent | 6dfd050075216be8538ae375a22d30db72916f7e (diff) | |
| parent | eb11fae6d08f479c0799db45860a98af528fa6e7 (diff) | |
Notes
Diffstat (limited to 'contrib/llvm/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h')
| -rw-r--r-- | contrib/llvm/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/contrib/llvm/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h b/contrib/llvm/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h index 1fcbb7791d4e..a60b10fc5309 100644 --- a/contrib/llvm/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h +++ b/contrib/llvm/lib/Target/WebAssembly/WebAssemblyMachineFunctionInfo.h @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// /// /// \file -/// \brief This file declares WebAssembly-specific per-machine-function +/// This file declares WebAssembly-specific per-machine-function /// information. /// //===----------------------------------------------------------------------===// @@ -60,6 +60,8 @@ class WebAssemblyFunctionInfo final : public MachineFunctionInfo { void addResult(MVT VT) { Results.push_back(VT); } const std::vector<MVT> &getResults() const { return Results; } + void clearParamsAndResults() { Params.clear(); Results.clear(); } + void setNumLocals(size_t NumLocals) { Locals.resize(NumLocals, MVT::i32); } void setLocal(size_t i, MVT VT) { Locals[i] = VT; } void addLocal(MVT VT) { Locals.push_back(VT); } @@ -81,25 +83,29 @@ class WebAssemblyFunctionInfo final : public MachineFunctionInfo { void stackifyVReg(unsigned VReg) { assert(MF.getRegInfo().getUniqueVRegDef(VReg)); - if (TargetRegisterInfo::virtReg2Index(VReg) >= VRegStackified.size()) - VRegStackified.resize(TargetRegisterInfo::virtReg2Index(VReg) + 1); - VRegStackified.set(TargetRegisterInfo::virtReg2Index(VReg)); + auto I = TargetRegisterInfo::virtReg2Index(VReg); + if (I >= VRegStackified.size()) + VRegStackified.resize(I + 1); + VRegStackified.set(I); } bool isVRegStackified(unsigned VReg) const { - if (TargetRegisterInfo::virtReg2Index(VReg) >= VRegStackified.size()) + auto I = TargetRegisterInfo::virtReg2Index(VReg); + if (I >= VRegStackified.size()) return false; - return VRegStackified.test(TargetRegisterInfo::virtReg2Index(VReg)); + return VRegStackified.test(I); } void initWARegs(); void setWAReg(unsigned VReg, unsigned WAReg) { assert(WAReg != UnusedReg); - assert(TargetRegisterInfo::virtReg2Index(VReg) < WARegs.size()); - WARegs[TargetRegisterInfo::virtReg2Index(VReg)] = WAReg; + auto I = TargetRegisterInfo::virtReg2Index(VReg); + assert(I < WARegs.size()); + WARegs[I] = WAReg; } - unsigned getWAReg(unsigned Reg) const { - assert(TargetRegisterInfo::virtReg2Index(Reg) < WARegs.size()); - return WARegs[TargetRegisterInfo::virtReg2Index(Reg)]; + unsigned getWAReg(unsigned VReg) const { + auto I = TargetRegisterInfo::virtReg2Index(VReg); + assert(I < WARegs.size()); + return WARegs[I]; } // For a given stackified WAReg, return the id number to print with push/pop. |
