11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2- ; RUN: llc < %s -mtriple=aarch64-- | FileCheck %s
3- ; RUN: llc < %s -mtriple=aarch64-- -global-isel -global-isel-abort=1 | FileCheck %s --check-prefix=GISEL
2+ ; RUN: llc < %s -mtriple=aarch64-- | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3+ ; RUN: llc < %s -mtriple=aarch64-- -global-isel -global-isel-abort=1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI
44
55define <4 x i32 > @sextbool_add_vector (<4 x i32 > %c1 , <4 x i32 > %c2 , <4 x i32 > %x ) {
66; CHECK-LABEL: sextbool_add_vector:
77; CHECK: // %bb.0:
88; CHECK-NEXT: cmeq v0.4s, v0.4s, v1.4s
99; CHECK-NEXT: add v0.4s, v2.4s, v0.4s
1010; CHECK-NEXT: ret
11- ;
12- ; GISEL-LABEL: sextbool_add_vector:
13- ; GISEL: // %bb.0:
14- ; GISEL-NEXT: cmeq v0.4s, v0.4s, v1.4s
15- ; GISEL-NEXT: add v0.4s, v2.4s, v0.4s
16- ; GISEL-NEXT: ret
1711 %c = icmp eq <4 x i32 > %c1 , %c2
1812 %b = sext <4 x i1 > %c to <4 x i32 >
1913 %s = add <4 x i32 > %x , %b
2014 ret <4 x i32 > %s
2115}
2216
2317define <4 x i32 > @zextbool_sub_vector (<4 x i32 > %c1 , <4 x i32 > %c2 , <4 x i32 > %x ) {
24- ; CHECK-LABEL: zextbool_sub_vector:
25- ; CHECK: // %bb.0:
26- ; CHECK-NEXT: cmeq v0.4s, v0.4s, v1.4s
27- ; CHECK-NEXT: add v0.4s, v2.4s, v0.4s
28- ; CHECK-NEXT: ret
18+ ; CHECK-SD- LABEL: zextbool_sub_vector:
19+ ; CHECK-SD : // %bb.0:
20+ ; CHECK-SD- NEXT: cmeq v0.4s, v0.4s, v1.4s
21+ ; CHECK-SD- NEXT: add v0.4s, v2.4s, v0.4s
22+ ; CHECK-SD- NEXT: ret
2923;
30- ; GISEL -LABEL: zextbool_sub_vector:
31- ; GISEL : // %bb.0:
32- ; GISEL -NEXT: movi v3.4s, #1
33- ; GISEL -NEXT: cmeq v0.4s, v0.4s, v1.4s
34- ; GISEL -NEXT: and v0.16b, v0.16b, v3.16b
35- ; GISEL -NEXT: sub v0.4s, v2.4s, v0.4s
36- ; GISEL -NEXT: ret
24+ ; CHECK-GI -LABEL: zextbool_sub_vector:
25+ ; CHECK-GI : // %bb.0:
26+ ; CHECK-GI -NEXT: movi v3.4s, #1
27+ ; CHECK-GI -NEXT: cmeq v0.4s, v0.4s, v1.4s
28+ ; CHECK-GI -NEXT: and v0.16b, v0.16b, v3.16b
29+ ; CHECK-GI -NEXT: sub v0.4s, v2.4s, v0.4s
30+ ; CHECK-GI -NEXT: ret
3731 %c = icmp eq <4 x i32 > %c1 , %c2
3832 %b = zext <4 x i1 > %c to <4 x i32 >
3933 %s = sub <4 x i32 > %x , %b
4034 ret <4 x i32 > %s
4135}
4236
4337define i32 @assertsext_sub_1 (i1 signext %cond , i32 %y ) {
44- ; CHECK-LABEL: assertsext_sub_1:
45- ; CHECK: // %bb.0:
46- ; CHECK-NEXT: add w0, w1, w0
47- ; CHECK-NEXT: ret
38+ ; CHECK-SD- LABEL: assertsext_sub_1:
39+ ; CHECK-SD : // %bb.0:
40+ ; CHECK-SD- NEXT: add w0, w1, w0
41+ ; CHECK-SD- NEXT: ret
4842;
49- ; GISEL -LABEL: assertsext_sub_1:
50- ; GISEL : // %bb.0:
51- ; GISEL -NEXT: and w8, w0, #0x1
52- ; GISEL -NEXT: sub w0, w1, w8
53- ; GISEL -NEXT: ret
43+ ; CHECK-GI -LABEL: assertsext_sub_1:
44+ ; CHECK-GI : // %bb.0:
45+ ; CHECK-GI -NEXT: and w8, w0, #0x1
46+ ; CHECK-GI -NEXT: sub w0, w1, w8
47+ ; CHECK-GI -NEXT: ret
5448 %e = zext i1 %cond to i32
5549 %r = sub i32 %y , %e
5650 ret i32 %r
5751}
5852
5953define i32 @assertsext_add_1 (i1 signext %cond , i32 %y ) {
60- ; CHECK-LABEL: assertsext_add_1:
61- ; CHECK: // %bb.0:
62- ; CHECK-NEXT: sub w0, w1, w0
63- ; CHECK-NEXT: ret
54+ ; CHECK-SD- LABEL: assertsext_add_1:
55+ ; CHECK-SD : // %bb.0:
56+ ; CHECK-SD- NEXT: sub w0, w1, w0
57+ ; CHECK-SD- NEXT: ret
6458;
65- ; GISEL -LABEL: assertsext_add_1:
66- ; GISEL : // %bb.0:
67- ; GISEL -NEXT: and w8, w0, #0x1
68- ; GISEL -NEXT: add w0, w8, w1
69- ; GISEL -NEXT: ret
59+ ; CHECK-GI -LABEL: assertsext_add_1:
60+ ; CHECK-GI : // %bb.0:
61+ ; CHECK-GI -NEXT: and w8, w0, #0x1
62+ ; CHECK-GI -NEXT: add w0, w8, w1
63+ ; CHECK-GI -NEXT: ret
7064 %e = zext i1 %cond to i32
7165 %r = add i32 %e , %y
7266 ret i32 %r
7367}
7468
7569define i32 @assertsext_add_1_commute (i1 signext %cond , i32 %y ) {
76- ; CHECK-LABEL: assertsext_add_1_commute:
77- ; CHECK: // %bb.0:
78- ; CHECK-NEXT: sub w0, w1, w0
79- ; CHECK-NEXT: ret
70+ ; CHECK-SD- LABEL: assertsext_add_1_commute:
71+ ; CHECK-SD : // %bb.0:
72+ ; CHECK-SD- NEXT: sub w0, w1, w0
73+ ; CHECK-SD- NEXT: ret
8074;
81- ; GISEL -LABEL: assertsext_add_1_commute:
82- ; GISEL : // %bb.0:
83- ; GISEL -NEXT: and w8, w0, #0x1
84- ; GISEL -NEXT: add w0, w1, w8
85- ; GISEL -NEXT: ret
75+ ; CHECK-GI -LABEL: assertsext_add_1_commute:
76+ ; CHECK-GI : // %bb.0:
77+ ; CHECK-GI -NEXT: and w8, w0, #0x1
78+ ; CHECK-GI -NEXT: add w0, w1, w8
79+ ; CHECK-GI -NEXT: ret
8680 %e = zext i1 %cond to i32
8781 %r = add i32 %y , %e
8882 ret i32 %r
@@ -92,10 +86,6 @@ define i32 @callee_signext_i1(i1 signext %0) {
9286; CHECK-LABEL: callee_signext_i1:
9387; CHECK: // %bb.0:
9488; CHECK-NEXT: ret
95- ;
96- ; GISEL-LABEL: callee_signext_i1:
97- ; GISEL: // %bb.0:
98- ; GISEL-NEXT: ret
9989 %r = sext i1 %0 to i32
10090 ret i32 %r
10191}
@@ -110,16 +100,6 @@ define i32 @caller_signext_i1() {
110100; CHECK-NEXT: bl callee_signext_i1
111101; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
112102; CHECK-NEXT: ret
113- ;
114- ; GISEL-LABEL: caller_signext_i1:
115- ; GISEL: // %bb.0:
116- ; GISEL-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
117- ; GISEL-NEXT: .cfi_def_cfa_offset 16
118- ; GISEL-NEXT: .cfi_offset w30, -16
119- ; GISEL-NEXT: mov w0, #-1 // =0xffffffff
120- ; GISEL-NEXT: bl callee_signext_i1
121- ; GISEL-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
122- ; GISEL-NEXT: ret
123103 %r = call i32 @callee_signext_i1 (i1 signext true )
124104 ret i32 %r
125105}
0 commit comments