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.
11 tracksRegLiveness: true
16 ; CHECK-LABEL: name: assert_zext_gpr
17 ; CHECK: liveins: $w0, $w1
18 ; CHECK: %copy:gpr32all = COPY $w0
19 ; CHECK: $w1 = COPY %copy
20 ; CHECK: RET_ReallyLR implicit $w1
21 %copy:gpr(s32) = COPY $w0
22 %copy_assert_zext:gpr(s32) = G_ASSERT_ZEXT %copy, 16
23 $w1 = COPY %copy_assert_zext(s32)
24 RET_ReallyLR implicit $w1
31 tracksRegLiveness: true
36 ; CHECK-LABEL: name: assert_zext_fpr
37 ; CHECK: liveins: $s0, $s1
38 ; CHECK: %copy:fpr32 = COPY $s0
39 ; CHECK: $s1 = COPY %copy
40 ; CHECK: RET_ReallyLR implicit $s1
41 %copy:fpr(s32) = COPY $s0
42 %copy_assert_zext:fpr(s32) = G_ASSERT_ZEXT %copy, 16
43 $s1 = COPY %copy_assert_zext(s32)
44 RET_ReallyLR implicit $s1
48 name: assert_zext_in_between_cross_bank
51 tracksRegLiveness: true
56 ; CHECK-LABEL: name: assert_zext_in_between_cross_bank
57 ; CHECK: liveins: $s0, $w1
58 ; CHECK: %copy:fpr32 = COPY $s0
59 ; CHECK: $w1 = COPY %copy
60 ; CHECK: RET_ReallyLR implicit $w1
61 %copy:fpr(s32) = COPY $s0
62 %copy_assert_zext:fpr(s32) = G_ASSERT_ZEXT %copy, 16
63 $w1 = COPY %copy_assert_zext(s32)
64 RET_ReallyLR implicit $w1
68 name: assert_zext_decided_dst_class
71 tracksRegLiveness: true
74 liveins: $w0, $w1, $w2
76 ; Users of G_ASSERT_ZEXT may end up deciding the destination register class.
77 ; Make sure that the source register class is constrained.
79 ; CHECK-LABEL: name: assert_zext_decided_dst_class
80 ; CHECK: liveins: $w0, $w1, $w2
81 ; CHECK: %copy_with_rc:gpr32sp = COPY $w2
82 ; CHECK: $w1 = COPY %copy_with_rc
83 ; CHECK: RET_ReallyLR implicit $w1
84 %copy:gpr(s32) = COPY $w0
85 %copy_assert_zext:gpr(s32) = G_ASSERT_ZEXT %copy, 16
86 %copy_with_rc:gpr32sp(s32) = COPY $w2
87 $w1 = COPY %copy_with_rc(s32)
88 RET_ReallyLR implicit $w1
95 tracksRegLiveness: true
100 ; CHECK-LABEL: name: assert_sext_gpr
101 ; CHECK: liveins: $w0, $w1
102 ; CHECK: %copy:gpr32all = COPY $w0
103 ; CHECK: $w1 = COPY %copy
104 ; CHECK: RET_ReallyLR implicit $w1
105 %copy:gpr(s32) = COPY $w0
106 %copy_assert_sext:gpr(s32) = G_ASSERT_SEXT %copy, 16
107 $w1 = COPY %copy_assert_sext(s32)
108 RET_ReallyLR implicit $w1
112 name: assert_sext_fpr
114 regBankSelected: true
115 tracksRegLiveness: true
120 ; CHECK-LABEL: name: assert_sext_fpr
121 ; CHECK: liveins: $s0, $s1
122 ; CHECK: %copy:fpr32 = COPY $s0
123 ; CHECK: $s1 = COPY %copy
124 ; CHECK: RET_ReallyLR implicit $s1
125 %copy:fpr(s32) = COPY $s0
126 %copy_assert_sext:fpr(s32) = G_ASSERT_SEXT %copy, 16
127 $s1 = COPY %copy_assert_sext(s32)
128 RET_ReallyLR implicit $s1
132 name: assert_sext_in_between_cross_bank
134 regBankSelected: true
135 tracksRegLiveness: true
140 ; CHECK-LABEL: name: assert_sext_in_between_cross_bank
141 ; CHECK: liveins: $s0, $w1
142 ; CHECK: %copy:fpr32 = COPY $s0
143 ; CHECK: $w1 = COPY %copy
144 ; CHECK: RET_ReallyLR implicit $w1
145 %copy:fpr(s32) = COPY $s0
146 %copy_assert_sext:fpr(s32) = G_ASSERT_SEXT %copy, 16
147 $w1 = COPY %copy_assert_sext(s32)
148 RET_ReallyLR implicit $w1
152 name: assert_sext_decided_dst_class
154 regBankSelected: true
155 tracksRegLiveness: true
158 liveins: $w0, $w1, $w2
160 ; Users of G_ASSERT_SEXT may end up deciding the destination register class.
161 ; Make sure that the source register class is constrained.
163 ; CHECK-LABEL: name: assert_sext_decided_dst_class
164 ; CHECK: liveins: $w0, $w1, $w2
165 ; CHECK: %copy_with_rc:gpr32sp = COPY $w2
166 ; CHECK: $w1 = COPY %copy_with_rc
167 ; CHECK: RET_ReallyLR implicit $w1
168 %copy:gpr(s32) = COPY $w0
169 %copy_assert_sext:gpr(s32) = G_ASSERT_SEXT %copy, 16
170 %copy_with_rc:gpr32sp(s32) = COPY $w2
171 $w1 = COPY %copy_with_rc(s32)
172 RET_ReallyLR implicit $w1