diff --git a/llvm/lib/CodeGen/RegAllocGreedy.cpp b/llvm/lib/CodeGen/RegAllocGreedy.cpp index 031cd7e57857cb..312b87935f46d5 100644 --- a/llvm/lib/CodeGen/RegAllocGreedy.cpp +++ b/llvm/lib/CodeGen/RegAllocGreedy.cpp @@ -1902,7 +1902,8 @@ unsigned RAGreedy::tryLastChanceRecoloring(const LiveInterval &VirtReg, const LiveInterval *LI; MCRegister PhysReg; std::tie(LI, PhysReg) = RecolorStack[I]; - Matrix->assign(*LI, PhysReg); + if (!LI->empty() && !MRI->reg_nodbg_empty(LI->reg())) + Matrix->assign(*LI, PhysReg); } // Pop the stack of recoloring attempts. diff --git a/llvm/test/CodeGen/AArch64/regalloc-last-chance-recolor-with-split.mir b/llvm/test/CodeGen/AArch64/regalloc-last-chance-recolor-with-split.mir new file mode 100644 index 00000000000000..8ae00a2fc97510 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/regalloc-last-chance-recolor-with-split.mir @@ -0,0 +1,690 @@ +# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py +# RUN: llc -mattr="+reserve-x28" --run-pass=greedy,virtregrewriter -verify-machineinstrs %s -o - | FileCheck %s + +# CHECK-LABEL: ham + +--- | + target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" + target triple = "aarch64-none-linux-gnu" + + define void @ham(i8 addrspace(1)* %arg) gc "statepoint-example" { + bb: + br i1 undef, label %bb27.preheader, label %bb23 + + bb27.preheader: ; preds = %bb + br label %bb27 + + bb23: ; preds = %bb + unreachable + + bb27: ; preds = %bb115, %bb27.preheader + br i1 undef, label %bb41, label %bb85 + + bb41: ; preds = %bb27 + br i1 undef, label %bb48, label %bb42 + + bb42: ; preds = %bb41 + br label %bb48 + + bb48: ; preds = %bb42, %bb41 + br label %bb79 + + bb79: ; preds = %bb79, %bb48 + br i1 undef, label %bb81, label %bb79 + + bb81: ; preds = %bb79 + br i1 undef, label %bb83, label %bb82 + + bb82: ; preds = %bb81 + br label %bb83 + + bb83: ; preds = %bb82, %bb81 + br i1 undef, label %bb105, label %bb96 + + bb85: ; preds = %bb27 + br i1 undef, label %bb86, label %bb90 + + bb86: ; preds = %bb85 + unreachable + + bb90: ; preds = %bb85 + unreachable + + bb94: ; preds = %bb115 + unreachable + + bb96: ; preds = %bb83 + br label %bb105 + + bb105: ; preds = %bb96, %bb83 + br i1 undef, label %bb120, label %bb115 + + bb115: ; preds = %bb105 + br i1 undef, label %bb94, label %bb27 + + bb120: ; preds = %bb105 + unreachable + } + + declare i8 addrspace(1)* @bar(i64, i64, i64, i32*) + declare void @wombat() + declare void @blam.1() + declare void @blam(i32) + +... +--- +name: ham +alignment: 4 +exposesReturnsTwice: false +legalized: false +regBankSelected: false +selected: false +failedISel: false +tracksRegLiveness: true +hasWinCFI: false +callsEHReturn: false +callsUnwindInit: false +hasEHCatchret: false +hasEHScopes: false +hasEHFunclets: false +failsVerification: false +tracksDebugUserValues: false +registers: + - { id: 0, class: gpr32, preferred-register: '' } + - { id: 1, class: gpr64, preferred-register: '' } + - { id: 2, class: gpr32, preferred-register: '' } + - { id: 3, class: gpr32, preferred-register: '' } + - { id: 4, class: gpr64all, preferred-register: '' } + - { id: 5, class: gpr64sp, preferred-register: '' } + - { id: 6, class: gpr64all, preferred-register: '' } + - { id: 7, class: gpr64all, preferred-register: '' } + - { id: 8, class: gpr64all, preferred-register: '' } + - { id: 9, class: gpr64all, preferred-register: '' } + - { id: 10, class: gpr64sp, preferred-register: '' } + - { id: 11, class: gpr64sp, preferred-register: '' } + - { id: 12, class: gpr32sp, preferred-register: '' } + - { id: 13, class: gpr32, preferred-register: '' } + - { id: 14, class: gpr64sp, preferred-register: '' } + - { id: 15, class: gpr64sp, preferred-register: '' } + - { id: 16, class: gpr64all, preferred-register: '' } + - { id: 17, class: gpr64sp, preferred-register: '' } + - { id: 18, class: gpr64sp, preferred-register: '' } + - { id: 19, class: gpr64all, preferred-register: '' } + - { id: 20, class: gpr64all, preferred-register: '' } + - { id: 21, class: gpr64all, preferred-register: '' } + - { id: 22, class: gpr64all, preferred-register: '' } + - { id: 23, class: gpr64all, preferred-register: '' } + - { id: 24, class: gpr64all, preferred-register: '' } + - { id: 25, class: gpr64sp, preferred-register: '' } + - { id: 26, class: gpr64all, preferred-register: '' } + - { id: 27, class: gpr64sp, preferred-register: '' } + - { id: 28, class: gpr64sp, preferred-register: '' } + - { id: 29, class: gpr64sp, preferred-register: '' } + - { id: 30, class: gpr64all, preferred-register: '' } + - { id: 31, class: gpr64all, preferred-register: '' } + - { id: 32, class: gpr64sp, preferred-register: '' } + - { id: 33, class: gpr64sp, preferred-register: '' } + - { id: 34, class: gpr64, preferred-register: '' } + - { id: 35, class: gpr64all, preferred-register: '' } + - { id: 36, class: gpr64all, preferred-register: '' } + - { id: 37, class: gpr32common, preferred-register: '' } + - { id: 38, class: gpr64, preferred-register: '' } + - { id: 39, class: gpr32, preferred-register: '' } + - { id: 40, class: gpr64, preferred-register: '' } + - { id: 41, class: gpr32, preferred-register: '' } + - { id: 42, class: gpr64, preferred-register: '' } + - { id: 43, class: gpr64all, preferred-register: '' } + - { id: 44, class: gpr64all, preferred-register: '' } + - { id: 45, class: gpr64, preferred-register: '' } + - { id: 46, class: gpr64all, preferred-register: '' } + - { id: 47, class: gpr64all, preferred-register: '' } + - { id: 48, class: gpr64all, preferred-register: '' } + - { id: 49, class: gpr64, preferred-register: '' } + - { id: 50, class: gpr64all, preferred-register: '' } + - { id: 51, class: gpr64all, preferred-register: '' } + - { id: 52, class: gpr32, preferred-register: '' } + - { id: 53, class: gpr64all, preferred-register: '' } + - { id: 54, class: gpr64all, preferred-register: '' } + - { id: 55, class: gpr64, preferred-register: '' } + - { id: 56, class: gpr64all, preferred-register: '' } + - { id: 57, class: gpr32all, preferred-register: '' } + - { id: 58, class: gpr64all, preferred-register: '' } + - { id: 59, class: gpr32all, preferred-register: '' } + - { id: 60, class: gpr64all, preferred-register: '' } + - { id: 61, class: gpr64, preferred-register: '' } + - { id: 62, class: gpr64all, preferred-register: '' } + - { id: 63, class: gpr32all, preferred-register: '' } + - { id: 64, class: gpr64all, preferred-register: '' } + - { id: 65, class: gpr32all, preferred-register: '' } + - { id: 66, class: gpr64all, preferred-register: '' } + - { id: 67, class: gpr64, preferred-register: '' } + - { id: 68, class: gpr64all, preferred-register: '' } + - { id: 69, class: gpr32all, preferred-register: '' } + - { id: 70, class: gpr32, preferred-register: '' } + - { id: 71, class: gpr32all, preferred-register: '' } + - { id: 72, class: gpr64all, preferred-register: '' } + - { id: 73, class: gpr64all, preferred-register: '' } + - { id: 74, class: gpr64, preferred-register: '' } + - { id: 75, class: gpr64sp, preferred-register: '' } + - { id: 76, class: gpr32, preferred-register: '' } + - { id: 77, class: gpr64, preferred-register: '' } + - { id: 78, class: gpr64all, preferred-register: '' } + - { id: 79, class: gpr64all, preferred-register: '' } + - { id: 80, class: gpr64all, preferred-register: '' } + - { id: 81, class: gpr64all, preferred-register: '' } + - { id: 82, class: gpr64, preferred-register: '' } + - { id: 83, class: gpr32, preferred-register: '' } + - { id: 84, class: gpr32, preferred-register: '' } + - { id: 85, class: gpr32, preferred-register: '' } + - { id: 86, class: gpr32, preferred-register: '' } + - { id: 87, class: gpr32, preferred-register: '' } + - { id: 88, class: gpr64sp, preferred-register: '' } + - { id: 89, class: gpr32, preferred-register: '' } + - { id: 90, class: gpr32, preferred-register: '' } + - { id: 91, class: gpr32all, preferred-register: '' } + - { id: 92, class: gpr32, preferred-register: '' } + - { id: 93, class: gpr64, preferred-register: '' } + - { id: 94, class: gpr64all, preferred-register: '' } + - { id: 95, class: gpr64, preferred-register: '' } + - { id: 96, class: gpr32, preferred-register: '' } + - { id: 97, class: gpr32, preferred-register: '' } + - { id: 98, class: gpr64all, preferred-register: '' } + - { id: 99, class: gpr64all, preferred-register: '' } + - { id: 100, class: gpr64all, preferred-register: '' } + - { id: 101, class: gpr64all, preferred-register: '' } + - { id: 102, class: gpr64, preferred-register: '' } + - { id: 103, class: gpr64sp, preferred-register: '' } + - { id: 104, class: gpr64all, preferred-register: '' } + - { id: 105, class: gpr32, preferred-register: '' } + - { id: 106, class: gpr64, preferred-register: '' } + - { id: 107, class: gpr32, preferred-register: '' } + - { id: 108, class: gpr32, preferred-register: '' } + - { id: 109, class: gpr64all, preferred-register: '' } + - { id: 110, class: gpr64all, preferred-register: '' } + - { id: 111, class: gpr64, preferred-register: '' } + - { id: 112, class: gpr64sp, preferred-register: '' } + - { id: 113, class: gpr64sp, preferred-register: '' } + - { id: 114, class: gpr32, preferred-register: '' } + - { id: 115, class: gpr64sp, preferred-register: '' } + - { id: 116, class: gpr32, preferred-register: '' } + - { id: 117, class: gpr32, preferred-register: '' } + - { id: 118, class: gpr32common, preferred-register: '' } + - { id: 119, class: gpr64, preferred-register: '' } + - { id: 120, class: gpr32, preferred-register: '' } + - { id: 121, class: gpr32, preferred-register: '' } + - { id: 122, class: gpr64sp, preferred-register: '' } + - { id: 123, class: gpr64sp, preferred-register: '' } + - { id: 124, class: gpr64sp, preferred-register: '' } + - { id: 125, class: gpr64sp, preferred-register: '' } + - { id: 126, class: gpr64, preferred-register: '' } + - { id: 127, class: gpr64sp, preferred-register: '' } + - { id: 128, class: gpr64all, preferred-register: '' } + - { id: 129, class: gpr64common, preferred-register: '' } + - { id: 130, class: gpr32common, preferred-register: '' } + - { id: 131, class: gpr32all, preferred-register: '' } + - { id: 132, class: gpr64sp, preferred-register: '' } + - { id: 133, class: gpr64all, preferred-register: '' } + - { id: 134, class: gpr64all, preferred-register: '' } + - { id: 135, class: gpr64all, preferred-register: '' } + - { id: 136, class: gpr64all, preferred-register: '' } + - { id: 137, class: gpr64all, preferred-register: '' } + - { id: 138, class: gpr64all, preferred-register: '' } + - { id: 139, class: gpr64all, preferred-register: '' } + - { id: 140, class: gpr64all, preferred-register: '' } + - { id: 141, class: gpr64sp, preferred-register: '' } + - { id: 142, class: gpr64sp, preferred-register: '' } + - { id: 143, class: gpr64, preferred-register: '' } + - { id: 144, class: gpr64all, preferred-register: '' } + - { id: 145, class: gpr64all, preferred-register: '' } +liveins: + - { reg: '$x0', virtual-reg: '%38' } +frameInfo: + isFrameAddressTaken: false + isReturnAddressTaken: false + hasStackMap: false + hasPatchPoint: false + stackSize: 0 + offsetAdjustment: 0 + maxAlignment: 1 + adjustsStack: true + hasCalls: true + stackProtector: '' + functionContext: '' + maxCallFrameSize: 0 + cvBytesOfCalleeSavedRegisters: 0 + hasOpaqueSPAdjustment: false + hasVAStart: false + hasMustTailInVarArgFunc: false + hasTailCall: false + localFrameSize: 0 + savePoint: '' + restorePoint: '' +fixedStack: [] +stack: [] +callSites: [] +debugValueSubstitutions: [] +constants: [] +machineFunctionInfo: {} +body: | + ; CHECK-LABEL: name: ham + ; CHECK: bb.0.bb: + ; CHECK-NEXT: successors: %bb.1(0x80000000), %bb.2(0x00000000) + ; CHECK-NEXT: liveins: $x0 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: renamable $x19 = COPY $x0 + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: dead $w1 = MOVi32imm 526, implicit-def $x1 + ; CHECK-NEXT: dead $w2 = MOVi32imm 2, implicit-def $x2 + ; CHECK-NEXT: renamable $w21 = MOVi32imm 2, implicit-def $x21 + ; CHECK-NEXT: renamable $x19 = STATEPOINT 2882400000, 0, 4, @bar, undef $x0, $x1, $x2, undef $x3, 2, 0, 2, 4, 2, 39, 2, 0, 2, 1, 2, 0, 2, 42, 2, 2, 2, 14, 2, 0, 2, 3, 2, 400, 2, 3, 2, 400, 2, 0, killed renamable $x19, 2, 7, 2, 0, 2, 3, 2, 95, 2, 7, 2, 0, 2, 3, 2, -11, 2, 3, 2, -8280, 2, 3, 2, 45, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 7, 2, 0, 2, 7, 2, 0, 2, 1, renamable $x19(tied-def 0), 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: renamable $x20 = COPY $x0 + ; CHECK-NEXT: DMB 11 + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: renamable $x20, renamable $x19 = STATEPOINT 2, 4, 1, undef renamable $x0, undef $x0, 2, 0, 2, 4, 2, 35, 2, 0, 2, 2, 2, 0, 2, 48, 2, 0, 2, 14, 2, 0, 2, 0, killed renamable $x19, 2, 7, 2, 0, 2, 3, 2, 95, 2, 7, 2, 0, 2, 3, 2, -11, 2, 3, 2, -8280, 2, 3, 2, 45, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 0, killed renamable $x20, 2, 7, 2, 0, 2, 2, renamable $x20(tied-def 0), renamable $x19(tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead $x0, implicit-def dead early-clobber $lr + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: $w1 = MOVi32imm 33333 + ; CHECK-NEXT: renamable $x20, renamable $x19 = STATEPOINT 2, 4, 2, undef renamable $x0, undef $x0, $w1, 2, 0, 2, 0, 2, 41, 2, 0, 2, 2, 2, 0, 2, 73, 2, 3, 2, 14, 2, 0, 2, 3, 2, 95, 2, 0, 2, 4278124286, 2, 0, 2, 4278124286, 2, 0, killed renamable $x19, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 3, 2, -11, 2, 3, 2, -8280, 2, 3, 2, 45, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 0, killed renamable $x20, 2, 7, 2, 0, 2, 3, renamable $x20(tied-def 0), renamable $x19(tied-def 1), 2, 4278124286, 2, 0, 2, 3, 0, 0, 1, 1, 2, 2, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead $w0, implicit-def dead early-clobber $lr + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: renamable $x20, renamable $x19 = STATEPOINT 2, 4, 2, undef renamable $x0, undef $x0, undef $w1, 2, 0, 2, 0, 2, 39, 2, 0, 2, 2, 2, 0, 2, 78, 2, 2, 2, 14, 2, 0, 2, 3, 2, 95, 2, 0, 2, 4278124286, 2, 0, killed renamable $x19, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 3, 2, -11, 2, 3, 2, -8280, 2, 3, 2, 45, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 0, killed renamable $x20, 2, 7, 2, 0, 2, 3, renamable $x20(tied-def 0), renamable $x19(tied-def 1), 2, 4278124286, 2, 0, 2, 3, 0, 0, 1, 1, 2, 2, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead $w0, implicit-def dead early-clobber $lr + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: renamable $x20, renamable $x19 = STATEPOINT 2, 4, 2, undef renamable $x0, undef $x0, undef $w1, 2, 0, 2, 0, 2, 37, 2, 0, 2, 2, 2, 0, 2, 83, 2, 1, 2, 14, 2, 0, 2, 3, 2, 95, 2, 0, killed renamable $x19, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 3, 2, -11, 2, 3, 2, -8280, 2, 3, 2, 45, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 0, killed renamable $x20, 2, 7, 2, 0, 2, 2, renamable $x20(tied-def 0), renamable $x19(tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead $w0, implicit-def dead early-clobber $lr + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: renamable $x19, dead renamable $x20 = STATEPOINT 2, 4, 1, undef renamable $x0, undef $w0, 2, 0, 2, 0, 2, 35, 2, 0, 2, 2, 2, 0, 2, 95, 2, 0, 2, 14, 2, 0, 2, 0, killed renamable $x19, 2, 7, 2, 0, 2, 3, 2, 95, 2, 7, 2, 0, 2, 3, 2, -11, 2, 3, 2, -8280, 2, 3, 2, 45, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 0, killed renamable $x20, 2, 7, 2, 0, 2, 2, renamable $x19(tied-def 0), renamable $x20(tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr + ; CHECK-NEXT: STRXui killed renamable $x19, %stack.0, 0 :: (store (s64) into %stack.0) + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: CBNZW $wzr, %bb.2 + ; CHECK-NEXT: B %bb.1 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.1.bb27.preheader: + ; CHECK-NEXT: successors: %bb.3(0x80000000) + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: renamable $x24 = LDRXui undef renamable $x8, 0 :: (load unordered (s64) from `i64 addrspace(1)* undef`, addrspace 1) + ; CHECK-NEXT: renamable $w21 = MOVi32imm -8280 + ; CHECK-NEXT: renamable $w23 = MOVi32imm -6 + ; CHECK-NEXT: renamable $w25 = MOVi32imm 3, implicit-def $x25 + ; CHECK-NEXT: renamable $w20 = MOVi32imm 2143289344 + ; CHECK-NEXT: renamable $x22 = IMPLICIT_DEF + ; CHECK-NEXT: dead renamable $x8 = IMPLICIT_DEF + ; CHECK-NEXT: renamable $x26 = IMPLICIT_DEF + ; CHECK-NEXT: renamable $x19 = IMPLICIT_DEF + ; CHECK-NEXT: renamable $x27 = IMPLICIT_DEF + ; CHECK-NEXT: renamable $x8 = IMPLICIT_DEF + ; CHECK-NEXT: KILL killed renamable $x8 + ; CHECK-NEXT: renamable $x8 = IMPLICIT_DEF + ; CHECK-NEXT: KILL killed renamable $x8 + ; CHECK-NEXT: renamable $w10 = MOVi32imm 2, implicit-def $x10 + ; CHECK-NEXT: B %bb.3 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.2.bb23: + ; CHECK-NEXT: successors: + ; CHECK-NEXT: liveins: $x21 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: renamable $w19 = MOVi32imm 95 + ; CHECK-NEXT: STATEPOINT 2882400000, 0, 0, @wombat, 2, 0, 2, 0, 2, 39, 2, 0, 2, 1, 2, 0, 2, 117, 2, 2, 2, 14, 2, 0, 2, 3, 2, 3, 2, 3, 2, 109, 2, 0, 1, 8, %stack.0, 0, 2, 7, 2, 0, 2, 3, killed renamable $w19, 2, 3, renamable $w21, 2, 3, 2, 3, 2, 3, 2, -8280, 2, 7, 2, 0, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 0, 2, 4278124286, 2, 7, 2, 0, 2, 2, 1, 8, %stack.0, 0, 2, 4278124286, 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr, implicit killed $x21 :: (load store (s64) on %stack.0) + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.3.bb27: + ; CHECK-NEXT: successors: %bb.4(0x80000000), %bb.13(0x00000000) + ; CHECK-NEXT: liveins: $w20, $w21, $w23, $x10, $x19, $x22, $x24, $x25, $x26, $x27 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: renamable $fp = nuw nsw ADDXri renamable $x25, 1, 0 + ; CHECK-NEXT: CBNZW $wzr, %bb.13 + ; CHECK-NEXT: B %bb.4 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.4.bb41: + ; CHECK-NEXT: successors: %bb.5(0x7ffff777), %bb.6(0x00000889) + ; CHECK-NEXT: liveins: $fp, $w20, $w21, $w23, $x10, $x19, $x22, $x24, $x25, $x26, $x27 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: CBZW $wzr, %bb.6 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.5: + ; CHECK-NEXT: successors: %bb.7(0x80000000) + ; CHECK-NEXT: liveins: $fp, $w20, $w23, $x10, $x19, $x22, $x24, $x25, $x26, $x27 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: B %bb.7 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.6.bb42: + ; CHECK-NEXT: successors: %bb.7(0x80000000) + ; CHECK-NEXT: liveins: $fp, $w21, $w23, $x24, $x25, $x27 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: renamable $x19 = LDRXui %stack.0, 0 :: (load (s64) from %stack.0) + ; CHECK-NEXT: renamable $w26 = MOVi32imm 95 + ; CHECK-NEXT: renamable $x22 = LDRXui %stack.1, 0 :: (load (s64) from %stack.1) + ; CHECK-NEXT: renamable $w20 = MOVi32imm 2, implicit-def $x20 + ; CHECK-NEXT: renamable $x27, renamable $x22, dead renamable $x19 = STATEPOINT 2882400000, 0, 0, @wombat, 2, 0, 2, 0, 2, 35, 2, 0, 2, 1, 2, 0, 2, 125, 2, 0, 2, 14, 2, 0, 2, 0, killed renamable $x19, 2, 7, 2, 0, 2, 3, killed renamable $w26, 2, 3, renamable $w20, 2, 3, 2, 4278124286, 2, 3, killed renamable $w21, 2, 7, 2, 0, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 2, 2, 7, 2, 0, 2, 3, 2, 4278124286, 2, 0, killed renamable $x22, 2, 7, 2, 0, 2, 3, killed renamable $x27(tied-def 0), renamable $x22(tied-def 1), renamable $x19(tied-def 2), 2, 0, 2, 3, 0, 0, 1, 1, 2, 2, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr, implicit killed $x20 + ; CHECK-NEXT: renamable $w20 = MOVi32imm 2143289344 + ; CHECK-NEXT: renamable $w10 = MOVi32imm 2, implicit-def $x10 + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: renamable $x19 = COPY $xzr + ; CHECK-NEXT: STRXui renamable $x22, %stack.1, 0 :: (store (s64) into %stack.1) + ; CHECK-NEXT: dead renamable $x8 = nuw ADDXri killed renamable $x22, 24, 0 + ; CHECK-NEXT: renamable $x22 = IMPLICIT_DEF + ; CHECK-NEXT: renamable $x26 = IMPLICIT_DEF + ; CHECK-NEXT: renamable $x8 = IMPLICIT_DEF + ; CHECK-NEXT: KILL killed renamable $x8 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.7.bb48: + ; CHECK-NEXT: successors: %bb.8(0x80000000) + ; CHECK-NEXT: liveins: $fp, $w20, $w23, $x10, $x19, $x22, $x24, $x25, $x26, $x27 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.8.bb79: + ; CHECK-NEXT: successors: %bb.9(0x04000000), %bb.8(0x7c000000) + ; CHECK-NEXT: liveins: $fp, $w20, $w23, $x10, $x19, $x22, $x24, $x25, $x26, $x27 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: CBNZW $wzr, %bb.8 + ; CHECK-NEXT: B %bb.9 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.9.bb81: + ; CHECK-NEXT: successors: %bb.11(0x78787f1d), %bb.10(0x078780e3) + ; CHECK-NEXT: liveins: $fp, $w20, $w23, $x10, $x19, $x22, $x24, $x25, $x26, $x27 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: STRXui $xzr, renamable $x22, 0 :: (store unordered (s64), addrspace 1) + ; CHECK-NEXT: CBNZW $wzr, %bb.11 + ; CHECK-NEXT: B %bb.10 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.10.bb82: + ; CHECK-NEXT: successors: %bb.11(0x80000000) + ; CHECK-NEXT: liveins: $fp, $w20, $w23, $x19, $x22, $x24, $x25, $x26, $x27 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: BL @blam.1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp + ; CHECK-NEXT: renamable $w10 = MOVi32imm 2, implicit-def $x10 + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.11.bb83: + ; CHECK-NEXT: successors: %bb.12(0x7ffff777), %bb.17(0x00000889) + ; CHECK-NEXT: liveins: $fp, $w20, $w23, $x10, $x19, $x22, $x24, $x25, $x26, $x27 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: CBZW $wzr, %bb.17 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.12: + ; CHECK-NEXT: successors: %bb.18(0x80000000) + ; CHECK-NEXT: liveins: $fp, $w20, $w23, $x10, $x19, $x22, $x24, $x25, $x26, $x27 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: B %bb.18 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.13.bb85: + ; CHECK-NEXT: successors: %bb.14(0x40000000), %bb.15(0x40000000) + ; CHECK-NEXT: liveins: $fp, $w21, $x10 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: CBNZW $wzr, %bb.15 + ; CHECK-NEXT: B %bb.14 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.14.bb86: + ; CHECK-NEXT: successors:{{ $}} + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: $w0 = MOVi32imm 10 + ; CHECK-NEXT: STATEPOINT 2882400000, 0, 1, @blam, $w0, 2, 0, 2, 0, 2, 41, 2, 0, 2, 1, 2, 0, 2, 237, 2, 3, 2, 14, 2, 0, 2, 0, 2, 0, 2, 3, 2, 4278124286, 2, 3, 2, 4278124286, 2, 0, 2, 0, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 0, 2, 0, 2, 7, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.15.bb90: + ; CHECK-NEXT: successors: + ; CHECK-NEXT: liveins: $fp, $w21, $x10 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: $w0 = MOVi32imm 12 + ; CHECK-NEXT: renamable $w8 = MOVi32imm 95 + ; CHECK-NEXT: STATEPOINT 2882400000, 0, 1, @blam, $w0, 2, 129, 2, 0, 2, 43, 2, 0, 2, 1, 2, 0, 2, 201, 2, 4, 2, 14, 2, 0, 2, 0, 2, 4278124286, 2, 3, renamable $w29, 2, 0, 2, 4278124286, 2, 3, renamable $w29, 2, 0, 1, 8, %stack.0, 0, 2, 7, 2, 0, 2, 3, killed renamable $w8, 2, 3, renamable $w10, 2, 3, 2, 4278124286, 2, 3, killed renamable $w21, 2, 7, 2, 0, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 2, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, 1, 8, %stack.1, 0, 2, 7, 2, 0, 2, 3, 2, 4278124286, 1, 8, %stack.0, 0, 1, 8, %stack.1, 0, 2, 0, 2, 3, 0, 0, 1, 1, 2, 2, csr_aarch64_allregs, implicit-def $sp, implicit-def dead early-clobber $lr, implicit killed $x10, implicit killed $fp :: (load store (s64) on %stack.0), (load store (s64) on %stack.1) + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.16.bb94: + ; CHECK-NEXT: successors:{{ $}} + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: $w0 = MOVi32imm 10 + ; CHECK-NEXT: STATEPOINT 2882400000, 0, 1, @blam, $w0, 2, 0, 2, 0, 2, 39, 2, 0, 2, 1, 2, 0, 2, 395, 2, 2, 2, 14, 2, 0, 2, 0, 2, 0, 2, 3, 2, 0, 2, 0, 2, 0, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 0, 2, 0, 2, 7, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.17.bb96: + ; CHECK-NEXT: successors: %bb.18(0x80000000) + ; CHECK-NEXT: liveins: $fp, $w23, $x24, $x25, $x27 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: renamable $x19 = LDRXui %stack.0, 0 :: (load (s64) from %stack.0) + ; CHECK-NEXT: renamable $w21 = MOVi32imm 2, implicit-def $x21 + ; CHECK-NEXT: renamable $w22 = MOVi32imm 95 + ; CHECK-NEXT: renamable $x20 = LDRXui %stack.1, 0 :: (load (s64) from %stack.1) + ; CHECK-NEXT: renamable $x26 = LDRXui %stack.2, 0 :: (load (s64) from %stack.2) + ; CHECK-NEXT: renamable $x26, renamable $x27, renamable $x20, dead renamable $x19 = STATEPOINT 2882400000, 0, 0, @wombat, 2, 0, 2, 0, 2, 35, 2, 0, 2, 1, 2, 0, 2, 250, 2, 0, 2, 14, 2, 0, 2, 0, killed renamable $x19, 2, 7, 2, 0, 2, 3, killed renamable $w22, 2, 3, renamable $w21, 2, 3, 2, 4278124286, 2, 3, renamable $w21, 2, 7, 2, 0, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 0, 2, 7, 2, 0, 2, 3, 2, 4278124286, 2, 0, killed renamable $x20, 2, 7, 2, 0, 2, 4, killed renamable $x26(tied-def 0), killed renamable $x27(tied-def 1), renamable $x20(tied-def 2), renamable $x19(tied-def 3), 2, 0, 2, 4, 0, 0, 1, 1, 2, 2, 3, 3, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr, implicit killed $x21 + ; CHECK-NEXT: renamable $w10 = MOVi32imm 2, implicit-def $x10 + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: STRXui renamable $x20, %stack.1, 0 :: (store (s64) into %stack.1) + ; CHECK-NEXT: dead renamable $x8 = nuw ADDXri killed renamable $x20, 24, 0 + ; CHECK-NEXT: renamable $w20 = MOVi32imm 2143289344 + ; CHECK-NEXT: STRXui renamable $x26, %stack.2, 0 :: (store (s64) into %stack.2) + ; CHECK-NEXT: renamable $x22 = nuw ADDXri killed renamable $x26, 848, 0 + ; CHECK-NEXT: renamable $x26 = IMPLICIT_DEF + ; CHECK-NEXT: renamable $x19 = IMPLICIT_DEF + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.18.bb105: + ; CHECK-NEXT: successors: %bb.20(0x00000000), %bb.19(0x80000000) + ; CHECK-NEXT: liveins: $fp, $w20, $w23, $x10, $x19, $x22, $x24, $x25, $x26, $x27 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: STRWui renamable $w24, renamable $x19, 0 :: (store unordered (s32), addrspace 1) + ; CHECK-NEXT: STRWui renamable $w20, renamable $x26, 0 :: (store unordered (s32), align 8, addrspace 1) + ; CHECK-NEXT: CBZX renamable $x27, %bb.20 + ; CHECK-NEXT: B %bb.19 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.19.bb115: + ; CHECK-NEXT: successors: %bb.16(0x00000000), %bb.3(0x80000000) + ; CHECK-NEXT: liveins: $fp, $w20, $w23, $x10, $x19, $x22, $x24, $x25, $x26, $x27 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: renamable $x8 = COPY $xzr + ; CHECK-NEXT: renamable $w9 = LDRWui renamable $x8, 0 :: (load unordered (s32) from `i32 addrspace(1)* null`, addrspace 1) + ; CHECK-NEXT: renamable $w9 = MADDWrrr killed renamable $w9, renamable $w10, $wzr + ; CHECK-NEXT: renamable $w23 = nsw SUBWri killed renamable $w23, 2, 0 + ; CHECK-NEXT: dead $xzr = SUBSXri killed renamable $x25, 107, 0, implicit-def $nzcv + ; CHECK-NEXT: renamable $x25 = COPY killed renamable $fp + ; CHECK-NEXT: renamable $w21 = MOVi32imm 2 + ; CHECK-NEXT: STRWui killed renamable $w9, killed renamable $x8, 0 :: (store unordered (s32) into `i32 addrspace(1)* null`, addrspace 1) + ; CHECK-NEXT: Bcc 8, %bb.16, implicit killed $nzcv + ; CHECK-NEXT: B %bb.3 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: bb.20.bb120: + ; CHECK-NEXT: liveins: $x10 + ; CHECK-NEXT: {{ $}} + ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + ; CHECK-NEXT: $w0 = MOVi32imm 10 + ; CHECK-NEXT: STATEPOINT 2882400000, 0, 1, @blam, $w0, 2, 129, 2, 0, 2, 39, 2, 0, 2, 1, 2, 0, 2, 272, 2, 2, 2, 14, 2, 0, 2, 0, 2, 0, 2, 3, renamable $w10, 2, 0, 2, 0, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 0, 2, 0, 2, 7, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_aarch64_allregs, implicit-def $sp, implicit-def dead early-clobber $lr, implicit killed $x10 + ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + bb.0.bb: + successors: %bb.1(0x80000000), %bb.2(0x00000000) + liveins: $x0 + + %49:gpr64 = COPY $x0 + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + dead $w1 = MOVi32imm 526, implicit-def $x1 + dead $w2 = MOVi32imm 2, implicit-def $x2 + undef %42.sub_32:gpr64 = MOVi32imm 2 + %49:gpr64 = STATEPOINT 2882400000, 0, 4, @bar, undef $x0, killed $x1, killed $x2, undef $x3, 2, 0, 2, 4, 2, 39, 2, 0, 2, 1, 2, 0, 2, 42, 2, 2, 2, 14, 2, 0, 2, 3, 2, 400, 2, 3, 2, 400, 2, 0, %49, 2, 7, 2, 0, 2, 3, 2, 95, 2, 7, 2, 0, 2, 3, 2, -11, 2, 3, 2, -8280, 2, 3, 2, 45, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 7, 2, 0, 2, 7, 2, 0, 2, 1, %49(tied-def 0), 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def $x0, implicit-def dead early-clobber $lr + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + %54:gpr64all = COPY $x0 + DMB 11 + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + %54:gpr64all, %49:gpr64 = STATEPOINT 2, 4, 1, undef %50:gpr64all, undef $x0, 2, 0, 2, 4, 2, 35, 2, 0, 2, 2, 2, 0, 2, 48, 2, 0, 2, 14, 2, 0, 2, 0, %49, 2, 7, 2, 0, 2, 3, 2, 95, 2, 7, 2, 0, 2, 3, 2, -11, 2, 3, 2, -8280, 2, 3, 2, 45, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 0, %54, 2, 7, 2, 0, 2, 2, %54(tied-def 0), %49(tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead $x0, implicit-def dead early-clobber $lr + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + $w1 = MOVi32imm 33333 + %54:gpr64all, %49:gpr64 = STATEPOINT 2, 4, 2, undef %56:gpr64all, undef $x0, killed $w1, 2, 0, 2, 0, 2, 41, 2, 0, 2, 2, 2, 0, 2, 73, 2, 3, 2, 14, 2, 0, 2, 3, 2, 95, 2, 0, 2, 4278124286, 2, 0, 2, 4278124286, 2, 0, %49, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 3, 2, -11, 2, 3, 2, -8280, 2, 3, 2, 45, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 0, %54, 2, 7, 2, 0, 2, 3, %54(tied-def 0), %49(tied-def 1), 2, 4278124286, 2, 0, 2, 3, 0, 0, 1, 1, 2, 2, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead $w0, implicit-def dead early-clobber $lr + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + %54:gpr64all, %49:gpr64 = STATEPOINT 2, 4, 2, undef %62:gpr64all, undef $x0, undef $w1, 2, 0, 2, 0, 2, 39, 2, 0, 2, 2, 2, 0, 2, 78, 2, 2, 2, 14, 2, 0, 2, 3, 2, 95, 2, 0, 2, 4278124286, 2, 0, %49, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 3, 2, -11, 2, 3, 2, -8280, 2, 3, 2, 45, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 0, %54, 2, 7, 2, 0, 2, 3, %54(tied-def 0), %49(tied-def 1), 2, 4278124286, 2, 0, 2, 3, 0, 0, 1, 1, 2, 2, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead $w0, implicit-def dead early-clobber $lr + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + %54:gpr64all, %49:gpr64 = STATEPOINT 2, 4, 2, undef %68:gpr64all, undef $x0, undef $w1, 2, 0, 2, 0, 2, 37, 2, 0, 2, 2, 2, 0, 2, 83, 2, 1, 2, 14, 2, 0, 2, 3, 2, 95, 2, 0, %49, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 3, 2, -11, 2, 3, 2, -8280, 2, 3, 2, 45, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 0, %54, 2, 7, 2, 0, 2, 2, %54(tied-def 0), %49(tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead $w0, implicit-def dead early-clobber $lr + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + %0:gpr32 = MOVi32imm 95 + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + %49:gpr64, dead %54:gpr64all = STATEPOINT 2, 4, 1, undef %73:gpr64all, undef $w0, 2, 0, 2, 0, 2, 35, 2, 0, 2, 2, 2, 0, 2, 95, 2, 0, 2, 14, 2, 0, 2, 0, %49, 2, 7, 2, 0, 2, 3, 2, 95, 2, 7, 2, 0, 2, 3, 2, -11, 2, 3, 2, -8280, 2, 3, 2, 45, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 0, %54, 2, 7, 2, 0, 2, 2, %49(tied-def 0), %54(tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + CBNZW $wzr, %bb.2 + B %bb.1 + + bb.1.bb27.preheader: + successors: %bb.3(0x80000000) + + %74:gpr64 = LDRXui undef %75:gpr64sp, 0 :: (load unordered (s64) from `i64 addrspace(1)* undef`, addrspace 1) + %13:gpr32 = MOVi32imm -8280 + %130:gpr32common = MOVi32imm -6 + undef %129.sub_32:gpr64common = MOVi32imm 3 + %114:gpr32 = MOVi32imm 2143289344 + %122:gpr64sp = IMPLICIT_DEF + %123:gpr64sp = IMPLICIT_DEF + %124:gpr64sp = IMPLICIT_DEF + %125:gpr64sp = IMPLICIT_DEF + %126:gpr64 = IMPLICIT_DEF + %127:gpr64sp = IMPLICIT_DEF + %10:gpr64sp = IMPLICIT_DEF + B %bb.3 + + bb.2.bb23: + successors: + + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + dead %49:gpr64 = STATEPOINT 2882400000, 0, 0, @wombat, 2, 0, 2, 0, 2, 39, 2, 0, 2, 1, 2, 0, 2, 117, 2, 2, 2, 14, 2, 0, 2, 3, 2, 3, 2, 3, 2, 109, 2, 0, %49, 2, 7, 2, 0, 2, 3, %0, 2, 3, %42.sub_32, 2, 3, 2, 3, 2, 3, 2, -8280, 2, 7, 2, 0, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 5, 2, 7, 2, 0, 2, 3, 2, 1, 2, 0, 2, 4278124286, 2, 7, 2, 0, 2, 2, %49(tied-def 0), 2, 4278124286, 2, 0, 2, 2, 0, 0, 1, 1, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + + bb.3.bb27: + successors: %bb.4(0x80000000), %bb.11(0x00000000) + + %14:gpr64sp = nuw nsw ADDXri %129, 1, 0 + CBNZW $wzr, %bb.11 + B %bb.4 + + bb.4.bb41: + successors: %bb.19(0x7ffff777), %bb.5(0x00000889) + + CBZW $wzr, %bb.5 + + bb.19: + successors: %bb.6(0x80000000) + + B %bb.6 + + bb.5.bb42: + successors: %bb.6(0x80000000) + + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + %102:gpr64 = COPY %49 + %126:gpr64, %10:gpr64sp, dead %102:gpr64 = STATEPOINT 2882400000, 0, 0, @wombat, 2, 0, 2, 0, 2, 35, 2, 0, 2, 1, 2, 0, 2, 125, 2, 0, 2, 14, 2, 0, 2, 0, %102, 2, 7, 2, 0, 2, 3, %0, 2, 3, %42.sub_32, 2, 3, 2, 4278124286, 2, 3, %13, 2, 7, 2, 0, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 2, 2, 7, 2, 0, 2, 3, 2, 4278124286, 2, 0, %10, 2, 7, 2, 0, 2, 3, %126(tied-def 0), %10(tied-def 1), %102(tied-def 2), 2, 0, 2, 3, 0, 0, 1, 1, 2, 2, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + %125:gpr64sp = COPY $xzr + %123:gpr64sp = nuw ADDXri %10, 24, 0 + %122:gpr64sp = IMPLICIT_DEF + %124:gpr64sp = IMPLICIT_DEF + %127:gpr64sp = IMPLICIT_DEF + + bb.6.bb48: + successors: %bb.7(0x80000000) + + + bb.7.bb79: + successors: %bb.8(0x04000000), %bb.7(0x7c000000) + + CBNZW $wzr, %bb.7 + B %bb.8 + + bb.8.bb81: + successors: %bb.10(0x78787f1d), %bb.9(0x078780e3) + + STRXui $xzr, %122, 0 :: (store unordered (s64), addrspace 1) + CBNZW $wzr, %bb.10 + B %bb.9 + + bb.9.bb82: + successors: %bb.10(0x80000000) + + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + BL @blam.1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + + bb.10.bb83: + successors: %bb.20(0x7ffff777), %bb.15(0x00000889) + + CBZW $wzr, %bb.15 + + bb.20: + successors: %bb.16(0x80000000) + + B %bb.16 + + bb.11.bb85: + successors: %bb.12(0x40000000), %bb.13(0x40000000) + + CBNZW $wzr, %bb.13 + B %bb.12 + + bb.12.bb86: + successors: + + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + $w0 = MOVi32imm 10 + STATEPOINT 2882400000, 0, 1, @blam, $w0, 2, 0, 2, 0, 2, 41, 2, 0, 2, 1, 2, 0, 2, 237, 2, 3, 2, 14, 2, 0, 2, 0, 2, 0, 2, 3, 2, 4278124286, 2, 3, 2, 4278124286, 2, 0, 2, 0, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 0, 2, 0, 2, 7, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + + bb.13.bb90: + successors: + + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + $w0 = MOVi32imm 12 + dead %49:gpr64, dead %10:gpr64sp = STATEPOINT 2882400000, 0, 1, @blam, $w0, 2, 129, 2, 0, 2, 43, 2, 0, 2, 1, 2, 0, 2, 201, 2, 4, 2, 14, 2, 0, 2, 0, 2, 4278124286, 2, 3, %14.sub_32, 2, 0, 2, 4278124286, 2, 3, %14.sub_32, 2, 0, %49, 2, 7, 2, 0, 2, 3, %0, 2, 3, %42.sub_32, 2, 3, 2, 4278124286, 2, 3, %13, 2, 7, 2, 0, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 2, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, %10, 2, 7, 2, 0, 2, 3, 2, 4278124286, %49(tied-def 0), %10(tied-def 1), 2, 0, 2, 3, 0, 0, 1, 1, 2, 2, csr_aarch64_allregs, implicit-def $sp, implicit-def dead early-clobber $lr + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + + bb.14.bb94: + successors: + + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + $w0 = MOVi32imm 10 + STATEPOINT 2882400000, 0, 1, @blam, $w0, 2, 0, 2, 0, 2, 39, 2, 0, 2, 1, 2, 0, 2, 395, 2, 2, 2, 14, 2, 0, 2, 0, 2, 0, 2, 3, 2, 0, 2, 0, 2, 0, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 0, 2, 0, 2, 7, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + + bb.15.bb96: + successors: %bb.16(0x80000000) + + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + %111:gpr64 = COPY %49 + %127:gpr64sp, %126:gpr64, %10:gpr64sp, dead %111:gpr64 = STATEPOINT 2882400000, 0, 0, @wombat, 2, 0, 2, 0, 2, 35, 2, 0, 2, 1, 2, 0, 2, 250, 2, 0, 2, 14, 2, 0, 2, 0, %111, 2, 7, 2, 0, 2, 3, %0, 2, 3, %42.sub_32, 2, 3, 2, 4278124286, 2, 3, %42.sub_32, 2, 7, 2, 0, 2, 3, 2, 230, 2, 7, 2, 0, 2, 4, 2, 0, 2, 7, 2, 0, 2, 3, 2, 4278124286, 2, 0, %10, 2, 7, 2, 0, 2, 4, %127(tied-def 0), %126(tied-def 1), %10(tied-def 2), %111(tied-def 3), 2, 0, 2, 4, 0, 0, 1, 1, 2, 2, 3, 3, csr_aarch64_aapcs, implicit-def $sp, implicit-def dead early-clobber $lr + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + %123:gpr64sp = nuw ADDXri %10, 24, 0 + %122:gpr64sp = nuw ADDXri %127, 848, 0 + %124:gpr64sp = IMPLICIT_DEF + %125:gpr64sp = IMPLICIT_DEF + + bb.16.bb105: + successors: %bb.18(0x00000000), %bb.17(0x80000000) + + STRWui %74.sub_32, %125, 0 :: (store unordered (s32), addrspace 1) + STRWui %114, %124, 0 :: (store unordered (s32), align 8, addrspace 1) + CBZX %126, %bb.18 + B %bb.17 + + bb.17.bb115: + successors: %bb.14(0x00000000), %bb.3(0x80000000) + + %115:gpr64sp = COPY $xzr + %116:gpr32 = LDRWui %115, 0 :: (load unordered (s32) from `i32 addrspace(1)* null`, addrspace 1) + %117:gpr32 = MADDWrrr %116, %42.sub_32, $wzr + %130:gpr32common = nsw SUBWri %130, 2, 0 + dead $xzr = SUBSXri %129, 107, 0, implicit-def $nzcv + %129:gpr64common = COPY %14 + %13:gpr32 = MOVi32imm 2 + STRWui %117, %115, 0 :: (store unordered (s32) into `i32 addrspace(1)* null`, addrspace 1) + Bcc 8, %bb.14, implicit killed $nzcv + B %bb.3 + + bb.18.bb120: + ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp + $w0 = MOVi32imm 10 + STATEPOINT 2882400000, 0, 1, @blam, $w0, 2, 129, 2, 0, 2, 39, 2, 0, 2, 1, 2, 0, 2, 272, 2, 2, 2, 14, 2, 0, 2, 0, 2, 0, 2, 3, %42.sub_32, 2, 0, 2, 0, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 4278124286, 2, 0, 2, 0, 2, 7, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_aarch64_allregs, implicit-def $sp, implicit-def dead early-clobber $lr + ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp + +... diff --git a/llvm/test/CodeGen/AMDGPU/remaining-virtual-register-operands.ll b/llvm/test/CodeGen/AMDGPU/remaining-virtual-register-operands.ll index cd2dca511778e9..04e995b6f343ef 100644 --- a/llvm/test/CodeGen/AMDGPU/remaining-virtual-register-operands.ll +++ b/llvm/test/CodeGen/AMDGPU/remaining-virtual-register-operands.ll @@ -1,32 +1,17 @@ -; RUN: not llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx908 -verify-machineinstrs < %s 2>%t.err | FileCheck %s -; RUN: FileCheck -check-prefix=ERR %s < %t.err +; RUN: not --crash llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx908 -verify-machineinstrs < %s 2>&1 | FileCheck %s ; This testcase fails register allocation at the same time it performs ; virtual register splitting (by introducing VGPR to AGPR copies). We ; still need to enqueue and allocate the newly split vregs after the ; failure. +; The machine verifier complains about usage of register +; which is marked as killed in previous instruction. +; This happens due to when register allocator is out of registers +; it takes the first avialable register. -; ERR: error: ran out of registers during register allocation -; ERR-NEXT: error: ran out of registers during register allocation -; ERR-NEXT: error: ran out of registers during register allocation -; ERR-NOT: ERROR - -; CHECK: v_accvgpr_write_b32 -; CHECK: v_accvgpr_write_b32 -; CHECK: v_accvgpr_write_b32 -; CHECK: v_accvgpr_write_b32 -; CHECK: v_accvgpr_write_b32 -; CHECK: v_accvgpr_write_b32 -; CHECK: v_accvgpr_write_b32 - -; CHECK: v_accvgpr_read_b32 -; CHECK: v_accvgpr_read_b32 -; CHECK: v_accvgpr_read_b32 -; CHECK: v_accvgpr_read_b32 -; CHECK: v_accvgpr_read_b32 -; CHECK: v_accvgpr_read_b32 -; CHECK: v_accvgpr_read_b32 +; CHECK: error: ran out of registers during register allocation +; CHECK: Bad machine code: Using an undefined physical register define amdgpu_kernel void @alloc_failure_with_split_vregs(float %v0, float %v1) #0 { %agpr0 = call float asm sideeffect "; def $0", "=${a0}"() %agpr.vec = insertelement <16 x float> undef, float %agpr0, i32 0