llvm / llvm/llvm-project

[LoopVectorizer] Support reverse elimination in VPlan

Open
#203,206 2 comments 1 reaction 0 assignees View on GitHub
vectorizers
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

Here are the simplification rules for reverse elimination:
- [x] reverse(splat(X)) --> splat(X)
- [ ] reduce.add(reverse(V)) --> reduce.add(V) 
- [x] ~~reverse(BinOp reverse(V1), reverse(V2)) --> BinOp V1, V2~~
- [x] ~~reverse(BinOp(reverse(V1), splat))) --> BinOp(V1, splat)~~
- [x] ~~reverse(BinOp(splat, reverse(V2)))) --> BinOp(splat, V2)~~
- [ ] reverse(UnaryOp reverse(V)) --> UnaryOp V
- [ ] select reverse(Cond), reverse(TVal), reverse(FVal) --> reverse(select Cond, TVal, FVal)
- [ ] select reverse(Cond), reverse(TVal), splat --> reverse(select Cond, TVal, splat)
- [ ] select reverse(Cond), splat, reverse(FVal) --> reverse(select Cond, splat, FVal)
- [x] BinOp(reverse(V1), reverse(V2)) --> reverse(BinOp(V1, V2))
- [x] BinOp(reverse(V1), splat)) --> reverse(BinOp(V1, splat))
- [x] BinOp(splat, reverse(V2))) --> reverse(BinOp(splat, V2))
- [ ] cmp(Pred, reverse(V1), reverse(V2)) --> reverse(cmp Pred, V1, V2)
- [ ] cmp(Pred, reverse(V1), splat) --> reverse(cmp Pred, V1, splat)
- [ ] cmp(Pred, splat, reverse(V2)) --> reverse(cmp Pred, splat, V2)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.