diff options
| author | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2013-08-21 09:36:02 +0000 | 
|---|---|---|
| committer | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2013-08-21 09:36:02 +0000 | 
| commit | 33d447a2d6fc0f97ed5f502c6dd2eca0a88be251 (patch) | |
| tree | 9a3c3b18adbd96b3bb576ae5543f91848d8d065c /llvm/test | |
| parent | 7d86e47d04a76362c2621f6aa2f82b83eb068347 (diff) | |
| download | bcm5719-llvm-33d447a2d6fc0f97ed5f502c6dd2eca0a88be251.tar.gz bcm5719-llvm-33d447a2d6fc0f97ed5f502c6dd2eca0a88be251.zip | |
AVX-512: Added SHIFT instructions.
llvm-svn: 188899
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/X86/avx512-shift.ll | 108 | ||||
| -rw-r--r-- | llvm/test/MC/X86/avx512-encodings.s | 16 | 
2 files changed, 124 insertions, 0 deletions
| diff --git a/llvm/test/CodeGen/X86/avx512-shift.ll b/llvm/test/CodeGen/X86/avx512-shift.ll new file mode 100644 index 00000000000..8cdcf8ad062 --- /dev/null +++ b/llvm/test/CodeGen/X86/avx512-shift.ll @@ -0,0 +1,108 @@ +;RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s + +;CHECK-LABEL: shift_16_i32 +;CHECK: vpsrld +;CHECK: vpslld +;CHECK: vpsrad +;CHECK: ret +define <16 x i32> @shift_16_i32(<16 x i32> %a) { +   %b = lshr <16 x i32> %a, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1> +   %c = shl <16 x i32> %b, <i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12> +   %d = ashr <16 x i32> %c, <i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12> +   ret <16 x i32> %d; +} + +;CHECK-LABEL: shift_8_i64 +;CHECK: vpsrlq +;CHECK: vpsllq +;CHECK: vpsraq +;CHECK: ret +define <8 x i64> @shift_8_i64(<8 x i64> %a) { +   %b = lshr <8 x i64> %a, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1> +   %c = shl <8 x i64> %b,  <i64 12, i64 12, i64 12, i64 12, i64 12, i64 12, i64 12, i64 12> +   %d = ashr <8 x i64> %c, <i64 12, i64 12, i64 12, i64 12, i64 12, i64 12, i64 12, i64 12> +   ret <8 x i64> %d; +} + +; CHECK-LABEL: variable_shl4 +; CHECK: vpsllvq %zmm +; CHECK: ret +define <8 x i64> @variable_shl4(<8 x i64> %x, <8 x i64> %y) { +  %k = shl <8 x i64> %x, %y +  ret <8 x i64> %k +} + +; CHECK-LABEL: variable_shl5 +; CHECK: vpsllvd %zmm +; CHECK: ret +define <16 x i32> @variable_shl5(<16 x i32> %x, <16 x i32> %y) { +  %k = shl <16 x i32> %x, %y +  ret <16 x i32> %k +} + +; CHECK-LABEL: variable_srl0 +; CHECK: vpsrlvd +; CHECK: ret +define <16 x i32> @variable_srl0(<16 x i32> %x, <16 x i32> %y) { +  %k = lshr <16 x i32> %x, %y +  ret <16 x i32> %k +} + +; CHECK-LABEL: variable_srl2 +; CHECK: psrlvq +; CHECK: ret +define <8 x i64> @variable_srl2(<8 x i64> %x, <8 x i64> %y) { +  %k = lshr <8 x i64> %x, %y +  ret <8 x i64> %k +} + +; CHECK-LABEL: variable_sra1 +; CHECK: vpsravd +; CHECK: ret +define <16 x i32> @variable_sra1(<16 x i32> %x, <16 x i32> %y) { +  %k = ashr <16 x i32> %x, %y +  ret <16 x i32> %k +} + +; CHECK-LABEL: variable_sra2 +; CHECK: vpsravq %zmm +; CHECK: ret +define <8 x i64> @variable_sra2(<8 x i64> %x, <8 x i64> %y) { +  %k = ashr <8 x i64> %x, %y +  ret <8 x i64> %k +} + +; CHECK-LABEL: variable_sra01_load +; CHECK: vpsravd (% +; CHECK: ret +define <16 x i32> @variable_sra01_load(<16 x i32> %x, <16 x i32>* %y) { +  %y1 = load <16 x i32>* %y +  %k = ashr <16 x i32> %x, %y1 +  ret <16 x i32> %k +} + +; CHECK-LABEL: variable_shl1_load +; CHECK: vpsllvd (% +; CHECK: ret +define <16 x i32> @variable_shl1_load(<16 x i32> %x, <16 x i32>* %y) { +  %y1 = load <16 x i32>* %y +  %k = shl <16 x i32> %x, %y1 +  ret <16 x i32> %k +} +; CHECK: variable_srl0_load +; CHECK: vpsrlvd (% +; CHECK: ret +define <16 x i32> @variable_srl0_load(<16 x i32> %x, <16 x i32>* %y) { +  %y1 = load <16 x i32>* %y +  %k = lshr <16 x i32> %x, %y1 +  ret <16 x i32> %k +} + +; CHECK: variable_srl3_load +; CHECK: vpsrlvq (% +; CHECK: ret +define <8 x i64> @variable_srl3_load(<8 x i64> %x, <8 x i64>* %y) { +  %y1 = load <8 x i64>* %y +  %k = lshr <8 x i64> %x, %y1 +  ret <8 x i64> %k +} diff --git a/llvm/test/MC/X86/avx512-encodings.s b/llvm/test/MC/X86/avx512-encodings.s index 26a77c19062..35efd405871 100644 --- a/llvm/test/MC/X86/avx512-encodings.s +++ b/llvm/test/MC/X86/avx512-encodings.s @@ -19,3 +19,19 @@ vextracti64x4  $1, %zmm9, %ymm17  // CHECK: vextracti64x4  // CHECK: encoding: [0x62,0x73,0xfd,0x48,0x3b,0x4f,0x10,0x01]  vextracti64x4  $1, %zmm9, 512(%rdi) + +// CHECK: vpsrad +// CHECK: encoding: [0x62,0xb1,0x35,0x40,0x72,0xe1,0x02] +vpsrad $2, %zmm17, %zmm25 + +// CHECK: vpsrad +// CHECK: encoding: [0x62,0xf1,0x35,0x40,0x72,0x64,0xb7,0x08,0x02] +vpsrad $2, 512(%rdi, %rsi, 4), %zmm25 + +// CHECK: vpsrad +// CHECK: encoding: [0x62,0x21,0x1d,0x48,0xe2,0xc9] +vpsrad %xmm17, %zmm12, %zmm25 + +// CHECK: vpsrad +// CHECK: encoding: [0x62,0x61,0x1d,0x48,0xe2,0x4c,0xb7,0x20] +vpsrad 512(%rdi, %rsi, 4), %zmm12, %zmm25 | 

