mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-10 06:25:01 +00:00
X86InstrInfoSSE.td declares PINSRW as having type v8i16,
don't alis it in the MMX .td file with a different width, split into two X86ISD opcodes. This fixes an x86 testcase. llvm-svn: 96859
This commit is contained in:
parent
9077a6f901
commit
42f0bd1d2c
@ -4817,8 +4817,16 @@ X86TargetLowering::LowerINSERT_VECTOR_ELT_SSE4(SDValue Op, SelectionDAG &DAG){
|
||||
|
||||
if ((EltVT.getSizeInBits() == 8 || EltVT.getSizeInBits() == 16) &&
|
||||
isa<ConstantSDNode>(N2)) {
|
||||
unsigned Opc = (EltVT.getSizeInBits() == 8) ? X86ISD::PINSRB
|
||||
: X86ISD::PINSRW;
|
||||
unsigned Opc;
|
||||
if (VT == MVT::v8i16)
|
||||
Opc = X86ISD::PINSRW;
|
||||
else if (VT == MVT::v4i16)
|
||||
Opc = X86ISD::MMX_PINSRW;
|
||||
else if (VT == MVT::v16i8)
|
||||
Opc = X86ISD::PINSRB;
|
||||
else
|
||||
Opc = X86ISD::PINSRB;
|
||||
|
||||
// Transform it so it match pinsr{b,w} which expects a GR32 as its second
|
||||
// argument.
|
||||
if (N1.getValueType() != MVT::i32)
|
||||
@ -4869,7 +4877,8 @@ X86TargetLowering::LowerINSERT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) {
|
||||
N1 = DAG.getNode(ISD::ANY_EXTEND, dl, MVT::i32, N1);
|
||||
if (N2.getValueType() != MVT::i32)
|
||||
N2 = DAG.getIntPtrConstant(cast<ConstantSDNode>(N2)->getZExtValue());
|
||||
return DAG.getNode(X86ISD::PINSRW, dl, VT, N0, N1, N2);
|
||||
return DAG.getNode(VT == MVT::v8i16 ? X86ISD::PINSRW : X86ISD::MMX_PINSRW,
|
||||
dl, VT, N0, N1, N2);
|
||||
}
|
||||
return SDValue();
|
||||
}
|
||||
@ -7663,6 +7672,7 @@ const char *X86TargetLowering::getTargetNodeName(unsigned Opcode) const {
|
||||
case X86ISD::INSERTPS: return "X86ISD::INSERTPS";
|
||||
case X86ISD::PINSRB: return "X86ISD::PINSRB";
|
||||
case X86ISD::PINSRW: return "X86ISD::PINSRW";
|
||||
case X86ISD::MMX_PINSRW: return "X86ISD::MMX_PINSRW";
|
||||
case X86ISD::PSHUFB: return "X86ISD::PSHUFB";
|
||||
case X86ISD::FMAX: return "X86ISD::FMAX";
|
||||
case X86ISD::FMIN: return "X86ISD::FMIN";
|
||||
|
@ -180,7 +180,7 @@ namespace llvm {
|
||||
|
||||
/// PINSRW - Insert the lower 16-bits of a 32-bit value to a vector,
|
||||
/// corresponds to X86::PINSRW.
|
||||
PINSRW,
|
||||
PINSRW, MMX_PINSRW,
|
||||
|
||||
/// PSHUFB - Shuffle 16 8-bit values within a vector.
|
||||
PSHUFB,
|
||||
|
@ -426,13 +426,15 @@ def MMX_CVTTPS2PIrm : MMXI<0x2C, MRMSrcMem, (outs VR64:$dst), (ins f64mem:$src),
|
||||
|
||||
|
||||
// Extract / Insert
|
||||
def MMX_X86pextrw : SDNode<"X86ISD::PEXTRW", SDTypeProfile<1, 2, []>, []>;
|
||||
def MMX_X86pinsrw : SDNode<"X86ISD::PINSRW", SDTypeProfile<1, 3, []>, []>;
|
||||
def MMX_X86pinsrw : SDNode<"X86ISD::MMX_PINSRW",
|
||||
SDTypeProfile<1, 3, [SDTCisVT<0, v4i16>, SDTCisSameAs<0,1>,
|
||||
SDTCisVT<2, i32>, SDTCisPtrTy<3>]>>;
|
||||
|
||||
|
||||
def MMX_PEXTRWri : MMXIi8<0xC5, MRMSrcReg,
|
||||
(outs GR32:$dst), (ins VR64:$src1, i16i8imm:$src2),
|
||||
"pextrw\t{$src2, $src1, $dst|$dst, $src1, $src2}",
|
||||
[(set GR32:$dst, (MMX_X86pextrw (v4i16 VR64:$src1),
|
||||
[(set GR32:$dst, (X86pextrw (v4i16 VR64:$src1),
|
||||
(iPTR imm:$src2)))]>;
|
||||
let Constraints = "$src1 = $dst" in {
|
||||
def MMX_PINSRWrri : MMXIi8<0xC4, MRMSrcReg,
|
||||
|
Loading…
x
Reference in New Issue
Block a user