[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:
parent
2eeb048905
commit
7beaa30e4e
|
@ -29,7 +29,7 @@ test0:
|
||||||
i64.const 1234
|
i64.const 1234
|
||||||
i32.call something2@FUNCTION
|
i32.call something2@FUNCTION
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call_indirect
|
call_indirect 0
|
||||||
i32.const 1
|
i32.const 1
|
||||||
i32.add
|
i32.add
|
||||||
tee_local 0
|
tee_local 0
|
||||||
|
@ -68,7 +68,7 @@ test0:
|
||||||
# CHECK-NEXT: i64.const 1234
|
# CHECK-NEXT: i64.const 1234
|
||||||
# CHECK-NEXT: i32.call something2@FUNCTION
|
# CHECK-NEXT: i32.call something2@FUNCTION
|
||||||
# CHECK-NEXT: i32.const 0
|
# CHECK-NEXT: i32.const 0
|
||||||
# CHECK-NEXT: call_indirect
|
# CHECK-NEXT: call_indirect 0
|
||||||
# CHECK-NEXT: i32.const 1
|
# CHECK-NEXT: i32.const 1
|
||||||
# CHECK-NEXT: i32.add
|
# CHECK-NEXT: i32.add
|
||||||
# CHECK-NEXT: tee_local 0
|
# CHECK-NEXT: tee_local 0
|
||||||
|
|
|
@ -1479,6 +1479,8 @@ void AsmMatcherInfo::buildInfo() {
|
||||||
bool ReportMultipleNearMisses =
|
bool ReportMultipleNearMisses =
|
||||||
AsmParser->getValueAsBit("ReportMultipleNearMisses");
|
AsmParser->getValueAsBit("ReportMultipleNearMisses");
|
||||||
|
|
||||||
|
bool IsWebAssemblyTarget = Target.getName() == "WebAssembly";
|
||||||
|
|
||||||
// Parse the instructions; we need to do this first so that we can gather the
|
// Parse the instructions; we need to do this first so that we can gather the
|
||||||
// singleton register classes.
|
// singleton register classes.
|
||||||
SmallPtrSet<Record*, 16> SingletonRegisters;
|
SmallPtrSet<Record*, 16> SingletonRegisters;
|
||||||
|
@ -1514,6 +1516,14 @@ void AsmMatcherInfo::buildInfo() {
|
||||||
if (!V.empty() && V != Variant.Name)
|
if (!V.empty() && V != Variant.Name)
|
||||||
continue;
|
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);
|
auto II = llvm::make_unique<MatchableInfo>(*CGI);
|
||||||
|
|
||||||
II->initialize(*this, SingletonRegisters, Variant, HasMnemonicFirst);
|
II->initialize(*this, SingletonRegisters, Variant, HasMnemonicFirst);
|
||||||
|
|
Loading…
Reference in New Issue