================
@@ -326,13 +326,61 @@ mlir::Value
CIRGenFunction::emitStoreThroughBitfieldLValue(RValue src,
return {};
}
+RValue CIRGenFunction::emitLoadOfBitfieldLValue(LValue lv, SourceLocation loc)
{
+ const CIRGenBitFieldInfo &info = lv.getBitFieldInfo();
+
+ // Get the output type.
+ mlir::Type resLTy = convertType(lv.getType());
+ Address ptr = lv.getBitFieldAddress();
+
+ assert(!cir::MissingFeatures::armComputeVolatileBitfields());
+
+ mlir::Value field = builder.createGetBitfield(getLoc(loc), resLTy,
ptr.getPointer(),
+ ptr.getElementType(), info,
+ lv.isVolatile(), false);
+ assert(!cir::MissingFeatures::opLoadEmitScalarRangeCheck() && "NYI");
+ return RValue::get(field);
+}
+
+Address CIRGenFunction::getAddrOfBitFieldStorage(LValue base,
+ const FieldDecl *field,
+ mlir::Type fieldType,
+ unsigned index) {
+ mlir::Location loc = getLoc(field->getLocation());
+ cir::PointerType fieldPtr = cir::PointerType::get(fieldType);
+ cir::GetMemberOp sea = getBuilder().createGetMember(
+ loc, fieldPtr, base.getPointer(), field->getName(), index);
+ return Address(sea, CharUnits::One());
+}
+
+LValue CIRGenFunction::emitLValueForBitField(LValue base,
+ const FieldDecl *field) {
+ LValueBaseInfo baseInfo = base.getBaseInfo();
+ const CIRGenRecordLayout &layout =
+ cgm.getTypes().getCIRGenRecordLayout(field->getParent());
+ const CIRGenBitFieldInfo &info = layout.getBitFieldInfo(field);
+ assert(!cir::MissingFeatures::armComputeVolatileBitfields());
+ unsigned idx = layout.getCIRFieldNo(field);
+
----------------
Andres-Salamanca wrote:
Done
https://github.com/llvm/llvm-project/pull/145971
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits