@@ -2772,6 +2772,7 @@ bool G4_INST::isRAWdep(G4_INST *inst) {
27722772 G4_Operand *dst0 = inst->getDst ();
27732773 G4_CondMod *cMod0 = inst->getCondMod ();
27742774 G4_Operand *implicitDst0 = inst->getImplAccDst ();
2775+ G4_Operand *msg1 = NULL ;
27752776 G4_Predicate *pred1 = getPredicate ();
27762777 G4_Operand *src1_0 = getSrc (0 );
27772778 G4_Operand *src1_1 = getSrc (1 );
@@ -2789,6 +2790,7 @@ bool G4_INST::isRAWdep(G4_INST *inst) {
27892790 src1_2->compareOperand (dst0, getBuilder ()) != Rel_disjoint) ||
27902791 (src1_3 &&
27912792 src1_3->compareOperand (dst0, getBuilder ()) != Rel_disjoint) ||
2793+ (msg1 && msg1->compareOperand (dst0, getBuilder ()) != Rel_disjoint) ||
27922794 (pred1 && pred1->compareOperand (dst0, getBuilder ()) != Rel_disjoint) ||
27932795 (implicitSrc1 &&
27942796 implicitSrc1->compareOperand (dst0, getBuilder ()) != Rel_disjoint)) {
@@ -3893,7 +3895,7 @@ uint8_t G4_SrcRegRegion::getMaxExecSize(const IR_Builder &builder, int pos,
38933895 // conservative.
38943896 // Here we assume that no cross width if row size is larger than width
38953897 // mul (16) V112(0,0)<1>:f V111(0,0)<16;16,1>:f r1.0<1;4,0>:f
3896- if (!alignToRow && desc->vertStride != 0 &&
3898+ if (!alignToRow && !contRegion && desc->vertStride != 0 &&
38973899 desc->horzStride != 0 ) {
38983900 wd = vs =
38993901 (uint16_t )roundDownPow2 ((pos / desc->width + 1 ) * desc->width - pos);
@@ -3926,7 +3928,7 @@ uint8_t G4_SrcRegRegion::getMaxExecSize(const IR_Builder &builder, int pos,
39263928 eleInFirstRow = desc->width - posInFirstRow;
39273929 uint8_t pow2 = roundDownPow2 (eleInFirstRow);
39283930
3929- if (eleInFirstRow != pow2) {
3931+ if (eleInFirstRow != pow2 && !contRegion ) {
39303932 wd = pow2;
39313933 vs = wd * desc->horzStride ;
39323934 return pow2;
@@ -3950,7 +3952,7 @@ uint8_t G4_SrcRegRegion::getMaxExecSize(const IR_Builder &builder, int pos,
39503952 elSize;
39513953
39523954 // check cross row boundary
3953- if (posInRow == 0 ) {
3955+ if ((!contRegion || desc-> vertStride == 0 ) && posInRow == 0 ) {
39543956 uint8_t pow2Val = roundDownPow2 (eleInRow);
39553957 if (pow2Val != eleInRow ||
39563958 ((desc->vertStride == 0 || negVS) && !alignToRow)) {
@@ -3984,7 +3986,7 @@ uint8_t G4_SrcRegRegion::getMaxExecSize(const IR_Builder &builder, int pos,
39843986 // subregister offset of two GRFs are different and not contiguous(too
39853987 // conservative?)
39863988 if (pow2Val != maxSize ||
3987- (!(alignToRow && maxSize <= desc->width ) &&
3989+ (!contRegion && ! (alignToRow && maxSize <= desc->width ) &&
39883990 newLB % builder.numEltPerGRF <Type_UB>() !=
39893991 (getLeftBound () + currPos) %
39903992 builder.numEltPerGRF <Type_UB>())) {
@@ -4006,7 +4008,7 @@ uint8_t G4_SrcRegRegion::getMaxExecSize(const IR_Builder &builder, int pos,
40064008 maxSize++;
40074009 eleInRow++;
40084010 // make sure the number of elements in two rows are the same
4009- if (crossRow && eleInRow == eleInFirstRow && !alignToRow) {
4011+ if (crossRow && eleInRow == eleInFirstRow && !alignToRow && !contRegion ) {
40104012 break ;
40114013 }
40124014
@@ -5308,7 +5310,7 @@ unsigned G4_Predicate::computeRightBound(uint8_t exec_size) {
53085310
53095311 right_bound = left_bound + totalBits - 1 ;
53105312
5311- bitVec[0 ] = exec_size > = 32 ? 0xFFFFFFFF : (1 << exec_size) - 1 ;
5313+ bitVec[0 ] = exec_size = = 32 ? 0xFFFFFFFF : (1 << exec_size) - 1 ;
53125314 }
53135315
53145316 return right_bound;
0 commit comments