From 7beaa30e4e95eef2f1c1d23d21c45b7a159912f4 Mon Sep 17 00:00:00 2001 From: Wouter van Oortmerssen Date: Fri, 21 Sep 2018 17:47:58 +0000 Subject: [WebAssembly] Made assembler only use stack instruction tablegen defs Summary: This ensures we have the non-register version of the instruction. The stack version of call_indirect now wants a type index argument, so that has been added in the existing tests. Tested: llvm-lit -v `find test -name WebAssembly` Reviewers: dschuff Subscribers: sbc100, jgravelle-google, aheejin, sunfish, llvm-commits Differential Revision: https://reviews.llvm.org/D51662 llvm-svn: 342753 --- llvm/utils/TableGen/AsmMatcherEmitter.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'llvm/utils') diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp index e808661b7a5..a0283fc8017 100644 --- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp +++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp @@ -1479,6 +1479,8 @@ void AsmMatcherInfo::buildInfo() { bool ReportMultipleNearMisses = AsmParser->getValueAsBit("ReportMultipleNearMisses"); + bool IsWebAssemblyTarget = Target.getName() == "WebAssembly"; + // Parse the instructions; we need to do this first so that we can gather the // singleton register classes. SmallPtrSet SingletonRegisters; @@ -1514,6 +1516,14 @@ void AsmMatcherInfo::buildInfo() { if (!V.empty() && V != Variant.Name) continue; + // [WebAssembly] Ignore non-stack instructions. + if (IsWebAssemblyTarget) { + auto Bit = CGI->TheDef->getValue("StackBased")->getValue()-> + getCastTo(BitRecTy::get()); + if (!Bit || !reinterpret_cast(Bit)->getValue()) + continue; + } + auto II = llvm::make_unique(*CGI); II->initialize(*this, SingletonRegisters, Variant, HasMnemonicFirst); -- cgit v1.2.3