forked from OSchip/llvm-project
[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
This commit is contained in:
parent
1977514287
commit
b4240ca0f4
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -631,12 +631,13 @@ define <2 x i32> @test80(i32 %v) {
|
|||
ret <2 x i32> %i
|
||||
|
||||
; CHECK-LABEL: @test80
|
||||
; CHECK: addi
|
||||
; CHECK: addi
|
||||
; CHECK: lxvd2x
|
||||
; CHECK-DAG: addi [[R1:[0-9]+]], 3, 3
|
||||
; CHECK-DAG: addi [[R2:[0-9]+]], 1, -16
|
||||
; CHECK-DAG: addi [[R3:[0-9]+]], 3, 2
|
||||
; CHECK: std [[R1]], 8([[R2]])
|
||||
; CHECK: std [[R3]], -16(1)
|
||||
; CHECK: lxvd2x 34, 0, [[R2]]
|
||||
; CHECK-NOT: stxvd2x
|
||||
; FIXME: We still make one vector for each vector element and this shuffle them
|
||||
; together instead of just composing one vector on the stack.
|
||||
; CHECK: blr
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue