Index: clang/lib/CodeGen/CGStmt.cpp =================================================================== --- clang/lib/CodeGen/CGStmt.cpp +++ clang/lib/CodeGen/CGStmt.cpp @@ -2454,7 +2454,7 @@ const ABIArgInfo &RetAI = CurFnInfo->getReturnInfo(); if (RetAI.isDirect() || RetAI.isExtend()) { // Make a fake lvalue for the return value slot. - LValue ReturnSlot = MakeAddrLValue(ReturnValue, FnRetTy); + LValue ReturnSlot = MakeAddrLValueWithoutTBAA(ReturnValue, FnRetTy); CGM.getTargetCodeGenInfo().addReturnRegisterOutputs( *this, ReturnSlot, Constraints, ResultRegTypes, ResultTruncRegTypes, ResultRegDests, AsmString, S.getNumOutputs()); Index: clang/lib/CodeGen/CodeGenFunction.h =================================================================== --- clang/lib/CodeGen/CodeGenFunction.h +++ clang/lib/CodeGen/CodeGenFunction.h @@ -2504,6 +2504,13 @@ BaseInfo, TBAAInfo); } + LValue + MakeAddrLValueWithoutTBAA(Address Addr, QualType T, + AlignmentSource Source = AlignmentSource::Type) { + return LValue::MakeAddr(Addr, T, getContext(), LValueBaseInfo(Source), + TBAAAccessInfo()); + } + LValue MakeNaturalAlignPointeeAddrLValue(llvm::Value *V, QualType T); LValue MakeNaturalAlignAddrLValue(llvm::Value *V, QualType T); Index: clang/test/CodeGen/avoidTBAAonASMstore.cpp =================================================================== --- /dev/null +++ clang/test/CodeGen/avoidTBAAonASMstore.cpp @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -triple i386-unknown-linux-gnu -O2 -disable-llvm-passes -fasm-blocks %s -emit-llvm -o - | FileCheck --check-prefix=NO-TBAA %s +// NO-TBAA-NOT: !tbaa +double foo(double z) { +// CHECK-LABEL: define{{.*}} double @_Z3food + unsigned short ControlWord; + __asm { fnstcw word ptr[ControlWord] }; +// CHECK: call i64 asm sideeffect inteldialect +// NO-TBAA: store i64 %{{.*}}, i64* %{{.*}}, align 4 + return z; +}