1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc < %s -mtriple=arm64-eabi | FileCheck %s
2
+ ; RUN: llc < %s -mtriple=arm64-eabi | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3
+ ; RUN: llc < %s -mtriple=arm64-eabi -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI
3
4
4
5
; rdar://9296808
5
6
; rdar://9349137
@@ -19,12 +20,24 @@ entry:
19
20
}
20
21
21
22
define i128 @t2 (i64 %a , i64 %b ) nounwind readnone ssp {
22
- ; CHECK-LABEL: t2:
23
- ; CHECK: // %bb.0: // %entry
24
- ; CHECK-NEXT: mul x8, x0, x1
25
- ; CHECK-NEXT: smulh x1, x0, x1
26
- ; CHECK-NEXT: mov x0, x8
27
- ; CHECK-NEXT: ret
23
+ ; CHECK-SD-LABEL: t2:
24
+ ; CHECK-SD: // %bb.0: // %entry
25
+ ; CHECK-SD-NEXT: mul x8, x0, x1
26
+ ; CHECK-SD-NEXT: smulh x1, x0, x1
27
+ ; CHECK-SD-NEXT: mov x0, x8
28
+ ; CHECK-SD-NEXT: ret
29
+ ;
30
+ ; CHECK-GI-LABEL: t2:
31
+ ; CHECK-GI: // %bb.0: // %entry
32
+ ; CHECK-GI-NEXT: asr x9, x1, #63
33
+ ; CHECK-GI-NEXT: asr x10, x0, #63
34
+ ; CHECK-GI-NEXT: mul x8, x0, x1
35
+ ; CHECK-GI-NEXT: mul x9, x0, x9
36
+ ; CHECK-GI-NEXT: umulh x11, x0, x1
37
+ ; CHECK-GI-NEXT: mov x0, x8
38
+ ; CHECK-GI-NEXT: madd x9, x10, x1, x9
39
+ ; CHECK-GI-NEXT: add x1, x9, x11
40
+ ; CHECK-GI-NEXT: ret
28
41
entry:
29
42
%tmp1 = sext i64 %a to i128
30
43
%tmp2 = sext i64 %b to i128
@@ -139,12 +152,20 @@ entry:
139
152
140
153
; Check the sext_inreg case.
141
154
define i64 @t11 (i64 %a ) nounwind {
142
- ; CHECK-LABEL: t11:
143
- ; CHECK: // %bb.0: // %entry
144
- ; CHECK-NEXT: mov w8, #29594 // =0x739a
145
- ; CHECK-NEXT: movk w8, #65499, lsl #16
146
- ; CHECK-NEXT: smnegl x0, w0, w8
147
- ; CHECK-NEXT: ret
155
+ ; CHECK-SD-LABEL: t11:
156
+ ; CHECK-SD: // %bb.0: // %entry
157
+ ; CHECK-SD-NEXT: mov w8, #29594 // =0x739a
158
+ ; CHECK-SD-NEXT: movk w8, #65499, lsl #16
159
+ ; CHECK-SD-NEXT: smnegl x0, w0, w8
160
+ ; CHECK-SD-NEXT: ret
161
+ ;
162
+ ; CHECK-GI-LABEL: t11:
163
+ ; CHECK-GI: // %bb.0: // %entry
164
+ ; CHECK-GI-NEXT: sxtw x8, w0
165
+ ; CHECK-GI-NEXT: mov x9, #-35942 // =0xffffffffffff739a
166
+ ; CHECK-GI-NEXT: movk x9, #65499, lsl #16
167
+ ; CHECK-GI-NEXT: mneg x0, x8, x9
168
+ ; CHECK-GI-NEXT: ret
148
169
entry:
149
170
%tmp1 = trunc i64 %a to i32
150
171
%tmp2 = sext i32 %tmp1 to i64
@@ -154,12 +175,20 @@ entry:
154
175
}
155
176
156
177
define i64 @t12 (i64 %a , i64 %b ) nounwind {
157
- ; CHECK-LABEL: t12:
158
- ; CHECK: // %bb.0: // %entry
159
- ; CHECK-NEXT: mov w8, #35118 // =0x892e
160
- ; CHECK-NEXT: movk w8, #65008, lsl #16
161
- ; CHECK-NEXT: smaddl x0, w0, w8, x1
162
- ; CHECK-NEXT: ret
178
+ ; CHECK-SD-LABEL: t12:
179
+ ; CHECK-SD: // %bb.0: // %entry
180
+ ; CHECK-SD-NEXT: mov w8, #35118 // =0x892e
181
+ ; CHECK-SD-NEXT: movk w8, #65008, lsl #16
182
+ ; CHECK-SD-NEXT: smaddl x0, w0, w8, x1
183
+ ; CHECK-SD-NEXT: ret
184
+ ;
185
+ ; CHECK-GI-LABEL: t12:
186
+ ; CHECK-GI: // %bb.0: // %entry
187
+ ; CHECK-GI-NEXT: sxtw x8, w0
188
+ ; CHECK-GI-NEXT: mov x9, #-30418 // =0xffffffffffff892e
189
+ ; CHECK-GI-NEXT: movk x9, #65008, lsl #16
190
+ ; CHECK-GI-NEXT: madd x0, x8, x9, x1
191
+ ; CHECK-GI-NEXT: ret
163
192
entry:
164
193
%tmp1 = trunc i64 %a to i32
165
194
%tmp2 = sext i32 %tmp1 to i64
0 commit comments