[AArch64] Don't try to custom lower fp16 selects with nofp (#129492) · llvm/llvm-project@1d4d84c (original) (raw)
`@@ -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
`+
}
`