[cfe-commits] r111721 - in /cfe/trunk/lib/CodeGen: CGExpr.cpp CGObjCMac.cpp
Daniel Dunbar
daniel at zuster.org
Fri Aug 20 20:44:13 PDT 2010
Author: ddunbar
Date: Fri Aug 20 22:44:13 2010
New Revision: 111721
URL: http://llvm.org/viewvc/llvm-project?rev=111721&view=rev
Log:
IRgen: Move remaining MakeAddr() calls to MakeAddrLValue().
Modified:
cfe/trunk/lib/CodeGen/CGExpr.cpp
cfe/trunk/lib/CodeGen/CGObjCMac.cpp
Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=111721&r1=111720&r2=111721&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExpr.cpp Fri Aug 20 22:44:13 2010
@@ -1165,11 +1165,6 @@
V = CGM.getStaticLocalDeclAddress(VD);
assert(V && "DeclRefExpr not entered in LocalDeclMap?");
- Qualifiers Quals = MakeQualifiers(E->getType());
- // local variables do not get their gc attribute set.
- // local static?
- if (NonGCable) Quals.removeObjCGCAttr();
-
if (VD->hasAttr<BlocksAttr>()) {
V = Builder.CreateStructGEP(V, 1, "forwarding");
V = Builder.CreateLoad(V);
@@ -1178,8 +1173,10 @@
}
if (VD->getType()->isReferenceType())
V = Builder.CreateLoad(V, "tmp");
- LValue LV = LValue::MakeAddr(V, Quals);
+
+ LValue LV = MakeAddrLValue(V, E->getType());
if (NonGCable) {
+ LV.getQuals().removeObjCGCAttr();
LV.setNonGC(true);
}
setObjCGCLValueClass(getContext(), E, LV);
@@ -1219,10 +1216,9 @@
QualType T = E->getSubExpr()->getType()->getPointeeType();
assert(!T.isNull() && "CodeGenFunction::EmitUnaryOpLValue: Illegal type");
- Qualifiers Quals = MakeQualifiers(T);
- Quals.setAddressSpace(ExprTy.getAddressSpace());
+ LValue LV = MakeAddrLValue(EmitScalarExpr(E->getSubExpr()), T);
+ LV.getQuals().setAddressSpace(ExprTy.getAddressSpace());
- LValue LV = LValue::MakeAddr(EmitScalarExpr(E->getSubExpr()), Quals);
// We should not generate __weak write barrier on indirect reference
// of a pointer to object; as in void foo (__weak id *param); *param = 0;
// But, we continue to generate __strong write barrier on indirect write
@@ -1452,10 +1448,9 @@
assert(!T.isNull() &&
"CodeGenFunction::EmitArraySubscriptExpr(): Illegal base type");
- Qualifiers Quals = MakeQualifiers(T);
- Quals.setAddressSpace(E->getBase()->getType().getAddressSpace());
+ LValue LV = MakeAddrLValue(Address, T);
+ LV.getQuals().setAddressSpace(E->getBase()->getType().getAddressSpace());
- LValue LV = LValue::MakeAddr(Address, Quals);
if (getContext().getLangOptions().ObjC1 &&
getContext().getLangOptions().getGCMode() != LangOptions::NonGC) {
LV.setNonGC(!E->isOBJCGCCandidate(getContext()));
@@ -1487,9 +1482,8 @@
// it.
llvm::Value *Ptr = EmitScalarExpr(E->getBase());
const PointerType *PT = E->getBase()->getType()->getAs<PointerType>();
- Qualifiers Quals = MakeQualifiers(PT->getPointeeType());
- Quals.removeObjCGCAttr();
- Base = LValue::MakeAddr(Ptr, Quals);
+ Base = MakeAddrLValue(Ptr, PT->getPointeeType());
+ Base.getQuals().removeObjCGCAttr();
} else if (E->getBase()->isLvalue(getContext()) == Expr::LV_Valid) {
// Otherwise, if the base is an lvalue ( as in the case of foo.x.x),
// emit the base as an lvalue.
@@ -1504,7 +1498,7 @@
// Store the vector to memory (because LValue wants an address).
llvm::Value *VecMem = CreateMemTemp(E->getBase()->getType());
Builder.CreateStore(Vec, VecMem);
- Base = LValue::MakeAddr(VecMem, Qualifiers());
+ Base = MakeAddrLValue(VecMem, E->getBase()->getType());
}
// Encode the element access list into a vector of unsigned indices.
@@ -1643,13 +1637,14 @@
if (Field->getType()->isReferenceType())
V = Builder.CreateLoad(V, "tmp");
- Qualifiers Quals = MakeQualifiers(Field->getType());
- Quals.addCVRQualifiers(CVRQualifiers);
+ LValue LV = MakeAddrLValue(V, Field->getType());
+ LV.getQuals().addCVRQualifiers(CVRQualifiers);
+
// __weak attribute on a field is ignored.
- if (Quals.getObjCGCAttr() == Qualifiers::Weak)
- Quals.removeObjCGCAttr();
+ if (LV.getQuals().getObjCGCAttr() == Qualifiers::Weak)
+ LV.getQuals().removeObjCGCAttr();
- return LValue::MakeAddr(V, Quals);
+ return LV;
}
LValue
Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=111721&r1=111720&r2=111721&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Fri Aug 20 22:44:13 2010
@@ -107,11 +107,11 @@
V = CGF.Builder.CreateGEP(V, Offset, "add.ptr");
V = CGF.Builder.CreateBitCast(V, llvm::PointerType::getUnqual(LTy));
- Qualifiers Quals = CGF.MakeQualifiers(IvarTy);
- Quals.addCVRQualifiers(CVRQualifiers);
-
- if (!Ivar->isBitField())
- return LValue::MakeAddr(V, Quals);
+ if (!Ivar->isBitField()) {
+ LValue LV = CGF.MakeAddrLValue(V, IvarTy);
+ LV.getQuals().addCVRQualifiers(CVRQualifiers);
+ return LV;
+ }
// We need to compute the bit offset for the bit-field, the offset is to the
// byte. Note, there is a subtle invariant here: we can only call this routine
@@ -144,6 +144,8 @@
// FIXME: We need to set a very conservative alignment on this, or make sure
// that the runtime is doing the right thing.
+ Qualifiers Quals = CGF.MakeQualifiers(IvarTy);
+ Quals.addCVRQualifiers(CVRQualifiers);
return LValue::MakeBitfield(V, *Info, Quals.getCVRQualifiers());
}
More information about the cfe-commits
mailing list