• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple aarch64 -run-pass=aarch64-post-select-optimize -verify-machineinstrs %s -o - | FileCheck %s
3---
4name:            test_fcmp_dead_cc
5alignment:       4
6legalized:       true
7regBankSelected: true
8selected:        true
9tracksRegLiveness: true
10liveins:
11  - { reg: '$x0' }
12  - { reg: '$w1' }
13body:             |
14  bb.1:
15    liveins: $w1, $x0, $s0, $s1
16
17    ; CHECK-LABEL: name: test_fcmp_dead_cc
18    ; CHECK: liveins: $w1, $x0, $s0, $s1
19    ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
20    ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
21    ; CHECK: [[COPY2:%[0-9]+]]:fpr32 = COPY $s0
22    ; CHECK: [[COPY3:%[0-9]+]]:fpr32 = COPY $s1
23    ; CHECK: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
24    ; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv
25    ; CHECK: [[SUBWrr:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]]
26    ; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def $nzcv
27    ; CHECK: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBWrr]], 1, 31
28    ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1
29    ; CHECK: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv
30    ; CHECK: $w0 = COPY [[CSELWr]]
31    ; CHECK: RET_ReallyLR implicit $w0
32    %1:gpr64 = COPY $x0
33    %2:gpr32 = COPY $w1
34    %3:fpr32 = COPY $s0
35    %4:fpr32 = COPY $s1
36    %26:gpr32 = COPY $wzr
37    FCMPSrr %3, %4, implicit-def $nzcv
38    %12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
39    FCMPSrr %3, %4, implicit-def $nzcv
40    %14:gpr32common = UBFMWri %12, 1, 31
41    %60:gpr32 = MOVi32imm 1
42    %16:gpr32 = CSELWr %14, %60, 8, implicit $nzcv
43    $w0 = COPY %16
44    RET_ReallyLR implicit $w0
45
46...
47---
48name:            test_fcmp_64_dead_cc
49alignment:       4
50legalized:       true
51regBankSelected: true
52selected:        true
53tracksRegLiveness: true
54liveins:
55  - { reg: '$x0' }
56  - { reg: '$w1' }
57body:             |
58  bb.1:
59    liveins: $w1, $x0, $d0, $d1
60
61    ; CHECK-LABEL: name: test_fcmp_64_dead_cc
62    ; CHECK: liveins: $w1, $x0, $d0, $d1
63    ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
64    ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
65    ; CHECK: [[COPY2:%[0-9]+]]:fpr64 = COPY $d0
66    ; CHECK: [[COPY3:%[0-9]+]]:fpr64 = COPY $d1
67    ; CHECK: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
68    ; CHECK: FCMPDrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv
69    ; CHECK: [[SUBWrr:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]]
70    ; CHECK: FCMPDrr [[COPY2]], [[COPY3]], implicit-def $nzcv
71    ; CHECK: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBWrr]], 1, 31
72    ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1
73    ; CHECK: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv
74    ; CHECK: $w0 = COPY [[CSELWr]]
75    ; CHECK: RET_ReallyLR implicit $w0
76    %1:gpr64 = COPY $x0
77    %2:gpr32 = COPY $w1
78    %3:fpr64 = COPY $d0
79    %4:fpr64 = COPY $d1
80    %26:gpr32 = COPY $wzr
81    FCMPDrr %3, %4, implicit-def $nzcv
82    %12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
83    FCMPDrr %3, %4, implicit-def $nzcv
84    %14:gpr32common = UBFMWri %12, 1, 31
85    %60:gpr32 = MOVi32imm 1
86    %16:gpr32 = CSELWr %14, %60, 8, implicit $nzcv
87    $w0 = COPY %16
88    RET_ReallyLR implicit $w0
89
90...
91---
92name:            test_fcmp_dead_cc_3_fcmps
93alignment:       4
94legalized:       true
95regBankSelected: true
96selected:        true
97tracksRegLiveness: true
98liveins:
99  - { reg: '$x0' }
100  - { reg: '$w1' }
101body:             |
102  bb.1:
103    liveins: $w1, $x0, $s0, $s1
104
105    ; CHECK-LABEL: name: test_fcmp_dead_cc_3_fcmps
106    ; CHECK: liveins: $w1, $x0, $s0, $s1
107    ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
108    ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
109    ; CHECK: [[COPY2:%[0-9]+]]:fpr32 = COPY $s0
110    ; CHECK: [[COPY3:%[0-9]+]]:fpr32 = COPY $s1
111    ; CHECK: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
112    ; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv
113    ; CHECK: [[SUBWrr:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]]
114    ; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def dead $nzcv
115    ; CHECK: [[SUBWrr1:%[0-9]+]]:gpr32 = SUBWrr [[COPY1]], [[COPY4]]
116    ; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def $nzcv
117    ; CHECK: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBWrr1]], 1, 31
118    ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1
119    ; CHECK: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv
120    ; CHECK: $w0 = COPY [[CSELWr]]
121    ; CHECK: RET_ReallyLR implicit $w0
122    %1:gpr64 = COPY $x0
123    %2:gpr32 = COPY $w1
124    %3:fpr32 = COPY $s0
125    %4:fpr32 = COPY $s1
126    %26:gpr32 = COPY $wzr
127    FCMPSrr %3, %4, implicit-def $nzcv
128    %12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
129    FCMPSrr %3, %4, implicit-def $nzcv
130    %12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
131    FCMPSrr %3, %4, implicit-def $nzcv
132    %14:gpr32common = UBFMWri %12, 1, 31
133    %60:gpr32 = MOVi32imm 1
134    %16:gpr32 = CSELWr %14, %60, 8, implicit $nzcv
135    $w0 = COPY %16
136    RET_ReallyLR implicit $w0
137
138...
139---
140name:            test_impdef_made_dead
141alignment:       4
142legalized:       true
143regBankSelected: true
144selected:        true
145tracksRegLiveness: true
146liveins:
147  - { reg: '$x0' }
148  - { reg: '$w1' }
149body:             |
150  bb.1:
151    liveins: $w1, $x0, $s0, $s1
152    ; Check that any dead imp-defs of NZCV are marked as such.
153    ; CHECK-LABEL: name: test_impdef_made_dead
154    ; CHECK: liveins: $w1, $x0, $s0, $s1
155    ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
156    ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
157    ; CHECK: [[COPY2:%[0-9]+]]:fpr32 = COPY $s0
158    ; CHECK: [[COPY3:%[0-9]+]]:fpr32 = COPY $s1
159    ; CHECK: [[COPY4:%[0-9]+]]:gpr32 = COPY $wzr
160    ; CHECK: [[SUBSWrr:%[0-9]+]]:gpr32 = SUBSWrr [[COPY1]], [[COPY4]], implicit-def dead $nzcv
161    ; CHECK: FCMPSrr [[COPY2]], [[COPY3]], implicit-def $nzcv
162    ; CHECK: [[UBFMWri:%[0-9]+]]:gpr32common = UBFMWri [[SUBSWrr]], 1, 31
163    ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 1
164    ; CHECK: [[CSELWr:%[0-9]+]]:gpr32 = CSELWr [[UBFMWri]], [[MOVi32imm]], 8, implicit $nzcv
165    ; CHECK: %ret:gpr32 = SUBSWrr [[CSELWr]], [[SUBSWrr]], implicit-def dead $nzcv
166    ; CHECK: $w0 = COPY [[CSELWr]]
167    ; CHECK: RET_ReallyLR implicit $w0
168    %1:gpr64 = COPY $x0
169    %2:gpr32 = COPY $w1
170    %3:fpr32 = COPY $s0
171    %4:fpr32 = COPY $s1
172    %26:gpr32 = COPY $wzr
173    %12:gpr32 = SUBSWrr %2, %26, implicit-def $nzcv
174    FCMPSrr %3, %4, implicit-def $nzcv
175    %14:gpr32common = UBFMWri %12, 1, 31
176    %60:gpr32 = MOVi32imm 1
177    %16:gpr32 = CSELWr %14, %60, 8, implicit $nzcv
178    %ret:gpr32 = SUBSWrr %16, %12, implicit-def $nzcv
179    $w0 = COPY %16
180    RET_ReallyLR implicit $w0
181...
182