mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-02 10:32:56 +00:00
[X86] Lower 256-bit vector all-zero constants to v8i32 even with AVX1 only. Either way a 256-bit VXORPS will be used.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@268873 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7e89a31db3
commit
82b3d2dd64
@ -4339,10 +4339,7 @@ static SDValue getZeroVector(MVT VT, const X86Subtarget &Subtarget,
|
||||
SDValue Vec;
|
||||
if (!Subtarget.hasSSE2() && VT.is128BitVector()) {
|
||||
Vec = DAG.getConstantFP(+0.0, dl, MVT::v4f32);
|
||||
} else if (!Subtarget.hasInt256() && VT.is256BitVector()) {
|
||||
Vec = DAG.getConstantFP(+0.0, dl, MVT::v8f32);
|
||||
} else if (VT.getVectorElementType() == MVT::i1) {
|
||||
// AVX512 can use "vpxord" for 512-bit zeros.
|
||||
assert((Subtarget.hasBWI() || VT.getVectorNumElements() <= 16) &&
|
||||
"Unexpected vector type");
|
||||
assert((Subtarget.hasVLX() || VT.getVectorNumElements() >= 8) &&
|
||||
|
@ -8705,22 +8705,17 @@ multiclass maskmov_lowering<string InstrStr, RegisterClass RC, ValueType VT,
|
||||
let Predicates = [HasAVX] in {
|
||||
defm : maskmov_lowering<"VMASKMOVPS", VR128, v4f32, v4i32, "VBLENDVPS", v4i32>;
|
||||
defm : maskmov_lowering<"VMASKMOVPD", VR128, v2f64, v2i64, "VBLENDVPD", v4i32>;
|
||||
defm : maskmov_lowering<"VMASKMOVPSY", VR256, v8f32, v8i32, "VBLENDVPSY", v8i32>;
|
||||
defm : maskmov_lowering<"VMASKMOVPDY", VR256, v4f64, v4i64, "VBLENDVPDY", v8i32>;
|
||||
}
|
||||
let Predicates = [HasAVX1Only] in {
|
||||
// zero vector created as v8f32 (base on X86TargetLowering::LowerBUILD_VECTOR)
|
||||
defm : maskmov_lowering<"VMASKMOVPSY", VR256, v8f32, v8i32, "VBLENDVPSY", v8f32>;
|
||||
defm : maskmov_lowering<"VMASKMOVPDY", VR256, v4f64, v4i64, "VBLENDVPDY", v8f32>;
|
||||
// load/store i32/i64 not supported use ps/pd version
|
||||
defm : maskmov_lowering<"VMASKMOVPSY", VR256, v8i32, v8i32, "VBLENDVPSY", v8i32>;
|
||||
defm : maskmov_lowering<"VMASKMOVPDY", VR256, v4i64, v4i64, "VBLENDVPDY", v8f32>;
|
||||
defm : maskmov_lowering<"VMASKMOVPDY", VR256, v4i64, v4i64, "VBLENDVPDY", v8i32>;
|
||||
defm : maskmov_lowering<"VMASKMOVPS", VR128, v4i32, v4i32, "VBLENDVPS", v4i32>;
|
||||
defm : maskmov_lowering<"VMASKMOVPD", VR128, v2i64, v2i64, "VBLENDVPD", v4i32>;
|
||||
}
|
||||
let Predicates = [HasAVX2] in {
|
||||
// zero vector created as v8i32 (base on X86TargetLowering::LowerBUILD_VECTOR)
|
||||
defm : maskmov_lowering<"VMASKMOVPSY", VR256, v8f32, v8i32, "VBLENDVPSY", v8i32>;
|
||||
defm : maskmov_lowering<"VMASKMOVPDY", VR256, v4f64, v4i64, "VBLENDVPDY", v8i32>;
|
||||
|
||||
defm : maskmov_lowering<"VPMASKMOVDY", VR256, v8i32, v8i32, "VBLENDVPSY", v8i32>;
|
||||
defm : maskmov_lowering<"VPMASKMOVQY", VR256, v4i64, v4i64, "VBLENDVPDY", v8i32>;
|
||||
defm : maskmov_lowering<"VPMASKMOVD", VR128, v4i32, v4i32, "VBLENDVPS", v4i32>;
|
||||
|
@ -19,8 +19,8 @@ define void @zero128() nounwind ssp {
|
||||
define void @zero256() nounwind ssp {
|
||||
; CHECK-LABEL: zero256:
|
||||
; CHECK: ## BB#0:
|
||||
; CHECK-NEXT: vxorps %ymm0, %ymm0, %ymm0
|
||||
; CHECK-NEXT: movq _x@{{.*}}(%rip), %rax
|
||||
; CHECK-NEXT: vxorps %ymm0, %ymm0, %ymm0
|
||||
; CHECK-NEXT: vmovaps %ymm0, (%rax)
|
||||
; CHECK-NEXT: movq _y@{{.*}}(%rip), %rax
|
||||
; CHECK-NEXT: vmovaps %ymm0, (%rax)
|
||||
|
Loading…
x
Reference in New Issue
Block a user