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,443 @@ +# RUN: llc --verify-machineinstrs --run-pass=machine-outliner %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 +--- | + ; ModuleID = 'x.ll' + source_filename = "x.ll" + target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" + target triple = "thumbv7m-unknown-unknown-eabi" + + ; Function Attrs: minsize noinline norecurse nounwind optsize readnone + define dso_local i32 @h(i32 %a, i32 %b) local_unnamed_addr #0 !dbg !8 { + entry: + call void @llvm.dbg.value(metadata i32 %a, metadata !13, metadata !DIExpression()), !dbg !15 + call void @llvm.dbg.value(metadata i32 %b, metadata !14, metadata !DIExpression()), !dbg !15 + %add = add nsw i32 %b, %a, !dbg !16 + ret i32 %add, !dbg !17 + } + + ; Function Attrs: minsize norecurse nounwind optsize readnone + define dso_local i32 @f(i32 %a, i32 %b, i32 %c, i32 %d) local_unnamed_addr #1 !dbg !18 { + entry: + call void @llvm.dbg.value(metadata i32 %a, metadata !22, metadata !DIExpression()), !dbg !26 + call void @llvm.dbg.value(metadata i32 %b, metadata !23, metadata !DIExpression()), !dbg !26 + call void @llvm.dbg.value(metadata i32 %c, metadata !24, metadata !DIExpression()), !dbg !26 + call void @llvm.dbg.value(metadata i32 %d, metadata !25, metadata !DIExpression()), !dbg !26 + %cmp = icmp slt i32 %a, 0, !dbg !27 + br i1 %cmp, label %return, label %if.end, !dbg !29 + + if.end: ; preds = %entry + %mul = mul nsw i32 %a, 11, !dbg !30 + %sub = sub nsw i32 %mul, %b, !dbg !31 + %call = tail call i32 @h(i32 %sub, i32 %b) #3, !dbg !32 + call void @llvm.dbg.value(metadata i32 %call, metadata !22, metadata !DIExpression()), !dbg !26 + %add = add nsw i32 %call, %b, !dbg !33 + %mul1 = mul nsw i32 %add, %call, !dbg !34 + %add2 = add nsw i32 %d, %c, !dbg !35 + %div = sdiv i32 %mul1, %add2, !dbg !36 + %add3 = add nsw i32 %div, 2, !dbg !37 + br label %return, !dbg !38 + + return: ; preds = %if.end, %entry + %retval.0 = phi i32 [ %add3, %if.end ], [ -1, %entry ], !dbg !26 + ret i32 %retval.0, !dbg !39 + } + + ; Function Attrs: minsize norecurse nounwind optsize readnone + define dso_local i32 @g(i32 %a, i32 %b, i32 %c, i32 %d) local_unnamed_addr #1 !dbg !40 { + entry: + call void @llvm.dbg.value(metadata i32 %a, metadata !42, metadata !DIExpression()), !dbg !46 + call void @llvm.dbg.value(metadata i32 %b, metadata !43, metadata !DIExpression()), !dbg !46 + call void @llvm.dbg.value(metadata i32 %c, metadata !44, metadata !DIExpression()), !dbg !46 + call void @llvm.dbg.value(metadata i32 %d, metadata !45, metadata !DIExpression()), !dbg !46 + %cmp = icmp slt i32 %a, 0, !dbg !47 + br i1 %cmp, label %return, label %if.end, !dbg !49 + + if.end: ; preds = %entry + %mul = mul nsw i32 %a, 11, !dbg !50 + %sub = sub nsw i32 %mul, %b, !dbg !51 + %call = tail call i32 @h(i32 %sub, i32 %b) #3, !dbg !52 + call void @llvm.dbg.value(metadata i32 %call, metadata !42, metadata !DIExpression()), !dbg !46 + %add = add nsw i32 %call, %b, !dbg !53 + %mul1 = mul nsw i32 %add, %call, !dbg !54 + %add2 = add nsw i32 %d, %c, !dbg !55 + %div = sdiv i32 %mul1, %add2, !dbg !56 + %add3 = add nsw i32 %div, 1, !dbg !57 + br label %return, !dbg !58 + + return: ; preds = %if.end, %entry + %retval.0 = phi i32 [ %add3, %if.end ], [ -1, %entry ], !dbg !46 + ret i32 %retval.0, !dbg !59 + } + + ; Function Attrs: nofree nosync nounwind readnone speculatable willreturn + declare void @llvm.dbg.value(metadata, metadata, metadata) #2 + + attributes #0 = { minsize noinline norecurse nounwind optsize readnone } + attributes #1 = { minsize norecurse nounwind optsize readnone } + attributes #2 = { nofree nosync nounwind readnone speculatable willreturn } + attributes #3 = { minsize optsize } + + !llvm.dbg.cu = !{!0} + !llvm.module.flags = !{!3, !4, !5, !6} + !llvm.ident = !{!7} + + !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, splitDebugInlining: false, nameTableKind: None) + !1 = !DIFile(filename: "x.c", directory: "build") + !2 = !{} + !3 = !{i32 7, !"Dwarf Version", i32 4} + !4 = !{i32 2, !"Debug Info Version", i32 3} + !5 = !{i32 1, !"wchar_size", i32 4} + !6 = !{i32 1, !"min_enum_size", i32 4} + !7 = !{!"clang"} + !8 = distinct !DISubprogram(name: "h", scope: !1, file: !1, line: 1, type: !9, scopeLine: 1, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !12) + !9 = !DISubroutineType(types: !10) + !10 = !{!11, !11, !11} + !11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) + !12 = !{!13, !14} + !13 = !DILocalVariable(name: "a", arg: 1, scope: !8, file: !1, line: 1, type: !11) + !14 = !DILocalVariable(name: "b", arg: 2, scope: !8, file: !1, line: 1, type: !11) + !15 = !DILocation(line: 0, scope: !8) + !16 = !DILocation(line: 1, column: 58, scope: !8) + !17 = !DILocation(line: 1, column: 49, scope: !8) + !18 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 2, type: !19, scopeLine: 2, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !21) + !19 = !DISubroutineType(types: !20) + !20 = !{!11, !11, !11, !11, !11} + !21 = !{!22, !23, !24, !25} + !22 = !DILocalVariable(name: "a", arg: 1, scope: !18, file: !1, line: 2, type: !11) + !23 = !DILocalVariable(name: "b", arg: 2, scope: !18, file: !1, line: 2, type: !11) + !24 = !DILocalVariable(name: "c", arg: 3, scope: !18, file: !1, line: 2, type: !11) + !25 = !DILocalVariable(name: "d", arg: 4, scope: !18, file: !1, line: 2, type: !11) + !26 = !DILocation(line: 0, scope: !18) + !27 = !DILocation(line: 3, column: 9, scope: !28) + !28 = distinct !DILexicalBlock(scope: !18, file: !1, line: 3, column: 7) + !29 = !DILocation(line: 3, column: 7, scope: !18) + !30 = !DILocation(line: 5, column: 12, scope: !18) + !31 = !DILocation(line: 5, column: 16, scope: !18) + !32 = !DILocation(line: 5, column: 7, scope: !18) + !33 = !DILocation(line: 6, column: 21, scope: !18) + !34 = !DILocation(line: 6, column: 16, scope: !18) + !35 = !DILocation(line: 6, column: 31, scope: !18) + !36 = !DILocation(line: 6, column: 26, scope: !18) + !37 = !DILocation(line: 6, column: 12, scope: !18) + !38 = !DILocation(line: 6, column: 3, scope: !18) + !39 = !DILocation(line: 7, column: 1, scope: !18) + !40 = distinct !DISubprogram(name: "g", scope: !1, file: !1, line: 9, type: !19, scopeLine: 9, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !41) + !41 = !{!42, !43, !44, !45} + !42 = !DILocalVariable(name: "a", arg: 1, scope: !40, file: !1, line: 9, type: !11) + !43 = !DILocalVariable(name: "b", arg: 2, scope: !40, file: !1, line: 9, type: !11) + !44 = !DILocalVariable(name: "c", arg: 3, scope: !40, file: !1, line: 9, type: !11) + !45 = !DILocalVariable(name: "d", arg: 4, scope: !40, file: !1, line: 9, type: !11) + !46 = !DILocation(line: 0, scope: !40) + !47 = !DILocation(line: 10, column: 9, scope: !48) + !48 = distinct !DILexicalBlock(scope: !40, file: !1, line: 10, column: 7) + !49 = !DILocation(line: 10, column: 7, scope: !40) + !50 = !DILocation(line: 12, column: 12, scope: !40) + !51 = !DILocation(line: 12, column: 16, scope: !40) + !52 = !DILocation(line: 12, column: 7, scope: !40) + !53 = !DILocation(line: 13, column: 21, scope: !40) + !54 = !DILocation(line: 13, column: 16, scope: !40) + !55 = !DILocation(line: 13, column: 31, scope: !40) + !56 = !DILocation(line: 13, column: 26, scope: !40) + !57 = !DILocation(line: 13, column: 12, scope: !40) + !58 = !DILocation(line: 13, column: 3, scope: !40) + !59 = !DILocation(line: 14, column: 1, scope: !40) + +... +--- +name: h +alignment: 2 +exposesReturnsTwice: false +legalized: false +regBankSelected: false +selected: false +failedISel: false +tracksRegLiveness: true +hasWinCFI: false +registers: [] +liveins: + - { reg: '$r0', virtual-reg: '' } + - { reg: '$r1', virtual-reg: '' } +frameInfo: + isFrameAddressTaken: false + isReturnAddressTaken: false + hasStackMap: false + hasPatchPoint: false + stackSize: 0 + offsetAdjustment: 0 + maxAlignment: 1 + adjustsStack: false + hasCalls: false + stackProtector: '' + maxCallFrameSize: 0 + cvBytesOfCalleeSavedRegisters: 0 + hasOpaqueSPAdjustment: false + hasVAStart: false + hasMustTailInVarArgFunc: false + localFrameSize: 0 + savePoint: '' + restorePoint: '' +fixedStack: [] +stack: [] +callSites: [] +debugValueSubstitutions: [] +constants: [] +machineFunctionInfo: {} +body: | + bb.0.entry: + liveins: $r0, $r1 + + DBG_VALUE $r0, $noreg, !13, !DIExpression(), debug-location !15 + DBG_VALUE $r0, $noreg, !13, !DIExpression(), debug-location !15 + DBG_VALUE $r1, $noreg, !14, !DIExpression(), debug-location !15 + DBG_VALUE $r1, $noreg, !14, !DIExpression(), debug-location !15 + renamable $r0 = nsw tADDhirr killed renamable $r0, killed renamable $r1, 14 /* CC::al */, $noreg, debug-location !16 + DBG_VALUE $r0, $noreg, !13, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !15 + tBX_RET 14 /* CC::al */, $noreg, implicit killed $r0, debug-location !17 + +... +--- +name: f +alignment: 2 +exposesReturnsTwice: false +legalized: false +regBankSelected: false +selected: false +failedISel: false +tracksRegLiveness: true +hasWinCFI: false +registers: [] +liveins: + - { reg: '$r0', virtual-reg: '' } + - { reg: '$r1', virtual-reg: '' } + - { reg: '$r2', virtual-reg: '' } + - { reg: '$r3', virtual-reg: '' } +frameInfo: + isFrameAddressTaken: false + isReturnAddressTaken: false + hasStackMap: false + hasPatchPoint: false + stackSize: 16 + offsetAdjustment: 0 + maxAlignment: 4 + adjustsStack: true + hasCalls: true + stackProtector: '' + maxCallFrameSize: 0 + cvBytesOfCalleeSavedRegisters: 0 + hasOpaqueSPAdjustment: false + hasVAStart: false + hasMustTailInVarArgFunc: false + localFrameSize: 0 + savePoint: '' + restorePoint: '' +fixedStack: [] +stack: + - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4, + stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false, + debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } + - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4, + stack-id: default, callee-saved-register: '$r6', callee-saved-restored: true, + debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } + - { id: 2, name: '', type: spill-slot, offset: -12, size: 4, alignment: 4, + stack-id: default, callee-saved-register: '$r5', callee-saved-restored: true, + debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } + - { id: 3, name: '', type: spill-slot, offset: -16, size: 4, alignment: 4, + stack-id: default, callee-saved-register: '$r4', callee-saved-restored: true, + debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } +callSites: [] +debugValueSubstitutions: [] +constants: [] +machineFunctionInfo: {} +body: | + bb.0.entry: + successors: %bb.1(0x30000000), %bb.2(0x50000000) + liveins: $r0, $r1, $r2, $r3, $lr, $r6, $r5, $r4 + + DBG_VALUE $r0, $noreg, !22, !DIExpression(), debug-location !26 + DBG_VALUE $r1, $noreg, !23, !DIExpression(), debug-location !26 + DBG_VALUE $r2, $noreg, !24, !DIExpression(), debug-location !26 + DBG_VALUE $r3, $noreg, !25, !DIExpression(), debug-location !26 + DBG_VALUE $r3, $noreg, !25, !DIExpression(), debug-location !26 + DBG_VALUE $r2, $noreg, !24, !DIExpression(), debug-location !26 + DBG_VALUE $r1, $noreg, !23, !DIExpression(), debug-location !26 + DBG_VALUE $r0, $noreg, !22, !DIExpression(), debug-location !26 + tCMPi8 renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr, debug-location !29 + t2Bcc %bb.1, 4 /* CC::mi */, killed $cpsr, debug-location !29 + + bb.2.if.end: + liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $lr + + DBG_VALUE $r3, $noreg, !25, !DIExpression(), debug-location !26 + DBG_VALUE $r2, $noreg, !24, !DIExpression(), debug-location !26 + DBG_VALUE $r1, $noreg, !23, !DIExpression(), debug-location !26 + DBG_VALUE $r0, $noreg, !22, !DIExpression(), debug-location !26 + 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, !23, !DIExpression(), debug-location !26 + DBG_VALUE $r6, $noreg, !23, !DIExpression(), debug-location !26 + 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, debug-location !30 + DBG_VALUE $r0, $noreg, !22, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !26 + $r1 = tMOVr $r6, 14 /* CC::al */, $noreg, debug-location !32 + $r4 = tMOVr killed $r3, 14 /* CC::al */, $noreg + DBG_VALUE $r4, $noreg, !25, !DIExpression(), debug-location !26 + DBG_VALUE $r4, $noreg, !25, !DIExpression(), debug-location !26 + $r5 = tMOVr killed $r2, 14 /* CC::al */, $noreg + DBG_VALUE $r5, $noreg, !24, !DIExpression(), debug-location !26 + DBG_VALUE $r5, $noreg, !24, !DIExpression(), debug-location !26 + renamable $r0, dead $cpsr = nsw tSUBrr killed renamable $r0, renamable $r6, 14 /* CC::al */, $noreg, debug-location !31 + 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, debug-location !32 + DBG_VALUE $r0, $noreg, !22, !DIExpression(), debug-location !26 + renamable $r1, dead $cpsr = nsw tADDrr renamable $r0, killed renamable $r6, 14 /* CC::al */, $noreg, debug-location !33 + renamable $r0, dead $cpsr = nsw tMUL killed renamable $r1, killed renamable $r0, 14 /* CC::al */, $noreg, debug-location !34 + DBG_VALUE $r0, $noreg, !22, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !26 + renamable $r1, dead $cpsr = nsw tADDrr killed renamable $r4, killed renamable $r5, 14 /* CC::al */, $noreg, debug-location !35 + renamable $r0 = t2SDIV killed renamable $r0, killed renamable $r1, 14 /* CC::al */, $noreg, debug-location !36 + renamable $r0, dead $cpsr = nsw tADDi8 killed renamable $r0, 2, 14 /* CC::al */, $noreg, debug-location !37 + 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, !25, !DIExpression(), debug-location !26 + DBG_VALUE $r2, $noreg, !24, !DIExpression(), debug-location !26 + DBG_VALUE $r1, $noreg, !23, !DIExpression(), debug-location !26 + DBG_VALUE $r0, $noreg, !22, !DIExpression(), debug-location !26 + renamable $r0 = t2MOVi -1, 14 /* CC::al */, $noreg, $noreg + DBG_VALUE $r0, $noreg, !22, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !26 + tBX_RET 14 /* CC::al */, $noreg, implicit killed $r0, debug-location !39 + +... +--- +name: g +alignment: 2 +exposesReturnsTwice: false +legalized: false +regBankSelected: false +selected: false +failedISel: false +tracksRegLiveness: true +hasWinCFI: false +registers: [] +liveins: + - { reg: '$r0', virtual-reg: '' } + - { reg: '$r1', virtual-reg: '' } + - { reg: '$r2', virtual-reg: '' } + - { reg: '$r3', virtual-reg: '' } +frameInfo: + isFrameAddressTaken: false + isReturnAddressTaken: false + hasStackMap: false + hasPatchPoint: false + stackSize: 16 + offsetAdjustment: 0 + maxAlignment: 4 + adjustsStack: true + hasCalls: true + stackProtector: '' + maxCallFrameSize: 0 + cvBytesOfCalleeSavedRegisters: 0 + hasOpaqueSPAdjustment: false + hasVAStart: false + hasMustTailInVarArgFunc: false + localFrameSize: 0 + savePoint: '' + restorePoint: '' +fixedStack: [] +stack: + - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4, + stack-id: default, callee-saved-register: '$lr', callee-saved-restored: false, + debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } + - { id: 1, name: '', type: spill-slot, offset: -8, size: 4, alignment: 4, + stack-id: default, callee-saved-register: '$r6', callee-saved-restored: true, + debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } + - { id: 2, name: '', type: spill-slot, offset: -12, size: 4, alignment: 4, + stack-id: default, callee-saved-register: '$r5', callee-saved-restored: true, + debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } + - { id: 3, name: '', type: spill-slot, offset: -16, size: 4, alignment: 4, + stack-id: default, callee-saved-register: '$r4', callee-saved-restored: true, + debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } +callSites: [] +debugValueSubstitutions: [] +constants: [] +machineFunctionInfo: {} +body: | + bb.0.entry: + successors: %bb.1(0x30000000), %bb.2(0x50000000) + liveins: $r0, $r1, $r2, $r3, $lr, $r6, $r5, $r4 + + DBG_VALUE $r0, $noreg, !42, !DIExpression(), debug-location !46 + DBG_VALUE $r1, $noreg, !43, !DIExpression(), debug-location !46 + DBG_VALUE $r2, $noreg, !44, !DIExpression(), debug-location !46 + DBG_VALUE $r3, $noreg, !45, !DIExpression(), debug-location !46 + DBG_VALUE $r3, $noreg, !45, !DIExpression(), debug-location !46 + DBG_VALUE $r2, $noreg, !44, !DIExpression(), debug-location !46 + DBG_VALUE $r1, $noreg, !43, !DIExpression(), debug-location !46 + DBG_VALUE $r0, $noreg, !42, !DIExpression(), debug-location !46 + tCMPi8 renamable $r0, 0, 14 /* CC::al */, $noreg, implicit-def $cpsr, debug-location !49 + t2Bcc %bb.1, 4 /* CC::mi */, killed $cpsr, debug-location !49 + + bb.2.if.end: + liveins: $r0, $r1, $r2, $r3, $r4, $r5, $r6, $lr + + DBG_VALUE $r3, $noreg, !45, !DIExpression(), debug-location !46 + DBG_VALUE $r2, $noreg, !44, !DIExpression(), debug-location !46 + DBG_VALUE $r1, $noreg, !43, !DIExpression(), debug-location !46 + DBG_VALUE $r0, $noreg, !42, !DIExpression(), debug-location !46 + 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, !43, !DIExpression(), debug-location !46 + DBG_VALUE $r6, $noreg, !43, !DIExpression(), debug-location !46 + 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, debug-location !50 + DBG_VALUE $r0, $noreg, !42, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !46 + $r1 = tMOVr $r6, 14 /* CC::al */, $noreg, debug-location !52 + $r4 = tMOVr killed $r3, 14 /* CC::al */, $noreg + DBG_VALUE $r4, $noreg, !45, !DIExpression(), debug-location !46 + DBG_VALUE $r4, $noreg, !45, !DIExpression(), debug-location !46 + $r5 = tMOVr killed $r2, 14 /* CC::al */, $noreg + DBG_VALUE $r5, $noreg, !44, !DIExpression(), debug-location !46 + DBG_VALUE $r5, $noreg, !44, !DIExpression(), debug-location !46 + renamable $r0, dead $cpsr = nsw tSUBrr killed renamable $r0, renamable $r6, 14 /* CC::al */, $noreg, debug-location !51 + 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, debug-location !52 + DBG_VALUE $r0, $noreg, !42, !DIExpression(), debug-location !46 + renamable $r1, dead $cpsr = nsw tADDrr renamable $r0, killed renamable $r6, 14 /* CC::al */, $noreg, debug-location !53 + renamable $r0, dead $cpsr = nsw tMUL killed renamable $r1, killed renamable $r0, 14 /* CC::al */, $noreg, debug-location !54 + DBG_VALUE $r0, $noreg, !42, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !46 + renamable $r1, dead $cpsr = nsw tADDrr killed renamable $r4, killed renamable $r5, 14 /* CC::al */, $noreg, debug-location !55 + renamable $r0 = t2SDIV killed renamable $r0, killed renamable $r1, 14 /* CC::al */, $noreg, debug-location !56 + renamable $r0, dead $cpsr = nsw tADDi8 killed renamable $r0, 1, 14 /* CC::al */, $noreg, debug-location !57 + 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, !45, !DIExpression(), debug-location !46 + DBG_VALUE $r2, $noreg, !44, !DIExpression(), debug-location !46 + DBG_VALUE $r1, $noreg, !43, !DIExpression(), debug-location !46 + DBG_VALUE $r0, $noreg, !42, !DIExpression(), debug-location !46 + renamable $r0 = t2MOVi -1, 14 /* CC::al */, $noreg, $noreg + DBG_VALUE $r0, $noreg, !42, !DIExpression(DW_OP_LLVM_entry_value, 1), debug-location !46 + tBX_RET 14 /* CC::al */, $noreg, implicit killed $r0, debug-location !59 + +...