diff options
author | Chris Lattner <sabre@nondot.org> | 2009-02-16 22:25:49 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-02-16 22:25:49 +0000 |
commit | 1bd885efe4bfeadb1980b39315b026cefe2795c3 (patch) | |
tree | 941d7272c5503cf9c343bd049b7c4b1392b88ed5 /lib/CodeGen/CGExpr.cpp | |
parent | 4b441f057688cf0d3e6d74ac530ce3eb2d965c5e (diff) |
fix volatile handling with ExtVectorElementExpr, so that we
emit two volatile loads for:
typedef __attribute__(( ext_vector_type(4) )) float float4;
float test(volatile float4 *P) {
return P->x+P->y;
}
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64683 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGExpr.cpp')
-rw-r--r-- | lib/CodeGen/CGExpr.cpp | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index 01a5514d6e..4dc8a9e1d4 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -813,7 +813,7 @@ EmitExtVectorElementExpr(const ExtVectorElementExpr *E) { if (Base.isSimple()) { llvm::Constant *CV = GenerateConstantVector(Indices); return LValue::MakeExtVectorElt(Base.getAddress(), CV, - E->getBase()->getType().getCVRQualifiers()); + Base.getQualifiers()); } assert(Base.isExtVectorElt() && "Can only subscript lvalue vec elts here!"); @@ -828,7 +828,7 @@ EmitExtVectorElementExpr(const ExtVectorElementExpr *E) { } llvm::Constant *CV = llvm::ConstantVector::get(&CElts[0], CElts.size()); return LValue::MakeExtVectorElt(Base.getExtVectorAddr(), CV, - E->getBase()->getType().getCVRQualifiers()); + Base.getQualifiers()); } LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { @@ -846,16 +846,14 @@ LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { if (PTy->getPointeeType()->isUnionType()) isUnion = true; CVRQualifiers = PTy->getPointeeType().getCVRQualifiers(); - } - else if (BaseExpr->getStmtClass() == Expr::ObjCPropertyRefExprClass || - BaseExpr->getStmtClass() == Expr::ObjCKVCRefExprClass) { + } else if (isa<ObjCPropertyRefExpr>(BaseExpr) || + isa<ObjCKVCRefExpr>(BaseExpr)) { RValue RV = EmitObjCPropertyGet(BaseExpr); BaseValue = RV.getAggregateAddr(); if (BaseExpr->getType()->isUnionType()) isUnion = true; CVRQualifiers = BaseExpr->getType().getCVRQualifiers(); - } - else { + } else { LValue BaseLV = EmitLValue(BaseExpr); if (BaseLV.isObjCIvar()) isIvar = true; @@ -869,7 +867,8 @@ LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { FieldDecl *Field = dyn_cast<FieldDecl>(E->getMemberDecl()); // FIXME: Handle non-field member expressions assert(Field && "No code generation for non-field member references"); - LValue MemExpLV = EmitLValueForField(BaseValue, Field, isUnion, CVRQualifiers); + LValue MemExpLV = EmitLValueForField(BaseValue, Field, isUnion, + CVRQualifiers); LValue::SetObjCIvar(MemExpLV, isIvar); return MemExpLV; } |