[llvm-dev] [RFC] Should we add isa_or_null<>?

David Greene via llvm-dev llvm-dev at lists.llvm.org
Thu Apr 4 08:30:35 PDT 2019


I don't think that's a correct replacement.

if (var && isa<T>(var)) {
  ...
}

is not the same as:

if (isa_or_null<T>(var)) {
  ...
}

at least according to what "isa_or_null" conveys to me.

not_null_and_isa<T> would seem a better fit, or maybe exists_and_isa<T>.

That said, I'm not sure sure we need a special API for this.  Are
expensive calls used in the way you describe really common?

                   -David

Don Hinton via llvm-dev <llvm-dev at lists.llvm.org> writes:

> I'd like to propose adding `isa_or_null<>` to replace the following usage pattern that's relatively common in conditionals:
>
>   var && isa<T>(var)  =>>  isa_or_null<T>(var)
>
> And in particular when `var` is a method call which might be expensive, e.g.:
>
>   X->foo() && isa<T>(X->foo())  =>>  isa_or_null<T>(X->foo())
>
> The implementation could be a simple wrapper around isa<>, and while the IR produced is only slightly more efficient, the elimination of an extra call could be
> worthwhile.
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


More information about the llvm-dev mailing list