diff options
author | Sanjay Patel <spatel@rotateright.com> | 2018-10-20 16:25:55 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2018-10-20 16:25:55 +0000 |
commit | 729c4362cfad343865ec24e9d2fd877163f83220 (patch) | |
tree | ea27f1b9e0f359e441e10750d2ef0e00a2d49b06 /llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp | |
parent | c008af646620f6718384c2cd95f58a7311fe10fb (diff) | |
download | bcm5719-llvm-729c4362cfad343865ec24e9d2fd877163f83220.tar.gz bcm5719-llvm-729c4362cfad343865ec24e9d2fd877163f83220.zip |
[InstCombine] add explanatory comment for strange vector logic; NFC
llvm-svn: 344852
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp b/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp index bdd8fe3eead..bcf2a25aefc 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp @@ -900,6 +900,22 @@ Instruction *InstCombiner::visitInsertElementInst(InsertElementInst &IE) { // If this insertelement isn't used by some other insertelement, turn it // (and any insertelements it points to), into one big shuffle. + + // TODO: Looking at the user(s) to determine if this insert is a + // fold-to-shuffle opportunity does not match the usual instcombine + // constraints. We should decide if the transform is worthy based only + // on this instruction and its operands, but that may not work currently. + // + // Here, we are trying to avoid creating shuffles before reaching + // the end of a chain of extract-insert pairs. This is complicated because + // we do not generally form arbitrary shuffle masks in instcombine + // (because those may codegen poorly), but collectShuffleElements() does + // exactly that. + // + // The rules for determining what is an acceptable target-independent + // shuffle mask are fuzzy because they evolve based on the backend's + // capabilities and real-world impact. + if (!IE.hasOneUse() || !isa<InsertElementInst>(IE.user_back())) { SmallVector<Constant*, 16> Mask; ShuffleOps LR = collectShuffleElements(&IE, Mask, nullptr, *this); |