diff options
author | Michael Liao <michael.liao@intel.com> | 2012-09-13 20:24:54 +0000 |
---|---|---|
committer | Michael Liao <michael.liao@intel.com> | 2012-09-13 20:24:54 +0000 |
commit | f966e4e5b344e02ddd026a628db7079b62df60e6 (patch) | |
tree | 42d5ee04b019624bc12afc6f5e17a50507b9f395 /test/CodeGen/X86/pr12312.ll | |
parent | 092122f124b6589a3a432473c1047bf5834df3c1 (diff) | |
download | llvm-f966e4e5b344e02ddd026a628db7079b62df60e6.tar.gz llvm-f966e4e5b344e02ddd026a628db7079b62df60e6.tar.bz2 llvm-f966e4e5b344e02ddd026a628db7079b62df60e6.tar.xz |
Add wider vector/integer support for PR12312
- Enhance the fix to PR12312 to support wider integer, such as 256-bit
integer. If more than 1 fully evaluated vectors are found, POR them
first followed by the final PTEST.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163832 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/pr12312.ll')
-rw-r--r-- | test/CodeGen/X86/pr12312.ll | 133 |
1 files changed, 120 insertions, 13 deletions
diff --git a/test/CodeGen/X86/pr12312.ll b/test/CodeGen/X86/pr12312.ll index 84102f148b..087b8d7539 100644 --- a/test/CodeGen/X86/pr12312.ll +++ b/test/CodeGen/X86/pr12312.ll @@ -1,7 +1,7 @@ ; RUN: llc -mtriple=x86_64-unknown-unknown -mattr=+sse41,-avx < %s | FileCheck %s --check-prefix SSE41 -; RUN: llc -mtriple=x86_64-unknown-unknown -mattr=+avx < %s | FileCheck %s --check-prefix AVX +; RUN: llc -mtriple=x86_64-unknown-unknown -mattr=+avx,-avx2 < %s | FileCheck %s --check-prefix AVX -define i32 @veccond(<4 x i32> %input) { +define i32 @veccond128(<4 x i32> %input) { entry: %0 = bitcast <4 x i32> %input to i128 %1 = icmp ne i128 %0, 0 @@ -11,38 +11,145 @@ if-true-block: ; preds = %entry ret i32 0 endif-block: ; preds = %entry, ret i32 1 -; SSE41: veccond +; SSE41: veccond128 ; SSE41: ptest ; SSE41: ret -; AVX: veccond -; AVX: vptest +; AVX: veccond128 +; AVX: vptest %xmm{{.*}}, %xmm{{.*}} ; AVX: ret } -define i32 @vectest(<4 x i32> %input) { +define i32 @veccond256(<8 x i32> %input) { +entry: + %0 = bitcast <8 x i32> %input to i256 + %1 = icmp ne i256 %0, 0 + br i1 %1, label %if-true-block, label %endif-block + +if-true-block: ; preds = %entry + ret i32 0 +endif-block: ; preds = %entry, + ret i32 1 +; SSE41: veccond256 +; SSE41: por +; SSE41: ptest +; SSE41: ret +; AVX: veccond256 +; AVX: vptest %ymm{{.*}}, %ymm{{.*}} +; AVX: ret +} + +define i32 @veccond512(<16 x i32> %input) { +entry: + %0 = bitcast <16 x i32> %input to i512 + %1 = icmp ne i512 %0, 0 + br i1 %1, label %if-true-block, label %endif-block + +if-true-block: ; preds = %entry + ret i32 0 +endif-block: ; preds = %entry, + ret i32 1 +; SSE41: veccond512 +; SSE41: por +; SSE41: por +; SSE41: por +; SSE41: ptest +; SSE41: ret +; AVX: veccond512 +; AVX: vorps +; AVX: vptest %ymm{{.*}}, %ymm{{.*}} +; AVX: ret +} + +define i32 @vectest128(<4 x i32> %input) { entry: %0 = bitcast <4 x i32> %input to i128 %1 = icmp ne i128 %0, 0 %2 = zext i1 %1 to i32 ret i32 %2 -; SSE41: vectest +; SSE41: vectest128 +; SSE41: ptest +; SSE41: ret +; AVX: vectest128 +; AVX: vptest %xmm{{.*}}, %xmm{{.*}} +; AVX: ret +} + +define i32 @vectest256(<8 x i32> %input) { +entry: + %0 = bitcast <8 x i32> %input to i256 + %1 = icmp ne i256 %0, 0 + %2 = zext i1 %1 to i32 + ret i32 %2 +; SSE41: vectest256 +; SSE41: por +; SSE41: ptest +; SSE41: ret +; AVX: vectest256 +; AVX: vptest %ymm{{.*}}, %ymm{{.*}} +; AVX: ret +} + +define i32 @vectest512(<16 x i32> %input) { +entry: + %0 = bitcast <16 x i32> %input to i512 + %1 = icmp ne i512 %0, 0 + %2 = zext i1 %1 to i32 + ret i32 %2 +; SSE41: vectest512 +; SSE41: por +; SSE41: por +; SSE41: por ; SSE41: ptest ; SSE41: ret -; AVX: vectest -; AVX: vptest +; AVX: vectest512 +; AVX: vorps +; AVX: vptest %ymm{{.*}}, %ymm{{.*}} ; AVX: ret } -define i32 @vecsel(<4 x i32> %input, i32 %a, i32 %b) { +define i32 @vecsel128(<4 x i32> %input, i32 %a, i32 %b) { entry: %0 = bitcast <4 x i32> %input to i128 %1 = icmp ne i128 %0, 0 %2 = select i1 %1, i32 %a, i32 %b ret i32 %2 -; SSE41: vecsel +; SSE41: vecsel128 +; SSE41: ptest +; SSE41: ret +; AVX: vecsel128 +; AVX: vptest %xmm{{.*}}, %xmm{{.*}} +; AVX: ret +} + +define i32 @vecsel256(<8 x i32> %input, i32 %a, i32 %b) { +entry: + %0 = bitcast <8 x i32> %input to i256 + %1 = icmp ne i256 %0, 0 + %2 = select i1 %1, i32 %a, i32 %b + ret i32 %2 +; SSE41: vecsel256 +; SSE41: por +; SSE41: ptest +; SSE41: ret +; AVX: vecsel256 +; AVX: vptest %ymm{{.*}}, %ymm{{.*}} +; AVX: ret +} + +define i32 @vecsel512(<16 x i32> %input, i32 %a, i32 %b) { +entry: + %0 = bitcast <16 x i32> %input to i512 + %1 = icmp ne i512 %0, 0 + %2 = select i1 %1, i32 %a, i32 %b + ret i32 %2 +; SSE41: vecsel512 +; SSE41: por +; SSE41: por +; SSE41: por ; SSE41: ptest ; SSE41: ret -; AVX: vecsel -; AVX: vptest +; AVX: vecsel512 +; AVX: vorps +; AVX: vptest %ymm{{.*}}, %ymm{{.*}} ; AVX: ret } |