mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-05 14:34:55 +00:00
Switch from EVT to MVT in more of the x86 instruction lowering code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198144 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3b6e25e332
commit
036c045ac9
@ -8506,7 +8506,7 @@ X86TargetLowering::LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const {
|
||||
/// and take a 2 x i32 value to shift plus a shift amount.
|
||||
SDValue X86TargetLowering::LowerShiftParts(SDValue Op, SelectionDAG &DAG) const{
|
||||
assert(Op.getNumOperands() == 3 && "Not a double-shift!");
|
||||
EVT VT = Op.getValueType();
|
||||
MVT VT = Op.getSimpleValueType();
|
||||
unsigned VTBits = VT.getSizeInBits();
|
||||
SDLoc dl(Op);
|
||||
bool isSRA = Op.getOpcode() == ISD::SRA_PARTS;
|
||||
@ -8558,12 +8558,12 @@ SDValue X86TargetLowering::LowerShiftParts(SDValue Op, SelectionDAG &DAG) const{
|
||||
|
||||
SDValue X86TargetLowering::LowerSINT_TO_FP(SDValue Op,
|
||||
SelectionDAG &DAG) const {
|
||||
EVT SrcVT = Op.getOperand(0).getValueType();
|
||||
MVT SrcVT = Op.getOperand(0).getSimpleValueType();
|
||||
|
||||
if (SrcVT.isVector())
|
||||
return SDValue();
|
||||
|
||||
assert(SrcVT.getSimpleVT() <= MVT::i64 && SrcVT.getSimpleVT() >= MVT::i16 &&
|
||||
assert(SrcVT <= MVT::i64 && SrcVT >= MVT::i16 &&
|
||||
"Unknown SINT_TO_FP to lower!");
|
||||
|
||||
// These are really Legal; return the operand so the caller accepts it as
|
||||
@ -8767,15 +8767,14 @@ SDValue X86TargetLowering::LowerUINT_TO_FP_i32(SDValue Op,
|
||||
SDValue X86TargetLowering::lowerUINT_TO_FP_vec(SDValue Op,
|
||||
SelectionDAG &DAG) const {
|
||||
SDValue N0 = Op.getOperand(0);
|
||||
EVT SVT = N0.getValueType();
|
||||
MVT SVT = N0.getSimpleValueType();
|
||||
SDLoc dl(Op);
|
||||
|
||||
assert((SVT == MVT::v4i8 || SVT == MVT::v4i16 ||
|
||||
SVT == MVT::v8i8 || SVT == MVT::v8i16) &&
|
||||
"Custom UINT_TO_FP is not supported!");
|
||||
|
||||
EVT NVT = EVT::getVectorVT(*DAG.getContext(), MVT::i32,
|
||||
SVT.getVectorNumElements());
|
||||
MVT NVT = MVT::getVectorVT(MVT::i32, SVT.getVectorNumElements());
|
||||
return DAG.getNode(ISD::SINT_TO_FP, dl, Op.getValueType(),
|
||||
DAG.getNode(ISD::ZERO_EXTEND, dl, NVT, N0));
|
||||
}
|
||||
@ -8794,8 +8793,8 @@ SDValue X86TargetLowering::LowerUINT_TO_FP(SDValue Op,
|
||||
if (DAG.SignBitIsZero(N0))
|
||||
return DAG.getNode(ISD::SINT_TO_FP, dl, Op.getValueType(), N0);
|
||||
|
||||
EVT SrcVT = N0.getValueType();
|
||||
EVT DstVT = Op.getValueType();
|
||||
MVT SrcVT = N0.getSimpleValueType();
|
||||
MVT DstVT = Op.getSimpleValueType();
|
||||
if (SrcVT == MVT::i64 && DstVT == MVT::f64 && X86ScalarSSEf64)
|
||||
return LowerUINT_TO_FP_i64(Op, DAG);
|
||||
if (SrcVT == MVT::i32 && X86ScalarSSEf64)
|
||||
@ -9009,9 +9008,9 @@ static SDValue LowerAVXExtend(SDValue Op, SelectionDAG &DAG,
|
||||
|
||||
static SDValue LowerZERO_EXTEND_AVX512(SDValue Op,
|
||||
SelectionDAG &DAG) {
|
||||
MVT VT = Op->getValueType(0).getSimpleVT();
|
||||
MVT VT = Op->getSimpleValueType(0);
|
||||
SDValue In = Op->getOperand(0);
|
||||
MVT InVT = In.getValueType().getSimpleVT();
|
||||
MVT InVT = In.getSimpleValueType();
|
||||
SDLoc DL(Op);
|
||||
unsigned int NumElts = VT.getVectorNumElements();
|
||||
if (NumElts != 8 && NumElts != 16)
|
||||
@ -9209,8 +9208,7 @@ SDValue X86TargetLowering::LowerTRUNCATE(SDValue Op, SelectionDAG &DAG) const {
|
||||
assert(Subtarget->hasFp256() && "256-bit vector without AVX!");
|
||||
|
||||
unsigned NumElems = VT.getVectorNumElements();
|
||||
EVT NVT = EVT::getVectorVT(*DAG.getContext(), VT.getVectorElementType(),
|
||||
NumElems * 2);
|
||||
MVT NVT = MVT::getVectorVT(VT.getVectorElementType(), NumElems * 2);
|
||||
|
||||
SmallVector<int, 16> MaskVec(NumElems * 2, -1);
|
||||
// Prepare truncation shuffle mask
|
||||
@ -11100,10 +11098,10 @@ static SDValue LowerVACOPY(SDValue Op, const X86Subtarget *Subtarget,
|
||||
|
||||
// getTargetVShiftByConstNode - Handle vector element shifts where the shift
|
||||
// amount is a constant. Takes immediate version of shift as input.
|
||||
static SDValue getTargetVShiftByConstNode(unsigned Opc, SDLoc dl, EVT VT,
|
||||
static SDValue getTargetVShiftByConstNode(unsigned Opc, SDLoc dl, MVT VT,
|
||||
SDValue SrcOp, uint64_t ShiftAmt,
|
||||
SelectionDAG &DAG) {
|
||||
EVT ElementType = VT.getVectorElementType();
|
||||
MVT ElementType = VT.getVectorElementType();
|
||||
|
||||
// Check for ShiftAmt >= element width
|
||||
if (ShiftAmt >= ElementType.getSizeInBits()) {
|
||||
@ -11171,7 +11169,7 @@ static SDValue getTargetVShiftByConstNode(unsigned Opc, SDLoc dl, EVT VT,
|
||||
|
||||
// getTargetVShiftNode - Handle vector element shifts where the shift amount
|
||||
// may or may not be a constant. Takes immediate version of shift as input.
|
||||
static SDValue getTargetVShiftNode(unsigned Opc, SDLoc dl, EVT VT,
|
||||
static SDValue getTargetVShiftNode(unsigned Opc, SDLoc dl, MVT VT,
|
||||
SDValue SrcOp, SDValue ShAmt,
|
||||
SelectionDAG &DAG) {
|
||||
assert(ShAmt.getValueType() == MVT::i32 && "ShAmt is not i32");
|
||||
@ -11199,7 +11197,7 @@ static SDValue getTargetVShiftNode(unsigned Opc, SDLoc dl, EVT VT,
|
||||
|
||||
// The return type has to be a 128-bit type with the same element
|
||||
// type as the input type.
|
||||
MVT EltVT = VT.getVectorElementType().getSimpleVT();
|
||||
MVT EltVT = VT.getVectorElementType();
|
||||
EVT ShVT = MVT::getVectorVT(EltVT, 128/EltVT.getSizeInBits());
|
||||
|
||||
ShAmt = DAG.getNode(ISD::BITCAST, dl, ShVT, ShAmt);
|
||||
@ -11732,7 +11730,7 @@ static SDValue LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG) {
|
||||
Opcode = X86ISD::VSRAI;
|
||||
break;
|
||||
}
|
||||
return getTargetVShiftNode(Opcode, dl, Op.getValueType(),
|
||||
return getTargetVShiftNode(Opcode, dl, Op.getSimpleValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2), DAG);
|
||||
}
|
||||
|
||||
@ -12449,7 +12447,7 @@ SDValue X86TargetLowering::LowerFLT_ROUNDS_(SDValue Op,
|
||||
const TargetMachine &TM = MF.getTarget();
|
||||
const TargetFrameLowering &TFI = *TM.getFrameLowering();
|
||||
unsigned StackAlignment = TFI.getStackAlignment();
|
||||
EVT VT = Op.getValueType();
|
||||
MVT VT = Op.getSimpleValueType();
|
||||
SDLoc DL(Op);
|
||||
|
||||
// Save FP Control Word to stack slot
|
||||
@ -12494,7 +12492,7 @@ SDValue X86TargetLowering::LowerFLT_ROUNDS_(SDValue Op,
|
||||
}
|
||||
|
||||
static SDValue LowerCTLZ(SDValue Op, SelectionDAG &DAG) {
|
||||
EVT VT = Op.getValueType();
|
||||
MVT VT = Op.getSimpleValueType();
|
||||
EVT OpVT = VT;
|
||||
unsigned NumBits = VT.getSizeInBits();
|
||||
SDLoc dl(Op);
|
||||
@ -12528,7 +12526,7 @@ static SDValue LowerCTLZ(SDValue Op, SelectionDAG &DAG) {
|
||||
}
|
||||
|
||||
static SDValue LowerCTLZ_ZERO_UNDEF(SDValue Op, SelectionDAG &DAG) {
|
||||
EVT VT = Op.getValueType();
|
||||
MVT VT = Op.getSimpleValueType();
|
||||
EVT OpVT = VT;
|
||||
unsigned NumBits = VT.getSizeInBits();
|
||||
SDLoc dl(Op);
|
||||
@ -12553,7 +12551,7 @@ static SDValue LowerCTLZ_ZERO_UNDEF(SDValue Op, SelectionDAG &DAG) {
|
||||
}
|
||||
|
||||
static SDValue LowerCTTZ(SDValue Op, SelectionDAG &DAG) {
|
||||
EVT VT = Op.getValueType();
|
||||
MVT VT = Op.getSimpleValueType();
|
||||
unsigned NumBits = VT.getSizeInBits();
|
||||
SDLoc dl(Op);
|
||||
Op = Op.getOperand(0);
|
||||
@ -12575,7 +12573,7 @@ static SDValue LowerCTTZ(SDValue Op, SelectionDAG &DAG) {
|
||||
// Lower256IntArith - Break a 256-bit integer operation into two new 128-bit
|
||||
// ones, and then concatenate the result back.
|
||||
static SDValue Lower256IntArith(SDValue Op, SelectionDAG &DAG) {
|
||||
EVT VT = Op.getValueType();
|
||||
MVT VT = Op.getSimpleValueType();
|
||||
|
||||
assert(VT.is256BitVector() && VT.isInteger() &&
|
||||
"Unsupported value type for operation");
|
||||
@ -12593,8 +12591,8 @@ static SDValue Lower256IntArith(SDValue Op, SelectionDAG &DAG) {
|
||||
SDValue RHS1 = Extract128BitVector(RHS, 0, DAG, dl);
|
||||
SDValue RHS2 = Extract128BitVector(RHS, NumElems/2, DAG, dl);
|
||||
|
||||
MVT EltVT = VT.getVectorElementType().getSimpleVT();
|
||||
EVT NewVT = MVT::getVectorVT(EltVT, NumElems/2);
|
||||
MVT EltVT = VT.getVectorElementType();
|
||||
MVT NewVT = MVT::getVectorVT(EltVT, NumElems/2);
|
||||
|
||||
return DAG.getNode(ISD::CONCAT_VECTORS, dl, VT,
|
||||
DAG.getNode(Op.getOpcode(), dl, NewVT, LHS1, RHS1),
|
||||
@ -12602,15 +12600,15 @@ static SDValue Lower256IntArith(SDValue Op, SelectionDAG &DAG) {
|
||||
}
|
||||
|
||||
static SDValue LowerADD(SDValue Op, SelectionDAG &DAG) {
|
||||
assert(Op.getValueType().is256BitVector() &&
|
||||
Op.getValueType().isInteger() &&
|
||||
assert(Op.getSimpleValueType().is256BitVector() &&
|
||||
Op.getSimpleValueType().isInteger() &&
|
||||
"Only handle AVX 256-bit vector integer operation");
|
||||
return Lower256IntArith(Op, DAG);
|
||||
}
|
||||
|
||||
static SDValue LowerSUB(SDValue Op, SelectionDAG &DAG) {
|
||||
assert(Op.getValueType().is256BitVector() &&
|
||||
Op.getValueType().isInteger() &&
|
||||
assert(Op.getSimpleValueType().is256BitVector() &&
|
||||
Op.getSimpleValueType().isInteger() &&
|
||||
"Only handle AVX 256-bit vector integer operation");
|
||||
return Lower256IntArith(Op, DAG);
|
||||
}
|
||||
@ -12618,7 +12616,7 @@ static SDValue LowerSUB(SDValue Op, SelectionDAG &DAG) {
|
||||
static SDValue LowerMUL(SDValue Op, const X86Subtarget *Subtarget,
|
||||
SelectionDAG &DAG) {
|
||||
SDLoc dl(Op);
|
||||
EVT VT = Op.getValueType();
|
||||
MVT VT = Op.getSimpleValueType();
|
||||
|
||||
// Decompose 256-bit ops into smaller 128-bit ops.
|
||||
if (VT.is256BitVector() && !Subtarget->hasInt256())
|
||||
@ -12688,8 +12686,8 @@ static SDValue LowerMUL(SDValue Op, const X86Subtarget *Subtarget,
|
||||
}
|
||||
|
||||
static SDValue LowerSDIV(SDValue Op, SelectionDAG &DAG) {
|
||||
EVT VT = Op.getValueType();
|
||||
EVT EltTy = VT.getVectorElementType();
|
||||
MVT VT = Op.getSimpleValueType();
|
||||
MVT EltTy = VT.getVectorElementType();
|
||||
unsigned NumElts = VT.getVectorNumElements();
|
||||
SDValue N0 = Op.getOperand(0);
|
||||
SDLoc dl(Op);
|
||||
@ -12744,7 +12742,7 @@ static SDValue LowerSDIV(SDValue Op, SelectionDAG &DAG) {
|
||||
|
||||
static SDValue LowerScalarImmediateShift(SDValue Op, SelectionDAG &DAG,
|
||||
const X86Subtarget *Subtarget) {
|
||||
EVT VT = Op.getValueType();
|
||||
MVT VT = Op.getSimpleValueType();
|
||||
SDLoc dl(Op);
|
||||
SDValue R = Op.getOperand(0);
|
||||
SDValue Amt = Op.getOperand(1);
|
||||
@ -12871,7 +12869,7 @@ static SDValue LowerScalarImmediateShift(SDValue Op, SelectionDAG &DAG,
|
||||
Amt.getOpcode() == ISD::BITCAST &&
|
||||
Amt.getOperand(0).getOpcode() == ISD::BUILD_VECTOR) {
|
||||
Amt = Amt.getOperand(0);
|
||||
unsigned Ratio = Amt.getValueType().getVectorNumElements() /
|
||||
unsigned Ratio = Amt.getSimpleValueType().getVectorNumElements() /
|
||||
VT.getVectorNumElements();
|
||||
unsigned RatioInLog2 = Log2_32_Ceil(Ratio);
|
||||
uint64_t ShiftAmt = 0;
|
||||
@ -12916,7 +12914,7 @@ static SDValue LowerScalarImmediateShift(SDValue Op, SelectionDAG &DAG,
|
||||
|
||||
static SDValue LowerScalarVariableShift(SDValue Op, SelectionDAG &DAG,
|
||||
const X86Subtarget* Subtarget) {
|
||||
EVT VT = Op.getValueType();
|
||||
MVT VT = Op.getSimpleValueType();
|
||||
SDLoc dl(Op);
|
||||
SDValue R = Op.getOperand(0);
|
||||
SDValue Amt = Op.getOperand(1);
|
||||
@ -12986,7 +12984,7 @@ static SDValue LowerScalarVariableShift(SDValue Op, SelectionDAG &DAG,
|
||||
default:
|
||||
llvm_unreachable("Unknown shift opcode!");
|
||||
case ISD::SHL:
|
||||
switch (VT.getSimpleVT().SimpleTy) {
|
||||
switch (VT.SimpleTy) {
|
||||
default: return SDValue();
|
||||
case MVT::v2i64:
|
||||
case MVT::v4i32:
|
||||
@ -12999,7 +12997,7 @@ static SDValue LowerScalarVariableShift(SDValue Op, SelectionDAG &DAG,
|
||||
return getTargetVShiftNode(X86ISD::VSHLI, dl, VT, R, BaseShAmt, DAG);
|
||||
}
|
||||
case ISD::SRA:
|
||||
switch (VT.getSimpleVT().SimpleTy) {
|
||||
switch (VT.SimpleTy) {
|
||||
default: return SDValue();
|
||||
case MVT::v4i32:
|
||||
case MVT::v8i16:
|
||||
@ -13010,7 +13008,7 @@ static SDValue LowerScalarVariableShift(SDValue Op, SelectionDAG &DAG,
|
||||
return getTargetVShiftNode(X86ISD::VSRAI, dl, VT, R, BaseShAmt, DAG);
|
||||
}
|
||||
case ISD::SRL:
|
||||
switch (VT.getSimpleVT().SimpleTy) {
|
||||
switch (VT.SimpleTy) {
|
||||
default: return SDValue();
|
||||
case MVT::v2i64:
|
||||
case MVT::v4i32:
|
||||
@ -13033,7 +13031,7 @@ static SDValue LowerScalarVariableShift(SDValue Op, SelectionDAG &DAG,
|
||||
Amt.getOpcode() == ISD::BITCAST &&
|
||||
Amt.getOperand(0).getOpcode() == ISD::BUILD_VECTOR) {
|
||||
Amt = Amt.getOperand(0);
|
||||
unsigned Ratio = Amt.getValueType().getVectorNumElements() /
|
||||
unsigned Ratio = Amt.getSimpleValueType().getVectorNumElements() /
|
||||
VT.getVectorNumElements();
|
||||
std::vector<SDValue> Vals(Ratio);
|
||||
for (unsigned i = 0; i != Ratio; ++i)
|
||||
@ -13061,7 +13059,7 @@ static SDValue LowerScalarVariableShift(SDValue Op, SelectionDAG &DAG,
|
||||
static SDValue LowerShift(SDValue Op, const X86Subtarget* Subtarget,
|
||||
SelectionDAG &DAG) {
|
||||
|
||||
EVT VT = Op.getValueType();
|
||||
MVT VT = Op.getSimpleValueType();
|
||||
SDLoc dl(Op);
|
||||
SDValue R = Op.getOperand(0);
|
||||
SDValue Amt = Op.getOperand(1);
|
||||
@ -13149,7 +13147,7 @@ static SDValue LowerShift(SDValue Op, const X86Subtarget* Subtarget,
|
||||
// Decompose 256-bit shifts into smaller 128-bit shifts.
|
||||
if (VT.is256BitVector()) {
|
||||
unsigned NumElems = VT.getVectorNumElements();
|
||||
MVT EltVT = VT.getVectorElementType().getSimpleVT();
|
||||
MVT EltVT = VT.getVectorElementType();
|
||||
EVT NewVT = MVT::getVectorVT(EltVT, NumElems/2);
|
||||
|
||||
// Extract the two vectors
|
||||
@ -13267,7 +13265,7 @@ SDValue X86TargetLowering::LowerSIGN_EXTEND_INREG(SDValue Op,
|
||||
SelectionDAG &DAG) const {
|
||||
SDLoc dl(Op);
|
||||
EVT ExtraVT = cast<VTSDNode>(Op.getOperand(1))->getVT();
|
||||
EVT VT = Op.getValueType();
|
||||
MVT VT = Op.getSimpleValueType();
|
||||
|
||||
if (!Subtarget->hasSSE2() || !VT.isVector())
|
||||
return SDValue();
|
||||
@ -13275,7 +13273,7 @@ SDValue X86TargetLowering::LowerSIGN_EXTEND_INREG(SDValue Op,
|
||||
unsigned BitsDiff = VT.getScalarType().getSizeInBits() -
|
||||
ExtraVT.getScalarType().getSizeInBits();
|
||||
|
||||
switch (VT.getSimpleVT().SimpleTy) {
|
||||
switch (VT.SimpleTy) {
|
||||
default: return SDValue();
|
||||
case MVT::v8i32:
|
||||
case MVT::v16i16:
|
||||
@ -13290,7 +13288,7 @@ SDValue X86TargetLowering::LowerSIGN_EXTEND_INREG(SDValue Op,
|
||||
SDValue LHS1 = Extract128BitVector(LHS, 0, DAG, dl);
|
||||
SDValue LHS2 = Extract128BitVector(LHS, NumElems/2, DAG, dl);
|
||||
|
||||
MVT EltVT = VT.getVectorElementType().getSimpleVT();
|
||||
MVT EltVT = VT.getVectorElementType();
|
||||
EVT NewVT = MVT::getVectorVT(EltVT, NumElems/2);
|
||||
|
||||
EVT ExtraEltVT = ExtraVT.getVectorElementType();
|
||||
@ -13377,11 +13375,11 @@ static SDValue LowerATOMIC_FENCE(SDValue Op, const X86Subtarget *Subtarget,
|
||||
|
||||
static SDValue LowerCMP_SWAP(SDValue Op, const X86Subtarget *Subtarget,
|
||||
SelectionDAG &DAG) {
|
||||
EVT T = Op.getValueType();
|
||||
MVT T = Op.getSimpleValueType();
|
||||
SDLoc DL(Op);
|
||||
unsigned Reg = 0;
|
||||
unsigned size = 0;
|
||||
switch(T.getSimpleVT().SimpleTy) {
|
||||
switch(T.SimpleTy) {
|
||||
default: llvm_unreachable("Invalid value type!");
|
||||
case MVT::i8: Reg = X86::AL; size = 1; break;
|
||||
case MVT::i16: Reg = X86::AX; size = 2; break;
|
||||
@ -13489,7 +13487,7 @@ static SDValue LowerATOMIC_STORE(SDValue Op, SelectionDAG &DAG) {
|
||||
}
|
||||
|
||||
static SDValue LowerADDC_ADDE_SUBC_SUBE(SDValue Op, SelectionDAG &DAG) {
|
||||
EVT VT = Op.getNode()->getValueType(0);
|
||||
EVT VT = Op.getNode()->getSimpleValueType(0);
|
||||
|
||||
// Let legalize expand this if it isn't a legal type yet.
|
||||
if (!DAG.getTargetLoweringInfo().isTypeLegal(VT))
|
||||
|
Loading…
x
Reference in New Issue
Block a user