rjmccall added inline comments.

================
Comment at: clang/lib/CodeGen/CGExprComplex.cpp:972
+    }
+  }
+  auto result = Visit(const_cast<Expr *>(E));
----------------
The unary operator cases seem to have disappeared from this function.


================
Comment at: clang/lib/CodeGen/CGExprComplex.cpp:977
+  else
+    return CGF.EmitPromotedValue(result, E->getType());
+}
----------------
You don't have to do any promotion if there isn't a promotion type.  `result` 
will already have the right type.


================
Comment at: clang/lib/CodeGen/CGExprComplex.cpp:615
+  ComplexPairTy result = VisitMinus(E, promotionTy);
+  return result;
+}
----------------
zahiraam wrote:
> rjmccall wrote:
> > This is not unpromoting if the original `PromotionType` is null.
> The idea for this change is that we will be coming to this function only if 
> we are returning a "-operand". If we are in the middle of an expression (such 
> as -f *a +b) we would be directly going to VisitMinus from 
> ScalarExprEmitter::EmitPromod, from the switch branch of UnaryMinus and the 
> promotiontype wouldn't be null.
> 
Right, but when you're coming from the normal path, `PromotionType` *will* be 
null.  Since you're doing promoted emission for the actual operator, `result` 
will be a pair of `float`s instead of a pair of `fp16`s, so you need to 
unpromote that in order to return the pair of `fp16`s that you're required to 
return when given a null `PromotionType`.


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