[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
This commit is contained in:
Wouter van Oortmerssen 2018-09-21 17:47:58 +00:00
parent 2eeb048905
commit 7beaa30e4e
2 changed files with 12 additions and 2 deletions

View File

@ -29,7 +29,7 @@ test0:
i64.const 1234
i32.call something2@FUNCTION
i32.const 0
call_indirect
call_indirect 0
i32.const 1
i32.add
tee_local 0
@ -68,7 +68,7 @@ test0:
# CHECK-NEXT: i64.const 1234
# CHECK-NEXT: i32.call something2@FUNCTION
# CHECK-NEXT: i32.const 0
# CHECK-NEXT: call_indirect
# CHECK-NEXT: call_indirect 0
# CHECK-NEXT: i32.const 1
# CHECK-NEXT: i32.add
# CHECK-NEXT: tee_local 0

View File

@ -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<Record*, 16> 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<const BitInit *>(Bit)->getValue())
continue;
}
auto II = llvm::make_unique<MatchableInfo>(*CGI);
II->initialize(*this, SingletonRegisters, Variant, HasMnemonicFirst);