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

--- Comment #1 from Zhao Wei Liew <zhaoweiliew at gmail dot com> ---
After some research, I decided to look into value range propagation (VRP). I
compiled with `-fdump-tree-vrp` and the VRP files contained the following for
`optimized()`:

For the file ending in .vrp1,

```
;; Function unoptimized (_Z11unoptimizedjj, funcdef_no=1, decl_uid=2121,
cgraph_uid=2, symbol_order=1)

;; 1 loops found
;;
;; Loop 0
;;  header 0, latch 1
;;  depth 0, outer -1
;;  nodes: 0 1 2
;; 2 succs { 1 }

Value ranges after VRP:

_1: long long unsigned int [0, 4294967295]
_2: long long unsigned int [0, 4294967295]
a_3(D): unsigned int VARYING
all_4: long long unsigned int [0, 4294967295]
b_5(D): unsigned int VARYING
_6: unsigned int VARYING


unsigned int unoptimized (unsigned int a, unsigned int b)
{
  long long unsigned int all;
  long long unsigned int _1;
  long long unsigned int _2;
  unsigned int _6;

  <bb 2> [local count: 1073741824]:
  all_4 = (long long unsigned int) a_3(D);
  _1 = (long long unsigned int) b_5(D);
  _2 = all_4 / _1;
  _6 = (unsigned int) _2;
  return _6;

}
```

and for the file ending in .vrp2,

```
;; Function unoptimized (_Z11unoptimizedjj, funcdef_no=1, decl_uid=2121,
cgraph_uid=2, symbol_order=1)

;; 1 loops found
;;
;; Loop 0
;;  header 0, latch 1
;;  depth 0, outer -1
;;  nodes: 0 1 2
;; 2 succs { 1 }
Exported global range table:
============================
_1  : long long unsigned int [0, 4294967295]
_2  : long long unsigned int [0, 4294967295]
all_4  : long long unsigned int [0, 4294967295]
unsigned int unoptimized (unsigned int a, unsigned int b)
{
  long long unsigned int all;
  long long unsigned int _1;
  long long unsigned int _2;
  unsigned int _6;

  <bb 2> [local count: 1073741824]:
  all_4 = (long long unsigned int) a_3(D);
  _1 = (long long unsigned int) b_5(D);
  _2 = all_4 / _1;
  _6 = (unsigned int) _2;
  return _6;

}
```

If I'm interpreting the above correctly, the optimizer seems to think all_4 can
be in the range [0, 4294967295], which is correct.

Hence, I suppose it's safe to conclude that VRP isn't the issue here? Please
correct me if I'm wrong.

Reply via email to