| Issue |
176208
|
| Summary |
[RISCV] Division is costed with a reciprocal throughput of 1
|
| Labels |
backend:RISC-V
|
| Assignees |
bababuck
|
| Reporter |
bababuck
|
Division is costed as having a reciprocal throughput of `1` on the RISCV backend.
`./bin/opt -mtriple=riscv64 -mattr=+m,+v -passes=slp-vectorizer t2.ll -debug-_only_=SLP -S`
```
define void @div_cost(ptr %pl, ptr %ps) {
%gep_l0 = getelementptr inbounds i64, ptr %pl, i64 0
%gep_l1 = getelementptr inbounds i64, ptr %pl, i64 1
%gep_l2 = getelementptr inbounds i64, ptr %pl, i64 2
%gep_l3 = getelementptr inbounds i64, ptr %pl, i64 3
%gep_l4 = getelementptr inbounds i64, ptr %pl, i64 4
%gep_l5 = getelementptr inbounds i64, ptr %pl, i64 5
%gep_l6 = getelementptr inbounds i64, ptr %pl, i64 6
%gep_l7 = getelementptr inbounds i64, ptr %pl, i64 7
%load0 = load i64, ptr %gep_l0 , align 1
%load1 = load i64, ptr %gep_l1 , align 1
%load2 = load i64, ptr %gep_l2 , align 1
%load3 = load i64, ptr %gep_l3 , align 1
%load4 = load i64, ptr %gep_l4 , align 1
%load5 = load i64, ptr %gep_l5 , align 1
%load6 = load i64, ptr %gep_l6 , align 1
%load7 = load i64, ptr %gep_l7 , align 1
%div0 = udiv i64 %load0, %load4
%div1 = udiv i64 %load1, %load5
%div2 = udiv i64 %load2, %load6
%div3 = udiv i64 %load3, %load7
%gep_s0 = getelementptr inbounds i64, ptr %ps, i64 0
%gep_s1 = getelementptr inbounds i64, ptr %ps, i64 1
%gep_s2 = getelementptr inbounds i64, ptr %ps, i64 2
%gep_s3 = getelementptr inbounds i64, ptr %ps, i64 3
store i64 %div0, ptr %gep_s0, align 1
store i64 %div1, ptr %gep_s1, align 1
store i64 %div2, ptr %gep_s2, align 1
store i64 %div3, ptr %gep_s3, align 1
ret void
}
```
```
Scalars:
%div0 = udiv i64 %load0, %load4
%div1 = udiv i64 %load1, %load5
%div2 = udiv i64 %load2, %load6
%div3 = udiv i64 %load3, %load7
...
SLP: VectorCost = 2
SLP: ScalarCost = 4
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs