summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Eubanks <aeubanks@google.com>2021-05-25 10:09:50 -0700
committerArthur Eubanks <aeubanks@google.com>2021-05-25 10:14:58 -0700
commit0bbb502daa9017480d5fe595556a4f4e5adfcb3f (patch)
treeb2cf6c1e0ba5870f4517b953285277002f03bf33
parentaabca2d1da11aa3b832ce499acccca093236aac3 (diff)
Revert "[OpaquePtr] Make atomicrmw work with opaque pointers"
This reverts commit 0bebda17bea38785c90a6fec3ca01cf74eb78b7c. Causing "Invalid record" errors.
-rw-r--r--llvm/lib/AsmParser/LLParser.cpp3
-rw-r--r--llvm/lib/Bitcode/Reader/BitcodeReader.cpp10
-rw-r--r--llvm/lib/IR/Instructions.cpp6
-rw-r--r--llvm/test/Assembler/opaque-ptr.ll8
-rw-r--r--llvm/test/Verifier/opaque-ptr.ll6
5 files changed, 8 insertions, 25 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 91599e249689..b6ee81a12e29 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -7671,8 +7671,7 @@ int LLParser::parseAtomicRMW(Instruction *&Inst, PerFunctionState &PFS) {
return tokError("atomicrmw cannot be unordered");
if (!Ptr->getType()->isPointerTy())
return error(PtrLoc, "atomicrmw operand must be a pointer");
- if (!cast<PointerType>(Ptr->getType())
- ->isOpaqueOrPointeeTypeMatches(Val->getType()))
+ if (cast<PointerType>(Ptr->getType())->getElementType() != Val->getType())
return error(ValLoc, "atomicrmw value and pointer type do not match");
if (Operation == AtomicRMWInst::Xchg) {
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index 6eac5529cf08..9d4be53880cb 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -5238,18 +5238,15 @@ Error BitcodeReader::parseFunctionBody(Function *F) {
unsigned OpNum = 0;
Value *Ptr = nullptr;
- if (getValueTypePair(Record, OpNum, NextValueNo, Ptr))
+ if (getValueTypePair(Record, OpNum, NextValueNo, Ptr, &FullTy))
return error("Invalid record");
if (!isa<PointerType>(Ptr->getType()))
return error("Invalid record");
Value *Val = nullptr;
- if (popValue(Record, OpNum, NextValueNo, nullptr, Val))
- return error("Invalid record");
-
- if (!cast<PointerType>(Ptr->getType())
- ->isOpaqueOrPointeeTypeMatches(Val->getType()))
+ if (popValue(Record, OpNum, NextValueNo,
+ getPointerElementFlatType(FullTy), Val))
return error("Invalid record");
if (!(NumRecords == (OpNum + 4) || NumRecords == (OpNum + 5)))
@@ -5282,6 +5279,7 @@ Error BitcodeReader::parseFunctionBody(Function *F) {
Align(TheModule->getDataLayout().getTypeStoreSize(Val->getType()));
I = new AtomicRMWInst(Operation, Ptr, Val, *Alignment, Ordering, SSID);
+ FullTy = getPointerElementFlatType(FullTy);
cast<AtomicRMWInst>(I)->setVolatile(IsVol);
InstructionList.push_back(I);
diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp
index f1df5001c134..08f9e8e726c3 100644
--- a/llvm/lib/IR/Instructions.cpp
+++ b/llvm/lib/IR/Instructions.cpp
@@ -1602,9 +1602,9 @@ void AtomicRMWInst::Init(BinOp Operation, Value *Ptr, Value *Val,
"All operands must be non-null!");
assert(getOperand(0)->getType()->isPointerTy() &&
"Ptr must have pointer type!");
- assert(cast<PointerType>(getOperand(0)->getType())
- ->isOpaqueOrPointeeTypeMatches(getOperand(1)->getType()) &&
- "Ptr must be a pointer to Val type!");
+ assert(getOperand(1)->getType() ==
+ cast<PointerType>(getOperand(0)->getType())->getElementType()
+ && "Ptr must be a pointer to Val type!");
assert(Ordering != AtomicOrdering::NotAtomic &&
"AtomicRMW instructions must be atomic!");
}
diff --git a/llvm/test/Assembler/opaque-ptr.ll b/llvm/test/Assembler/opaque-ptr.ll
index b3b35631188e..86ff1cd5d929 100644
--- a/llvm/test/Assembler/opaque-ptr.ll
+++ b/llvm/test/Assembler/opaque-ptr.ll
@@ -56,11 +56,3 @@ define void @cmpxchg(ptr %p, i32 %a, i32 %b) {
%val_success = cmpxchg ptr %p, i32 %a, i32 %b acq_rel monotonic
ret void
}
-
-; CHECK: define void @atomicrmw(ptr %a, i32 %i)
-; CHECK: %b = atomicrmw add ptr %a, i32 %i acquire
-; CHECK: ret void
-define void @atomicrmw(ptr %a, i32 %i) {
- %b = atomicrmw add ptr %a, i32 %i acquire
- ret void
-}
diff --git a/llvm/test/Verifier/opaque-ptr.ll b/llvm/test/Verifier/opaque-ptr.ll
index 322544471a56..1fd1b3a8a171 100644
--- a/llvm/test/Verifier/opaque-ptr.ll
+++ b/llvm/test/Verifier/opaque-ptr.ll
@@ -17,9 +17,3 @@ define void @cmpxchg(ptr %p, i32 %a, i32 %b) {
%val_success = cmpxchg ptr %p, i32 %a, i32 %b acq_rel monotonic
ret void
}
-
-; CHECK: @atomicrmw
-define void @atomicrmw(ptr %a, i32 %i) {
- %b = atomicrmw add ptr %a, i32 %i acquire
- ret void
-}