[PATCH] D113107: Support of expression granularity for _Float16.
John McCall via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 23 11:35:39 PDT 2022
rjmccall added a comment.
Somehow we've taken a huge step back on unpromotion, and I'm worried you're now doing the exact thing I didn't want us doing and forcing all the downstream clients to handle the possibility of a promoted result.
================
Comment at: clang/lib/CodeGen/CGExprComplex.cpp:418
+ EmitStore(Val, lvalue.getAddress(CGF), lvalue.getType(),
+ lvalue.isVolatileQualified());
}
----------------
You should not be changing this code; clients should be expected to give you a value that matches the type of the l-value, which generally means they need to be unpromoting.
================
Comment at: clang/lib/CodeGen/CGExprComplex.cpp:615
+ ComplexPairTy result = VisitMinus(E, promotionTy);
+ return result;
+}
----------------
This is not unpromoting if the original `PromotionType` is null.
================
Comment at: clang/lib/CodeGen/CGExprComplex.cpp:613
+ result = EmitUnpromotion(promotionTy, E->getSubExpr()->getType(), result);
+ return result;
+}
----------------
rjmccall wrote:
> zahiraam wrote:
> > rjmccall wrote:
> > > You should unpromote only if we're not in a promoted context, which is to say, only if the `PromotionType` that was passed in is null.
> > oh! right. The promotionTy is not even used in the function. Thanks.
> I'm sorry, but this is not the change I requested; I meant you need to do this:
>
> ```
> QualType promotionTy = PromotionType.isNull() ? getPromotionType(E->getType()) : PromotionType;
> ComplexPairTy result = VisitMinus(E, promotionTy);
> if (PromotionType.isNull())
> result = EmitUnpromotion(promotionTy, result);
> return result;
> ```
>
> The fact that you weren't seeing problems because of this makes me concerned.
This is not unpromoting if the original `PromotionType` is null.
================
Comment at: clang/lib/CodeGen/CGExprComplex.cpp:296
+ ComplexPairTy EmitUnpromotion(QualType promotionTy, const BinaryOperator *E,
+ ComplexPairTy &result) {
+ if (!promotionTy.isNull()) {
----------------
rjmccall wrote:
> Please take `result` by value instead of by reference; it's surprising that this both returns the value and modifies the parameter.
Where is unpromotion happening now?
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D113107/new/
https://reviews.llvm.org/D113107
More information about the llvm-commits
mailing list