Vector 'getelementptr' with scalar base is an opportunity for gather/scatter intrinsic to generate a better sequence.
While looking for uniform base, we want to use the scalar base pointer of GEP, if exists.
Details
Diff Detail
- Repository
- rL LLVM
Event Timeline
Vector 'getelementptr' with scalar base is an opportunity for gather/scatter intrinsic to generate a better sequence.
While looking for uniform base, we want to use the scalar base pointer of GEP, if exists.
| lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | ||
|---|---|---|
| 3083 | unform -> uniform | |
| 3084 | receive -> take, perhaps? | |
| 3085 | Perhaps IR examples for both representations might be helpful? | |
| 3111–3112 | else on the same line? | |
| 3116–3117 | Should we check that the insertelement index is 0? (or even generalize and check that the broadcast and insertelement have the same index, though that sounds unnecessary) | |
| 3121 | inside -> inside the | |
| 3129 | unnecessary end-of-line whitespace? | |
| 3140 | I'm a bit uneasy with changing IndexVal outside the if(): when the latter fails, IndexVal will be incorrect for subsequent users. Not sure it's better, but what about something like: Value *OrigIndexVal = ...;
if (SDB->findValue(OrigIndexVal)) {
IndexVal = OrigIndexVal;
...
} | |
| 3146 | Why not EVT? | |
Ahmed,
Thanks a lot for the review. I addressed all your comments and uploaded a new patch.
| lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | ||
|---|---|---|
| 3084 | Vector of pointers is the first argument of Gather/Scatter | |
| 3116–3117 | I submitted another patch with getSplatValue() as vector utility and planned to use it here, but it is stuck on review. | |
| 3140 | Actually, I don't need the IndexVal any more, but I changed the code. | |
| 3146 | The same interface in EVT requires Context. But I changed, the result is the same. | |
This LGTM, but let's get getSplatValue figured out, commit that, and then commit this patch using getSplatValue.
| lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | ||
|---|---|---|
| 3114 | I suppose you'll replace this logic with getSplatValue when that lands. | |
I use the new interface getSplatValue().
I added more tests, Hal and James asked for.
unform -> uniform