Index: llvm/lib/CodeGen/MachineOutliner.cpp =================================================================== --- llvm/lib/CodeGen/MachineOutliner.cpp +++ llvm/lib/CodeGen/MachineOutliner.cpp @@ -654,6 +654,8 @@ OriginalMF->getFrameInstructions(); for (auto I = FirstCand.front(), E = std::next(FirstCand.back()); I != E; ++I) { + if (I->isDebugInstr()) + continue; MachineInstr *NewMI = MF.CloneMachineInstr(&*I); if (I->isCFIInstruction()) { unsigned CFIIndex = NewMI->getOperand(0).getCFIIndex(); Index: llvm/test/CodeGen/ARM/machine-outliner-remove-debug-instr.mir =================================================================== --- /dev/null +++ llvm/test/CodeGen/ARM/machine-outliner-remove-debug-instr.mir @@ -0,0 +1,171 @@ +# RUN: llc -verify-machineinstrs -run-pass=machine-outliner -mtriple=thumbv7m-none-eabi %s -o - | FileCheck %s + +# Check the outlined function does not contain debug instructions +# CHECK-LABEL: name: f +# CHECK: tBL {{.*}} @OUTLINED_FUNCTION_0, + +# CHECK-LABEL: name: g +# CHECK: tBL {{.*}} @OUTLINED_FUNCTION_0, + +# CHECK-LABEL: name: OUTLINED_FUNCTION_0 +# CHECK-NOT: DBG_VALUE +# CHECK: tTAILJMPdND @h +--- | + source_filename = "x.ll" + target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" + + define void @f() { + entry: + br label %if.end + if.end: + br label %return + return: + ret void + } + + define void @g() { + entry: + br label %if.end + if.end: + br label %return + return: + ret void + } + + define void @h() { entry: ret void } +... +--- +name: h +tracksRegLiveness: true +body: | + bb.0.entry: + liveins: $r0, $r1 + + DBG_VALUE $r0, $noreg + DBG_VALUE $r1, $noreg + renamable $r0 = nsw tADDhirr killed renamable $r0, killed renamable $r1, 14 /* CC::al */, $noreg + DBG_VALUE $r0, $noreg + tBX_RET 14 /* CC::al */, $noreg, implicit killed $r0 +... +--- +name: f +tracksRegLiveness: true +body: | + bb.0.entry: + successors: %bb.1(0x30000000), %bb.2(0x50000000) + liveins: $r0, $r1, $r2, $r3, $lr, $r6, $r5, $r4 + + DBG_VALUE $r0, $noreg + DBG_VALUE $r1, $noreg + DBG_VALUE $r2, $noreg + DBG_VALUE $r3, $noreg + tCMPi8 renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr + t2Bcc %bb.1, 4 /* CC::mi */, killed $cpsr + + bb.2.if.end: + liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $lr + + DBG_VALUE $r3, $noreg + DBG_VALUE $r2, $noreg + DBG_VALUE $r1, $noreg + DBG_VALUE $r0, $noreg + frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r4, killed $r5, killed $r6, killed $lr, implicit-def $sp, implicit $sp + frame-setup CFI_INSTRUCTION def_cfa_offset 16 + frame-setup CFI_INSTRUCTION offset $lr, -4 + frame-setup CFI_INSTRUCTION offset $r6, -8 + frame-setup CFI_INSTRUCTION offset $r5, -12 + frame-setup CFI_INSTRUCTION offset $r4, -16 + $r6 = tMOVr killed $r1, 14 /* CC::al */, $noreg + DBG_VALUE $r6, $noreg + DBG_VALUE $r6, $noreg + renamable $r1, dead $cpsr = tMOVi8 11, 14 /* CC::al */, $noreg + renamable $r0, dead $cpsr = nsw tMUL killed renamable $r1, killed renamable $r0, 14 /* CC::al */, $noreg + DBG_VALUE $r0, $noreg + $r1 = tMOVr $r6, 14 /* CC::al */, $noreg + $r4 = tMOVr killed $r3, 14 /* CC::al */, $noreg + DBG_VALUE $r4, $noreg + $r5 = tMOVr killed $r2, 14 /* CC::al */, $noreg + DBG_VALUE $r5, $noreg + renamable $r0, dead $cpsr = nsw tSUBrr killed renamable $r0, renamable $r6, 14 /* CC::al */, $noreg + tBL 14 /* CC::al */, $noreg, @h, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $r0, implicit killed $r1, implicit-def $sp, implicit-def $r0 + DBG_VALUE $r0, $noreg + renamable $r1, dead $cpsr = nsw tADDrr renamable $r0, killed renamable $r6, 14 /* CC::al */, $noreg + renamable $r0, dead $cpsr = nsw tMUL killed renamable $r1, killed renamable $r0, 14 /* CC::al */, $noreg + DBG_VALUE $r0, $noreg + renamable $r1, dead $cpsr = nsw tADDrr killed renamable $r4, killed renamable $r5, 14 /* CC::al */, $noreg + renamable $r0 = t2SDIV killed renamable $r0, killed renamable $r1, 14 /* CC::al */, $noreg + renamable $r0, dead $cpsr = nsw tADDi8 killed renamable $r0, 2, 14 /* CC::al */, $noreg + frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r4, def $r5, def $r6, def $pc, implicit killed $r0 + + bb.1: + liveins: $lr, $r6, $r5, $r4 + + DBG_VALUE $r3, $noreg + DBG_VALUE $r2, $noreg + DBG_VALUE $r1, $noreg + DBG_VALUE $r0, $noreg + renamable $r0 = t2MOVi -1, 14 /* CC::al */, $noreg, $noreg + DBG_VALUE $r0, $noreg + tBX_RET 14 /* CC::al */, $noreg, implicit killed $r0 +... +--- +name: g +tracksRegLiveness: true +body: | + bb.0.entry: + successors: %bb.1(0x30000000), %bb.2(0x50000000) + liveins: $r0, $r1, $r2, $r3, $lr, $r6, $r5, $r4 + + DBG_VALUE $r0, $noreg + DBG_VALUE $r1, $noreg + DBG_VALUE $r2, $noreg + DBG_VALUE $r3, $noreg + tCMPi8 renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr + t2Bcc %bb.1, 4 /* CC::mi */, killed $cpsr + + bb.2.if.end: + liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $lr + + DBG_VALUE $r3, $noreg + DBG_VALUE $r2, $noreg + DBG_VALUE $r1, $noreg + DBG_VALUE $r0, $noreg + frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r4, killed $r5, killed $r6, killed $lr, implicit-def $sp, implicit $sp + frame-setup CFI_INSTRUCTION def_cfa_offset 16 + frame-setup CFI_INSTRUCTION offset $lr, -4 + frame-setup CFI_INSTRUCTION offset $r6, -8 + frame-setup CFI_INSTRUCTION offset $r5, -12 + frame-setup CFI_INSTRUCTION offset $r4, -16 + $r6 = tMOVr killed $r1, 14 /* CC::al */, $noreg + DBG_VALUE $r6, $noreg + renamable $r1, dead $cpsr = tMOVi8 11, 14 /* CC::al */, $noreg + renamable $r0, dead $cpsr = nsw tMUL killed renamable $r1, killed renamable $r0, 14 /* CC::al */, $noreg + DBG_VALUE $r0, $noreg + $r1 = tMOVr $r6, 14 /* CC::al */, $noreg + $r4 = tMOVr killed $r3, 14 /* CC::al */, $noreg + DBG_VALUE $r4, $noreg + $r5 = tMOVr killed $r2, 14 /* CC::al */, $noreg + DBG_VALUE $r5, $noreg + renamable $r0, dead $cpsr = nsw tSUBrr killed renamable $r0, renamable $r6, 14 /* CC::al */, $noreg + tBL 14 /* CC::al */, $noreg, @h, csr_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $r0, implicit killed $r1, implicit-def $sp, implicit-def $r0 + DBG_VALUE $r0, $noreg + renamable $r1, dead $cpsr = nsw tADDrr renamable $r0, killed renamable $r6, 14 /* CC::al */, $noreg + renamable $r0, dead $cpsr = nsw tMUL killed renamable $r1, killed renamable $r0, 14 /* CC::al */, $noreg + DBG_VALUE $r0, $noreg + renamable $r1, dead $cpsr = nsw tADDrr killed renamable $r4, killed renamable $r5, 14 /* CC::al */, $noreg + renamable $r0 = t2SDIV killed renamable $r0, killed renamable $r1, 14 /* CC::al */, $noreg + renamable $r0, dead $cpsr = nsw tADDi8 killed renamable $r0, 1, 14 /* CC::al */, $noreg + frame-destroy tPOP_RET 14 /* CC::al */, $noreg, def $r4, def $r5, def $r6, def $pc, implicit killed $r0 + + bb.1: + liveins: $lr, $r6, $r5, $r4 + + DBG_VALUE $r3, $noreg + DBG_VALUE $r2, $noreg + DBG_VALUE $r1, $noreg + DBG_VALUE $r0, $noreg + renamable $r0 = t2MOVi -1, 14 /* CC::al */, $noreg, $noreg + DBG_VALUE $r0, $noreg + tBX_RET 14 /* CC::al */, $noreg, implicit killed $r0 + +...