[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / fold-restore-undef-use.mir
blob3616d617f84a0dd3fb9cdcc2d0f83d8d2c2e056b
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -stress-regalloc=4 -verify-regalloc -start-before=greedy,0 -stop-after=virtregrewriter,0 %s -o - | FileCheck %s
4 # Check that we don't generate *** Bad machine code: Instruction loads
5 # from dead spill slot ***
8 ---
9 name:            restore_undef_copy_use
10 tracksRegLiveness: true
11 machineFunctionInfo:
12   maxKernArgAlign: 1
13   isEntryFunction: true
14   scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
15   stackPtrOffsetReg: '$sgpr32'
16   occupancy:       8
17 body:             |
18   ; CHECK-LABEL: name: restore_undef_copy_use
19   ; CHECK: bb.0:
20   ; CHECK-NEXT:   successors: %bb.3(0x40000000), %bb.1(0x40000000)
21   ; CHECK-NEXT:   liveins: $sgpr14, $sgpr15, $sgpr16, $vgpr0, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9, $sgpr10_sgpr11
22   ; CHECK-NEXT: {{  $}}
23   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.3, implicit $exec
24   ; CHECK-NEXT: {{  $}}
25   ; CHECK-NEXT: bb.1:
26   ; CHECK-NEXT:   successors: %bb.5(0x40000000), %bb.2(0x40000000)
27   ; CHECK-NEXT: {{  $}}
28   ; CHECK-NEXT:   renamable $sgpr4_sgpr5 = S_OR_SAVEEXEC_B64 undef renamable $sgpr4_sgpr5, implicit-def $exec, implicit-def $scc, implicit $exec
29   ; CHECK-NEXT:   $exec = S_XOR_B64_term $exec, killed renamable $sgpr4_sgpr5, implicit-def $scc
30   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.5, implicit $exec
31   ; CHECK-NEXT: {{  $}}
32   ; CHECK-NEXT: bb.2:
33   ; CHECK-NEXT:   successors: %bb.5(0x80000000)
34   ; CHECK-NEXT: {{  $}}
35   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
36   ; CHECK-NEXT:   $sgpr6_sgpr7 = KILL undef renamable $sgpr6_sgpr7
37   ; CHECK-NEXT:   dead $sgpr30_sgpr31 = SI_CALL undef renamable $sgpr4_sgpr5, 0, csr_amdgpu_gfx90ainsts, implicit $sgpr6_sgpr7, implicit $sgpr0_sgpr1_sgpr2_sgpr3
38   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
39   ; CHECK-NEXT:   S_BRANCH %bb.5
40   ; CHECK-NEXT: {{  $}}
41   ; CHECK-NEXT: bb.3:
42   ; CHECK-NEXT:   successors: %bb.4(0x80000000)
43   ; CHECK-NEXT:   liveins: $sgpr10_sgpr11
44   ; CHECK-NEXT: {{  $}}
45   ; CHECK-NEXT:   SI_SPILL_S64_SAVE killed renamable $sgpr10_sgpr11, %stack.0, implicit $exec, implicit $sgpr32 :: (store (s64) into %stack.0, align 4, addrspace 5)
46   ; CHECK-NEXT: {{  $}}
47   ; CHECK-NEXT: bb.4:
48   ; CHECK-NEXT:   successors: %bb.5(0x80000000)
49   ; CHECK-NEXT: {{  $}}
50   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
51   ; CHECK-NEXT:   dead $sgpr30_sgpr31 = SI_CALL undef renamable $sgpr4_sgpr5, 0, csr_amdgpu_gfx90ainsts, implicit $sgpr0_sgpr1_sgpr2_sgpr3
52   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
53   ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
54   ; CHECK-NEXT:   $sgpr4_sgpr5 = SI_SPILL_S64_RESTORE %stack.0, implicit $exec, implicit $sgpr32 :: (load (s64) from %stack.0, align 4, addrspace 5)
55   ; CHECK-NEXT:   dead $sgpr30_sgpr31 = SI_CALL undef renamable $sgpr4_sgpr5, 0, csr_amdgpu_gfx90ainsts, implicit $sgpr4_sgpr5
56   ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
57   ; CHECK-NEXT: {{  $}}
58   ; CHECK-NEXT: bb.5:
59   bb.0:
60     liveins: $vgpr0, $sgpr4_sgpr5, $sgpr6_sgpr7, $sgpr8_sgpr9, $sgpr10_sgpr11, $sgpr14, $sgpr15, $sgpr16
62     %0:sgpr_64 = COPY $sgpr10_sgpr11
63     S_CBRANCH_EXECZ %bb.3, implicit $exec
65   bb.1:
66     %1:sreg_64 = S_OR_SAVEEXEC_B64 undef %2:sreg_64, implicit-def $exec, implicit-def $scc, implicit $exec
67     $exec = S_XOR_B64_term $exec, %1, implicit-def $scc
68     S_CBRANCH_EXECZ %bb.5, implicit $exec
70   bb.2:
71     ADJCALLSTACKUP 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
72     ; A restore for %0 should not be inserted here.
73     $sgpr6_sgpr7 = COPY undef %0
74     dead $sgpr30_sgpr31 = SI_CALL undef %1, 0, csr_amdgpu_gfx90ainsts, implicit $sgpr6_sgpr7, implicit $sgpr0_sgpr1_sgpr2_sgpr3
75     ADJCALLSTACKDOWN 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
76     S_BRANCH %bb.5
78   bb.3:
80   bb.4:
81     ADJCALLSTACKUP 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
82     dead $sgpr30_sgpr31 = SI_CALL undef %3:sreg_64_xexec, 0, csr_amdgpu_gfx90ainsts, implicit $sgpr0_sgpr1_sgpr2_sgpr3
83     ADJCALLSTACKDOWN 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
84     ADJCALLSTACKUP 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
85     $sgpr4_sgpr5 = COPY %0
86     dead $sgpr30_sgpr31 = SI_CALL undef %3:sreg_64_xexec, 0, csr_amdgpu_gfx90ainsts, implicit $sgpr4_sgpr5
87     ADJCALLSTACKDOWN 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
89   bb.5:
91 ...