https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80791
--- Comment #7 from amker at gcc dot gnu.org ---
So dump of optimized pass is:
;; Function f (f, funcdef_no=0, decl_uid=2557, cgraph_uid=0, symbol_order=1)
Removing basic block 5
__attribute__((noinline))
f (int m)
{
int sh;
int i;
sizetype _3;
void * _4;
unsigned int _17;
unsigned int _18;
<bb 2> [15.00%]:
<bb 3> [100.00%]:
# i_5 = PHI <m_8(D)(2), i_12(3)>
# sh_6 = PHI <256(2), sh_10(3)>
_18 = (unsigned int) i_5;
_17 = _18 * 8;
_3 = (sizetype) _17;
sh_10 = sh_6 >> 1;
_4 = &a + _3;
a[sh_10] = _4;
i_12 = i_5 + 4;
if (i_12 <= 1073741839)
goto <bb 3>; [85.00%]
else
goto <bb 4>; [15.00%]
<bb 4> [15.00%]:
return;
}
During expanding:
;; i_12 = i_5 + 4;
(insn 18 17 19 (set (reg:SI 169)
(plus:SI (subreg/s/u:SI (reg/v:DI 160 [ m ]) 0)
(const_int 4 [0x4]))) "sms-1.c":22 -1
(nil))
(insn 19 18 0 (set (reg/v:DI 160 [ m ])
(sign_extend:DI (reg:SI 169))) "sms-1.c":22 -1
(nil))
Why a int add is expanded into subreg/sign_extend? Because of 64 bit
registers?