diff options
| author | Craig Topper <craig.topper@gmail.com> | 2019-12-26 21:25:22 -0800 |
|---|---|---|
| committer | Craig Topper <craig.topper@gmail.com> | 2019-12-26 21:45:18 -0800 |
| commit | 50fb3957c1906d2e971a192e5bd69b40bc5a3919 (patch) | |
| tree | 7b1f36c9bd6ff8c6c621fcae278f377d4ddc985b /llvm/lib | |
| parent | c4a97b64e3a7e7a75b796a9ef01d4b4981468071 (diff) | |
| download | bcm5719-llvm-50fb3957c1906d2e971a192e5bd69b40bc5a3919.tar.gz bcm5719-llvm-50fb3957c1906d2e971a192e5bd69b40bc5a3919.zip | |
[X86] Custom widen strict v2f32->v2i32 by padding with zeroes.
For non-strict, generic type legalization will take care of this,
but that doesn't happen currently for strict nodes.
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 508bbfb17f9..e1236714a33 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -28858,6 +28858,18 @@ void X86TargetLowering::ReplaceNodeResults(SDNode *N, return; } + // Custom widen strict v2f32->v2i32 by padding with zeros. + // FIXME: Should generic type legalizer do this? + if (Src.getValueType() == MVT::v2f32 && IsStrict) { + Src = DAG.getNode(ISD::CONCAT_VECTORS, dl, MVT::v4f32, Src, + DAG.getConstantFP(0.0, dl, MVT::v2f32)); + SDValue Res = DAG.getNode(N->getOpcode(), dl, {MVT::v4i32, MVT::Other}, + {N->getOperand(0), Src}); + Results.push_back(Res); + Results.push_back(Res.getValue(1)); + return; + } + // The FP_TO_INTHelper below only handles f32/f64/f80 scalar inputs, // so early out here. return; |

