diff options
author | Paul Walker <paul.walker@arm.com> | 2024-05-07 11:23:55 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-07 11:23:55 +0100 |
commit | 235cea720c0fa6dcf0bf5aff15001de88b6042f9 (patch) | |
tree | 71e356866162e7e6783045f7ef22161329c5f768 /llvm/lib/IR/Verifier.cpp | |
parent | e232659028365b51feb001565884b3b8e62cc2a9 (diff) | |
download | llvm-235cea720c0fa6dcf0bf5aff15001de88b6042f9.zip llvm-235cea720c0fa6dcf0bf5aff15001de88b6042f9.tar.gz llvm-235cea720c0fa6dcf0bf5aff15001de88b6042f9.tar.bz2 |
[NFC][LLVM] Refactor rounding mode detection of constrained fp intrinsic IDs (#90854)
I've refactored the code to genericise the implementation to better
allow for target specific constrained fp intrinsics.
Diffstat (limited to 'llvm/lib/IR/Verifier.cpp')
-rw-r--r-- | llvm/lib/IR/Verifier.cpp | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index 41d3fce..aa8160d 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -5384,11 +5384,13 @@ void Verifier::visitIntrinsicCall(Intrinsic::ID ID, CallBase &Call) { } #define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID: #include "llvm/IR/VPIntrinsics.def" +#undef BEGIN_REGISTER_VP_INTRINSIC visitVPIntrinsic(cast<VPIntrinsic>(Call)); break; #define INSTRUCTION(NAME, NARGS, ROUND_MODE, INTRINSIC) \ case Intrinsic::INTRINSIC: #include "llvm/IR/ConstrainedOps.def" +#undef INSTRUCTION visitConstrainedFPIntrinsic(cast<ConstrainedFPIntrinsic>(Call)); break; case Intrinsic::dbg_declare: // llvm.dbg.declare @@ -6527,19 +6529,13 @@ void Verifier::visitVPIntrinsic(VPIntrinsic &VPI) { } void Verifier::visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI) { - unsigned NumOperands; - bool HasRoundingMD; - switch (FPI.getIntrinsicID()) { -#define INSTRUCTION(NAME, NARG, ROUND_MODE, INTRINSIC) \ - case Intrinsic::INTRINSIC: \ - NumOperands = NARG; \ - HasRoundingMD = ROUND_MODE; \ - break; -#include "llvm/IR/ConstrainedOps.def" - default: - llvm_unreachable("Invalid constrained FP intrinsic!"); - } + unsigned NumOperands = FPI.getNonMetadataArgCount(); + bool HasRoundingMD = + Intrinsic::hasConstrainedFPRoundingModeOperand(FPI.getIntrinsicID()); + + // Add the expected number of metadata operands. NumOperands += (1 + HasRoundingMD); + // Compare intrinsics carry an extra predicate metadata operand. if (isa<ConstrainedFPCmpIntrinsic>(FPI)) NumOperands += 1; @@ -6553,8 +6549,8 @@ void Verifier::visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI) { Type *ResultTy = FPI.getType(); Check(!ValTy->isVectorTy() && !ResultTy->isVectorTy(), "Intrinsic does not support vectors", &FPI); - } break; + } case Intrinsic::experimental_constrained_lround: case Intrinsic::experimental_constrained_llround: { @@ -6593,8 +6589,8 @@ void Verifier::visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI) { "Intrinsic first argument and result vector lengths must be equal", &FPI); } - } break; + } case Intrinsic::experimental_constrained_sitofp: case Intrinsic::experimental_constrained_uitofp: { @@ -6616,7 +6612,8 @@ void Verifier::visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI) { "Intrinsic first argument and result vector lengths must be equal", &FPI); } - } break; + break; + } case Intrinsic::experimental_constrained_fptrunc: case Intrinsic::experimental_constrained_fpext: { @@ -6645,8 +6642,8 @@ void Verifier::visitConstrainedFPIntrinsic(ConstrainedFPIntrinsic &FPI) { "Intrinsic first argument's type must be smaller than result type", &FPI); } - } break; + } default: break; |