[llvm] r343656 - Add atomicrmw operation to error messages

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 2 19:37:16 PDT 2018


Author: arsenm
Date: Tue Oct  2 19:37:15 2018
New Revision: 343656

URL: http://llvm.org/viewvc/llvm-project?rev=343656&view=rev
Log:
Add atomicrmw operation to error messages

Added:
    llvm/trunk/test/Assembler/invalid-atomicrmw-add-must-be-integer-type.ll
Modified:
    llvm/trunk/lib/AsmParser/LLParser.cpp
    llvm/trunk/lib/IR/Verifier.cpp

Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=343656&r1=343655&r2=343656&view=diff
==============================================================================
--- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
+++ llvm/trunk/lib/AsmParser/LLParser.cpp Tue Oct  2 19:37:15 2018
@@ -6724,8 +6724,13 @@ int LLParser::ParseAtomicRMW(Instruction
     return Error(PtrLoc, "atomicrmw operand must be a pointer");
   if (cast<PointerType>(Ptr->getType())->getElementType() != Val->getType())
     return Error(ValLoc, "atomicrmw value and pointer type do not match");
-  if (!Val->getType()->isIntegerTy())
-    return Error(ValLoc, "atomicrmw operand must be an integer");
+
+  if (!Val->getType()->isIntegerTy()) {
+    return Error(ValLoc, "atomicrmw " +
+                 AtomicRMWInst::getOperationName(Operation) +
+                 " operand must be an integer");
+  }
+
   unsigned Size = Val->getType()->getPrimitiveSizeInBits();
   if (Size < 8 || (Size & (Size - 1)))
     return Error(ValLoc, "atomicrmw operand must be power-of-two byte-sized"

Modified: llvm/trunk/lib/IR/Verifier.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=343656&r1=343655&r2=343656&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Verifier.cpp (original)
+++ llvm/trunk/lib/IR/Verifier.cpp Tue Oct  2 19:37:15 2018
@@ -3348,17 +3348,19 @@ void Verifier::visitAtomicRMWInst(Atomic
          "atomicrmw instructions must be atomic.", &RMWI);
   Assert(RMWI.getOrdering() != AtomicOrdering::Unordered,
          "atomicrmw instructions cannot be unordered.", &RMWI);
+  auto Op = RMWI.getOperation();
   PointerType *PTy = dyn_cast<PointerType>(RMWI.getOperand(0)->getType());
   Assert(PTy, "First atomicrmw operand must be a pointer.", &RMWI);
   Type *ElTy = PTy->getElementType();
-  Assert(ElTy->isIntegerTy(), "atomicrmw operand must have integer type!",
+  Assert(ElTy->isIntegerTy(), "atomicrmw " +
+         AtomicRMWInst::getOperationName(Op) +
+         " operand must have integer type!",
          &RMWI, ElTy);
   checkAtomicMemAccessSize(ElTy, &RMWI);
   Assert(ElTy == RMWI.getOperand(1)->getType(),
          "Argument value type does not match pointer operand type!", &RMWI,
          ElTy);
-  Assert(AtomicRMWInst::FIRST_BINOP <= RMWI.getOperation() &&
-             RMWI.getOperation() <= AtomicRMWInst::LAST_BINOP,
+  Assert(AtomicRMWInst::FIRST_BINOP <= Op && Op <= AtomicRMWInst::LAST_BINOP,
          "Invalid binary operation!", &RMWI);
   visitInstruction(RMWI);
 }

Added: llvm/trunk/test/Assembler/invalid-atomicrmw-add-must-be-integer-type.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/invalid-atomicrmw-add-must-be-integer-type.ll?rev=343656&view=auto
==============================================================================
--- llvm/trunk/test/Assembler/invalid-atomicrmw-add-must-be-integer-type.ll (added)
+++ llvm/trunk/test/Assembler/invalid-atomicrmw-add-must-be-integer-type.ll Tue Oct  2 19:37:15 2018
@@ -0,0 +1,7 @@
+; RUN: not llvm-as -disable-output %s 2>&1 | FileCheck %s
+
+; CHECK: error: atomicrmw add operand must be an integer
+define void @f(float* %ptr) {
+  atomicrmw add float* %ptr, float 1.0 seq_cst
+  ret void
+}




More information about the llvm-commits mailing list