Author: djasper Date: Mon Sep 11 00:35:01 2017 New Revision: 312897 URL: http://llvm.org/viewvc/llvm-project?rev=312897&view=rev Log: 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. Removed: cfe/trunk/test/CodeGenCXX/atomic-align.cpp Modified: cfe/trunk/lib/CodeGen/CGAtomic.cpp Modified: cfe/trunk/lib/CodeGen/CGAtomic.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGAtomic.cpp?rev=312897&r1=312896&r2=312897&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGAtomic.cpp (original) +++ cfe/trunk/lib/CodeGen/CGAtomic.cpp Mon Sep 11 00:35:01 2017 @@ -745,20 +745,20 @@ RValue CodeGenFunction::EmitAtomicExpr(A 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); Removed: cfe/trunk/test/CodeGenCXX/atomic-align.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/atomic-align.cpp?rev=312896&view=auto ============================================================================== --- cfe/trunk/test/CodeGenCXX/atomic-align.cpp (original) +++ cfe/trunk/test/CodeGenCXX/atomic-align.cpp (removed) @@ -1,30 +0,0 @@ -// RUN: %clang_cc1 %s -std=c++11 -emit-llvm -o - -triple=x86_64-linux-gnu | FileCheck %s - -struct AM { - int f1, f2; -}; -alignas(8) AM m; -AM load1() { - AM am; - // m is declared to align to 8bytes, so generate load atomic instead - // of libcall. - // CHECK-LABEL: @_Z5load1v - // CHECK: load atomic {{.*}} monotonic - __atomic_load(&m, &am, 0); - return am; -} - -struct BM { - int f1; - alignas(8) AM f2; -}; -BM bm; -AM load2() { - AM am; - // BM::f2 is declared to align to 8bytes, so generate load atomic instead - // of libcall. - // CHECK-LABEL: @_Z5load2v - // CHECK: load atomic {{.*}} monotonic - __atomic_load(&bm.f2, &am, 0); - return am; -} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits