xref: /llvm-project/llvm/test/CodeGen/AArch64/implicit-def-with-impdef-greedy-assert.mir (revision 7564566779eb07e9daf41a351b09cf7607871845)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3
2# RUN: llc -mtriple=arm64-apple-ios -run-pass=greedy -o - %s | FileCheck %s
3
4---
5name:            widget
6tracksRegLiveness: true
7frameInfo:
8  adjustsStack:    true
9jumpTable:
10  kind:            label-difference32
11  entries:
12    - id:              0
13      blocks:          [ '%bb.9', '%bb.5', '%bb.2', '%bb.2', '%bb.2' ]
14body:             |
15  ; CHECK-LABEL: name: widget
16  ; CHECK: bb.0:
17  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
18  ; CHECK-NEXT:   liveins: $w0, $w1, $x2, $x3, $x4, $w5, $w6
19  ; CHECK-NEXT: {{  $}}
20  ; CHECK-NEXT:   [[DEF:%[0-9]+]]:gpr64common = IMPLICIT_DEF
21  ; CHECK-NEXT:   [[DEF1:%[0-9]+]]:gpr64 = IMPLICIT_DEF
22  ; CHECK-NEXT:   [[DEF2:%[0-9]+]]:gpr32common = IMPLICIT_DEF
23  ; CHECK-NEXT:   [[DEF3:%[0-9]+]]:gpr32 = IMPLICIT_DEF
24  ; CHECK-NEXT:   [[DEF4:%[0-9]+]]:gpr32 = IMPLICIT_DEF
25  ; CHECK-NEXT:   [[DEF5:%[0-9]+]]:gpr64common = IMPLICIT_DEF
26  ; CHECK-NEXT:   [[DEF6:%[0-9]+]]:gpr32 = IMPLICIT_DEF
27  ; CHECK-NEXT:   undef [[DEF7:%[0-9]+]].sub_32:gpr64 = IMPLICIT_DEF
28  ; CHECK-NEXT:   [[DEF8:%[0-9]+]]:gpr64common = IMPLICIT_DEF
29  ; CHECK-NEXT:   [[DEF9:%[0-9]+]]:gpr32 = IMPLICIT_DEF
30  ; CHECK-NEXT:   dead [[DEF10:%[0-9]+]]:gpr64 = IMPLICIT_DEF
31  ; CHECK-NEXT:   undef [[DEF11:%[0-9]+]].sub_32:gpr64 = IMPLICIT_DEF implicit-def dead %11
32  ; CHECK-NEXT:   STRXui [[DEF11]], %stack.0, 0 :: (store (s64) into %stack.0)
33  ; CHECK-NEXT: {{  $}}
34  ; CHECK-NEXT: bb.1:
35  ; CHECK-NEXT:   successors: %bb.2(0x80000000)
36  ; CHECK-NEXT: {{  $}}
37  ; CHECK-NEXT: bb.2:
38  ; CHECK-NEXT:   successors: %bb.3(0x0fbefbf0), %bb.4(0x70410410)
39  ; CHECK-NEXT: {{  $}}
40  ; CHECK-NEXT:   Bcc 8, %bb.3, implicit killed undef $nzcv
41  ; CHECK-NEXT:   B %bb.4
42  ; CHECK-NEXT: {{  $}}
43  ; CHECK-NEXT: bb.3:
44  ; CHECK-NEXT:   successors: %bb.11(0x00000000), %bb.2(0x80000000)
45  ; CHECK-NEXT: {{  $}}
46  ; CHECK-NEXT:   dead $wzr = SUBSWri [[DEF2]], 64, 0, implicit-def $nzcv
47  ; CHECK-NEXT:   Bcc 0, %bb.11, implicit killed undef $nzcv
48  ; CHECK-NEXT:   B %bb.2
49  ; CHECK-NEXT: {{  $}}
50  ; CHECK-NEXT: bb.4:
51  ; CHECK-NEXT:   successors: %bb.9(0x01288b01), %bb.5(0x01288b01), %bb.2(0x11f46a91), %bb.6(0x23e8d524), %bb.7(0x47d1aa49)
52  ; CHECK-NEXT: {{  $}}
53  ; CHECK-NEXT:   dead early-clobber %12:gpr64, dead early-clobber %13:gpr64sp = JumpTableDest32 [[DEF8]], [[DEF7]], %jump-table.0
54  ; CHECK-NEXT:   BR undef %18:gpr64
55  ; CHECK-NEXT: {{  $}}
56  ; CHECK-NEXT: bb.5:
57  ; CHECK-NEXT:   successors: %bb.8(0x80000000)
58  ; CHECK-NEXT: {{  $}}
59  ; CHECK-NEXT:   B %bb.8
60  ; CHECK-NEXT: {{  $}}
61  ; CHECK-NEXT: bb.6:
62  ; CHECK-NEXT:   successors: %bb.2(0x80000000)
63  ; CHECK-NEXT: {{  $}}
64  ; CHECK-NEXT:   STRWui [[DEF9]], [[DEF5]], 0 :: (store (s32))
65  ; CHECK-NEXT:   B %bb.2
66  ; CHECK-NEXT: {{  $}}
67  ; CHECK-NEXT: bb.7:
68  ; CHECK-NEXT:   successors: %bb.2(0x80000000)
69  ; CHECK-NEXT: {{  $}}
70  ; CHECK-NEXT:   STRWui $wzr, [[DEF]], 0 :: (store (s32))
71  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
72  ; CHECK-NEXT:   $w0 = COPY [[DEF4]]
73  ; CHECK-NEXT:   $x1 = COPY [[DEF1]]
74  ; CHECK-NEXT:   BL 0, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
75  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
76  ; CHECK-NEXT:   ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
77  ; CHECK-NEXT:   $w0 = COPY [[DEF6]]
78  ; CHECK-NEXT:   ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
79  ; CHECK-NEXT:   B %bb.2
80  ; CHECK-NEXT: {{  $}}
81  ; CHECK-NEXT: bb.8:
82  ; CHECK-NEXT:   successors: %bb.8(0x80000000)
83  ; CHECK-NEXT: {{  $}}
84  ; CHECK-NEXT:   B %bb.8
85  ; CHECK-NEXT: {{  $}}
86  ; CHECK-NEXT: bb.9:
87  ; CHECK-NEXT:   successors: %bb.10(0x40000000), %bb.1(0x40000000)
88  ; CHECK-NEXT: {{  $}}
89  ; CHECK-NEXT:   undef [[DEF12:%[0-9]+]].sub_32:gpr64 = IMPLICIT_DEF
90  ; CHECK-NEXT:   STRXui [[DEF12]], %stack.0, 0 :: (store (s64) into %stack.0)
91  ; CHECK-NEXT:   TBZW [[DEF3]], 0, %bb.1
92  ; CHECK-NEXT:   B %bb.10
93  ; CHECK-NEXT: {{  $}}
94  ; CHECK-NEXT: bb.10:
95  ; CHECK-NEXT:   successors: %bb.1(0x80000000)
96  ; CHECK-NEXT: {{  $}}
97  ; CHECK-NEXT:   ADJCALLSTACKDOWN 32, 0, implicit-def dead $sp, implicit $sp
98  ; CHECK-NEXT:   ADJCALLSTACKUP 32, 0, implicit-def dead $sp, implicit $sp
99  ; CHECK-NEXT:   B %bb.1
100  ; CHECK-NEXT: {{  $}}
101  ; CHECK-NEXT: bb.11:
102  ; CHECK-NEXT:   [[LDRXui:%[0-9]+]]:gpr64 = LDRXui %stack.0, 0 :: (load (s64) from %stack.0)
103  ; CHECK-NEXT:   dead undef [[COPY:%[0-9]+]].sub_32:gpr64 = COPY [[LDRXui]].sub_32
104  ; CHECK-NEXT:   ADJCALLSTACKDOWN 8, 0, implicit-def dead $sp, implicit $sp
105  ; CHECK-NEXT:   ADJCALLSTACKUP 8, 0, implicit-def dead $sp, implicit $sp
106  bb.0:
107    liveins: $w0, $w1, $x2, $x3, $x4, $w5, $w6
108
109    %0:gpr64common = IMPLICIT_DEF
110    %1:gpr64 = IMPLICIT_DEF
111    %2:gpr32common = IMPLICIT_DEF
112    %3:gpr32 = IMPLICIT_DEF
113    %4:gpr32 = IMPLICIT_DEF
114    %5:gpr64common = IMPLICIT_DEF
115    %6:gpr32 = IMPLICIT_DEF
116    undef %7.sub_32:gpr64 = IMPLICIT_DEF
117    %8:gpr64common = IMPLICIT_DEF
118    %9:gpr32 = IMPLICIT_DEF
119    %10:gpr64 = IMPLICIT_DEF
120    undef %10.sub_32:gpr64 = IMPLICIT_DEF implicit-def %11:gpr64
121
122  bb.1:
123
124  bb.2:
125    successors: %bb.3(0x0fbefbf0), %bb.4(0x70410410)
126
127    Bcc 8, %bb.3, implicit killed undef $nzcv
128    B %bb.4
129
130  bb.3:
131    successors: %bb.11(0x00000000), %bb.2(0x80000000)
132
133    dead $wzr = SUBSWri %2, 64, 0, implicit-def $nzcv
134    Bcc 0, %bb.11, implicit killed undef $nzcv
135    B %bb.2
136
137  bb.4:
138    successors: %bb.9(0x01288b01), %bb.5(0x01288b01), %bb.2(0x11f46a91), %bb.6(0x23e8d524), %bb.7(0x47d1aa49)
139
140    early-clobber %12:gpr64, dead early-clobber %13:gpr64sp = JumpTableDest32 %8, %7, %jump-table.0
141    BR undef %10
142
143  bb.5:
144    B %bb.8
145
146  bb.6:
147    STRWui %9, %5, 0 :: (store (s32))
148    B %bb.2
149
150  bb.7:
151    STRWui $wzr, %0, 0 :: (store (s32))
152    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
153    $w0 = COPY %4
154    $x1 = COPY %1
155    BL 0, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def dead $w0
156    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
157    ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
158    $w0 = COPY %6
159    ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
160    B %bb.2
161
162  bb.8:
163    B %bb.8
164
165  bb.9:
166    successors: %bb.10, %bb.1
167
168    undef %10.sub_32:gpr64 = IMPLICIT_DEF
169    TBZW %3, 0, %bb.1
170    B %bb.10
171
172  bb.10:
173    ADJCALLSTACKDOWN 32, 0, implicit-def dead $sp, implicit $sp
174    ADJCALLSTACKUP 32, 0, implicit-def dead $sp, implicit $sp
175    B %bb.1
176
177  bb.11:
178    undef %14.sub_32:gpr64 = COPY %10.sub_32
179    ADJCALLSTACKDOWN 8, 0, implicit-def dead $sp, implicit $sp
180    ADJCALLSTACKUP 8, 0, implicit-def dead $sp, implicit $sp
181
182...
183