Skip to content

Commit 53bd43b

Browse files
Instruction selection wave 2
1 parent 3345c40 commit 53bd43b

8 files changed

+470
-119
lines changed

llvm/lib/Target/WebAssembly/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ tablegen(LLVM WebAssemblyGenAsmWriter.inc -gen-asm-writer)
77
tablegen(LLVM WebAssemblyGenDAGISel.inc -gen-dag-isel)
88
tablegen(LLVM WebAssemblyGenDisassemblerTables.inc -gen-disassembler)
99
tablegen(LLVM WebAssemblyGenFastISel.inc -gen-fast-isel)
10-
tablegen(LLVM WebAssemblyGenGlobalISel.inc -gen-global-isel)
1110
tablegen(LLVM WebAssemblyGenInstrInfo.inc -gen-instr-info)
1211
tablegen(LLVM WebAssemblyGenMCCodeEmitter.inc -gen-emitter)
1312
tablegen(LLVM WebAssemblyGenRegisterBank.inc -gen-register-bank)
1413
tablegen(LLVM WebAssemblyGenRegisterInfo.inc -gen-register-info)
1514
tablegen(LLVM WebAssemblyGenSubtargetInfo.inc -gen-subtarget)
1615

16+
set(LLVM_TARGET_DEFINITIONS WebAssemblyGISel.td)
17+
tablegen(LLVM WebAssemblyGenGlobalISel.inc -gen-global-isel)
18+
1719
add_public_tablegen_target(WebAssemblyCommonTableGen)
1820

1921
add_llvm_target(WebAssemblyCodeGen

llvm/lib/Target/WebAssembly/GISel/WebAssemblyCallLowering.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,8 @@ bool WebAssemblyCallLowering::lowerReturn(MachineIRBuilder &MIRBuilder,
527527
auto NewOutReg = Arg.Regs[Part];
528528
if (!RBI.constrainGenericRegister(NewOutReg, NewRegClass, MRI)) {
529529
NewOutReg = MRI.createGenericVirtualRegister(NewLLT);
530-
assert(RBI.constrainGenericRegister(NewOutReg, NewRegClass, MRI) && "Couldn't constrain brand-new register?");
530+
assert(RBI.constrainGenericRegister(NewOutReg, NewRegClass, MRI) &&
531+
"Couldn't constrain brand-new register?");
531532
MIRBuilder.buildCopy(NewOutReg, Arg.Regs[Part]);
532533
}
533534
MIB.addUse(NewOutReg);
@@ -704,9 +705,12 @@ bool WebAssemblyCallLowering::lowerFormalArguments(
704705
getLLTForType(*PointerType::get(Ctx, 0), DL));
705706
MFI->setVarargBufferVreg(VarargVreg);
706707

707-
MIRBuilder.buildInstr(getWASMArgOpcode(PtrVT))
708-
.addDef(VarargVreg)
709-
.addImm(FinalArgIdx);
708+
auto ArgInst = MIRBuilder.buildInstr(getWASMArgOpcode(PtrVT))
709+
.addDef(VarargVreg)
710+
.addImm(FinalArgIdx);
711+
712+
constrainOperandRegClass(MF, TRI, MRI, TII, RBI, *ArgInst,
713+
ArgInst->getDesc(), ArgInst->getOperand(0), 0);
710714

711715
MFI->addParam(PtrVT);
712716
++FinalArgIdx;
@@ -911,7 +915,8 @@ bool WebAssemblyCallLowering::lowerCall(MachineIRBuilder &MIRBuilder,
911915
auto NewRetReg = Ret.Regs[Part];
912916
if (!RBI.constrainGenericRegister(NewRetReg, NewRegClass, MRI)) {
913917
NewRetReg = MRI.createGenericVirtualRegister(NewLLT);
914-
assert(RBI.constrainGenericRegister(NewRetReg, NewRegClass, MRI) && "Couldn't constrain brand-new register?");
918+
assert(RBI.constrainGenericRegister(NewRetReg, NewRegClass, MRI) &&
919+
"Couldn't constrain brand-new register?");
915920
MIRBuilder.buildCopy(NewRetReg, Ret.Regs[Part]);
916921
}
917922
CallInst.addDef(Ret.Regs[Part]);

0 commit comments

Comments
 (0)