From 02c0871abddfefee897eb8732d9f6422b02509a9 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Sat, 20 Feb 2016 23:09:44 +0000 Subject: [WebAssembly] Handle CopyToReg nodes with flag results in LowerCopyToReg. llvm-svn: 261457 --- llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp') diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp index 7b3649b5a09..8f94f305c8a 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp @@ -558,16 +558,20 @@ SDValue WebAssemblyTargetLowering::LowerCopyToReg(SDValue Op, // need to insert some kind of instruction that can take an FI operand and // produces a value usable by CopyToReg (i.e. in a vreg). So insert a dummy // copy_local between Op and its FI operand. + SDValue Chain = Op.getOperand(0); SDLoc DL(Op); + unsigned Reg = cast(Op.getOperand(1))->getReg(); EVT VT = Src.getValueType(); SDValue Copy( DAG.getMachineNode(VT == MVT::i32 ? WebAssembly::COPY_LOCAL_I32 : WebAssembly::COPY_LOCAL_I64, DL, VT, Src), 0); - return DAG.getCopyToReg(Op.getOperand(0), DL, - cast(Op.getOperand(1))->getReg(), - Copy); + return Op.getNode()->getNumValues() == 1 + ? DAG.getCopyToReg(Chain, DL, Reg, Copy) + : DAG.getCopyToReg(Chain, DL, Reg, Copy, Op.getNumOperands() == 4 + ? Op.getOperand(3) + : SDValue()); } return SDValue(); } -- cgit v1.2.3