OSDN Git Service

add checking intentionally elided for vfcmp/vicmp since they should really
authorChris Lattner <sabre@nondot.org>
Mon, 5 Jan 2009 08:09:48 +0000 (08:09 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 5 Jan 2009 08:09:48 +0000 (08:09 +0000)
just be removed.  However, this fixes PR3281:crash04.ll, diagnosing it with:

lvm-as: crash04.ll:2:13: vfcmp requires vector floating point operands
  vfcmp uno double* undef, undef
            ^

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61680 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/LLParser.cpp

index 681a662..6894639 100644 (file)
@@ -2677,8 +2677,12 @@ bool LLParser::ParseCompare(Instruction *&Inst, PerFunctionState &PFS,
       return Error(Loc, "icmp requires integer operands");
     Inst = new ICmpInst(CmpInst::Predicate(Pred), LHS, RHS);
   } else if (Opc == Instruction::VFCmp) {
+    if (!LHS->getType()->isFPOrFPVector() || !isa<VectorType>(LHS->getType()))
+      return Error(Loc, "vfcmp requires vector floating point operands");
     Inst = new VFCmpInst(CmpInst::Predicate(Pred), LHS, RHS);
   } else if (Opc == Instruction::VICmp) {
+    if (!LHS->getType()->isIntOrIntVector() || !isa<VectorType>(LHS->getType()))
+      return Error(Loc, "vicmp requires vector floating point operands");
     Inst = new VICmpInst(CmpInst::Predicate(Pred), LHS, RHS);
   }
   return false;