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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|rguenth at gcc dot gnu.org         |unassigned at gcc dot 
gnu.org
             Status|ASSIGNED                    |NEW
            Summary|Optimize loads from         |Ranges from loads from
                   |constant arrays or          |constant arrays or
                   |aggregates with arrays      |aggregates with arrays
             Blocks|                            |85316
                 CC|                            |jamborm at gcc dot gnu.org,
                   |                            |rguenth at gcc dot gnu.org
   Last reconfirmed|2017-05-03 00:00:00         |2026-3-23

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
Now also needs -fdisable-tree-ethread to get the switch-conversion.  And then
Martins patch gets us:

Folding statement: _1 = a_2(D) & 1;
Not folded
Folding statement: _4 = (unsigned int) _1;
 Registering value_relation (_4 pe32 _1) (bb2) at _4 = (unsigned int) _1;
Not folded
Folding statement: _3 = CSWTCH.1[_4];
Global Exported: _3 = [irange] int [3, 3][5, 5][7, 7][11, 11][13, 13][17,
17][19, 19]
Not folded
Folding statement: return _3;
Not folded


int f (int a)
{
  int a_2(D) = a;
  int _1;
  int _3;
  unsigned int _4;

  <bb 2> [local count: 1073741824]:
  # RANGE [irange] int [0, 1] MASK 0x1 VALUE 0x0
  _1 = a_2(D) & 1;
  # RANGE [irange] unsigned int [0, 1] MASK 0x1 VALUE 0x0
  _4 = (unsigned int) _1;
  # RANGE [irange] int [3, 3][5, 5][7, 7][11, 11][13, 13][17, 17][19, 19]
  _3 = CSWTCH.1[_4];
  return _3;


so it's half-way working, just some bits (using range of the index?) are
missing?


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85316
[Bug 85316] [meta-bug] VRP range propagation missed cases

Reply via email to