Index: llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp =================================================================== --- llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp +++ llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp @@ -1159,7 +1159,8 @@ LiveInterval &SrcInt = LIS->getInterval(SrcReg); SlotIndex CopyIdx = LIS->getInstructionIndex(*CopyMI); VNInfo *ValNo = SrcInt.Query(CopyIdx).valueIn(); - assert(ValNo && "CopyMI input register not live"); + if (!ValNo) + return false; if (ValNo->isPHIDef() || ValNo->isUnused()) return false; MachineInstr *DefMI = LIS->getInstructionFromIndex(ValNo->def); Index: llvm/trunk/test/CodeGen/X86/coalesce-dead-lanes.mir =================================================================== --- llvm/trunk/test/CodeGen/X86/coalesce-dead-lanes.mir +++ llvm/trunk/test/CodeGen/X86/coalesce-dead-lanes.mir @@ -0,0 +1,19 @@ +# RUN: llc -run-pass simple-register-coalescing -O0 -mtriple x86_64-pc-linux-gnu -o - %s | FileCheck %s + +--- +name: foo +tracksRegLiveness: true +body: | + bb.0: + undef %18.sub_8bit_hi:gr16_abcd = COPY undef $al + %1:gr16_abcd = COPY killed %18 + dead %8:gr8 = COPY undef %1.sub_8bit_hi + $al = COPY undef %8 +... + +# This used to hit an assertion: +# lib/CodeGen/RegisterCoalescer.cpp:1110: RegisterCoalescer::reMaterializeTrivialDef(...): Assertion `ValNo && "CopyMI input register not live"' failed. +# +# CHECK_LABEL: name: foo +# CHECK: bb.0: +# CHECK-NEXT: $al = COPY undef %2:gr8