[llvm] r255869 - [WebAssembly] Experimental ELF writer support

Rafael EspĂ­ndola via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 16 20:15:28 PST 2015


Nice :-)
On Dec 16, 2015 8:42 PM, "Dan Gohman via llvm-commits" <
llvm-commits at lists.llvm.org> wrote:

> Author: djg
> Date: Wed Dec 16 19:39:00 2015
> New Revision: 255869
>
> URL: http://llvm.org/viewvc/llvm-project?rev=255869&view=rev
> Log:
> [WebAssembly] Experimental ELF writer support
>
> This creates the initial infrastructure for writing ELF output files. It
> doesn't yet have any implementation for encoding instructions.
>
> Differential Revision: http://reviews.llvm.org/D15555
>
> Added:
>
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyAsmBackend.cpp
>
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyELFObjectWriter.cpp
>
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCCodeEmitter.cpp
> Modified:
>     llvm/trunk/lib/Support/Triple.cpp
>     llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/CMakeLists.txt
>
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp
>
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.h
>     llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
>     llvm/trunk/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
>
> Modified: llvm/trunk/lib/Support/Triple.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Triple.cpp?rev=255869&r1=255868&r2=255869&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/Triple.cpp (original)
> +++ llvm/trunk/lib/Support/Triple.cpp Wed Dec 16 19:39:00 2015
> @@ -550,6 +550,8 @@ static Triple::ObjectFormatType getDefau
>    case Triple::sparc:
>    case Triple::sparcv9:
>    case Triple::systemz:
> +  case Triple::wasm32:
> +  case Triple::wasm64:
>    case Triple::xcore:
>    case Triple::ppc64le:
>      return Triple::ELF;
> @@ -559,11 +561,6 @@ static Triple::ObjectFormatType getDefau
>      if (T.isOSDarwin())
>        return Triple::MachO;
>      return Triple::ELF;
> -
> -  case Triple::wasm32:
> -  case Triple::wasm64:
> -    // Unknown for now, until an object format is specified.
> -    return Triple::UnknownObjectFormat;
>    }
>
>    if (T.isOSDarwin())
>
> Modified: llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/CMakeLists.txt?rev=255869&r1=255868&r2=255869&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/CMakeLists.txt
> (original)
> +++ llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/CMakeLists.txt Wed Dec
> 16 19:39:00 2015
> @@ -1,4 +1,7 @@
>  add_llvm_library(LLVMWebAssemblyDesc
> +  WebAssemblyAsmBackend.cpp
> +  WebAssemblyELFObjectWriter.cpp
>    WebAssemblyMCAsmInfo.cpp
> +  WebAssemblyMCCodeEmitter.cpp
>    WebAssemblyMCTargetDesc.cpp
>  )
>
> Added:
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyAsmBackend.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyAsmBackend.cpp?rev=255869&view=auto
>
> ==============================================================================
> ---
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyAsmBackend.cpp
> (added)
> +++
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyAsmBackend.cpp
> Wed Dec 16 19:39:00 2015
> @@ -0,0 +1,103 @@
> +//===-- WebAssemblyAsmBackend.cpp - WebAssembly Assembler Backend
> ---------===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
>
> +//===----------------------------------------------------------------------===//
> +///
> +/// \file
> +/// \brief This file implements the WebAssemblyAsmBackend class.
> +///
>
> +//===----------------------------------------------------------------------===//
> +
> +#include "MCTargetDesc/WebAssemblyMCTargetDesc.h"
> +#include "llvm/MC/MCAsmBackend.h"
> +#include "llvm/MC/MCAssembler.h"
> +#include "llvm/MC/MCDirectives.h"
> +#include "llvm/MC/MCELFObjectWriter.h"
> +#include "llvm/MC/MCExpr.h"
> +#include "llvm/MC/MCFixupKindInfo.h"
> +#include "llvm/MC/MCObjectWriter.h"
> +#include "llvm/MC/MCSubtargetInfo.h"
> +#include "llvm/MC/MCSymbol.h"
> +#include "llvm/Support/ErrorHandling.h"
> +#include "llvm/Support/raw_ostream.h"
> +using namespace llvm;
> +
> +namespace {
> +class WebAssemblyAsmBackend final : public MCAsmBackend {
> +  bool Is64Bit;
> +
> +public:
> +  explicit WebAssemblyAsmBackend(bool Is64Bit)
> +      : MCAsmBackend(), Is64Bit(Is64Bit) {}
> +  ~WebAssemblyAsmBackend() override {}
> +
> +  void applyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize,
> +                  uint64_t Value, bool IsPCRel) const override;
> +
> +  MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const
> override;
> +
> +  // No instruction requires relaxation
> +  bool fixupNeedsRelaxation(const MCFixup &Fixup, uint64_t Value,
> +                            const MCRelaxableFragment *DF,
> +                            const MCAsmLayout &Layout) const override {
> +    return false;
> +  }
> +
> +  unsigned getNumFixupKinds() const override {
> +    // We currently just use the generic fixups in MCFixup.h and don't
> have any
> +    // target-specific fixups.
> +    return 0;
> +  }
> +
> +  bool mayNeedRelaxation(const MCInst &Inst) const override { return
> false; }
> +
> +  void relaxInstruction(const MCInst &Inst, MCInst &Res) const override {}
> +
> +  bool writeNopData(uint64_t Count, MCObjectWriter *OW) const override;
> +};
> +
> +bool WebAssemblyAsmBackend::writeNopData(uint64_t Count,
> +                                         MCObjectWriter *OW) const {
> +  if (Count == 0)
> +    return true;
> +
> +  // FIXME: Do something.
> +  return false;
> +}
> +
> +void WebAssemblyAsmBackend::applyFixup(const MCFixup &Fixup, char *Data,
> +                                       unsigned DataSize, uint64_t Value,
> +                                       bool IsPCRel) const {
> +  const MCFixupKindInfo &Info = getFixupKindInfo(Fixup.getKind());
> +  unsigned NumBytes = RoundUpToAlignment(Info.TargetSize, 8);
> +  if (!Value)
> +    return; // Doesn't change encoding.
> +
> +  // Shift the value into position.
> +  Value <<= Info.TargetOffset;
> +
> +  unsigned Offset = Fixup.getOffset();
> +  assert(Offset + NumBytes <= DataSize && "Invalid fixup offset!");
> +
> +  // For each byte of the fragment that the fixup touches, mask in the
> +  // bits from the fixup value.
> +  for (unsigned i = 0; i != NumBytes; ++i)
> +    Data[Offset + i] |= uint8_t((Value >> (i * 8)) & 0xff);
> +}
> +
> +MCObjectWriter *
> +WebAssemblyAsmBackend::createObjectWriter(raw_pwrite_stream &OS) const {
> +  return createWebAssemblyELFObjectWriter(OS, Is64Bit, 0);
> +}
> +} // end anonymous namespace
> +
> +MCAsmBackend *llvm::createWebAssemblyAsmBackend(const Target &T,
> +                                                const MCRegisterInfo &MRI,
> +                                                const Triple &TT,
> +                                                StringRef CPU) {
> +  return new WebAssemblyAsmBackend(TT.isArch64Bit());
> +}
>
> Added:
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyELFObjectWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyELFObjectWriter.cpp?rev=255869&view=auto
>
> ==============================================================================
> ---
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyELFObjectWriter.cpp
> (added)
> +++
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyELFObjectWriter.cpp
> Wed Dec 16 19:39:00 2015
> @@ -0,0 +1,58 @@
> +//===-- WebAssemblyELFObjectWriter.cpp - WebAssembly ELF Writer
> -----------===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
>
> +//===----------------------------------------------------------------------===//
> +///
> +/// \file
> +/// \brief This file handles ELF-specific object emission, converting
> LLVM's
> +/// internal fixups into the appropriate relocations.
> +///
>
> +//===----------------------------------------------------------------------===//
> +
> +#include "MCTargetDesc/WebAssemblyMCTargetDesc.h"
> +#include "llvm/MC/MCELFObjectWriter.h"
> +#include "llvm/MC/MCFixup.h"
> +#include "llvm/Support/ErrorHandling.h"
> +using namespace llvm;
> +
> +namespace {
> +class WebAssemblyELFObjectWriter final : public MCELFObjectTargetWriter {
> +public:
> +  WebAssemblyELFObjectWriter(bool Is64Bit, uint8_t OSABI);
> +
> +  ~WebAssemblyELFObjectWriter() override;
> +
> +protected:
> +  unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
> +                        bool IsPCRel) const override;
> +};
> +} // end anonymous namespace
> +
> +// FIXME: Use EM_NONE as a temporary hack. Should we decide to pursue ELF
> +// writing seriously, we should email generic-abi at googlegroups.com and
> ask
> +// for our own ELF code.
> +WebAssemblyELFObjectWriter::WebAssemblyELFObjectWriter(bool Is64Bit,
> +                                                       uint8_t OSABI)
> +    : MCELFObjectTargetWriter(Is64Bit, OSABI, ELF::EM_NONE,
> +                              /*HasRelocationAddend=*/true) {}
> +
> +WebAssemblyELFObjectWriter::~WebAssemblyELFObjectWriter() {}
> +
> +unsigned WebAssemblyELFObjectWriter::GetRelocType(const MCValue &Target,
> +                                                  const MCFixup &Fixup,
> +                                                  bool IsPCRel) const {
> +  // FIXME: Do we need our own relocs?
> +  return Fixup.getKind();
> +}
> +
> +MCObjectWriter *llvm::createWebAssemblyELFObjectWriter(raw_pwrite_stream
> &OS,
> +                                                       bool Is64Bit,
> +                                                       uint8_t OSABI) {
> +  MCELFObjectTargetWriter *MOTW =
> +      new WebAssemblyELFObjectWriter(Is64Bit, OSABI);
> +  return createELFObjectWriter(MOTW, OS, /*IsLittleEndian=*/true);
> +}
>
> Added:
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCCodeEmitter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCCodeEmitter.cpp?rev=255869&view=auto
>
> ==============================================================================
> ---
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCCodeEmitter.cpp
> (added)
> +++
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCCodeEmitter.cpp
> Wed Dec 16 19:39:00 2015
> @@ -0,0 +1,104 @@
> +//=- WebAssemblyMCCodeEmitter.cpp - Convert WebAssembly code to machine
> code -//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
>
> +//===----------------------------------------------------------------------===//
> +///
> +/// \file
> +/// \brief This file implements the WebAssemblyMCCodeEmitter class.
> +///
>
> +//===----------------------------------------------------------------------===//
> +
> +#include "MCTargetDesc/WebAssemblyMCTargetDesc.h"
> +#include "llvm/ADT/Statistic.h"
> +#include "llvm/MC/MCCodeEmitter.h"
> +#include "llvm/MC/MCFixup.h"
> +#include "llvm/MC/MCInst.h"
> +#include "llvm/MC/MCInstrInfo.h"
> +#include "llvm/MC/MCRegisterInfo.h"
> +#include "llvm/MC/MCSubtargetInfo.h"
> +#include "llvm/MC/MCSymbol.h"
> +#include "llvm/Support/raw_ostream.h"
> +using namespace llvm;
> +
> +#define DEBUG_TYPE "mccodeemitter"
> +
> +namespace {
> +class WebAssemblyMCCodeEmitter final : public MCCodeEmitter {
> +  const MCInstrInfo &MCII;
> +  const MCRegisterInfo &MRI;
> +  const MCContext &Ctx;
> +
> +public:
> +  WebAssemblyMCCodeEmitter(const MCInstrInfo &mcii, const MCRegisterInfo
> &mri,
> +                           MCContext &ctx)
> +      : MCII(mcii), MRI(mri), Ctx(ctx) {}
> +
> +  ~WebAssemblyMCCodeEmitter() override {}
> +
> +  /// TableGen'erated function for getting the binary encoding for an
> +  /// instruction.
> +  uint64_t getBinaryCodeForInstr(const MCInst &MI,
> +                                 SmallVectorImpl<MCFixup> &Fixups,
> +                                 const MCSubtargetInfo &STI) const;
> +
> +  /// Return binary encoding of operand. If the machine operand requires
> +  /// relocation, record the relocation and return zero.
> +  unsigned getMachineOpValue(const MCInst &MI, const MCOperand &MO,
> +                             SmallVectorImpl<MCFixup> &Fixups,
> +                             const MCSubtargetInfo &STI) const;
> +
> +  uint64_t getMemoryOpValue(const MCInst &MI, unsigned Op,
> +                            SmallVectorImpl<MCFixup> &Fixups,
> +                            const MCSubtargetInfo &STI) const;
> +
> +  void encodeInstruction(const MCInst &MI, raw_ostream &OS,
> +                         SmallVectorImpl<MCFixup> &Fixups,
> +                         const MCSubtargetInfo &STI) const override;
> +};
> +} // end anonymous namespace
> +
> +MCCodeEmitter *llvm::createWebAssemblyMCCodeEmitter(const MCInstrInfo
> &MCII,
> +                                                    const MCRegisterInfo
> &MRI,
> +                                                    MCContext &Ctx) {
> +  return new WebAssemblyMCCodeEmitter(MCII, MRI, Ctx);
> +}
> +
> +unsigned WebAssemblyMCCodeEmitter::getMachineOpValue(
> +    const MCInst &MI, const MCOperand &MO, SmallVectorImpl<MCFixup>
> &Fixups,
> +    const MCSubtargetInfo &STI) const {
> +  if (MO.isReg())
> +    return MRI.getEncodingValue(MO.getReg());
> +  if (MO.isImm())
> +    return static_cast<unsigned>(MO.getImm());
> +
> +  assert(MO.isExpr());
> +
> +  const MCExpr *Expr = MO.getExpr();
> +
> +  assert(Expr->getKind() == MCExpr::SymbolRef);
> +
> +  assert(false && "FIXME: not implemented yet");
> +
> +  return 0;
> +}
> +
> +void WebAssemblyMCCodeEmitter::encodeInstruction(
> +    const MCInst &MI, raw_ostream &OS, SmallVectorImpl<MCFixup> &Fixups,
> +    const MCSubtargetInfo &STI) const {
> +  assert(false && "FIXME: not implemented yet");
> +}
> +
> +// Encode WebAssembly Memory Operand
> +uint64_t
> +WebAssemblyMCCodeEmitter::getMemoryOpValue(const MCInst &MI, unsigned Op,
> +                                           SmallVectorImpl<MCFixup>
> &Fixups,
> +                                           const MCSubtargetInfo &STI)
> const {
> +  assert(false && "FIXME: not implemented yet");
> +  return 0;
> +}
> +
> +#include "WebAssemblyGenMCCodeEmitter.inc"
>
> Modified:
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp?rev=255869&r1=255868&r2=255869&view=diff
>
> ==============================================================================
> ---
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp
> (original)
> +++
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp
> Wed Dec 16 19:39:00 2015
> @@ -46,6 +46,14 @@ static MCInstrInfo *createWebAssemblyMCI
>    return X;
>  }
>
> +static MCStreamer *createWebAssemblyMCStreamer(const Triple &T, MCContext
> &Ctx,
> +                                               MCAsmBackend &MAB,
> +                                               raw_pwrite_stream &OS,
> +                                               MCCodeEmitter *Emitter,
> +                                               bool RelaxAll) {
> +  return createELFStreamer(Ctx, MAB, OS, Emitter, RelaxAll);
> +}
> +
>  static MCInstPrinter *
>  createWebAssemblyMCInstPrinter(const Triple & /*T*/, unsigned
> SyntaxVariant,
>                                 const MCAsmInfo &MAI, const MCInstrInfo
> &MII,
> @@ -63,7 +71,16 @@ extern "C" void LLVMInitializeWebAssembl
>      // Register the MC instruction info.
>      TargetRegistry::RegisterMCInstrInfo(*T, createWebAssemblyMCInstrInfo);
>
> +    // Register the object streamer
> +    TargetRegistry::RegisterELFStreamer(*T, createWebAssemblyMCStreamer);
> +
>      // Register the MCInstPrinter.
>      TargetRegistry::RegisterMCInstPrinter(*T,
> createWebAssemblyMCInstPrinter);
> +
> +    // Register the MC code emitter
> +    TargetRegistry::RegisterMCCodeEmitter(*T,
> createWebAssemblyMCCodeEmitter);
> +
> +    // Register the ASM Backend
> +    TargetRegistry::RegisterMCAsmBackend(*T, createWebAssemblyAsmBackend);
>    }
>  }
>
> Modified:
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.h?rev=255869&r1=255868&r2=255869&view=diff
>
> ==============================================================================
> ---
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.h
> (original)
> +++
> llvm/trunk/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.h
> Wed Dec 16 19:39:00 2015
> @@ -46,6 +46,9 @@ MCAsmBackend *createWebAssemblyAsmBacken
>                                            const MCRegisterInfo &MRI,
>                                            const Triple &TT, StringRef
> CPU);
>
> +MCObjectWriter *createWebAssemblyELFObjectWriter(raw_pwrite_stream &OS,
> +                                                 bool Is64Bit, uint8_t
> OSABI);
> +
>  } // end namespace llvm
>
>  // Defines symbolic names for WebAssembly registers. This defines a
> mapping from
>
> Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp?rev=255869&r1=255868&r2=255869&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp
> (original)
> +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp Wed Dec
> 16 19:39:00 2015
> @@ -17,7 +17,6 @@
>  #include "WebAssemblyMachineFunctionInfo.h"
>  #include "WebAssemblySubtarget.h"
>  #include "WebAssemblyTargetMachine.h"
> -#include "WebAssemblyTargetObjectFile.h"
>  #include "llvm/CodeGen/Analysis.h"
>  #include "llvm/CodeGen/CallingConvLower.h"
>  #include "llvm/CodeGen/MachineJumpTableInfo.h"
> @@ -650,10 +649,3 @@ SDValue WebAssemblyTargetLowering::Lower
>
>  //===----------------------------------------------------------------------===//
>  //                          WebAssembly Optimization Hooks
>
>  //===----------------------------------------------------------------------===//
> -
> -MCSection *WebAssemblyTargetObjectFile::SelectSectionForGlobal(
> -    const GlobalValue *GV, SectionKind /*Kind*/, Mangler & /*Mang*/,
> -    const TargetMachine & /*TM*/) const {
> -  // TODO: Be more sophisticated than this.
> -  return isa<Function>(GV) ? getTextSection() : getDataSection();
> -}
>
> Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp?rev=255869&r1=255868&r2=255869&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
> (original)
> +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp Wed Dec
> 16 19:39:00 2015
> @@ -15,7 +15,6 @@
>  #include "WebAssembly.h"
>  #include "MCTargetDesc/WebAssemblyMCTargetDesc.h"
>  #include "WebAssemblyTargetMachine.h"
> -#include "WebAssemblyTargetObjectFile.h"
>  #include "WebAssemblyTargetTransformInfo.h"
>  #include "llvm/CodeGen/MachineFunctionPass.h"
>  #include "llvm/CodeGen/Passes.h"
> @@ -49,7 +48,7 @@ WebAssemblyTargetMachine::WebAssemblyTar
>      : LLVMTargetMachine(T, TT.isArch64Bit() ?
> "e-p:64:64-i64:64-n32:64-S128"
>                                              :
> "e-p:32:32-i64:64-n32:64-S128",
>                          TT, CPU, FS, Options, RM, CM, OL),
> -      TLOF(make_unique<WebAssemblyTargetObjectFile>()) {
> +      TLOF(make_unique<TargetLoweringObjectFileELF>()) {
>    // WebAssembly type-checks expressions, but a noreturn function with a
> return
>    // type that doesn't match the context will cause a check failure. So
> we lower
>    // LLVM 'unreachable' to ISD::TRAP and then lower that to WebAssembly's
> @@ -171,7 +170,7 @@ void WebAssemblyPassConfig::addPreRegAll
>    addPass(createWebAssemblyRegStackify());
>    // The register coalescing pass has a bad interaction with COPY MIs
> which have
>    // EXPR_STACK as an extra operand
> -  //disablePass(&RegisterCoalescerID);
> +  // disablePass(&RegisterCoalescerID);
>  }
>
>  void WebAssemblyPassConfig::addPostRegAlloc() {
> @@ -198,7 +197,7 @@ void WebAssemblyPassConfig::addPostRegAl
>
>  void WebAssemblyPassConfig::addPreEmitPass() {
>    TargetPassConfig::addPreEmitPass();
> -
> +
>    // Put the CFG in structured form; insert BLOCK and LOOP markers.
>    addPass(createWebAssemblyCFGStackify());
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151216/bc3418c1/attachment.html>


More information about the llvm-commits mailing list