================ @@ -26,6 +28,26 @@ std::pair<Register, unsigned> getBaseWithConstantOffset(MachineRegisterInfo &MRI, Register Reg, GISelKnownBits *KnownBits = nullptr, bool CheckNUW = false); + +// Currently finds S32/S64 lane masks that can be declared as divergent by +// uniformity analysis (all are phis at the moment). +// These are defined as i32/i64 in some IR intrinsics (not as i1). +// Tablegen forces(via telling that lane mask IR intrinsics are uniform) most of +// S32/S64 lane masks to be uniform, as this results in them ending up with sgpr +// reg class after instruction-select don't search for all of them. +class IntrinsicLaneMaskAnalyzer { + DenseSet<Register> S32S64LaneMask; + MachineRegisterInfo &MRI; + +public: + IntrinsicLaneMaskAnalyzer(MachineFunction &MF); + bool isS32S64LaneMask(Register Reg); + +private: + void initLaneMaskIntrinsics(MachineFunction &MF); + // This will not be needed when we turn of LCSSA for global-isel. ---------------- rovka wrote:
```suggestion // This will not be needed when we turn off LCSSA for global-isel. ``` https://github.com/llvm/llvm-project/pull/112863 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits