From 025a3d857a3649dff84f4c3cd02e8e6132b24613 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Mon, 1 Feb 2016 22:05:50 +0000 Subject: [PATCH] [X86][AVX512] Add support for AVX512 VINSERTPS shuffle decoding llvm-svn: 259420 --- .../lib/Target/X86/InstPrinter/X86InstComments.cpp | 2 + .../CodeGen/X86/merge-consecutive-loads-128.ll | 44 +++++----------------- .../CodeGen/X86/merge-consecutive-loads-256.ll | 2 +- 3 files changed, 13 insertions(+), 35 deletions(-) diff --git a/llvm/lib/Target/X86/InstPrinter/X86InstComments.cpp b/llvm/lib/Target/X86/InstPrinter/X86InstComments.cpp index 73f654c..9dd9144 100644 --- a/llvm/lib/Target/X86/InstPrinter/X86InstComments.cpp +++ b/llvm/lib/Target/X86/InstPrinter/X86InstComments.cpp @@ -278,10 +278,12 @@ bool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, case X86::INSERTPSrr: case X86::VINSERTPSrr: + case X86::VINSERTPSzrr: Src2Name = getRegName(MI->getOperand(2).getReg()); // FALL THROUGH. case X86::INSERTPSrm: case X86::VINSERTPSrm: + case X86::VINSERTPSzrm: DestName = getRegName(MI->getOperand(0).getReg()); Src1Name = getRegName(MI->getOperand(1).getReg()); if (MI->getOperand(MI->getNumOperands() - 1).isImm()) diff --git a/llvm/test/CodeGen/X86/merge-consecutive-loads-128.ll b/llvm/test/CodeGen/X86/merge-consecutive-loads-128.ll index d2d5bcb..81aba5e 100644 --- a/llvm/test/CodeGen/X86/merge-consecutive-loads-128.ll +++ b/llvm/test/CodeGen/X86/merge-consecutive-loads-128.ll @@ -188,23 +188,11 @@ define <4 x float> @merge_4f32_f32_012u(float* %ptr) nounwind uwtable noinline s ; SSE41-NEXT: insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3] ; SSE41-NEXT: retq ; -; AVX1-LABEL: merge_4f32_f32_012u: -; AVX1: # BB#0: -; AVX1-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero -; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3] -; AVX1-NEXT: retq -; -; AVX2-LABEL: merge_4f32_f32_012u: -; AVX2: # BB#0: -; AVX2-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero -; AVX2-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3] -; AVX2-NEXT: retq -; -; AVX512F-LABEL: merge_4f32_f32_012u: -; AVX512F: # BB#0: -; AVX512F-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero -; AVX512F-NEXT: vinsertps $32, 8(%rdi), %xmm0, %xmm0 -; AVX512F-NEXT: retq +; AVX-LABEL: merge_4f32_f32_012u: +; AVX: # BB#0: +; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3] +; AVX-NEXT: retq %ptr0 = getelementptr inbounds float, float* %ptr, i64 0 %ptr1 = getelementptr inbounds float, float* %ptr, i64 1 %ptr2 = getelementptr inbounds float, float* %ptr, i64 2 @@ -234,23 +222,11 @@ define <4 x float> @merge_4f32_f32_019u(float* %ptr) nounwind uwtable noinline s ; SSE41-NEXT: insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3] ; SSE41-NEXT: retq ; -; AVX1-LABEL: merge_4f32_f32_019u: -; AVX1: # BB#0: -; AVX1-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero -; AVX1-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3] -; AVX1-NEXT: retq -; -; AVX2-LABEL: merge_4f32_f32_019u: -; AVX2: # BB#0: -; AVX2-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero -; AVX2-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3] -; AVX2-NEXT: retq -; -; AVX512F-LABEL: merge_4f32_f32_019u: -; AVX512F: # BB#0: -; AVX512F-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero -; AVX512F-NEXT: vinsertps $32, 36(%rdi), %xmm0, %xmm0 -; AVX512F-NEXT: retq +; AVX-LABEL: merge_4f32_f32_019u: +; AVX: # BB#0: +; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero +; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3] +; AVX-NEXT: retq %ptr0 = getelementptr inbounds float, float* %ptr, i64 0 %ptr1 = getelementptr inbounds float, float* %ptr, i64 1 %ptr2 = getelementptr inbounds float, float* %ptr, i64 9 diff --git a/llvm/test/CodeGen/X86/merge-consecutive-loads-256.ll b/llvm/test/CodeGen/X86/merge-consecutive-loads-256.ll index 4f3427a..efcc323 100644 --- a/llvm/test/CodeGen/X86/merge-consecutive-loads-256.ll +++ b/llvm/test/CodeGen/X86/merge-consecutive-loads-256.ll @@ -319,7 +319,7 @@ define <8 x float> @merge_8f32_f32_1u3u5zu8(float* %ptr) nounwind uwtable noinli ; AVX512F-NEXT: vmovss 20(%rdi), %xmm1 ; AVX512F-NEXT: vshufps {{.*#+}} xmm0 = xmm1[0,1],xmm0[1,0] ; AVX512F-NEXT: vmovss 4(%rdi), %xmm1 -; AVX512F-NEXT: vinsertps $32, 12(%rdi), %xmm1, %xmm1 +; AVX512F-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3] ; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 ; AVX512F-NEXT: retq %ptr0 = getelementptr inbounds float, float* %ptr, i64 1 -- 2.7.4