rjmccall added a comment.

In D113107#3726496 <https://reviews.llvm.org/D113107#3726496>, @zahiraam wrote:

> I think I introduced a bug when replacing the VisitUnaryMinus/Plus/Imag/Real 
> with VisitMinus/Plus/Imag/Real. Now this simple test case is failing in the 
> non-promotion path (with the +avx512fp16).
>
> _Float16 _Complex MinusOp_c_c(_Float16 c) {
>
>   return -c;
>
> }
>
> error: cannot compile this scalar expression yet
>
>   return -c;
>          ^~
>
> 1 error generated.
>
> The way I implemented it is that I have added the HANDLE_UNOP macro but I 
> think that's wrong. I think I need to keep the VisitUnary* methods and fork 
> out of them in the promotion path!  Same for both Scalar and Complex Exprs. 
> Your thoughts?

Right, you still need to declare `VisitUnary*` methods that the CRTP visitor 
will call.  But you can avoid the boilerplate of having separate methods by 
just adding the `PromotionType` argument to `VisitUnary*` with a default 
argument that's appropriate for the normal path:

  llvm::Value *VisitUnaryMinus(const UnaryOperator *E, QualType PromotionType = 
QualType());



================
Comment at: clang/lib/CodeGen/CGExprScalar.cpp:3140
+      return CGF.Builder.CreateFPExt(result, ConvertType(E->getType()));
+  }
+  return result;
----------------
zahiraam wrote:
> rjmccall wrote:
> > Please extract this block out as:
> > 
> > ```
> > llvm::Value *EmitPromotedValue(llvm::Value *result, QualType PromotionType);
> > ```
> These changes you are proposing is when the argument of the unary __imag / 
> __real is of type _Complex Float16. I would think that this new method 
> EmitPromotedValue would be replacing the equivalent code in 
> ComplexEmitter::EmitPromoted instead,  not in the scalar emitter, right?
I probably mixed up which emitter I commented on.  The upshot is that I would 
like there to be `EmitPromotedValue` and `EmitUnpromotedValue` helper functions 
on both emitters (which of course would take/return an `llvm::Value*` on the 
scalar emitter and a `CGComplexPair` on the complex emitter), just so that we 
have all the value promotion/unpromotion logic for each emitter in one place.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113107/new/

https://reviews.llvm.org/D113107

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to