================ @@ -2414,9 +2420,41 @@ Value *ScalarExprEmitter::VisitCastExpr(CastExpr *CE) { return EmitScalarConversion(Visit(E), E->getType(), DestTy, CE->getExprLoc(), Opts); } - case CK_IntegralToFloating: - case CK_FloatingToIntegral: - case CK_FloatingCast: + case CK_IntegralToFloating: { + if (E->getType()->isExtVectorType() && DestTy->isExtVectorType()) { + QualType SrcElTy = E->getType()->castAs<VectorType>()->getElementType(); + if (SrcElTy->isSignedIntegerOrEnumerationType()) + return Builder.CreateSIToFP(Visit(E), ConvertType(DestTy), "conv"); + return Builder.CreateUIToFP(Visit(E), ConvertType(DestTy), "conv"); + } + CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, CE); + return EmitScalarConversion(Visit(E), E->getType(), DestTy, + CE->getExprLoc()); + } + case CK_FloatingToIntegral: { + if (E->getType()->isExtVectorType() && DestTy->isExtVectorType()) { + QualType DstElTy = DestTy->castAs<VectorType>()->getElementType(); + if (DstElTy->isSignedIntegerOrEnumerationType()) + return Builder.CreateFPToSI(Visit(E), ConvertType(DestTy), "conv"); + return Builder.CreateFPToUI(Visit(E), ConvertType(DestTy), "conv"); + } + CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, CE); + return EmitScalarConversion(Visit(E), E->getType(), DestTy, + CE->getExprLoc()); + } + case CK_FloatingCast: { + if (E->getType()->isExtVectorType() && DestTy->isExtVectorType()) { + QualType SrcElTy = E->getType()->castAs<VectorType>()->getElementType(); + QualType DstElTy = DestTy->castAs<VectorType>()->getElementType(); + if (DstElTy->castAs<BuiltinType>()->getKind() < + SrcElTy->castAs<BuiltinType>()->getKind()) + return Builder.CreateFPTrunc(Visit(E), ConvertType(DestTy), "conv"); + return Builder.CreateFPExt(Visit(E), ConvertType(DestTy), "conv"); + } + CodeGenFunction::CGFPOptionsRAII FPOptsRAII(CGF, CE); + return EmitScalarConversion(Visit(E), E->getType(), DestTy, + CE->getExprLoc()); + } ---------------- llvm-beanz wrote:
Will do. HLSL doesn't support constrained FP intrinsics (yet), but may eventually. https://github.com/llvm/llvm-project/pull/71098 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits