diff options
author | Craig Topper <craig.topper@gmail.com> | 2016-09-11 05:33:40 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2016-09-11 05:33:40 +0000 |
commit | fb4564cf21209ebfaec23dcc98c61cc059ca71dc (patch) | |
tree | 1ff904f40b10e0a8938bb40d5af356017f04cc1d | |
parent | 2c8670575502b916cf523158b450bff120153ec4 (diff) | |
download | bcm5719-llvm-fb4564cf21209ebfaec23dcc98c61cc059ca71dc.tar.gz bcm5719-llvm-fb4564cf21209ebfaec23dcc98c61cc059ca71dc.zip |
[AVX-512] Add VPTERNLOG to load folding tables.
llvm-svn: 281156
-rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.cpp | 18 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/stack-folding-int-avx512.ll | 18 |
2 files changed, 36 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp index d51439c34ea..1e6b21a3653 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.cpp +++ b/llvm/lib/Target/X86/X86InstrInfo.cpp @@ -2047,6 +2047,8 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI) { X86::VPORQZrrkz, X86::VPORQZrmkz, 0 }, { X86::VPXORDZrrkz, X86::VPXORDZrmkz, 0 }, { X86::VPXORQZrrkz, X86::VPXORQZrmkz, 0 }, + { X86::VPTERNLOGDZrri, X86::VPTERNLOGDZrmi, 0 }, + { X86::VPTERNLOGQZrri, X86::VPTERNLOGQZrmi, 0 }, // AVX-512{F,VL} arithmetic instructions 256-bit { X86::VADDPSZ256rrkz, X86::VADDPSZ256rmkz, 0 }, { X86::VADDPDZ256rrkz, X86::VADDPDZ256rmkz, 0 }, @@ -2080,6 +2082,8 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI) { X86::VPORQZ256rrkz, X86::VPORQZ256rmkz, 0 }, { X86::VPXORDZ256rrkz, X86::VPXORDZ256rmkz, 0 }, { X86::VPXORQZ256rrkz, X86::VPXORQZ256rmkz, 0 }, + { X86::VPTERNLOGDZ256rri, X86::VPTERNLOGDZ256rmi, 0 }, + { X86::VPTERNLOGQZ256rri, X86::VPTERNLOGQZ256rmi, 0 }, // AVX-512{F,VL} arithmetic instructions 128-bit { X86::VADDPSZ128rrkz, X86::VADDPSZ128rmkz, 0 }, { X86::VADDPDZ128rrkz, X86::VADDPDZ128rmkz, 0 }, @@ -2113,6 +2117,8 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI) { X86::VPORQZ128rrkz, X86::VPORQZ128rmkz, 0 }, { X86::VPXORDZ128rrkz, X86::VPXORDZ128rmkz, 0 }, { X86::VPXORQZ128rrkz, X86::VPXORQZ128rmkz, 0 }, + { X86::VPTERNLOGDZ128rri, X86::VPTERNLOGDZ128rmi, 0 }, + { X86::VPTERNLOGQZ128rri, X86::VPTERNLOGQZ128rmi, 0 }, }; for (X86MemoryFoldTableEntry Entry : MemoryFoldTable3) { @@ -2163,6 +2169,10 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI) { X86::VPORQZrrk, X86::VPORQZrmk, 0 }, { X86::VPXORDZrrk, X86::VPXORDZrmk, 0 }, { X86::VPXORQZrrk, X86::VPXORQZrmk, 0 }, + { X86::VPTERNLOGDZrrik, X86::VPTERNLOGDZrmik, 0 }, + { X86::VPTERNLOGDZrrikz, X86::VPTERNLOGDZrmikz, 0 }, + { X86::VPTERNLOGQZrrik, X86::VPTERNLOGQZrmik, 0 }, + { X86::VPTERNLOGQZrrikz, X86::VPTERNLOGQZrmikz, 0 }, // AVX-512{F,VL} foldable instructions 256-bit { X86::VADDPSZ256rrk, X86::VADDPSZ256rmk, 0 }, { X86::VADDPDZ256rrk, X86::VADDPDZ256rmk, 0 }, @@ -2196,6 +2206,10 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI) { X86::VPORQZ256rrk, X86::VPORQZ256rmk, 0 }, { X86::VPXORDZ256rrk, X86::VPXORDZ256rmk, 0 }, { X86::VPXORQZ256rrk, X86::VPXORQZ256rmk, 0 }, + { X86::VPTERNLOGDZ256rrik, X86::VPTERNLOGDZ256rmik, 0 }, + { X86::VPTERNLOGDZ256rrikz,X86::VPTERNLOGDZ256rmikz, 0 }, + { X86::VPTERNLOGQZ256rrik, X86::VPTERNLOGQZ256rmik, 0 }, + { X86::VPTERNLOGQZ256rrikz,X86::VPTERNLOGQZ256rmikz, 0 }, // AVX-512{F,VL} foldable instructions 128-bit { X86::VADDPSZ128rrk, X86::VADDPSZ128rmk, 0 }, { X86::VADDPDZ128rrk, X86::VADDPDZ128rmk, 0 }, @@ -2229,6 +2243,10 @@ X86InstrInfo::X86InstrInfo(X86Subtarget &STI) { X86::VPORQZ128rrk, X86::VPORQZ128rmk, 0 }, { X86::VPXORDZ128rrk, X86::VPXORDZ128rmk, 0 }, { X86::VPXORQZ128rrk, X86::VPXORQZ128rmk, 0 }, + { X86::VPTERNLOGDZ128rrik, X86::VPTERNLOGDZ128rmik, 0 }, + { X86::VPTERNLOGDZ128rrikz,X86::VPTERNLOGDZ128rmikz, 0 }, + { X86::VPTERNLOGQZ128rrik, X86::VPTERNLOGQZ128rmik, 0 }, + { X86::VPTERNLOGQZ128rrikz,X86::VPTERNLOGQZ128rmikz, 0 }, }; for (X86MemoryFoldTableEntry Entry : MemoryFoldTable4) { diff --git a/llvm/test/CodeGen/X86/stack-folding-int-avx512.ll b/llvm/test/CodeGen/X86/stack-folding-int-avx512.ll index 1cf1015a9b7..6b54acf28e1 100644 --- a/llvm/test/CodeGen/X86/stack-folding-int-avx512.ll +++ b/llvm/test/CodeGen/X86/stack-folding-int-avx512.ll @@ -180,3 +180,21 @@ define <32 x i16> @stack_fold_psubw(<32 x i16> %a0, <32 x i16> %a1) { ret <32 x i16> %2 } +define <16 x i32> @stack_fold_ternlogd(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2) { + ;CHECK-LABEL: stack_fold_ternlogd + ;CHECK: vpternlogd $33, {{-?[0-9]*}}(%rsp), {{%zmm[0-9][0-9]*}}, {{%zmm[0-9][0-9]*}} {{.*#+}} 64-byte Folded Reload + %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"() + %res = call <16 x i32> @llvm.x86.avx512.mask.pternlog.d.512(<16 x i32> %x0, <16 x i32> %x1, <16 x i32> %x2, i32 33, i16 -1) + ret <16 x i32> %res +} +declare <16 x i32> @llvm.x86.avx512.mask.pternlog.d.512(<16 x i32>, <16 x i32>, <16 x i32>, i32, i16) + +define <8 x i64> @stack_fold_ternlogq(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2) { + ;CHECK-LABEL: stack_fold_ternlogq + ;CHECK: vpternlogq $33, {{-?[0-9]*}}(%rsp), {{%zmm[0-9][0-9]*}}, {{%zmm[0-9][0-9]*}} {{.*#+}} 64-byte Folded Reload + %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"() + %res = call <8 x i64> @llvm.x86.avx512.mask.pternlog.q.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i32 33, i8 -1) + ret <8 x i64> %res +} + +declare <8 x i64> @llvm.x86.avx512.mask.pternlog.q.512(<8 x i64>, <8 x i64>, <8 x i64>, i32, i8) |