There are some cases where its useful for float types, not quite as
hot as in the integer case, but still better than alternatives.
Details
- Reviewers
pengfei RKSimon - Commits
- rG5767497943c7: Add Extend shuffle pattern to vNf32 shuffles.
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
llvm/test/CodeGen/X86/merge-consecutive-loads-512.ll | ||
---|---|---|
310 ↗ | (On Diff #496614) | Hmm - shuffle combining should already catch this - any idea why it doesn't? |
llvm/test/CodeGen/X86/merge-consecutive-loads-512.ll | ||
---|---|---|
310 ↗ | (On Diff #496614) | Yeah, for the float types it is beneficial to do lowerShuffleAsBlend before lowerShuffleAsZeroOrAnyExtend (so added when added lowerShuffleAsZeroOrAnyExtend), lowerShuffleAsBlend is what implements the the logic-op shuffles. I should/will update commit message to reflect that. |
llvm/lib/Target/X86/X86ISelLowering.cpp | ||
---|---|---|
14326 | Don't bother with the if() test - getBitcast will do that internally anyway: InputV = DAG.getBitcast(VT, InputV); | |
14334–14335 | Drop the if() and always call getBitcast | |
16979 | We've had problems before where we've created nodes before bailing out later on - causing various problems including hasOneUse assumption failures later on. Is there any nice way that we can do the SimpleOnly checks BEFORE calling HalfBlend? Or maybe split into an analysis lambda and a getVectorShuffle lambda. | |
18387 | Pull this out into a helper function? | |
18398 | return DAG.getBitcast(MVT::v8f32, ZExt); | |
19135 | return DAG.getBitcast(MVT::v16f32, ZExt); |
llvm/lib/Target/X86/X86ISelLowering.cpp | ||
---|---|---|
17185 | SmallVectorImpl<int> &InLaneMask |
llvm/lib/Target/X86/X86ISelLowering.cpp | ||
---|---|---|
17185 | Any chance we can keep it as a pointer? imo output references are confusing as hell. |
llvm/lib/Target/X86/X86ISelLowering.cpp | ||
---|---|---|
16944 | SimpleOnly is guaranteed to be true here Maybe just return !(UseHiV1 || UseHiV2); | |
17187 | Don't hardcode the LaneSize calculation - it prevents us using for other vector sizes in the future. | |
17188 | InLaneMask.assign(Mask.begin(), Mask.end()); | |
18377 | Move if(!Subtarget.hasAVX2()) up here to avoid unnecessary computeInLaneShuffleMask calls |
Don't bother with the if() test - getBitcast will do that internally anyway:
InputV = DAG.getBitcast(VT, InputV);