aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineVerifier.cpp
diff options
context:
space:
mode:
authorJessica Paquette <jpaquette@apple.com>2021-08-17 09:45:23 -0700
committerJessica Paquette <jpaquette@apple.com>2021-08-18 10:42:05 -0700
commit0a2b1ba33ae6dcaedb81417f7c4cc714f72a5968 (patch)
tree4f37456dea2c6b7541bccec52ca994a839217aaf /llvm/lib/CodeGen/MachineVerifier.cpp
parente8c8407aca7c6c5778cb969fef89ffaa212d6de5 (diff)
downloadllvm-0a2b1ba33ae6dcaedb81417f7c4cc714f72a5968.zip
llvm-0a2b1ba33ae6dcaedb81417f7c4cc714f72a5968.tar.gz
llvm-0a2b1ba33ae6dcaedb81417f7c4cc714f72a5968.tar.bz2
[GlobalISel] Add G_ISNAN
Add a generic opcode equivalent to the `llvm.isnan` intrinsic + MachineVerifier support for it. We need an opcode here because we may want target-specific lowering later on. Differential Revision: https://reviews.llvm.org/D108222
Diffstat (limited to 'llvm/lib/CodeGen/MachineVerifier.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineVerifier.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MachineVerifier.cpp b/llvm/lib/CodeGen/MachineVerifier.cpp
index 2b980ec..0c49504 100644
--- a/llvm/lib/CodeGen/MachineVerifier.cpp
+++ b/llvm/lib/CodeGen/MachineVerifier.cpp
@@ -947,6 +947,25 @@ void MachineVerifier::verifyPreISelGenericInstruction(const MachineInstr *MI) {
// Verify properties of various specific instruction types
unsigned Opc = MI->getOpcode();
switch (Opc) {
+ case TargetOpcode::G_ISNAN: {
+ LLT DstTy = MRI->getType(MI->getOperand(0).getReg());
+ LLT SrcTy = MRI->getType(MI->getOperand(1).getReg());
+ LLT S1 = DstTy.isVector() ? DstTy.getElementType() : DstTy;
+ if (S1 != LLT::scalar(1)) {
+ report("Destination must be a 1-bit scalar or vector of 1-bit elements",
+ MI);
+ break;
+ }
+
+ // Disallow pointers.
+ LLT SrcOrElt = SrcTy.isVector() ? SrcTy.getElementType() : SrcTy;
+ if (!SrcOrElt.isScalar()) {
+ report("Source must be a scalar or vector of scalars", MI);
+ break;
+ }
+ verifyVectorElementMatch(DstTy, SrcTy, MI);
+ break;
+ }
case TargetOpcode::G_ASSERT_SEXT:
case TargetOpcode::G_ASSERT_ZEXT: {
std::string OpcName =