Skip to content

Commit 79e2724

Browse files
wip
Signed-off-by: Mikhail R. Gadelha <[email protected]>
1 parent aa43f3a commit 79e2724

File tree

5 files changed

+37
-18
lines changed

5 files changed

+37
-18
lines changed

llvm/include/llvm/CodeGen/TargetLowering.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2542,6 +2542,10 @@ class TargetLoweringBase {
25422542
/// type and indicate what to do about it. Note that VT may refer to either
25432543
/// the type of a result or that of an operand of Op.
25442544
void setOperationAction(unsigned Op, MVT VT, LegalizeAction Action) {
2545+
// if(Op == ISD::VECREDUCE_FADD && VT == MVT::nxv1f16)
2546+
// asm("int $3");
2547+
// if(Op == ISD::VECREDUCE_FADD && VT == MVT::nxv1f32)
2548+
// asm("int $3");
25452549
assert(Op < std::size(OpActions[0]) && "Table isn't big enough!");
25462550
OpActions[(unsigned)VT.SimpleTy][Op] = Action;
25472551
}

llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5154,6 +5154,8 @@ void SelectionDAGLegalize::PromoteNode(SDNode *Node) {
51545154
Node->getOpcode() == ISD::VP_REDUCE_FMINIMUM ||
51555155
Node->getOpcode() == ISD::VP_REDUCE_SEQ_FADD)
51565156
OVT = Node->getOperand(1).getSimpleValueType();
5157+
if (Node->getOpcode() == ISD::VECREDUCE_FADD)
5158+
OVT = Node->getOperand(0).getSimpleValueType();
51575159
if (Node->getOpcode() == ISD::BR_CC ||
51585160
Node->getOpcode() == ISD::SELECT_CC)
51595161
OVT = Node->getOperand(2).getSimpleValueType();
@@ -5854,6 +5856,23 @@ void SelectionDAGLegalize::PromoteNode(SDNode *Node) {
58545856
DAG.getIntPtrConstant(0, dl, /*isTarget=*/true)));
58555857
break;
58565858
}
5859+
case ISD::VECREDUCE_ADD:
5860+
case ISD::VECREDUCE_MUL:
5861+
case ISD::VECREDUCE_AND:
5862+
case ISD::VECREDUCE_OR:
5863+
case ISD::VECREDUCE_XOR:
5864+
case ISD::VECREDUCE_SMAX:
5865+
case ISD::VECREDUCE_SMIN:
5866+
case ISD::VECREDUCE_UMAX:
5867+
case ISD::VECREDUCE_UMIN:
5868+
case ISD::VECREDUCE_FADD:
5869+
case ISD::VECREDUCE_FMUL:
5870+
case ISD::VECREDUCE_FMAX:
5871+
case ISD::VECREDUCE_FMIN:
5872+
case ISD::VECREDUCE_FMAXIMUM:
5873+
case ISD::VECREDUCE_FMINIMUM:
5874+
Results.push_back(TLI.expandVecReduce(Node, DAG));
5875+
break;
58575876
case ISD::VP_REDUCE_FADD:
58585877
case ISD::VP_REDUCE_FMUL:
58595878
case ISD::VP_REDUCE_FMAX:

llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,6 +1003,11 @@ bool DAGTypeLegalizer::SoftenFloatOperand(SDNode *N, unsigned OpNo) {
10031003
LLVM_DEBUG(dbgs() << "Soften float operand " << OpNo << ": "; N->dump(&DAG));
10041004
SDValue Res = SDValue();
10051005

1006+
// if (CustomLowerNode(N, N->getOperand(OpNo).getValueType(), false)) {
1007+
// LLVM_DEBUG(dbgs() << "Node has been custom lowered, done\n");
1008+
// return false;
1009+
// }
1010+
10061011
switch (N->getOpcode()) {
10071012
default:
10081013
#ifndef NDEBUG

llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,8 @@ SDValue VectorLegalizer::LegalizeOp(SDValue Op) {
538538
}
539539

540540
LLVM_DEBUG(dbgs() << "\nLegalizing vector op: "; Node->dump(&DAG));
541+
if (Node->getOpcode() == ISD::VECREDUCE_FADD)
542+
Action = TargetLowering::Legal;
541543

542544
SmallVector<SDValue, 8> ResultVals;
543545
switch (Action) {
@@ -1152,23 +1154,6 @@ void VectorLegalizer::Expand(SDNode *Node, SmallVectorImpl<SDValue> &Results) {
11521154
#include "llvm/IR/ConstrainedOps.def"
11531155
ExpandStrictFPOp(Node, Results);
11541156
return;
1155-
case ISD::VECREDUCE_ADD:
1156-
case ISD::VECREDUCE_MUL:
1157-
case ISD::VECREDUCE_AND:
1158-
case ISD::VECREDUCE_OR:
1159-
case ISD::VECREDUCE_XOR:
1160-
case ISD::VECREDUCE_SMAX:
1161-
case ISD::VECREDUCE_SMIN:
1162-
case ISD::VECREDUCE_UMAX:
1163-
case ISD::VECREDUCE_UMIN:
1164-
case ISD::VECREDUCE_FADD:
1165-
case ISD::VECREDUCE_FMUL:
1166-
case ISD::VECREDUCE_FMAX:
1167-
case ISD::VECREDUCE_FMIN:
1168-
case ISD::VECREDUCE_FMAXIMUM:
1169-
case ISD::VECREDUCE_FMINIMUM:
1170-
Results.push_back(TLI.expandVecReduce(Node, DAG));
1171-
return;
11721157
case ISD::VECREDUCE_SEQ_FADD:
11731158
case ISD::VECREDUCE_SEQ_FMUL:
11741159
Results.push_back(TLI.expandVecReduceSeq(Node, DAG));

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,11 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
587587
setOperationAction(ISD::STRICT_FP16_TO_FP, MVT::f64, Expand);
588588
}
589589

590+
// for (auto Op : {ISD::FP16_TO_FP, ISD::STRICT_FP16_TO_FP, ISD::FP_TO_FP16,
591+
// ISD::STRICT_FP_TO_FP16}) {
592+
// setOperationAction(Op, MVT::f128, Custom);
593+
// }
594+
590595
if (Subtarget.is64Bit()) {
591596
setOperationAction({ISD::FP_TO_UINT, ISD::FP_TO_SINT,
592597
ISD::STRICT_FP_TO_UINT, ISD::STRICT_FP_TO_SINT},
@@ -975,7 +980,8 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
975980
ISD::VP_FMINIMUM,
976981
ISD::VP_FMAXIMUM,
977982
ISD::VP_REDUCE_FMINIMUM,
978-
ISD::VP_REDUCE_FMAXIMUM};
983+
ISD::VP_REDUCE_FMAXIMUM,
984+
ISD::VECREDUCE_FADD};
979985

980986
// Sets common operation actions on RVV floating-point vector types.
981987
const auto SetCommonVFPActions = [&](MVT VT) {

0 commit comments

Comments
 (0)