[PATCH] D104852: [AArch64][SVEIntrinsicOpts] Convect cntb/h/w/d to vscale intrinsic or constant.
David Sherwood via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 28 05:13:02 PDT 2021
david-arm added inline comments.
================
Comment at: llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp:671
+ case AArch64SVEPredPattern::vl8:
+ return NumElts >= Pattern
+ ? Optional<Instruction *>(IC.replaceInstUsesWith(
----------------
I was actually wondering if we could commonise this code somehow. Perhaps by setting a MinNumElts variable in the case statements, i.e.
unsigned MinNumElts;
...
case AArch64SVEPredPattern::vl8:
MinNumElts = Pattern;
break;
case AArch64SVEPredPattern::vl16:
MinNumElts = 16;
break;
}
if (NumElts < MinNumElts) return None;
return Optional<Instruction *>(IC.replaceInstUsesWith(
II, ConstantInt::get(II.getType(), NumElts)));
================
Comment at: llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp:662
+ return IC.replaceInstUsesWith(II, StepVal);
+ } else if (Pattern == AArch64SVEPredPattern::vl16 && NumElts == 16) {
+ Constant *StepVal = ConstantInt::get(II.getType(), NumElts);
----------------
junparser wrote:
> david-arm wrote:
> > Could you potentially fold these two cases into one somehow? Maybe with a switch-case statement? I'm just imagining a situation where we might want other patterns too like vl32, vl64, etc.
> >
> There is no other special pattern except vl16. But I do think switch-case is more straightforward
OK, thanks for making this a switch statement. I was just thinking that in the developer manual we say we also support vl1-vl256 so at some point we may add more enums in LLVM too.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D104852/new/
https://reviews.llvm.org/D104852
More information about the cfe-commits
mailing list