Index: llvm/trunk/lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp =================================================================== --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp @@ -284,8 +284,11 @@ } if (UseEmpty[TargetRegisterInfo::virtReg2Index(OldReg)]) { unsigned Opc = getDropOpcode(RC); - BuildMI(MBB, InsertPt, MI.getDebugLoc(), TII->get(Opc)) - .addReg(NewReg); + MachineInstr *Drop = + BuildMI(MBB, InsertPt, MI.getDebugLoc(), TII->get(Opc)) + .addReg(NewReg); + // After the drop instruction, this reg operand will not be used + Drop->getOperand(0).setIsKill(); } else { unsigned LocalId = getLocalId(Reg2Local, CurLocal, OldReg); unsigned Opc = getSetLocalOpcode(RC); @@ -294,6 +297,9 @@ .addReg(NewReg); } MI.getOperand(0).setReg(NewReg); + // This register operand is now being used by the inserted drop + // instruction, so make it undead. + MI.getOperand(0).setIsDead(false); MFI.stackifyVReg(NewReg); Changed = true; } Index: llvm/trunk/test/CodeGen/WebAssembly/explicit-locals.mir =================================================================== --- llvm/trunk/test/CodeGen/WebAssembly/explicit-locals.mir +++ llvm/trunk/test/CodeGen/WebAssembly/explicit-locals.mir @@ -0,0 +1,23 @@ +# RUN: llc -mtriple=wasm32-unknown-unknown -run-pass wasm-explicit-locals %s -o - | FileCheck %s + +# When a drop instruction is inserted to drop a dead register operand, the +# original operand should be marked not dead anymore because it is now used by +# the new drop instruction. And the operand to the new drop instruction should +# be marked killed instead. +--- +name: drop_test +liveins: + - { reg: '$arguments' } +tracksRegLiveness: true +body: | + bb.0: + successors: %bb.1 + liveins: $arguments + + bb.1: + ; predecessors: %bb.0 + ; CHECK-NOT: dead %{{[0-9]+}} + ; CHECK: DROP_I32 killed %{{[0-9]+}} + dead %0:i32 = CONST_I32 0, implicit-def dead $arguments, implicit $sp32, implicit $sp64 + RETURN_VOID implicit-def dead $arguments +...