[PATCH] D114688: [Clang] Add __builtin_elementwise_ceil

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Dec 8 05:31:46 PST 2021


aaron.ballman closed this revision.
aaron.ballman added a comment.

Thank you for the new functionality, I've committed on your behalf in 8680f951c21e675a110e79c9b8dc59bb94290b01 <https://reviews.llvm.org/rG8680f951c21e675a110e79c9b8dc59bb94290b01>



================
Comment at: clang/lib/Sema/SemaChecking.cpp:16727-16728
   QualType TyA = A.get()->getType();
-  if (checkMathBuiltinElementType(*this, ArgLoc, TyA))
+  if (checkMathBuiltinElementType(*this, ArgLoc, TyA) ||
+      ExtraCheck(TyA, ArgLoc))
     return true;
----------------
junaire wrote:
> fhahn wrote:
> > aaron.ballman wrote:
> > > In some ways, it's a not really ideal that we split the type checking like this. `SemaBuiltinElementwiseMathOneArg()` checks some type validity and the caller checks some more type validity, so there's no one location to know what types are actually expected for any given builtin calling this.
> > > 
> > > Would it be reasonable to instead hoist all the type checking code out of `SemaBuiltinElementwiseMathOneArg()` and not pass in a functor to it, but instead check the `CallExpr` type after the call returns? We could also fix up the function name to be a bit less nonsensical at the same time, like renaming it to `PrepareBuiltinElementwiseMathOneArgCall()` or something along those lines?
> > > Would it be reasonable to instead hoist all the type checking code out of SemaBuiltinElementwiseMathOneArg() and not pass in a functor to it, but instead check the CallExpr type after the call returns?
> > 
> > Yeah that sounds better!
> > In some ways, it's not really ideal that we split the type checking like this. `SemaBuiltinElementwiseMathOneArg()` checks some type validity and the caller checks some more type validity, so there's no one location to know what types are actually expected for any given builtin calling this.
> > 
> > Would it be reasonable to instead hoist all the type checking code out of `SemaBuiltinElementwiseMathOneArg()` and not pass in a functor to it, but instead check the `CallExpr` type after the call returns? We could also fix up the function name to be a bit less nonsensical at the same time, like renaming it to `PrepareBuiltinElementwiseMathOneArgCall()` or something along those lines?
> 
> Hi, Aaron! Thanks for your review! Unfortunately, I don't get what you mean. :( Sorry about that, I'm completely a newbie... 
> 
> >check the `CallExpr` type after the call returns?
> 
> What does this mean? From my understanding, we only need to check the argument type, right? Or do you mean something like:
> ```
>   TheCall->setType(TyA);  // inside checking function
> ...
> 
> TheCall->getType(); // call side
> ```
> Do I understand you correctly? Please don't hesitate to point out any mistake I made, thanks!
> 
> Hi, Aaron! Thanks for your review! Unfortunately, I don't get what you mean. :( Sorry about that, I'm completely a newbie...

No apologies necessary, we've all started there! :-)

> What does this mean? From my understanding, we only need to check the argument type, right? Or do you mean something like:
> ```
>  TheCall->setType(TyA);  // inside checking function
> ...
>
> TheCall->getType(); // call side
> ```
> Do I understand you correctly? Please don't hesitate to point out any mistake I made, thanks!

The way you implemented it and the way I suggested it are functionally the same outcome.

`PrepareBuiltinElementwiseMathOneArgCall()` eventually calls `TheCall->setType(TyA);` to set the return type of the call expression to be the same as the argument type. After calling that method, you can either do `QualType ArgTy = TheCall->getArg(0)->getType();` as you were doing or do `QualType ArgTy = TheCall->getType();` to get that adjusted type.

The way you've written it currently is correct and likely a more readable solution. My suggestion would have ever-so-slightly better performance because it doesn't call `getArg(0)`, but I think we should prefer your approach because it's more readable. That's why I accepted the patch as-is.

Does that clarify?


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

https://reviews.llvm.org/D114688



More information about the cfe-commits mailing list