[llvm] [SelectionDAG] Add expansion for llvm.convert.to.arbitrary.fp (PR #193595)
Dmitry Sidorov via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 23 06:34:13 PDT 2026
================
@@ -7194,6 +7194,48 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I,
SemConst));
return;
}
+ case Intrinsic::convert_to_arbitrary_fp: {
+ // Extract format metadata and convert to semantics enum.
+ EVT DstVT = TLI.getValueType(DAG.getDataLayout(), I.getType());
+ Metadata *MD = cast<MetadataAsValue>(I.getArgOperand(1))->getMetadata();
+ StringRef FormatStr = cast<MDString>(MD)->getString();
+ const fltSemantics *DstSem =
+ APFloatBase::getArbitraryFPSemantics(FormatStr);
+ if (!DstSem) {
+ DAG.getContext()->emitError(
+ "convert_to_arbitrary_fp: not implemented format '" + FormatStr +
+ "'");
+ setValue(&I, DAG.getPOISON(DstVT));
+ return;
+ }
+ APFloatBase::Semantics SemEnum = APFloatBase::SemanticsToEnum(*DstSem);
+
+ Metadata *RoundMD =
+ cast<MetadataAsValue>(I.getArgOperand(2))->getMetadata();
+ StringRef RoundStr = cast<MDString>(RoundMD)->getString();
+ std::optional<RoundingMode> RoundMode = convertStrToRoundingMode(RoundStr);
+ if (!RoundMode || *RoundMode == RoundingMode::Dynamic) {
----------------
MrSidims wrote:
Indeed, replaced with assertion (though, may be, even the assertion can be removed).
https://github.com/llvm/llvm-project/pull/193595
More information about the llvm-commits
mailing list