mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 22:04:55 +00:00
Replace XOP vpcom intrinsics with fewer intrinsics that take the immediate as an argument.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158278 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
82ce516591
commit
c29106b36f
@ -1950,262 +1950,32 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
|
||||
Intrinsic<[llvm_v4i64_ty],
|
||||
[llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomeqb :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomeqb">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomeqw :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomeqw">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomeqd :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomeqd">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomeqq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomeqq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomequb :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomequb">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomequd :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomequd">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomequq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomequq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomequw :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomequw">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomfalseb :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomfalseb">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomfalsed :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomfalsed">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomfalseq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomfalseq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomfalseub :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomfalseub">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomfalseud :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomfalseud">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomfalseuq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomfalseuq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomfalseuw :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomfalseuw">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomfalsew :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomfalsew">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgeb :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgeb">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomged :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomged">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgeq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgeq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgeub :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgeub">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgeud :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgeud">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgeuq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgeuq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgeuw :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgeuw">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgew :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgew">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgtb :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgtb">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgtd :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgtd">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgtq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgtq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgtub :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgtub">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgtud :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgtud">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgtuq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgtuq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgtuw :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgtuw">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomgtw :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomgtw">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomleb :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomleb">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomled :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomled">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomleq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomleq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomleub :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomleub">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomleud :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomleud">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomleuq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomleuq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomleuw :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomleuw">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomlew :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomlew">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomltb :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomltb">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomltd :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomltd">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomltq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomltq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomltub :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomltub">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomltud :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomltud">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomltuq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomltuq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomltuw :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomltuw">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomltw :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomltw">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomneb :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomneb">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomned :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomned">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomneq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomneq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomneub :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomneub">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomneud :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomneud">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomneuq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomneuq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomneuw :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomneuw">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomnew :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomnew">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomtrueb :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomtrueb">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomtrued :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomtrued">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomtrueq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomtrueq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomtrueub :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomtrueub">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomtrueud :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomtrueud">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomtrueuq :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomtrueuq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomtrueuw :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomtrueuw">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_xop_vpcomtruew :
|
||||
GCCBuiltin<"__builtin_ia32_vpcomtruew">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_xop_vpcomb : GCCBuiltin<"__builtin_ia32_vpcomb">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
|
||||
llvm_i8_ty], [IntrNoMem]>;
|
||||
def int_x86_xop_vpcomw : GCCBuiltin<"__builtin_ia32_vpcomw">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
|
||||
llvm_i8_ty], [IntrNoMem]>;
|
||||
def int_x86_xop_vpcomd : GCCBuiltin<"__builtin_ia32_vpcomd">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
|
||||
llvm_i8_ty], [IntrNoMem]>;
|
||||
def int_x86_xop_vpcomq : GCCBuiltin<"__builtin_ia32_vpcomq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
|
||||
llvm_i8_ty], [IntrNoMem]>;
|
||||
def int_x86_xop_vpcomub : GCCBuiltin<"__builtin_ia32_vpcomub">,
|
||||
Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
|
||||
llvm_i8_ty], [IntrNoMem]>;
|
||||
def int_x86_xop_vpcomuw : GCCBuiltin<"__builtin_ia32_vpcomuw">,
|
||||
Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
|
||||
llvm_i8_ty], [IntrNoMem]>;
|
||||
def int_x86_xop_vpcomud : GCCBuiltin<"__builtin_ia32_vpcomud">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
|
||||
llvm_i8_ty], [IntrNoMem]>;
|
||||
def int_x86_xop_vpcomuq : GCCBuiltin<"__builtin_ia32_vpcomuq">,
|
||||
Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
|
||||
llvm_i8_ty], [IntrNoMem]>;
|
||||
|
||||
def int_x86_xop_vphaddbd :
|
||||
GCCBuiltin<"__builtin_ia32_vphaddbd">,
|
||||
Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
|
||||
|
@ -9535,193 +9535,39 @@ X86TargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG) const
|
||||
return DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i32, SetCC);
|
||||
}
|
||||
// XOP comparison intrinsics
|
||||
case Intrinsic::x86_xop_vpcomltb:
|
||||
case Intrinsic::x86_xop_vpcomltw:
|
||||
case Intrinsic::x86_xop_vpcomltd:
|
||||
case Intrinsic::x86_xop_vpcomltq:
|
||||
case Intrinsic::x86_xop_vpcomltub:
|
||||
case Intrinsic::x86_xop_vpcomltuw:
|
||||
case Intrinsic::x86_xop_vpcomltud:
|
||||
case Intrinsic::x86_xop_vpcomltuq:
|
||||
case Intrinsic::x86_xop_vpcomleb:
|
||||
case Intrinsic::x86_xop_vpcomlew:
|
||||
case Intrinsic::x86_xop_vpcomled:
|
||||
case Intrinsic::x86_xop_vpcomleq:
|
||||
case Intrinsic::x86_xop_vpcomleub:
|
||||
case Intrinsic::x86_xop_vpcomleuw:
|
||||
case Intrinsic::x86_xop_vpcomleud:
|
||||
case Intrinsic::x86_xop_vpcomleuq:
|
||||
case Intrinsic::x86_xop_vpcomgtb:
|
||||
case Intrinsic::x86_xop_vpcomgtw:
|
||||
case Intrinsic::x86_xop_vpcomgtd:
|
||||
case Intrinsic::x86_xop_vpcomgtq:
|
||||
case Intrinsic::x86_xop_vpcomgtub:
|
||||
case Intrinsic::x86_xop_vpcomgtuw:
|
||||
case Intrinsic::x86_xop_vpcomgtud:
|
||||
case Intrinsic::x86_xop_vpcomgtuq:
|
||||
case Intrinsic::x86_xop_vpcomgeb:
|
||||
case Intrinsic::x86_xop_vpcomgew:
|
||||
case Intrinsic::x86_xop_vpcomged:
|
||||
case Intrinsic::x86_xop_vpcomgeq:
|
||||
case Intrinsic::x86_xop_vpcomgeub:
|
||||
case Intrinsic::x86_xop_vpcomgeuw:
|
||||
case Intrinsic::x86_xop_vpcomgeud:
|
||||
case Intrinsic::x86_xop_vpcomgeuq:
|
||||
case Intrinsic::x86_xop_vpcomeqb:
|
||||
case Intrinsic::x86_xop_vpcomeqw:
|
||||
case Intrinsic::x86_xop_vpcomeqd:
|
||||
case Intrinsic::x86_xop_vpcomeqq:
|
||||
case Intrinsic::x86_xop_vpcomequb:
|
||||
case Intrinsic::x86_xop_vpcomequw:
|
||||
case Intrinsic::x86_xop_vpcomequd:
|
||||
case Intrinsic::x86_xop_vpcomequq:
|
||||
case Intrinsic::x86_xop_vpcomneb:
|
||||
case Intrinsic::x86_xop_vpcomnew:
|
||||
case Intrinsic::x86_xop_vpcomned:
|
||||
case Intrinsic::x86_xop_vpcomneq:
|
||||
case Intrinsic::x86_xop_vpcomneub:
|
||||
case Intrinsic::x86_xop_vpcomneuw:
|
||||
case Intrinsic::x86_xop_vpcomneud:
|
||||
case Intrinsic::x86_xop_vpcomneuq:
|
||||
case Intrinsic::x86_xop_vpcomfalseb:
|
||||
case Intrinsic::x86_xop_vpcomfalsew:
|
||||
case Intrinsic::x86_xop_vpcomfalsed:
|
||||
case Intrinsic::x86_xop_vpcomfalseq:
|
||||
case Intrinsic::x86_xop_vpcomfalseub:
|
||||
case Intrinsic::x86_xop_vpcomfalseuw:
|
||||
case Intrinsic::x86_xop_vpcomfalseud:
|
||||
case Intrinsic::x86_xop_vpcomfalseuq:
|
||||
case Intrinsic::x86_xop_vpcomtrueb:
|
||||
case Intrinsic::x86_xop_vpcomtruew:
|
||||
case Intrinsic::x86_xop_vpcomtrued:
|
||||
case Intrinsic::x86_xop_vpcomtrueq:
|
||||
case Intrinsic::x86_xop_vpcomtrueub:
|
||||
case Intrinsic::x86_xop_vpcomtrueuw:
|
||||
case Intrinsic::x86_xop_vpcomtrueud:
|
||||
case Intrinsic::x86_xop_vpcomtrueuq: {
|
||||
unsigned CC = 0;
|
||||
unsigned Opc = 0;
|
||||
case Intrinsic::x86_xop_vpcomb:
|
||||
case Intrinsic::x86_xop_vpcomw:
|
||||
case Intrinsic::x86_xop_vpcomd:
|
||||
case Intrinsic::x86_xop_vpcomq:
|
||||
case Intrinsic::x86_xop_vpcomub:
|
||||
case Intrinsic::x86_xop_vpcomuw:
|
||||
case Intrinsic::x86_xop_vpcomud:
|
||||
case Intrinsic::x86_xop_vpcomuq: {
|
||||
unsigned CC;
|
||||
unsigned Opc;
|
||||
|
||||
switch (IntNo) {
|
||||
default: llvm_unreachable("Impossible intrinsic"); // Can't reach here.
|
||||
case Intrinsic::x86_xop_vpcomltb:
|
||||
case Intrinsic::x86_xop_vpcomltw:
|
||||
case Intrinsic::x86_xop_vpcomltd:
|
||||
case Intrinsic::x86_xop_vpcomltq:
|
||||
case Intrinsic::x86_xop_vpcomb:
|
||||
case Intrinsic::x86_xop_vpcomw:
|
||||
case Intrinsic::x86_xop_vpcomd:
|
||||
case Intrinsic::x86_xop_vpcomq:
|
||||
CC = 0;
|
||||
Opc = X86ISD::VPCOM;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomltub:
|
||||
case Intrinsic::x86_xop_vpcomltuw:
|
||||
case Intrinsic::x86_xop_vpcomltud:
|
||||
case Intrinsic::x86_xop_vpcomltuq:
|
||||
case Intrinsic::x86_xop_vpcomub:
|
||||
case Intrinsic::x86_xop_vpcomuw:
|
||||
case Intrinsic::x86_xop_vpcomud:
|
||||
case Intrinsic::x86_xop_vpcomuq:
|
||||
CC = 0;
|
||||
Opc = X86ISD::VPCOMU;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomleb:
|
||||
case Intrinsic::x86_xop_vpcomlew:
|
||||
case Intrinsic::x86_xop_vpcomled:
|
||||
case Intrinsic::x86_xop_vpcomleq:
|
||||
CC = 1;
|
||||
Opc = X86ISD::VPCOM;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomleub:
|
||||
case Intrinsic::x86_xop_vpcomleuw:
|
||||
case Intrinsic::x86_xop_vpcomleud:
|
||||
case Intrinsic::x86_xop_vpcomleuq:
|
||||
CC = 1;
|
||||
Opc = X86ISD::VPCOMU;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomgtb:
|
||||
case Intrinsic::x86_xop_vpcomgtw:
|
||||
case Intrinsic::x86_xop_vpcomgtd:
|
||||
case Intrinsic::x86_xop_vpcomgtq:
|
||||
CC = 2;
|
||||
Opc = X86ISD::VPCOM;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomgtub:
|
||||
case Intrinsic::x86_xop_vpcomgtuw:
|
||||
case Intrinsic::x86_xop_vpcomgtud:
|
||||
case Intrinsic::x86_xop_vpcomgtuq:
|
||||
CC = 2;
|
||||
Opc = X86ISD::VPCOMU;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomgeb:
|
||||
case Intrinsic::x86_xop_vpcomgew:
|
||||
case Intrinsic::x86_xop_vpcomged:
|
||||
case Intrinsic::x86_xop_vpcomgeq:
|
||||
CC = 3;
|
||||
Opc = X86ISD::VPCOM;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomgeub:
|
||||
case Intrinsic::x86_xop_vpcomgeuw:
|
||||
case Intrinsic::x86_xop_vpcomgeud:
|
||||
case Intrinsic::x86_xop_vpcomgeuq:
|
||||
CC = 3;
|
||||
Opc = X86ISD::VPCOMU;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomeqb:
|
||||
case Intrinsic::x86_xop_vpcomeqw:
|
||||
case Intrinsic::x86_xop_vpcomeqd:
|
||||
case Intrinsic::x86_xop_vpcomeqq:
|
||||
CC = 4;
|
||||
Opc = X86ISD::VPCOM;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomequb:
|
||||
case Intrinsic::x86_xop_vpcomequw:
|
||||
case Intrinsic::x86_xop_vpcomequd:
|
||||
case Intrinsic::x86_xop_vpcomequq:
|
||||
CC = 4;
|
||||
Opc = X86ISD::VPCOMU;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomneb:
|
||||
case Intrinsic::x86_xop_vpcomnew:
|
||||
case Intrinsic::x86_xop_vpcomned:
|
||||
case Intrinsic::x86_xop_vpcomneq:
|
||||
CC = 5;
|
||||
Opc = X86ISD::VPCOM;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomneub:
|
||||
case Intrinsic::x86_xop_vpcomneuw:
|
||||
case Intrinsic::x86_xop_vpcomneud:
|
||||
case Intrinsic::x86_xop_vpcomneuq:
|
||||
CC = 5;
|
||||
Opc = X86ISD::VPCOMU;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomfalseb:
|
||||
case Intrinsic::x86_xop_vpcomfalsew:
|
||||
case Intrinsic::x86_xop_vpcomfalsed:
|
||||
case Intrinsic::x86_xop_vpcomfalseq:
|
||||
CC = 6;
|
||||
Opc = X86ISD::VPCOM;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomfalseub:
|
||||
case Intrinsic::x86_xop_vpcomfalseuw:
|
||||
case Intrinsic::x86_xop_vpcomfalseud:
|
||||
case Intrinsic::x86_xop_vpcomfalseuq:
|
||||
CC = 6;
|
||||
Opc = X86ISD::VPCOMU;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomtrueb:
|
||||
case Intrinsic::x86_xop_vpcomtruew:
|
||||
case Intrinsic::x86_xop_vpcomtrued:
|
||||
case Intrinsic::x86_xop_vpcomtrueq:
|
||||
CC = 7;
|
||||
Opc = X86ISD::VPCOM;
|
||||
break;
|
||||
case Intrinsic::x86_xop_vpcomtrueub:
|
||||
case Intrinsic::x86_xop_vpcomtrueuw:
|
||||
case Intrinsic::x86_xop_vpcomtrueud:
|
||||
case Intrinsic::x86_xop_vpcomtrueuq:
|
||||
CC = 7;
|
||||
Opc = X86ISD::VPCOMU;
|
||||
break;
|
||||
}
|
||||
|
||||
SDValue LHS = Op.getOperand(1);
|
||||
SDValue RHS = Op.getOperand(2);
|
||||
return DAG.getNode(Opc, dl, Op.getValueType(), LHS, RHS,
|
||||
DAG.getConstant(CC, MVT::i8));
|
||||
SDValue Imm = Op.getOperand(3);
|
||||
return DAG.getNode(Opc, dl, Op.getValueType(), LHS, RHS, Imm);
|
||||
}
|
||||
|
||||
// Arithmetic intrinsics.
|
||||
|
@ -60,7 +60,8 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) {
|
||||
Name.startswith("x86.avx.vpermil.") ||
|
||||
Name == "x86.avx.movnt.dq.256" ||
|
||||
Name == "x86.avx.movnt.pd.256" ||
|
||||
Name == "x86.avx.movnt.ps.256") {
|
||||
Name == "x86.avx.movnt.ps.256" ||
|
||||
(Name.startswith("x86.xop.vpcom") && F->arg_size() == 2)) {
|
||||
NewFn = 0;
|
||||
return true;
|
||||
}
|
||||
@ -152,6 +153,51 @@ void llvm::UpgradeIntrinsicCall(CallInst *CI, Function *NewFn) {
|
||||
// Remove intrinsic.
|
||||
CI->eraseFromParent();
|
||||
return;
|
||||
} else if (Name.startswith("llvm.x86.xop.vpcom")) {
|
||||
Intrinsic::ID intID;
|
||||
if (Name.endswith("ub"))
|
||||
intID = Intrinsic::x86_xop_vpcomub;
|
||||
else if (Name.endswith("uw"))
|
||||
intID = Intrinsic::x86_xop_vpcomuw;
|
||||
else if (Name.endswith("ud"))
|
||||
intID = Intrinsic::x86_xop_vpcomud;
|
||||
else if (Name.endswith("uq"))
|
||||
intID = Intrinsic::x86_xop_vpcomuq;
|
||||
else if (Name.endswith("b"))
|
||||
intID = Intrinsic::x86_xop_vpcomb;
|
||||
else if (Name.endswith("w"))
|
||||
intID = Intrinsic::x86_xop_vpcomw;
|
||||
else if (Name.endswith("d"))
|
||||
intID = Intrinsic::x86_xop_vpcomd;
|
||||
else if (Name.endswith("q"))
|
||||
intID = Intrinsic::x86_xop_vpcomq;
|
||||
else
|
||||
llvm_unreachable("Unknown suffix");
|
||||
|
||||
Name = Name.substr(18); // strip off "llvm.x86.xop.vpcom"
|
||||
unsigned Imm;
|
||||
if (Name.startswith("lt"))
|
||||
Imm = 0;
|
||||
else if (Name.startswith("le"))
|
||||
Imm = 1;
|
||||
else if (Name.startswith("gt"))
|
||||
Imm = 2;
|
||||
else if (Name.startswith("ge"))
|
||||
Imm = 3;
|
||||
else if (Name.startswith("eq"))
|
||||
Imm = 4;
|
||||
else if (Name.startswith("ne"))
|
||||
Imm = 5;
|
||||
else if (Name.startswith("true"))
|
||||
Imm = 6;
|
||||
else if (Name.startswith("false"))
|
||||
Imm = 7;
|
||||
else
|
||||
llvm_unreachable("Unknown condition");
|
||||
|
||||
Function *VPCOM = Intrinsic::getDeclaration(F->getParent(), intID);
|
||||
Rep = Builder.CreateCall3(VPCOM, CI->getArgOperand(0),
|
||||
CI->getArgOperand(1), Builder.getInt8(Imm));
|
||||
} else {
|
||||
bool PD128 = false, PD256 = false, PS128 = false, PS256 = false;
|
||||
if (Name == "llvm.x86.avx.vpermil.pd.256")
|
||||
|
@ -967,3 +967,59 @@ define <8 x float> @test_int_x86_xop_vfrcz_ps_256_mem(<8 x float>* %a0) {
|
||||
}
|
||||
declare <8 x float> @llvm.x86.xop.vfrcz.ps.256(<8 x float>) nounwind readnone
|
||||
|
||||
define <16 x i8> @test_int_x86_xop_vpcomb(<16 x i8> %a0, <16 x i8> %a1) {
|
||||
; CHECK:vpcomb
|
||||
%res = call <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8> %a0, <16 x i8> %a1, i8 0) ;
|
||||
ret <16 x i8> %res
|
||||
}
|
||||
declare <16 x i8> @llvm.x86.xop.vpcomb(<16 x i8>, <16 x i8>, i8) nounwind readnone
|
||||
|
||||
define <8 x i16> @test_int_x86_xop_vpcomw(<8 x i16> %a0, <8 x i16> %a1) {
|
||||
; CHECK: vpcomw
|
||||
%res = call <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16> %a0, <8 x i16> %a1, i8 0) ;
|
||||
ret <8 x i16> %res
|
||||
}
|
||||
declare <8 x i16> @llvm.x86.xop.vpcomw(<8 x i16>, <8 x i16>, i8) nounwind readnone
|
||||
|
||||
define <4 x i32> @test_int_x86_xop_vpcomd(<4 x i32> %a0, <4 x i32> %a1) {
|
||||
; CHECK: vpcomd
|
||||
%res = call <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32> %a0, <4 x i32> %a1, i8 0) ;
|
||||
ret <4 x i32> %res
|
||||
}
|
||||
declare <4 x i32> @llvm.x86.xop.vpcomd(<4 x i32>, <4 x i32>, i8) nounwind readnone
|
||||
|
||||
define <2 x i64> @test_int_x86_xop_vpcomq(<2 x i64> %a0, <2 x i64> %a1) {
|
||||
; CHECK: vpcomq
|
||||
%res = call <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64> %a0, <2 x i64> %a1, i8 0) ;
|
||||
ret <2 x i64> %res
|
||||
}
|
||||
declare <2 x i64> @llvm.x86.xop.vpcomq(<2 x i64>, <2 x i64>, i8) nounwind readnone
|
||||
|
||||
define <16 x i8> @test_int_x86_xop_vpcomub(<16 x i8> %a0, <16 x i8> %a1) {
|
||||
; CHECK:vpcomub
|
||||
%res = call <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8> %a0, <16 x i8> %a1, i8 0) ;
|
||||
ret <16 x i8> %res
|
||||
}
|
||||
declare <16 x i8> @llvm.x86.xop.vpcomub(<16 x i8>, <16 x i8>, i8) nounwind readnone
|
||||
|
||||
define <8 x i16> @test_int_x86_xop_vpcomuw(<8 x i16> %a0, <8 x i16> %a1) {
|
||||
; CHECK: vpcomuw
|
||||
%res = call <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16> %a0, <8 x i16> %a1, i8 0) ;
|
||||
ret <8 x i16> %res
|
||||
}
|
||||
declare <8 x i16> @llvm.x86.xop.vpcomuw(<8 x i16>, <8 x i16>, i8) nounwind readnone
|
||||
|
||||
define <4 x i32> @test_int_x86_xop_vpcomud(<4 x i32> %a0, <4 x i32> %a1) {
|
||||
; CHECK: vpcomud
|
||||
%res = call <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32> %a0, <4 x i32> %a1, i8 0) ;
|
||||
ret <4 x i32> %res
|
||||
}
|
||||
declare <4 x i32> @llvm.x86.xop.vpcomud(<4 x i32>, <4 x i32>, i8) nounwind readnone
|
||||
|
||||
define <2 x i64> @test_int_x86_xop_vpcomuq(<2 x i64> %a0, <2 x i64> %a1) {
|
||||
; CHECK: vpcomuq
|
||||
%res = call <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64> %a0, <2 x i64> %a1, i8 0) ;
|
||||
ret <2 x i64> %res
|
||||
}
|
||||
declare <2 x i64> @llvm.x86.xop.vpcomuq(<2 x i64>, <2 x i64>, i8) nounwind readnone
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user