[PATCH] D76139: [Target][ARM] Change VPTMaskValues to the correct encoding
Simon Tatham via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 18 09:47:27 PDT 2020
simon_tatham added inline comments.
================
Comment at: llvm/lib/Target/ARM/Utils/ARMBaseInfo.h:103
+ /// Txyz = xyz1
enum VPTMaskValue {
+ T = 0b1000,
----------------
Pierre-vh wrote:
> simon_tatham wrote:
> > Pierre-vh wrote:
> > > simon_tatham wrote:
> > > > Since these mask values are now encoded in the common format used by the MCOperand for both `VPT` and `IT` instructions, perhaps they should have a more generic name than `VPTMaskValue`, and live in the `ARM` namespace instead of `ARMVCC`?
> > > Sure, this is a good idea, but I don't think that I know enough about the backend to find a sensible name for this enum.
> > > Do you have a suggestion? Perhaps something like `BlockMaskValue` would work ?
> > I agree it's hard to find a //good// name (both concise and recognizable).
> >
> > Your suggested name isn't bad, because 'block' and 'mask' are both words used in the ARMARM descriptions of both IT and VPT instructions. I think I'd remove 'Value' (it doesn't add very much description) and replace it with something that hints at conditionalization or predication. How about `enum class CondBlockMask`, in the `llvm::ARM` namespace? Or `PredBlockMask` if you prefer.
> >
> > Also, since you've copied and pasted my comment from `ARMAsmParser.cpp` to here, you might add a note at the site of the original comment, mentioning that an enum of the mask values is available here.
> What do you think about this change?
>
> ```
> namespace ARMVCC {
> enum VPTCodes {
> /* etc */
> };
> } // namespace ARMVCC
>
> namespace ARM {
> /// Mask values for VPT Blocks, to be used by MCOperands.
> /// Note that this is different from the "real" encoding used by the
> /// instructions. In this encoding, the lowest set bit indicates the end of
> /// the encoding, and above that, "1" indicates an else, while "0" indicates
> /// a then.
> /// Tx = x100
> /// Txy = xy10
> /// Txyz = xyz1
> enum PredBlockMask {
> /* etc */
> };
> } // namespace ARM
> ```
> Also, should `PredBlockMask` stay in that file, or should I move it to another file? (Where?)
>
I think I'd make it an `enum class`, because otherwise, you're putting some very generic names like `T` into a namespace that's very widely used. If you see `var = PredBlockMask::T;` in code, you know where to look for the definition; if you see `var = T;` then you probably look for a variable in the containing function before thinking to look here.
This seems like a fine file to put it in, though.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D76139/new/
https://reviews.llvm.org/D76139
More information about the llvm-commits
mailing list