Some polymorphic matchers use dyn_cast in cases where we know the type from the TemplateParameter.
Using type_traits we can remove the need for dyn_cast and let the template instantiation handle everything.
Details
- Reviewers
klimek aaron.ballman alexfh
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
I'm not opposed, but I don't know that this is really an improvement. We've gone from a pretty simple code pattern to needing to spell out the type twice with a type_trait, and all that we save is a call to isa<> within the casting operation. While I agree this is strictly executing less code, it's morally the same as the usual antipattern of "isa followed by cast should be a dyn_cast". Is there evidence that this is a big performance win?
To be honest, it would be much nicer if we could specialise isa to return false if the From type is not a base class of the To type. However I'm not sure if that would break anything else.
It's all part of the "Don't do at runtime whats known at compile time" idiom. Any performance change would be negligible in this case.
That might be interesting to explore.
It's all part of the "Don't do at runtime whats known at compile time" idiom. Any performance change would be negligible in this case.
If that's the sole reason for the change, I'm not convinced it carries its weight. It's more code, it's more complicated to read, violates the DRY principle, and has negligible performance benefit. However, perhaps @klimek has different opinions as code owner.