WebAssemblyUtils depends on CodeGen which depends on all middle end optimization libraries. This component is used by WebAssembly's AsmParser, Disassembler, and MCTargetDesc libraries. Because of this, any MC layer tool built with WebAssembly support includes a larger portion of LLVM than it should. To fix this I've created an MC only version of WebAssemblyTypeUtilities.cpp in MCTargetDesc to be used by the MC components. This shrinks llvm-objdump and llvm-mc on my local release+asserts build by 5-6 MB. Reviewed By: MaskRay, aheejin Differential Revision: https://reviews.llvm.org/D144354
71 lines
2.3 KiB
C++
71 lines
2.3 KiB
C++
//===-- WebAssemblyUtilities - WebAssembly Utility Functions ---*- C++ -*-====//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// \file
|
|
/// This file contains the declaration of the WebAssembly-specific
|
|
/// utility functions.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_UTILS_WEBASSEMBLYUTILITIES_H
|
|
#define LLVM_LIB_TARGET_WEBASSEMBLY_UTILS_WEBASSEMBLYUTILITIES_H
|
|
|
|
#include "llvm/Support/CommandLine.h"
|
|
|
|
namespace llvm {
|
|
|
|
class MachineBasicBlock;
|
|
class MachineInstr;
|
|
class MachineOperand;
|
|
class MCContext;
|
|
class MCSymbolWasm;
|
|
class TargetRegisterClass;
|
|
class WebAssemblyFunctionInfo;
|
|
class WebAssemblySubtarget;
|
|
|
|
namespace WebAssembly {
|
|
|
|
bool isChild(const MachineInstr &MI, const WebAssemblyFunctionInfo &MFI);
|
|
bool mayThrow(const MachineInstr &MI);
|
|
|
|
// Exception-related function names
|
|
extern const char *const ClangCallTerminateFn;
|
|
extern const char *const CxaBeginCatchFn;
|
|
extern const char *const CxaRethrowFn;
|
|
extern const char *const StdTerminateFn;
|
|
extern const char *const PersonalityWrapperFn;
|
|
|
|
/// Returns the operand number of a callee, assuming the argument is a call
|
|
/// instruction.
|
|
const MachineOperand &getCalleeOp(const MachineInstr &MI);
|
|
|
|
/// Returns the __indirect_function_table, for use in call_indirect and in
|
|
/// function bitcasts.
|
|
MCSymbolWasm *
|
|
getOrCreateFunctionTableSymbol(MCContext &Ctx,
|
|
const WebAssemblySubtarget *Subtarget);
|
|
|
|
/// Returns the __funcref_call_table, for use in funcref calls when lowered to
|
|
/// table.set + call_indirect.
|
|
MCSymbolWasm *
|
|
getOrCreateFuncrefCallTableSymbol(MCContext &Ctx,
|
|
const WebAssemblySubtarget *Subtarget);
|
|
|
|
/// Find a catch instruction from an EH pad. Returns null if no catch
|
|
/// instruction found or the catch is in an invalid location.
|
|
MachineInstr *findCatch(MachineBasicBlock *EHPad);
|
|
|
|
/// Returns the appropriate copy opcode for the given register class.
|
|
unsigned getCopyOpcodeForRegClass(const TargetRegisterClass *RC);
|
|
|
|
} // end namespace WebAssembly
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif
|