[AMDGPU] Add True16 register classes.
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / coalescer-remat-dead-use.mir
blob86e85e92ee625e37cb9e077f9a7bf7c80acf1e3c
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=gfx900 -o - -verify-coalescing -run-pass=register-coalescer %s | FileCheck -check-prefix=GCN %s
4 ---
5 # Do not rematerialize V_MOV_B32 at COPY because source register %1 is killed.
7 name:            no_remat_killed_src_in_inst
8 tracksRegLiveness: true
9 body:             |
10   bb.0:
11     liveins: $vgpr0
13     ; GCN-LABEL: name: no_remat_killed_src_in_inst
14     ; GCN: liveins: $vgpr0
15     ; GCN-NEXT: {{  $}}
16     ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
17     ; GCN-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 1, [[COPY]], implicit $exec
18     ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 [[V_ADD_U32_e32_]], implicit $exec
19     ; GCN-NEXT: $vgpr0 = COPY [[V_MOV_B32_e32_]]
20     ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr0
21     %0:vgpr_32 = COPY $vgpr0
22     %1:vgpr_32 = V_ADD_U32_e32 1, %0, implicit $exec
23     %2:vgpr_32 = V_MOV_B32_e32 killed %1, implicit $exec
24     $vgpr0 = COPY killed %2
25     SI_RETURN_TO_EPILOG killed $vgpr0
26 ...
27 ---
28 # Do not rematerialize V_MOV_B32 at COPY because source register %1 is killed
29 # after the MOV but before the COPY.
31 name:            no_remat_killed_src_after_inst
32 tracksRegLiveness: true
33 body:             |
34   bb.0:
35     liveins: $vgpr0
37     ; GCN-LABEL: name: no_remat_killed_src_after_inst
38     ; GCN: liveins: $vgpr0
39     ; GCN-NEXT: {{  $}}
40     ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
41     ; GCN-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 1, [[COPY]], implicit $exec
42     ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 [[V_ADD_U32_e32_]], implicit $exec
43     ; GCN-NEXT: KILL [[V_ADD_U32_e32_]]
44     ; GCN-NEXT: $vgpr0 = COPY [[V_MOV_B32_e32_]]
45     ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr0
46     %0:vgpr_32 = COPY $vgpr0
47     %1:vgpr_32 = V_ADD_U32_e32 1, %0, implicit $exec
48     %2:vgpr_32 = V_MOV_B32_e32 %1, implicit $exec
49     KILL %1
50     $vgpr0 = COPY killed %2
51     SI_RETURN_TO_EPILOG killed $vgpr0
52 ...
53 ---
54 # Even if %1 is not killed do not rematerialize V_MOV_B32 so that we do not
55 # extend %1 liverange.
57 name:            no_remat_alive_src_in_inst_unused
58 tracksRegLiveness: true
59 body:             |
60   bb.0:
61     liveins: $vgpr0
63     ; GCN-LABEL: name: no_remat_alive_src_in_inst_unused
64     ; GCN: liveins: $vgpr0
65     ; GCN-NEXT: {{  $}}
66     ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
67     ; GCN-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 1, [[COPY]], implicit $exec
68     ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 [[V_ADD_U32_e32_]], implicit $exec
69     ; GCN-NEXT: $vgpr0 = COPY [[V_MOV_B32_e32_]]
70     ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr0
71     %0:vgpr_32 = COPY $vgpr0
72     %1:vgpr_32 = V_ADD_U32_e32 1, %0, implicit $exec
73     %2:vgpr_32 = V_MOV_B32_e32 %1, implicit $exec
74     $vgpr0 = COPY killed %2
75     SI_RETURN_TO_EPILOG killed $vgpr0
76 ...
77 ---
78 # Rematerialize V_MOV_B32 since %1 is available at COPY and still alive.
80 name:            remat_alive_src_in_inst_used_and_available
81 tracksRegLiveness: true
82 body:             |
83   bb.0:
84     liveins: $vgpr0
86     ; GCN-LABEL: name: remat_alive_src_in_inst_used_and_available
87     ; GCN: liveins: $vgpr0
88     ; GCN-NEXT: {{  $}}
89     ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
90     ; GCN-NEXT: [[V_ADD_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e32 1, [[COPY]], implicit $exec
91     ; GCN-NEXT: $vgpr0 = V_MOV_B32_e32 [[V_ADD_U32_e32_]], implicit $exec
92     ; GCN-NEXT: SI_RETURN_TO_EPILOG $vgpr0
93     %0:vgpr_32 = COPY $vgpr0
94     %1:vgpr_32 = V_ADD_U32_e32 1, %0, implicit $exec
95     %2:vgpr_32 = V_MOV_B32_e32 %1, implicit $exec
96     $vgpr0 = COPY killed %2
97     SI_RETURN_TO_EPILOG killed $vgpr0, implicit %1
98 ...