Fix a few bugs for SIMD32 instruction with 64b datatype operands:
1, Fix the OOB issue when checking if def-use is aligned with channel mask.
2, Fix the issue in propagation for the trunc case from qword datatype as the
propagated new src expands 4 GRFs but the region is not scalar or continous.
1, If the uses are non-flag scalar or indirect 1x1/vx1 operands, we should treat the uses as
if they are NoMask, and any non-NoMask instruction can't kill it. This applies to both
GRF and ARF.
2, IF the uses are indirect vxh operands, we should handle address register
separately but not the same as GRF in alignedWithChannelMask.
[IGC vISA] Fix the data flow analysis issue for the case that uses are scalar or indirect operands
1, If the uses are scalar or indirect 1x1/vx1 operands, we should treat the uses as
if they are NoMask, and any non-NoMask instruction can't kill it. This applies to both
GRF and ARF.
2, IF the uses are indirect vxh operands, we should handle address register
separately but not the same as GRF in alignedWithChannelMask.
1, If the uses are scalar or indirect 1x1/vx1 operands, we should treat the uses as
if they are NoMask, and any non-NoMask instruction can't kill it. This applies to both
GRF and ARF.
2, IF the uses are indirect vxh operands, we should handle address register
separately but not the same as GRF in alignedWithChannelMask.
* Placing system headers after vISA headers.
* Explicitly prefix std:: rather than using namespace std; std:: is short, often auto or emplace/emplace_back elminates the need
This:
* reduces verbosity:
e.g. this makes G4_Type_Table[g4op->getType()].byteSize ... g4op->getTypeSize()
* enables table bounds protection:
G4_Type_Table[JUNK] can be out of bounds
but TypeSize(JUNK) will never be out of bounds and will use Type_UNDEF
* the function is still constexpr and calls with constexpr arguments should fold
* removed an oddity where we compared type equality via string syntax (~LVN.cpp:1145)
* replaced all old tabular uses with newer functions
isAllLaneActive() uses isDivergent() only instead of the
existing isInSimdFlow. Once this is done. isInSimdFlow
can be removed.
Change-Id: I0d827693dfa5f4eaa9141ddec037df5720f9e675
Use !isAllLanActive() to replace isInSimdFlow().
isAllLaneActive() uses isDivergent() info instead of the
existing isInSimdFlow. Once this is done. isInSimdFlow
can be removed.
Change-Id: I3f6e41104f86f5294209ef3f1fa4ff777a5de72e
isAllLaneActive() uses isDivergent() info instead of the
existing isInSimdFlow. Once this is done. isInSimdFlow
can be removed.
Change-Id: I61f7c41bd0db5802a32dab722af75b40470e8916