@@ -29,3 +29,94 @@ entry:
2929 ret bfloat %0
3030}
3131
32+ define double @select_f64 (double %a , double %b , i1 %c ) {
33+ ; CHECK-LABEL: select_f64:
34+ ; CHECK: // %bb.0: // %entry
35+ ; CHECK-NEXT: tst w2, #0x1
36+ ; CHECK-NEXT: csel x0, x0, x1, ne
37+ ; CHECK-NEXT: ret
38+ entry:
39+ %0 = select i1 %c , double %a , double %b
40+ ret double %0
41+ }
42+
43+ define float @select_f32 (float %a , float %b , i1 %c ) {
44+ ; CHECK-LABEL: select_f32:
45+ ; CHECK: // %bb.0: // %entry
46+ ; CHECK-NEXT: tst w2, #0x1
47+ ; CHECK-NEXT: csel w0, w0, w1, ne
48+ ; CHECK-NEXT: ret
49+ entry:
50+ %0 = select i1 %c , float %a , float %b
51+ ret float %0
52+ }
53+
54+ define half @select_f16 (half %a , half %b , i1 %c ) {
55+ ; CHECK-LABEL: select_f16:
56+ ; CHECK: // %bb.0: // %entry
57+ ; CHECK-NEXT: tst w2, #0x1
58+ ; CHECK-NEXT: csel w0, w0, w1, ne
59+ ; CHECK-NEXT: ret
60+ entry:
61+ %0 = select i1 %c , half %a , half %b
62+ ret half %0
63+ }
64+
65+ define bfloat @select_bf16 (bfloat %a , bfloat %b , i1 %c ) {
66+ ; CHECK-LABEL: select_bf16:
67+ ; CHECK: // %bb.0: // %entry
68+ ; CHECK-NEXT: tst w2, #0x1
69+ ; CHECK-NEXT: csel w0, w0, w1, ne
70+ ; CHECK-NEXT: ret
71+ entry:
72+ %0 = select i1 %c , bfloat %a , bfloat %b
73+ ret bfloat %0
74+ }
75+
76+ define double @selectcc_f64 (double %a , double %b , i32 %d ) {
77+ ; CHECK-LABEL: selectcc_f64:
78+ ; CHECK: // %bb.0: // %entry
79+ ; CHECK-NEXT: cmp w2, #0
80+ ; CHECK-NEXT: csel x0, x0, x1, lt
81+ ; CHECK-NEXT: ret
82+ entry:
83+ %c = icmp slt i32 %d , 0
84+ %0 = select i1 %c , double %a , double %b
85+ ret double %0
86+ }
87+
88+ define float @selectcc_f32 (float %a , float %b , i32 %d ) {
89+ ; CHECK-LABEL: selectcc_f32:
90+ ; CHECK: // %bb.0: // %entry
91+ ; CHECK-NEXT: cmp w2, #0
92+ ; CHECK-NEXT: csel w0, w0, w1, lt
93+ ; CHECK-NEXT: ret
94+ entry:
95+ %c = icmp slt i32 %d , 0
96+ %0 = select i1 %c , float %a , float %b
97+ ret float %0
98+ }
99+
100+ define half @selectcc_f16 (half %a , half %b , i32 %d ) {
101+ ; CHECK-LABEL: selectcc_f16:
102+ ; CHECK: // %bb.0: // %entry
103+ ; CHECK-NEXT: cmp w2, #0
104+ ; CHECK-NEXT: csel w0, w0, w1, lt
105+ ; CHECK-NEXT: ret
106+ entry:
107+ %c = icmp slt i32 %d , 0
108+ %0 = select i1 %c , half %a , half %b
109+ ret half %0
110+ }
111+
112+ define bfloat @selectcc_bf16 (bfloat %a , bfloat %b , i32 %d ) {
113+ ; CHECK-LABEL: selectcc_bf16:
114+ ; CHECK: // %bb.0: // %entry
115+ ; CHECK-NEXT: cmp w2, #0
116+ ; CHECK-NEXT: csel w0, w0, w1, lt
117+ ; CHECK-NEXT: ret
118+ entry:
119+ %c = icmp slt i32 %d , 0
120+ %0 = select i1 %c , bfloat %a , bfloat %b
121+ ret bfloat %0
122+ }
0 commit comments