mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
[X86] Do not custom lower UINT_TO_FP when the target type does not
match the custom lowering. <rdar://problem/19026326> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222489 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c8ef21f1b1
commit
c91f34ae54
@ -13610,6 +13610,11 @@ static SDValue lowerUINT_TO_FP_vXi32(SDValue Op, SelectionDAG &DAG,
|
||||
EVT VecIntVT = V.getValueType();
|
||||
bool Is128 = VecIntVT == MVT::v4i32;
|
||||
EVT VecFloatVT = Is128 ? MVT::v4f32 : MVT::v8f32;
|
||||
// If we convert to something else than the supported type, e.g., to v4f64,
|
||||
// abort early.
|
||||
if (VecFloatVT != Op->getValueType(0))
|
||||
return SDValue();
|
||||
|
||||
unsigned NumElts = VecIntVT.getVectorNumElements();
|
||||
assert((VecIntVT == MVT::v4i32 || VecIntVT == MVT::v8i32) &&
|
||||
"Unsupported custom type");
|
||||
|
@ -154,3 +154,14 @@ define <8 x float> @test2(<8 x i32> %A) nounwind {
|
||||
%C = uitofp <8 x i32> %A to <8 x float>
|
||||
ret <8 x float> %C
|
||||
}
|
||||
|
||||
define <4 x double> @test3(<4 x i32> %arg) {
|
||||
; CHECK-LABEL: test3:
|
||||
; This test used to crash because we were custom lowering it as if it was
|
||||
; a conversion between <4 x i32> and <4 x float>.
|
||||
; AVX: vcvtdq2pd
|
||||
; AVX2: vcvtdq2pd
|
||||
; CHECK: retq
|
||||
%tmp = uitofp <4 x i32> %arg to <4 x double>
|
||||
ret <4 x double> %tmp
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user