Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / select-hint.mir
blob99e864a287f2b98f390473bdbee8923209b26e19
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple aarch64 -debugify-and-strip-all-safe -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
4 # Check that we remove hints during selection.
6 ...
7 ---
8 name:            assert_zext_gpr
9 legalized:       true
10 regBankSelected: true
11 tracksRegLiveness: true
12 body:             |
13   bb.0:
14     liveins: $w0, $w1
16     ; CHECK-LABEL: name: assert_zext_gpr
17     ; CHECK: liveins: $w0, $w1
18     ; CHECK-NEXT: {{  $}}
19     ; CHECK-NEXT: %copy:gpr32 = COPY $w0
20     ; CHECK-NEXT: $w1 = COPY %copy
21     ; CHECK-NEXT: RET_ReallyLR implicit $w1
22     %copy:gpr(s32) = COPY $w0
23     %copy_assert_zext:gpr(s32) = G_ASSERT_ZEXT %copy, 16
24     $w1 = COPY %copy_assert_zext(s32)
25     RET_ReallyLR implicit $w1
27 ...
28 ---
29 name:            assert_zext_fpr
30 legalized:       true
31 regBankSelected: true
32 tracksRegLiveness: true
33 body:             |
34   bb.0:
35     liveins: $s0, $s1
37     ; CHECK-LABEL: name: assert_zext_fpr
38     ; CHECK: liveins: $s0, $s1
39     ; CHECK-NEXT: {{  $}}
40     ; CHECK-NEXT: %copy:fpr32 = COPY $s0
41     ; CHECK-NEXT: $s1 = COPY %copy
42     ; CHECK-NEXT: RET_ReallyLR implicit $s1
43     %copy:fpr(s32) = COPY $s0
44     %copy_assert_zext:fpr(s32) = G_ASSERT_ZEXT %copy, 16
45     $s1 = COPY %copy_assert_zext(s32)
46     RET_ReallyLR implicit $s1
48 ...
49 ---
50 name:            assert_zext_in_between_cross_bank
51 legalized:       true
52 regBankSelected: true
53 tracksRegLiveness: true
54 body:             |
55   bb.0:
56     liveins: $s0, $w1
58     ; CHECK-LABEL: name: assert_zext_in_between_cross_bank
59     ; CHECK: liveins: $s0, $w1
60     ; CHECK-NEXT: {{  $}}
61     ; CHECK-NEXT: %copy:fpr32 = COPY $s0
62     ; CHECK-NEXT: $w1 = COPY %copy
63     ; CHECK-NEXT: RET_ReallyLR implicit $w1
64     %copy:fpr(s32) = COPY $s0
65     %copy_assert_zext:fpr(s32) = G_ASSERT_ZEXT %copy, 16
66     $w1 = COPY %copy_assert_zext(s32)
67     RET_ReallyLR implicit $w1
69 ...
70 ---
71 name:            assert_zext_decided_dst_class
72 legalized:       true
73 regBankSelected: true
74 tracksRegLiveness: true
75 body:             |
76   bb.0:
77     liveins: $w0, $w1, $w2
79     ; Users of G_ASSERT_ZEXT may end up deciding the destination register class.
80     ; Make sure that the source register class is constrained.
82     ; CHECK-LABEL: name: assert_zext_decided_dst_class
83     ; CHECK: liveins: $w0, $w1, $w2
84     ; CHECK-NEXT: {{  $}}
85     ; CHECK-NEXT: %copy_with_rc:gpr32sp = COPY $w2
86     ; CHECK-NEXT: $w1 = COPY %copy_with_rc
87     ; CHECK-NEXT: RET_ReallyLR implicit $w1
88     %copy:gpr(s32) = COPY $w0
89     %copy_assert_zext:gpr(s32) = G_ASSERT_ZEXT %copy, 16
90     %copy_with_rc:gpr32sp(s32) = COPY $w2
91     $w1 = COPY %copy_with_rc(s32)
92     RET_ReallyLR implicit $w1
94 ...
95 ---
96 name:            assert_sext_gpr
97 legalized:       true
98 regBankSelected: true
99 tracksRegLiveness: true
100 body:             |
101   bb.0:
102     liveins: $w0, $w1
104     ; CHECK-LABEL: name: assert_sext_gpr
105     ; CHECK: liveins: $w0, $w1
106     ; CHECK-NEXT: {{  $}}
107     ; CHECK-NEXT: %copy:gpr32 = COPY $w0
108     ; CHECK-NEXT: $w1 = COPY %copy
109     ; CHECK-NEXT: RET_ReallyLR implicit $w1
110     %copy:gpr(s32) = COPY $w0
111     %copy_assert_sext:gpr(s32) = G_ASSERT_SEXT %copy, 16
112     $w1 = COPY %copy_assert_sext(s32)
113     RET_ReallyLR implicit $w1
117 name:            assert_sext_fpr
118 legalized:       true
119 regBankSelected: true
120 tracksRegLiveness: true
121 body:             |
122   bb.0:
123     liveins: $s0, $s1
125     ; CHECK-LABEL: name: assert_sext_fpr
126     ; CHECK: liveins: $s0, $s1
127     ; CHECK-NEXT: {{  $}}
128     ; CHECK-NEXT: %copy:fpr32 = COPY $s0
129     ; CHECK-NEXT: $s1 = COPY %copy
130     ; CHECK-NEXT: RET_ReallyLR implicit $s1
131     %copy:fpr(s32) = COPY $s0
132     %copy_assert_sext:fpr(s32) = G_ASSERT_SEXT %copy, 16
133     $s1 = COPY %copy_assert_sext(s32)
134     RET_ReallyLR implicit $s1
138 name:            assert_sext_in_between_cross_bank
139 legalized:       true
140 regBankSelected: true
141 tracksRegLiveness: true
142 body:             |
143   bb.0:
144     liveins: $s0, $w1
146     ; CHECK-LABEL: name: assert_sext_in_between_cross_bank
147     ; CHECK: liveins: $s0, $w1
148     ; CHECK-NEXT: {{  $}}
149     ; CHECK-NEXT: %copy:fpr32 = COPY $s0
150     ; CHECK-NEXT: $w1 = COPY %copy
151     ; CHECK-NEXT: RET_ReallyLR implicit $w1
152     %copy:fpr(s32) = COPY $s0
153     %copy_assert_sext:fpr(s32) = G_ASSERT_SEXT %copy, 16
154     $w1 = COPY %copy_assert_sext(s32)
155     RET_ReallyLR implicit $w1
159 name:            assert_sext_decided_dst_class
160 legalized:       true
161 regBankSelected: true
162 tracksRegLiveness: true
163 body:             |
164   bb.0:
165     liveins: $w0, $w1, $w2
167     ; Users of G_ASSERT_SEXT may end up deciding the destination register class.
168     ; Make sure that the source register class is constrained.
170     ; CHECK-LABEL: name: assert_sext_decided_dst_class
171     ; CHECK: liveins: $w0, $w1, $w2
172     ; CHECK-NEXT: {{  $}}
173     ; CHECK-NEXT: %copy_with_rc:gpr32sp = COPY $w2
174     ; CHECK-NEXT: $w1 = COPY %copy_with_rc
175     ; CHECK-NEXT: RET_ReallyLR implicit $w1
176     %copy:gpr(s32) = COPY $w0
177     %copy_assert_sext:gpr(s32) = G_ASSERT_SEXT %copy, 16
178     %copy_with_rc:gpr32sp(s32) = COPY $w2
179     $w1 = COPY %copy_with_rc(s32)
180     RET_ReallyLR implicit $w1