diff options
| author | Daniel Jasper <djasper@google.com> | 2017-09-11 07:35:01 +0000 |
|---|---|---|
| committer | Daniel Jasper <djasper@google.com> | 2017-09-11 07:35:01 +0000 |
| commit | 7af729b3d23399b5573c51d70f2b0f2bf3769050 (patch) | |
| tree | 13126c2904f8d21a471c169b31b5a2b60123a32f /clang/lib/CodeGen/CGAtomic.cpp | |
| parent | cc477bbceaab693546ee1e8e9ca11e1e3b25e793 (diff) | |
| download | bcm5719-llvm-7af729b3d23399b5573c51d70f2b0f2bf3769050.tar.gz bcm5719-llvm-7af729b3d23399b5573c51d70f2b0f2bf3769050.zip | |
Revert r312830: "Reinstall the patch "Use EmitPointerWithAlignment to get alignment information of the pointer used in atomic expr"."
This triggers llvm.org/PR31620 in several of our internal builds. I'll
forward reproduction instructions to the original author.
llvm-svn: 312897
Diffstat (limited to 'clang/lib/CodeGen/CGAtomic.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CGAtomic.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/clang/lib/CodeGen/CGAtomic.cpp b/clang/lib/CodeGen/CGAtomic.cpp index d2aa5683ff7..d42740c0662 100644 --- a/clang/lib/CodeGen/CGAtomic.cpp +++ b/clang/lib/CodeGen/CGAtomic.cpp @@ -745,20 +745,20 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) { QualType MemTy = AtomicTy; if (const AtomicType *AT = AtomicTy->getAs<AtomicType>()) MemTy = AT->getValueType(); - llvm::Value *IsWeak = nullptr, *OrderFail = nullptr; - - Address Val1 = Address::invalid(); - Address Val2 = Address::invalid(); - Address Dest = Address::invalid(); - Address Ptr = EmitPointerWithAlignment(E->getPtr()); - CharUnits sizeChars, alignChars; std::tie(sizeChars, alignChars) = getContext().getTypeInfoInChars(AtomicTy); uint64_t Size = sizeChars.getQuantity(); unsigned MaxInlineWidthInBits = getTarget().getMaxAtomicInlineWidth(); - bool UseLibcall = ((Ptr.getAlignment() % sizeChars) != 0 || + bool UseLibcall = (sizeChars != alignChars || getContext().toBits(sizeChars) > MaxInlineWidthInBits); + llvm::Value *IsWeak = nullptr, *OrderFail = nullptr; + + Address Val1 = Address::invalid(); + Address Val2 = Address::invalid(); + Address Dest = Address::invalid(); + Address Ptr(EmitScalarExpr(E->getPtr()), alignChars); + if (E->getOp() == AtomicExpr::AO__c11_atomic_init || E->getOp() == AtomicExpr::AO__opencl_atomic_init) { LValue lvalue = MakeAddrLValue(Ptr, AtomicTy); |

