[Reland][Runtimes] Merge 'compile_commands.json' files from runtimes build (#116303)
[llvm-project.git] / llvm / test / CodeGen / X86 / rematerialize-sub-super-reg.mir
blobb99c5fc8df0cb6d069cf01b4da452a7eb20a88db
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
2 # RUN: llc -mtriple=x86_64-- -run-pass=register-coalescer -o - %s | FileCheck %s
4 # Test the implicit operands and operand flags on remateralized
5 # instructions folding into a sub or super register def.
7 # Test a full register def at %t1 rematerializing into a subregister
8 # use. The subregister dest operand should be dead, with an
9 # implicit-def of the full physical register.
11 ---
12 name: rematerialize_super_register_into_subreg_def
13 tracksRegLiveness: true
14 body:             |
15   ; CHECK-LABEL: name: rematerialize_super_register_into_subreg_def
16   ; CHECK: bb.0:
17   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
18   ; CHECK-NEXT: {{  $}}
19   ; CHECK-NEXT:   %t3:gr64 = MOV64ri32 -11
20   ; CHECK-NEXT:   CMP64ri8 %t3, 1, implicit-def $eflags
21   ; CHECK-NEXT:   JCC_1 %bb.2, 4, implicit killed $eflags
22   ; CHECK-NEXT:   JMP_1 %bb.1
23   ; CHECK-NEXT: {{  $}}
24   ; CHECK-NEXT: bb.1:
25   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
26   ; CHECK-NEXT: {{  $}}
27   ; CHECK-NEXT:   dead $rax = MOV64ri32 -11, implicit-def $eax
28   ; CHECK-NEXT:   CMP64ri8 %t3, 1, implicit-def $eflags
29   ; CHECK-NEXT:   JCC_1 %bb.1, 4, implicit killed $eflags
30   ; CHECK-NEXT:   RET 0, $eax
31   ; CHECK-NEXT: {{  $}}
32   ; CHECK-NEXT: bb.2:
33   ; CHECK-NEXT:   successors: %bb.3(0x80000000)
34   ; CHECK-NEXT: {{  $}}
35   ; CHECK-NEXT:   %t3:gr64 = ADD64ri8 %t3, 10, implicit-def $eflags
36   ; CHECK-NEXT: {{  $}}
37   ; CHECK-NEXT: bb.3:
38   ; CHECK-NEXT:   $rax = COPY %t3
39   ; CHECK-NEXT:   RET 0, $rax
40   bb.0:
41     %t1:gr64 = MOV64ri32 -11
42     CMP64ri8 %t1, 1, implicit-def $eflags
43     JCC_1 %bb.2, 4, implicit killed $eflags
44     JMP_1 %bb.1
46   bb.1:
47     %t2:gr64 = COPY %t1
48     $eax = COPY %t2.sub_32bit
49     CMP64ri8 %t2, 1, implicit-def $eflags
50     JCC_1 %bb.1, 4, implicit killed $eflags
51     RET 0, $eax
53   bb.2:
54     %t3:gr64 = COPY %t1
55     %t3:gr64 = ADD64ri8 %t3, 10, implicit-def $eflags
57   bb.3:
58     $rax = COPY %t3
59     RET 0, $rax
61 ...
63 # Test an undef subregister def of %t1 rematerializing into a physical
64 # super register def
65 ---
66 name:            rematerialize_subregister_into_superreg_def
67 tracksRegLiveness: true
68 body:             |
69   ; CHECK-LABEL: name: rematerialize_subregister_into_superreg_def
70   ; CHECK: bb.0:
71   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
72   ; CHECK-NEXT: {{  $}}
73   ; CHECK-NEXT:   undef %t3.sub_32bit:gr64_with_sub_8bit = MOV32ri -11
74   ; CHECK-NEXT:   CMP64ri8 %t3, 1, implicit-def $eflags
75   ; CHECK-NEXT:   JCC_1 %bb.2, 4, implicit killed $eflags
76   ; CHECK-NEXT:   JMP_1 %bb.1
77   ; CHECK-NEXT: {{  $}}
78   ; CHECK-NEXT: bb.1:
79   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
80   ; CHECK-NEXT: {{  $}}
81   ; CHECK-NEXT:   dead $eax = MOV32ri -11, implicit-def $rax
82   ; CHECK-NEXT:   CMP64ri8 %t3, 1, implicit-def $eflags
83   ; CHECK-NEXT:   JCC_1 %bb.1, 4, implicit killed $eflags
84   ; CHECK-NEXT:   RET 0, $rax
85   ; CHECK-NEXT: {{  $}}
86   ; CHECK-NEXT: bb.2:
87   ; CHECK-NEXT:   successors: %bb.3(0x80000000)
88   ; CHECK-NEXT: {{  $}}
89   ; CHECK-NEXT:   %t3:gr64_with_sub_8bit = ADD64ri8 %t3, 10, implicit-def $eflags
90   ; CHECK-NEXT: {{  $}}
91   ; CHECK-NEXT: bb.3:
92   ; CHECK-NEXT:   $rax = COPY %t3
93   ; CHECK-NEXT:   RET 0, $rax
94   bb.0:
95     undef %t1.sub_32bit:gr64_with_sub_8bit = MOV32ri -11
96     CMP64ri8 %t1, 1, implicit-def $eflags
97     JCC_1 %bb.2, 4, implicit killed $eflags
98     JMP_1 %bb.1
100   bb.1:
101     %t2:gr64 = COPY %t1
102     $rax = COPY %t2
103     CMP64ri8 %t2, 1, implicit-def $eflags
104     JCC_1 %bb.1, 4, implicit killed $eflags
105     RET 0, $rax
107   bb.2:
108     %t3:gr64 = COPY %t1
109     %t3:gr64 = ADD64ri8 %t3, 10, implicit-def $eflags
111   bb.3:
112     $rax = COPY %t3
113     RET 0, $rax
117 # Handle that rematerializing an instruction with an implicit def of a
118 # virtual super register into a physical register works.
120 name:            rematerialize_subregister_into_superreg_def_with_impdef_physreg
121 tracksRegLiveness: true
122 body:             |
123   ; CHECK-LABEL: name: rematerialize_subregister_into_superreg_def_with_impdef_physreg
124   ; CHECK: bb.0:
125   ; CHECK-NEXT:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
126   ; CHECK-NEXT: {{  $}}
127   ; CHECK-NEXT:   undef %t3.sub_32bit:gr64_with_sub_8bit = MOV32ri -11, implicit-def %t3
128   ; CHECK-NEXT:   CMP64ri8 %t3, 1, implicit-def $eflags
129   ; CHECK-NEXT:   JCC_1 %bb.2, 4, implicit killed $eflags
130   ; CHECK-NEXT:   JMP_1 %bb.1
131   ; CHECK-NEXT: {{  $}}
132   ; CHECK-NEXT: bb.1:
133   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
134   ; CHECK-NEXT: {{  $}}
135   ; CHECK-NEXT:   dead $eax = MOV32ri -11, implicit-def $rax
136   ; CHECK-NEXT:   CMP64ri8 %t3, 1, implicit-def $eflags
137   ; CHECK-NEXT:   JCC_1 %bb.1, 4, implicit killed $eflags
138   ; CHECK-NEXT:   RET 0, $rax
139   ; CHECK-NEXT: {{  $}}
140   ; CHECK-NEXT: bb.2:
141   ; CHECK-NEXT:   successors: %bb.3(0x80000000)
142   ; CHECK-NEXT: {{  $}}
143   ; CHECK-NEXT:   %t3:gr64_with_sub_8bit = ADD64ri8 %t3, 10, implicit-def $eflags
144   ; CHECK-NEXT: {{  $}}
145   ; CHECK-NEXT: bb.3:
146   ; CHECK-NEXT:   $rax = COPY %t3
147   ; CHECK-NEXT:   RET 0, $rax
148   bb.0:
149     undef %t1.sub_32bit:gr64_with_sub_8bit = MOV32ri -11, implicit-def %t1
150     CMP64ri8 %t1, 1, implicit-def $eflags
151     JCC_1 %bb.2, 4, implicit killed $eflags
152     JMP_1 %bb.1
154   bb.1:
155     %t2:gr64 = COPY %t1
156     $rax = COPY %t2
157     CMP64ri8 %t2, 1, implicit-def $eflags
158     JCC_1 %bb.1, 4, implicit killed $eflags
159     RET 0, $rax
161   bb.2:
162     %t3:gr64 = COPY %t1
163     %t3:gr64 = ADD64ri8 %t3, 10, implicit-def $eflags
165   bb.3:
166     $rax = COPY %t3
167     RET 0, $rax