@@ -11891,20 +11891,22 @@ void SelectionDAGISel::LowerArguments(const Function &F) {
1189111891 AssertOp = ISD::AssertSext;
1189211892 else if (Arg.hasAttribute(Attribute::ZExt))
1189311893 AssertOp = ISD::AssertZext;
11894- if (Arg.hasAttribute(Attribute::NoFPClass)) {
11895- SDNodeFlags InValFlags = InVals[i]->getFlags();
11894+ SDValue OutVal =
11895+ getCopyFromParts(DAG, dl, &InVals[i], NumParts, PartVT, VT, nullptr,
11896+ NewRoot, F.getCallingConv(), AssertOp);
11897+ if (Arg.hasAttribute(Attribute::NoFPClass) &&
11898+ OutVal.getValueType().isFloatingPoint()) {
11899+ SDNodeFlags OutValFlags = OutVal->getFlags();
1189611900 bool NoSNaN = ((Arg.getNoFPClass() & llvm::fcSNan) == llvm::fcSNan);
1189711901 bool NoQNaN = ((Arg.getNoFPClass() & llvm::fcQNan) == llvm::fcQNan);
11898- InValFlags.setNoSNaNs(NoSNaN);
11899- InValFlags.setNoQNaNs(NoQNaN);
11900- InValFlags.setNoInfs((Arg.getNoFPClass() & llvm::fcInf) ==
11901- llvm::fcInf);
11902- InVals[i]->setFlags(InValFlags);
11902+ bool NoInf = ((Arg.getNoFPClass() & llvm::fcInf) == llvm::fcInf);
11903+ OutValFlags.setNoSNaNs(NoSNaN);
11904+ OutValFlags.setNoQNaNs(NoQNaN);
11905+ OutValFlags.setNoInfs(NoInf);
11906+ OutVal =
11907+ DAG.getNode(ISD::AssertNoFPClass, dl, VT, OutVal, OutValFlags);
1190311908 }
11904-
11905- ArgValues.push_back(getCopyFromParts(DAG, dl, &InVals[i], NumParts,
11906- PartVT, VT, nullptr, NewRoot,
11907- F.getCallingConv(), AssertOp));
11909+ ArgValues.push_back(OutVal);
1190811910 }
1190911911
1191011912 i += NumParts;
0 commit comments