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