mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-02 07:17:36 +00:00
X86 intrinsics moved form X86ISelLowering.cpp to X86IntrinsicsInfo.h
X86ISelLowering.cpp has a long switch for intrinsics. I moved a part of this long switch to the new intrinsics table in X86IntrinsicsInfo.h. No functional changes, just code and compile time optimization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223641 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -16945,138 +16945,6 @@ static SDValue LowerINTRINSIC_WO_CHAIN(SDValue Op, const X86Subtarget *Subtarget
|
||||
switch (IntNo) {
|
||||
default: return SDValue(); // Don't custom lower most intrinsics.
|
||||
|
||||
// Arithmetic intrinsics.
|
||||
case Intrinsic::x86_sse2_pmulu_dq:
|
||||
case Intrinsic::x86_avx2_pmulu_dq:
|
||||
return DAG.getNode(X86ISD::PMULUDQ, dl, Op.getValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
|
||||
case Intrinsic::x86_sse41_pmuldq:
|
||||
case Intrinsic::x86_avx2_pmul_dq:
|
||||
return DAG.getNode(X86ISD::PMULDQ, dl, Op.getValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
|
||||
case Intrinsic::x86_sse2_pmulhu_w:
|
||||
case Intrinsic::x86_avx2_pmulhu_w:
|
||||
return DAG.getNode(ISD::MULHU, dl, Op.getValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
|
||||
case Intrinsic::x86_sse2_pmulh_w:
|
||||
case Intrinsic::x86_avx2_pmulh_w:
|
||||
return DAG.getNode(ISD::MULHS, dl, Op.getValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
|
||||
// SSE/SSE2/AVX floating point max/min intrinsics.
|
||||
case Intrinsic::x86_sse_max_ps:
|
||||
case Intrinsic::x86_sse2_max_pd:
|
||||
case Intrinsic::x86_avx_max_ps_256:
|
||||
case Intrinsic::x86_avx_max_pd_256:
|
||||
case Intrinsic::x86_sse_min_ps:
|
||||
case Intrinsic::x86_sse2_min_pd:
|
||||
case Intrinsic::x86_avx_min_ps_256:
|
||||
case Intrinsic::x86_avx_min_pd_256: {
|
||||
unsigned Opcode;
|
||||
switch (IntNo) {
|
||||
default: llvm_unreachable("Impossible intrinsic"); // Can't reach here.
|
||||
case Intrinsic::x86_sse_max_ps:
|
||||
case Intrinsic::x86_sse2_max_pd:
|
||||
case Intrinsic::x86_avx_max_ps_256:
|
||||
case Intrinsic::x86_avx_max_pd_256:
|
||||
Opcode = X86ISD::FMAX;
|
||||
break;
|
||||
case Intrinsic::x86_sse_min_ps:
|
||||
case Intrinsic::x86_sse2_min_pd:
|
||||
case Intrinsic::x86_avx_min_ps_256:
|
||||
case Intrinsic::x86_avx_min_pd_256:
|
||||
Opcode = X86ISD::FMIN;
|
||||
break;
|
||||
}
|
||||
return DAG.getNode(Opcode, dl, Op.getValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
}
|
||||
|
||||
// AVX2 variable shift intrinsics
|
||||
case Intrinsic::x86_avx2_psllv_d:
|
||||
case Intrinsic::x86_avx2_psllv_q:
|
||||
case Intrinsic::x86_avx2_psllv_d_256:
|
||||
case Intrinsic::x86_avx2_psllv_q_256:
|
||||
case Intrinsic::x86_avx2_psrlv_d:
|
||||
case Intrinsic::x86_avx2_psrlv_q:
|
||||
case Intrinsic::x86_avx2_psrlv_d_256:
|
||||
case Intrinsic::x86_avx2_psrlv_q_256:
|
||||
case Intrinsic::x86_avx2_psrav_d:
|
||||
case Intrinsic::x86_avx2_psrav_d_256: {
|
||||
unsigned Opcode;
|
||||
switch (IntNo) {
|
||||
default: llvm_unreachable("Impossible intrinsic"); // Can't reach here.
|
||||
case Intrinsic::x86_avx2_psllv_d:
|
||||
case Intrinsic::x86_avx2_psllv_q:
|
||||
case Intrinsic::x86_avx2_psllv_d_256:
|
||||
case Intrinsic::x86_avx2_psllv_q_256:
|
||||
Opcode = ISD::SHL;
|
||||
break;
|
||||
case Intrinsic::x86_avx2_psrlv_d:
|
||||
case Intrinsic::x86_avx2_psrlv_q:
|
||||
case Intrinsic::x86_avx2_psrlv_d_256:
|
||||
case Intrinsic::x86_avx2_psrlv_q_256:
|
||||
Opcode = ISD::SRL;
|
||||
break;
|
||||
case Intrinsic::x86_avx2_psrav_d:
|
||||
case Intrinsic::x86_avx2_psrav_d_256:
|
||||
Opcode = ISD::SRA;
|
||||
break;
|
||||
}
|
||||
return DAG.getNode(Opcode, dl, Op.getValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
}
|
||||
|
||||
case Intrinsic::x86_sse2_packssdw_128:
|
||||
case Intrinsic::x86_sse2_packsswb_128:
|
||||
case Intrinsic::x86_avx2_packssdw:
|
||||
case Intrinsic::x86_avx2_packsswb:
|
||||
return DAG.getNode(X86ISD::PACKSS, dl, Op.getValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
|
||||
case Intrinsic::x86_sse2_packuswb_128:
|
||||
case Intrinsic::x86_sse41_packusdw:
|
||||
case Intrinsic::x86_avx2_packuswb:
|
||||
case Intrinsic::x86_avx2_packusdw:
|
||||
return DAG.getNode(X86ISD::PACKUS, dl, Op.getValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
|
||||
case Intrinsic::x86_ssse3_pshuf_b_128:
|
||||
case Intrinsic::x86_avx2_pshuf_b:
|
||||
return DAG.getNode(X86ISD::PSHUFB, dl, Op.getValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
|
||||
case Intrinsic::x86_sse2_pshuf_d:
|
||||
return DAG.getNode(X86ISD::PSHUFD, dl, Op.getValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
|
||||
case Intrinsic::x86_sse2_pshufl_w:
|
||||
return DAG.getNode(X86ISD::PSHUFLW, dl, Op.getValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
|
||||
case Intrinsic::x86_sse2_pshufh_w:
|
||||
return DAG.getNode(X86ISD::PSHUFHW, dl, Op.getValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
|
||||
case Intrinsic::x86_ssse3_psign_b_128:
|
||||
case Intrinsic::x86_ssse3_psign_w_128:
|
||||
case Intrinsic::x86_ssse3_psign_d_128:
|
||||
case Intrinsic::x86_avx2_psign_b:
|
||||
case Intrinsic::x86_avx2_psign_w:
|
||||
case Intrinsic::x86_avx2_psign_d:
|
||||
return DAG.getNode(X86ISD::PSIGN, dl, Op.getValueType(),
|
||||
Op.getOperand(1), Op.getOperand(2));
|
||||
|
||||
case Intrinsic::x86_avx2_permd:
|
||||
case Intrinsic::x86_avx2_permps:
|
||||
// Operands intentionally swapped. Mask is last operand to intrinsic,
|
||||
// but second operand for node/instruction.
|
||||
return DAG.getNode(X86ISD::VPERMV, dl, Op.getValueType(),
|
||||
Op.getOperand(2), Op.getOperand(1));
|
||||
|
||||
case Intrinsic::x86_avx512_mask_valign_q_512:
|
||||
case Intrinsic::x86_avx512_mask_valign_d_512:
|
||||
// Vector source operands are swapped.
|
||||
|
||||
Reference in New Issue
Block a user