https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97139

--- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> ---
Ok, I've got the problem, it's bit later in the function:
The diff is:

diff -u before.txt after.txt
--- before.txt  2020-09-21 15:29:56.462394644 +0200
+++ after.txt   2020-09-21 15:29:48.086453128 +0200
@@ -1,15 +1,24 @@
+  vect__648.11467_1941 = MEM <vector(4) int> [(int *)&pix + 8B];
+  _1946 = vect__648.11467_1941 < { 0, 0, 0, 0 };
+  vect_patt_180.11468_1944 = VEC_COND_EXPR <_1946, { 3, 3, 3, 3 }, { 0, 0, 0,
0 }>;
+  vect_patt_182.11469_1947 = vect__648.11467_1941 + vect_patt_180.11468_1944;
+  vect_patt_185.11470_1966 = vect_patt_182.11469_1947 >> 2;
+  _1967 = BIT_FIELD_REF <vect_patt_185.11470_1966, 32, 0>;
+  _1968 = BIT_FIELD_REF <vect_patt_185.11470_1966, 32, 32>;
+  _1950 = BIT_FIELD_REF <vect_patt_182.11469_1947, 32, 0>;
+  _1965 = BIT_FIELD_REF <vect_patt_182.11469_1947, 32, 32>;
+  _1943 = BIT_FIELD_REF <vect_patt_180.11468_1944, 32, 0>;
+  _1942 = BIT_FIELD_REF <vect_patt_180.11468_1944, 32, 32>;
+  _1945 = &pix.x + 4;
   _648 = pix.x;
   _649 = _648 / 4;
-  pix.x = _649;
   _650 = pix.y;
   _651 = _650 / 4;
-  pix.y = _651;
   _652 = pix.pos_x;
   _653 = _652 / 4;
-  pix.pos_x = _653;
   _654 = pix.pos_y;
   _655 = _654 / 4;
-  pix.pos_y = _655;
+  MEM <vector(4) int> [(int *)&pix + 8B] = vect_patt_185.11470_1966;
   _492 = active_pps;
   _493 = _492->constrained_intra_pred_flag;
   pretmp_2084 = pix.mb_addr;
@@ -25,12 +34,12 @@
   _511 = *_510;
   _512 = subblock_x_278 / 2;
   _513 = _512 * 2;
-  _515 = _513 + _649;
+  _515 = _513 + _1943;
   _516 = (long unsigned int) _515;
   _517 = _516 * 8;
   _518 = _511 + _517;
   _519 = *_518;
-  _521 = _651 + 4;
+  _521 = _1942 + 4;
   _522 = (long unsigned int) _521;
   _523 = _522 * 4;
   _524 = _519 + _523;

The bad assignmed is
+  _515 = _513 + _1943;

where
+  _1943 = BIT_FIELD_REF <vect_patt_180.11468_1944, 32, 0>;

which is bogus VEC_COND_EXPR <_1946, { 3, 3, 3, 3 }, { 0, 0, 0, 0 }>;
while in the original code we do:
-  _515 = _513 + _649;
where _649 is pix.x / 4

So I think correct would be
+  _515 = _513 + _1967;
?

Reply via email to