[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / liveout-implicit-def-subreg-redef-blender-verifier-error.mir
blobc39fa08194f9885584983456015b62df2aff30b2
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
2 # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1031 -run-pass=register-coalescer -verify-coalescing -o - %s | FileCheck %s
4 # Make sure coalescing doesn't produce "no live segment at def" when
5 # there is a live out implicit_def with subranges.
7 # %1 will be coalesced into %0. %0 is a cross block implicit_def that
8 # cannot be deleted. The def of %0 in %bb.2 is a live out subregister
9 # def of the same register. We need to ensure that the resulting
10 # subrange for %0.sub0 includes the def in %bb.1
12 ---
13 name: liveout_implicit_def_super_reg_redefine_sub0_implicit_def
14 tracksRegLiveness: true
15 body:             |
16   ; CHECK-LABEL: name: liveout_implicit_def_super_reg_redefine_sub0_implicit_def
17   ; CHECK: bb.0:
18   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
19   ; CHECK-NEXT: {{  $}}
20   ; CHECK-NEXT:   S_CBRANCH_SCC0 %bb.2, implicit undef $scc
21   ; CHECK-NEXT: {{  $}}
22   ; CHECK-NEXT: bb.1:
23   ; CHECK-NEXT:   successors: %bb.3(0x80000000)
24   ; CHECK-NEXT: {{  $}}
25   ; CHECK-NEXT:   undef %0.sub0:sgpr_128 = S_MOV_B32 0
26   ; CHECK-NEXT:   S_BRANCH %bb.3
27   ; CHECK-NEXT: {{  $}}
28   ; CHECK-NEXT: bb.2:
29   ; CHECK-NEXT:   successors: %bb.3(0x80000000)
30   ; CHECK-NEXT: {{  $}}
31   ; CHECK-NEXT:   undef %0.sub0:sgpr_128 = IMPLICIT_DEF
32   ; CHECK-NEXT: {{  $}}
33   ; CHECK-NEXT: bb.3:
34   ; CHECK-NEXT:   S_NOP 0, implicit %0
35   ; CHECK-NEXT:   S_NOP 0, implicit %0.sub0
36   ; CHECK-NEXT:   S_ENDPGM 0
37   bb.0:
38     S_CBRANCH_SCC0 %bb.2, implicit undef $scc
40   bb.1:
41     %0:sgpr_128 = IMPLICIT_DEF
42     %1:sgpr_32 = S_MOV_B32 0
43     S_BRANCH %bb.3
45   bb.2:
46     undef %0.sub0:sgpr_128 = IMPLICIT_DEF
47     %1:sgpr_32 = COPY %0.sub0
49   bb.3:
50     S_NOP 0, implicit %0
51     S_NOP 0, implicit %1
52     S_ENDPGM 0
54 ...
57 # Redef of sub0 is a meaningful value.
58 ---
59 name: liveout_implicit_def_redefine_sub0_undef_other
60 tracksRegLiveness: true
61 body:             |
62   ; CHECK-LABEL: name: liveout_implicit_def_redefine_sub0_undef_other
63   ; CHECK: bb.0:
64   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
65   ; CHECK-NEXT: {{  $}}
66   ; CHECK-NEXT:   S_CBRANCH_SCC0 %bb.2, implicit undef $scc
67   ; CHECK-NEXT: {{  $}}
68   ; CHECK-NEXT: bb.1:
69   ; CHECK-NEXT:   successors: %bb.3(0x80000000)
70   ; CHECK-NEXT: {{  $}}
71   ; CHECK-NEXT:   undef %0.sub0:sgpr_128 = S_MOV_B32 0
72   ; CHECK-NEXT:   S_BRANCH %bb.3
73   ; CHECK-NEXT: {{  $}}
74   ; CHECK-NEXT: bb.2:
75   ; CHECK-NEXT:   successors: %bb.3(0x80000000)
76   ; CHECK-NEXT: {{  $}}
77   ; CHECK-NEXT:   undef %0.sub0:sgpr_128 = S_MOV_B32 9
78   ; CHECK-NEXT: {{  $}}
79   ; CHECK-NEXT: bb.3:
80   ; CHECK-NEXT:   S_NOP 0, implicit %0
81   ; CHECK-NEXT:   S_NOP 0, implicit %0.sub0
82   ; CHECK-NEXT:   S_ENDPGM 0
83   bb.0:
84     S_CBRANCH_SCC0 %bb.2, implicit undef $scc
86   bb.1:
87     %0:sgpr_128 = IMPLICIT_DEF
88     %1:sgpr_32 = S_MOV_B32 0
89     S_BRANCH %bb.3
91   bb.2:
92     undef %0.sub0:sgpr_128 = S_MOV_B32 9
93     %1:sgpr_32 = COPY %0.sub0
95   bb.3:
96     S_NOP 0, implicit %0
97     S_NOP 0, implicit %1
98     S_ENDPGM 0
102 # The initial def of the register doesn't doesn't cover the redefined
103 # lanes. This had no error but was useful to compare against the
104 # failing cases.
106 name: only_redefine_undefined_lanes
107 tracksRegLiveness: true
108 body:             |
109   ; CHECK-LABEL: name: only_redefine_undefined_lanes
110   ; CHECK: bb.0:
111   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
112   ; CHECK-NEXT: {{  $}}
113   ; CHECK-NEXT:   S_CBRANCH_SCC0 %bb.2, implicit undef $scc
114   ; CHECK-NEXT: {{  $}}
115   ; CHECK-NEXT: bb.1:
116   ; CHECK-NEXT:   successors: %bb.3(0x80000000)
117   ; CHECK-NEXT: {{  $}}
118   ; CHECK-NEXT:   S_NOP 0, implicit-def undef %0.sub1_sub2_sub3
119   ; CHECK-NEXT:   %0.sub0:vreg_128 = V_MOV_B32_e32 0, implicit $exec
120   ; CHECK-NEXT:   S_BRANCH %bb.3
121   ; CHECK-NEXT: {{  $}}
122   ; CHECK-NEXT: bb.2:
123   ; CHECK-NEXT:   successors: %bb.3(0x80000000)
124   ; CHECK-NEXT: {{  $}}
125   ; CHECK-NEXT:   undef %0.sub0:vreg_128 = V_MOV_B32_e32 9, implicit $exec
126   ; CHECK-NEXT: {{  $}}
127   ; CHECK-NEXT: bb.3:
128   ; CHECK-NEXT:   S_NOP 0, implicit %0
129   ; CHECK-NEXT:   S_NOP 0, implicit %0.sub0
130   ; CHECK-NEXT:   S_ENDPGM 0
131   bb.0:
132     S_CBRANCH_SCC0 %bb.2, implicit undef $scc
134   bb.1:
135     S_NOP 0, implicit-def undef %0.sub1_sub2_sub3:vreg_128
136     %1:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
137     S_BRANCH %bb.3
139   bb.2:
140     undef %0.sub0:vreg_128 = V_MOV_B32_e32 9, implicit $exec
141     %1:vgpr_32 = COPY %0.sub0
143   bb.3:
144     S_NOP 0, implicit %0
145     S_NOP 0, implicit %1
146     S_ENDPGM 0