Hello,
After I vectorize the following file by GCC for testing, it gets the
right "129t.final_cleanup" file. However, it expands to the wrong
vector type when stores the "short int" into memory. I have checked
many times, but I still don't know why. Can anyone help me?
The source file is:
short int b[20], c[20];
int main(){
int i;
for(i=0; i<20; i++)
{
b[i]=6;
c[i]=9;
}
return 0;
}
The 129t.final_cleanup file is:
;; Function main (main)
main ()
{
unsigned int ivtmp.44;
<bb 2>:
ivtmp.44 = 0;
<bb 3>:
MEM[base: &b + ivtmp.44] = { 6, 6, 6, 6 }; //It rightly expands
here! And it rightly vectorizes here!
MEM[base: &c + ivtmp.44] = { 9, 9, 9, 9 };
ivtmp.44 = ivtmp.44 + 8;
if (ivtmp.44 != 40)
goto <bb 3>;
else
goto <bb 4>;
<bb 4>:
return 0;
}
The "131r.expand" file is:
(insn 52 51 53 4 hello21.c:10 (set (reg/f:SI 241)
(symbol_ref:SI ("b") <var_decl 0x2ae0d6c0 b>)) -1 (nil))
(insn 53 52 54 4 hello21.c:10 (set (reg:SI 240)
(plus:SI (reg/f:SI 241)
(reg:SI 238 [ ivtmp.44 ]))) -1 (nil))
(insn 54 53 55 4 hello21.c:10 (set (reg:SI 242)
(high:SI (symbol_ref/u:SI ("*.LC0") [flags 0x2]))) -1 (nil))
(insn 55 54 56 4 hello21.c:10 (set (reg:V2SI 243)
// why it expands the scalar type to "V2SI" rather than "V4HI", which
is different from "129t.final_cleanup" file
(mem/u/c/i:V2SI (lo_sum:SI (reg:SI 242)
(symbol_ref/u:SI ("*.LC0") [flags 0x2])) [4 S8 A64])) -1 (nil))
(insn 56 55 57 4 hello21.c:10 (set (mem:V2SI (reg:SI 240) [4 S8 A64])
(reg:V2SI 243)) -1 (nil))
Why it expands to the wrong type?
Thanks very much!
Caixia