mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Fill in missing support for ISD::FEXP, ISD::FPOWI, and friends.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105283 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2f3257ef04
commit
956b349034
@ -620,6 +620,7 @@ private:
|
||||
|
||||
SDValue WidenVecRes_Binary(SDNode *N);
|
||||
SDValue WidenVecRes_Convert(SDNode *N);
|
||||
SDValue WidenVecRes_POWI(SDNode *N);
|
||||
SDValue WidenVecRes_Shift(SDNode *N);
|
||||
SDValue WidenVecRes_Unary(SDNode *N);
|
||||
SDValue WidenVecRes_InregOp(SDNode *N);
|
||||
|
@ -448,6 +448,11 @@ void DAGTypeLegalizer::SplitVectorResult(SDNode *N, unsigned ResNo) {
|
||||
case ISD::SIGN_EXTEND:
|
||||
case ISD::ZERO_EXTEND:
|
||||
case ISD::ANY_EXTEND:
|
||||
case ISD::FEXP:
|
||||
case ISD::FEXP2:
|
||||
case ISD::FLOG:
|
||||
case ISD::FLOG2:
|
||||
case ISD::FLOG10:
|
||||
SplitVecRes_UnaryOp(N, Lo, Hi);
|
||||
break;
|
||||
|
||||
@ -1199,7 +1204,6 @@ void DAGTypeLegalizer::WidenVectorResult(SDNode *N, unsigned ResNo) {
|
||||
case ISD::FDIV:
|
||||
case ISD::FMUL:
|
||||
case ISD::FPOW:
|
||||
case ISD::FPOWI:
|
||||
case ISD::FREM:
|
||||
case ISD::FSUB:
|
||||
case ISD::MUL:
|
||||
@ -1215,6 +1219,10 @@ void DAGTypeLegalizer::WidenVectorResult(SDNode *N, unsigned ResNo) {
|
||||
Res = WidenVecRes_Binary(N);
|
||||
break;
|
||||
|
||||
case ISD::FPOWI:
|
||||
Res = WidenVecRes_POWI(N);
|
||||
break;
|
||||
|
||||
case ISD::SHL:
|
||||
case ISD::SRA:
|
||||
case ISD::SRL:
|
||||
@ -1241,6 +1249,11 @@ void DAGTypeLegalizer::WidenVectorResult(SDNode *N, unsigned ResNo) {
|
||||
case ISD::FNEG:
|
||||
case ISD::FSIN:
|
||||
case ISD::FSQRT:
|
||||
case ISD::FEXP:
|
||||
case ISD::FEXP2:
|
||||
case ISD::FLOG:
|
||||
case ISD::FLOG2:
|
||||
case ISD::FLOG10:
|
||||
Res = WidenVecRes_Unary(N);
|
||||
break;
|
||||
}
|
||||
@ -1410,6 +1423,13 @@ SDValue DAGTypeLegalizer::WidenVecRes_Convert(SDNode *N) {
|
||||
return DAG.getNode(ISD::BUILD_VECTOR, dl, WidenVT, &Ops[0], WidenNumElts);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::WidenVecRes_POWI(SDNode *N) {
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue InOp = GetWidenedVector(N->getOperand(0));
|
||||
SDValue ShOp = N->getOperand(1);
|
||||
return DAG.getNode(N->getOpcode(), N->getDebugLoc(), WidenVT, InOp, ShOp);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::WidenVecRes_Shift(SDNode *N) {
|
||||
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
|
||||
SDValue InOp = GetWidenedVector(N->getOperand(0));
|
||||
|
@ -5674,13 +5674,16 @@ std::string SDNode::getOperationName(const SelectionDAG *G) const {
|
||||
case ISD::FSQRT: return "fsqrt";
|
||||
case ISD::FSIN: return "fsin";
|
||||
case ISD::FCOS: return "fcos";
|
||||
case ISD::FPOWI: return "fpowi";
|
||||
case ISD::FPOW: return "fpow";
|
||||
case ISD::FTRUNC: return "ftrunc";
|
||||
case ISD::FFLOOR: return "ffloor";
|
||||
case ISD::FCEIL: return "fceil";
|
||||
case ISD::FRINT: return "frint";
|
||||
case ISD::FNEARBYINT: return "fnearbyint";
|
||||
case ISD::FEXP: return "fexp";
|
||||
case ISD::FEXP2: return "fexp2";
|
||||
case ISD::FLOG: return "flog";
|
||||
case ISD::FLOG2: return "flog2";
|
||||
case ISD::FLOG10: return "flog10";
|
||||
|
||||
// Binary operators
|
||||
case ISD::ADD: return "add";
|
||||
@ -5711,7 +5714,9 @@ std::string SDNode::getOperationName(const SelectionDAG *G) const {
|
||||
case ISD::FREM: return "frem";
|
||||
case ISD::FCOPYSIGN: return "fcopysign";
|
||||
case ISD::FGETSIGN: return "fgetsign";
|
||||
case ISD::FPOW: return "fpow";
|
||||
|
||||
case ISD::FPOWI: return "fpowi";
|
||||
case ISD::SETCC: return "setcc";
|
||||
case ISD::VSETCC: return "vsetcc";
|
||||
case ISD::SELECT: return "select";
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: llc < %s -march=x86-64 | grep call | count 16
|
||||
; RUN: llc < %s -march=x86-64 | grep call | count 43
|
||||
|
||||
declare <4 x double> @llvm.sin.v4f64(<4 x double> %p)
|
||||
declare <4 x double> @llvm.cos.v4f64(<4 x double> %p)
|
||||
@ -25,3 +25,28 @@ define <4 x double> @zoo(<4 x double> %p, i32 %q)
|
||||
%t = call <4 x double> @llvm.powi.v4f64(<4 x double> %p, i32 %q)
|
||||
ret <4 x double> %t
|
||||
}
|
||||
|
||||
|
||||
declare <9 x double> @llvm.exp.v9f64(<9 x double> %a)
|
||||
declare <9 x double> @llvm.pow.v9f64(<9 x double> %a, <9 x double> %b)
|
||||
declare <9 x double> @llvm.powi.v9f64(<9 x double> %a, i32)
|
||||
|
||||
define void @a(<9 x double>* %p) nounwind {
|
||||
%a = load <9 x double>* %p
|
||||
%r = call <9 x double> @llvm.exp.v9f64(<9 x double> %a)
|
||||
store <9 x double> %r, <9 x double>* %p
|
||||
ret void
|
||||
}
|
||||
define void @b(<9 x double>* %p, <9 x double>* %q) nounwind {
|
||||
%a = load <9 x double>* %p
|
||||
%b = load <9 x double>* %q
|
||||
%r = call <9 x double> @llvm.pow.v9f64(<9 x double> %a, <9 x double> %b)
|
||||
store <9 x double> %r, <9 x double>* %p
|
||||
ret void
|
||||
}
|
||||
define void @c(<9 x double>* %p, i32 %n) nounwind {
|
||||
%a = load <9 x double>* %p
|
||||
%r = call <9 x double> @llvm.powi.v9f64(<9 x double> %a, i32 %n)
|
||||
store <9 x double> %r, <9 x double>* %p
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user