@@ -29,3 +29,94 @@ entry:
29
29
ret bfloat %0
30
30
}
31
31
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