diff options
| author | Hal Finkel <hfinkel@anl.gov> | 2014-03-31 17:48:16 +0000 |
|---|---|---|
| committer | Hal Finkel <hfinkel@anl.gov> | 2014-03-31 17:48:16 +0000 |
| commit | b4240ca0f414eeb40c355151b4af0225595364b2 (patch) | |
| tree | 12ca4aba970753fb2a4c7f6849d8b1ac250d8cfd /llvm/lib/Target | |
| parent | 1977514287e8c1283b7aeacd1ad7d61a14dbd3c7 (diff) | |
| download | bcm5719-llvm-b4240ca0f414eeb40c355151b4af0225595364b2.tar.gz bcm5719-llvm-b4240ca0f414eeb40c355151b4af0225595364b2.zip | |
[PowerPC] Don't ever expand BUILD_VECTOR of v2i64 with shuffles
If we have two unique values for a v2i64 build vector, this will always result
in two vector loads if we expand using shuffles. Only one is necessary.
llvm-svn: 205231
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 9 | ||||
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelLowering.h | 5 |
2 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index 9015a3c5216..32ac1dce906 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -8845,6 +8845,15 @@ bool PPCTargetLowering::isFMAFasterThanFMulAndFAdd(EVT VT) const { return false; } +bool +PPCTargetLowering::shouldExpandBuildVectorWithShuffles( + EVT VT , unsigned DefinedValues) const { + if (VT == MVT::v2i64) + return false; + + return TargetLowering::shouldExpandBuildVectorWithShuffles(VT, DefinedValues); +} + Sched::Preference PPCTargetLowering::getSchedulingPreference(SDNode *N) const { if (DisableILPPref || PPCSubTarget.enableMachineScheduler()) return TargetLowering::getSchedulingPreference(N); diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.h b/llvm/lib/Target/PowerPC/PPCISelLowering.h index 9461e46198c..da6d4dcc3a3 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.h +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.h @@ -477,6 +477,11 @@ namespace llvm { /// expanded to fmul + fadd. virtual bool isFMAFasterThanFMulAndFAdd(EVT VT) const; + // Should we expand the build vector with shuffles? + virtual bool + shouldExpandBuildVectorWithShuffles(EVT VT, + unsigned DefinedValues) const; + /// createFastISel - This method returns a target-specific FastISel object, /// or null if the target does not support "fast" instruction selection. virtual FastISel *createFastISel(FunctionLoweringInfo &FuncInfo, |

