Issue |
127119
|
Summary |
[PowerPC] xxsplti can not hoist out of loop.
|
Labels |
new issue
|
Assignees |
diggerlin
|
Reporter |
diggerlin
|
bash> cat tc.cpp
#include <altivec.h>
void foo (float* __restrict _a,float* __restrict In_a,int* __restrict n)
{
for(int j=0;j<*n;j++) {
vector float v21;
vector unsigned char v36;
vector unsigned char v37;
vector unsigned char v39;
v36=(vector unsigned char) {2,2,2,2,6,6,6,6,1,1,1,1,4,4,4,4};
v37=(vector unsigned char) {6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6};
v21=vec_promote(In_a[j],0);
v39=vec_sel((vector unsigned char)v36, (vector unsigned char)v21, (vector unsigned char)v37);
_a[j] = vec_extract((vector float)v39,0);
}
}
bash>clang -o tc.s -S tc.cpp -O3 -maltivec -mcpu=pwr10 -m64
cat> tc.s
```
# %bb.2: # %for.body.preheader.new
rlwinm r6, r5, 0, 1, 30
addi r10, r4, -8
addi r7, r3, -8
li r8, 8
li r9, 12
li r11, 4
addi r6, r6, -2
rldicl r6, r6, 63, 1
addi r6, r6, 1
mtctr r6
li r6, 0
.align 4
L..BB0_3: # %for.body
# =>This Inner Loop Header: Depth=1
lxvwsx vs0, r10, r8
xxspltib vs1, 6
addi r6, r6, 2
xxland vs0, vs0, vs1
xscvspdpn f0, vs0
stfsu f0, 8(r7)
lxvwsx vs0, r10, r9
addi r10, r10, 8
xxland vs0, vs0, vs1
xxsldwi vs0, vs0, vs0, 3
stfiwx f0, r7, r11
bdnz L..BB0_3
```
the instruction `xxspltib vs1, 6` in the block `L..BB0_3` should be hoist out the loop `L..BB0_3`
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs