@@ -1098,17 +1098,99 @@ define bfloat @fcvt_bf16_wu_load(ptr %p) nounwind {
1098
1098
ret bfloat %1
1099
1099
}
1100
1100
1101
- ; TODO: The following tests error on rv32 with zfbfmin enabled.
1102
-
1103
- ; define bfloat @fcvt_bf16_l(i64 %a) nounwind {
1104
- ; %1 = sitofp i64 %a to bfloat
1105
- ; ret bfloat %1
1106
- ; }
1101
+ define bfloat @fcvt_bf16_l (i64 %a ) nounwind {
1102
+ ; CHECK32ZFBFMIN-LABEL: fcvt_bf16_l:
1103
+ ; CHECK32ZFBFMIN: # %bb.0:
1104
+ ; CHECK32ZFBFMIN-NEXT: addi sp, sp, -16
1105
+ ; CHECK32ZFBFMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1106
+ ; CHECK32ZFBFMIN-NEXT: call __floatdibf
1107
+ ; CHECK32ZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
1108
+ ; CHECK32ZFBFMIN-NEXT: addi sp, sp, 16
1109
+ ; CHECK32ZFBFMIN-NEXT: ret
1110
+ ;
1111
+ ; RV32ID-LABEL: fcvt_bf16_l:
1112
+ ; RV32ID: # %bb.0:
1113
+ ; RV32ID-NEXT: addi sp, sp, -16
1114
+ ; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1115
+ ; RV32ID-NEXT: call __floatdisf
1116
+ ; RV32ID-NEXT: call __truncsfbf2
1117
+ ; RV32ID-NEXT: fmv.x.w a0, fa0
1118
+ ; RV32ID-NEXT: lui a1, 1048560
1119
+ ; RV32ID-NEXT: or a0, a0, a1
1120
+ ; RV32ID-NEXT: fmv.w.x fa0, a0
1121
+ ; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
1122
+ ; RV32ID-NEXT: addi sp, sp, 16
1123
+ ; RV32ID-NEXT: ret
1124
+ ;
1125
+ ; CHECK64ZFBFMIN-LABEL: fcvt_bf16_l:
1126
+ ; CHECK64ZFBFMIN: # %bb.0:
1127
+ ; CHECK64ZFBFMIN-NEXT: fcvt.s.l fa5, a0
1128
+ ; CHECK64ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5
1129
+ ; CHECK64ZFBFMIN-NEXT: ret
1130
+ ;
1131
+ ; RV64ID-LABEL: fcvt_bf16_l:
1132
+ ; RV64ID: # %bb.0:
1133
+ ; RV64ID-NEXT: addi sp, sp, -16
1134
+ ; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1135
+ ; RV64ID-NEXT: fcvt.s.l fa0, a0
1136
+ ; RV64ID-NEXT: call __truncsfbf2
1137
+ ; RV64ID-NEXT: fmv.x.w a0, fa0
1138
+ ; RV64ID-NEXT: lui a1, 1048560
1139
+ ; RV64ID-NEXT: or a0, a0, a1
1140
+ ; RV64ID-NEXT: fmv.w.x fa0, a0
1141
+ ; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
1142
+ ; RV64ID-NEXT: addi sp, sp, 16
1143
+ ; RV64ID-NEXT: ret
1144
+ %1 = sitofp i64 %a to bfloat
1145
+ ret bfloat %1
1146
+ }
1107
1147
1108
- ; define bfloat @fcvt_bf16_lu(i64 %a) nounwind {
1109
- ; %1 = uitofp i64 %a to bfloat
1110
- ; ret bfloat %1
1111
- ; }
1148
+ define bfloat @fcvt_bf16_lu (i64 %a ) nounwind {
1149
+ ; CHECK32ZFBFMIN-LABEL: fcvt_bf16_lu:
1150
+ ; CHECK32ZFBFMIN: # %bb.0:
1151
+ ; CHECK32ZFBFMIN-NEXT: addi sp, sp, -16
1152
+ ; CHECK32ZFBFMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1153
+ ; CHECK32ZFBFMIN-NEXT: call __floatundibf
1154
+ ; CHECK32ZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
1155
+ ; CHECK32ZFBFMIN-NEXT: addi sp, sp, 16
1156
+ ; CHECK32ZFBFMIN-NEXT: ret
1157
+ ;
1158
+ ; RV32ID-LABEL: fcvt_bf16_lu:
1159
+ ; RV32ID: # %bb.0:
1160
+ ; RV32ID-NEXT: addi sp, sp, -16
1161
+ ; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
1162
+ ; RV32ID-NEXT: call __floatundisf
1163
+ ; RV32ID-NEXT: call __truncsfbf2
1164
+ ; RV32ID-NEXT: fmv.x.w a0, fa0
1165
+ ; RV32ID-NEXT: lui a1, 1048560
1166
+ ; RV32ID-NEXT: or a0, a0, a1
1167
+ ; RV32ID-NEXT: fmv.w.x fa0, a0
1168
+ ; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
1169
+ ; RV32ID-NEXT: addi sp, sp, 16
1170
+ ; RV32ID-NEXT: ret
1171
+ ;
1172
+ ; CHECK64ZFBFMIN-LABEL: fcvt_bf16_lu:
1173
+ ; CHECK64ZFBFMIN: # %bb.0:
1174
+ ; CHECK64ZFBFMIN-NEXT: fcvt.s.lu fa5, a0
1175
+ ; CHECK64ZFBFMIN-NEXT: fcvt.bf16.s fa0, fa5
1176
+ ; CHECK64ZFBFMIN-NEXT: ret
1177
+ ;
1178
+ ; RV64ID-LABEL: fcvt_bf16_lu:
1179
+ ; RV64ID: # %bb.0:
1180
+ ; RV64ID-NEXT: addi sp, sp, -16
1181
+ ; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
1182
+ ; RV64ID-NEXT: fcvt.s.lu fa0, a0
1183
+ ; RV64ID-NEXT: call __truncsfbf2
1184
+ ; RV64ID-NEXT: fmv.x.w a0, fa0
1185
+ ; RV64ID-NEXT: lui a1, 1048560
1186
+ ; RV64ID-NEXT: or a0, a0, a1
1187
+ ; RV64ID-NEXT: fmv.w.x fa0, a0
1188
+ ; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
1189
+ ; RV64ID-NEXT: addi sp, sp, 16
1190
+ ; RV64ID-NEXT: ret
1191
+ %1 = uitofp i64 %a to bfloat
1192
+ ret bfloat %1
1193
+ }
1112
1194
1113
1195
define bfloat @fcvt_bf16_s (float %a ) nounwind {
1114
1196
; CHECK32ZFBFMIN-LABEL: fcvt_bf16_s:
0 commit comments