diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-01-17 10:49:01 +0000 | 
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2019-01-17 10:49:01 +0000 | 
| commit | 0cb08e448af7167ada767e0526aa44980e72ad08 (patch) | |
| tree | 59214d5b7a046471bf9645a0828f4f6e2dd7215e /llvm/lib/IR/Verifier.cpp | |
| parent | bd13c9787f7076207f1b09823565572b16d31c10 (diff) | |
| download | bcm5719-llvm-0cb08e448af7167ada767e0526aa44980e72ad08.tar.gz bcm5719-llvm-0cb08e448af7167ada767e0526aa44980e72ad08.zip  | |
Allow FP types for atomicrmw xchg
llvm-svn: 351427
Diffstat (limited to 'llvm/lib/IR/Verifier.cpp')
| -rw-r--r-- | llvm/lib/IR/Verifier.cpp | 15 | 
1 files changed, 11 insertions, 4 deletions
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index 30e77b92009..338fe931883 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -3431,10 +3431,17 @@ void Verifier::visitAtomicRMWInst(AtomicRMWInst &RMWI) {    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 " + -         AtomicRMWInst::getOperationName(Op) + -         " operand must have integer type!", -         &RMWI, ElTy); +  if (Op == AtomicRMWInst::Xchg) { +    Assert(ElTy->isIntegerTy() || ElTy->isFloatingPointTy(), "atomicrmw " + +           AtomicRMWInst::getOperationName(Op) + +           " operand must have integer or floating point type!", +           &RMWI, ElTy); +  } else { +    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,  | 

