[llvm] r211694 - [x86] Add intrinsics for the pshufd, pshuflw, and pshufhw instructions.
Craig Topper
craig.topper at gmail.com
Wed Jun 25 08:18:22 PDT 2014
What's the motivation? Can't these be represented with appropriate
shufflevector indices?
On Wed, Jun 25, 2014 at 6:12 AM, Chandler Carruth <chandlerc at gmail.com>
wrote:
> Author: chandlerc
> Date: Wed Jun 25 08:12:54 2014
> New Revision: 211694
>
> URL: http://llvm.org/viewvc/llvm-project?rev=211694&view=rev
> Log:
> [x86] Add intrinsics for the pshufd, pshuflw, and pshufhw instructions.
>
> Modified:
> llvm/trunk/include/llvm/IR/IntrinsicsX86.td
> llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> llvm/trunk/test/CodeGen/X86/sse2-intrinsics-x86.ll
>
> Modified: llvm/trunk/include/llvm/IR/IntrinsicsX86.td
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/IntrinsicsX86.td?rev=211694&r1=211693&r2=211694&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/IntrinsicsX86.td (original)
> +++ llvm/trunk/include/llvm/IR/IntrinsicsX86.td Wed Jun 25 08:12:54 2014
> @@ -667,6 +667,15 @@ let TargetPrefix = "x86" in { // All in
> def int_x86_ssse3_pshuf_b_128 :
> GCCBuiltin<"__builtin_ia32_pshufb128">,
> Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
> llvm_v16i8_ty], [IntrNoMem]>;
> + def int_x86_sse2_pshuf_d : GCCBuiltin<"__builtin_ia32_pshufd">,
> + Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i8_ty],
> + [IntrNoMem]>;
> + def int_x86_sse2_pshufl_w :
> GCCBuiltin<"__builtin_ia32_pshuflw">,
> + Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
> + [IntrNoMem]>;
> + def int_x86_sse2_pshufh_w :
> GCCBuiltin<"__builtin_ia32_pshufhw">,
> + Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
> + [IntrNoMem]>;
> def int_x86_sse_pshuf_w : GCCBuiltin<"__builtin_ia32_pshufw">,
> Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i8_ty],
> [IntrNoMem]>;
>
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=211694&r1=211693&r2=211694&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Jun 25 08:12:54 2014
> @@ -12660,6 +12660,18 @@ static SDValue LowerINTRINSIC_WO_CHAIN(S
> 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:
>
> Modified: llvm/trunk/test/CodeGen/X86/sse2-intrinsics-x86.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/sse2-intrinsics-x86.ll?rev=211694&r1=211693&r2=211694&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/sse2-intrinsics-x86.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/sse2-intrinsics-x86.ll Wed Jun 25 08:12:54
> 2014
> @@ -717,3 +717,30 @@ define void @test_x86_sse2_pause() {
> ret void
> }
> declare void @llvm.x86.sse2.pause() nounwind
> +
> +define <4 x i32> @test_x86_sse2_pshuf_d(<4 x i32> %a) {
> +; CHECK-LABEL: test_x86_sse2_pshuf_d:
> +; CHECK: pshufd $27
> +entry:
> + %res = call <4 x i32> @llvm.x86.sse2.pshuf.d(<4 x i32> %a, i8 27)
> nounwind readnone
> + ret <4 x i32> %res
> +}
> +declare <4 x i32> @llvm.x86.sse2.pshuf.d(<4 x i32>, i8) nounwind readnone
> +
> +define <8 x i16> @test_x86_sse2_pshufl_w(<8 x i16> %a) {
> +; CHECK-LABEL: test_x86_sse2_pshufl_w:
> +; CHECK: pshuflw $27
> +entry:
> + %res = call <8 x i16> @llvm.x86.sse2.pshufl.w(<8 x i16> %a, i8 27)
> nounwind readnone
> + ret <8 x i16> %res
> +}
> +declare <8 x i16> @llvm.x86.sse2.pshufl.w(<8 x i16>, i8) nounwind readnone
> +
> +define <8 x i16> @test_x86_sse2_pshufh_w(<8 x i16> %a) {
> +; CHECK-LABEL: test_x86_sse2_pshufh_w:
> +; CHECK: pshufhw $27
> +entry:
> + %res = call <8 x i16> @llvm.x86.sse2.pshufh.w(<8 x i16> %a, i8 27)
> nounwind readnone
> + ret <8 x i16> %res
> +}
> +declare <8 x i16> @llvm.x86.sse2.pshufh.w(<8 x i16>, i8) nounwind readnone
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
--
~Craig
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140625/fd997bf1/attachment.html>
More information about the llvm-commits
mailing list