diff options
Diffstat (limited to 'llvm/test/Transforms/InstCombine/vector-casts.ll')
-rw-r--r-- | llvm/test/Transforms/InstCombine/vector-casts.ll | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/llvm/test/Transforms/InstCombine/vector-casts.ll b/llvm/test/Transforms/InstCombine/vector-casts.ll index 6e0d66b8ed4..e0d6083a969 100644 --- a/llvm/test/Transforms/InstCombine/vector-casts.ll +++ b/llvm/test/Transforms/InstCombine/vector-casts.ll @@ -1,26 +1,22 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt < %s -instcombine -S | FileCheck %s -; This turns into a&1 != 0 -; TODO: The bar for canonicalizing to something bigger than the minimal length IR is very high. -; This pattern does not appear to meet that standard. +; Can't get smaller than this. define <2 x i1> @trunc(<2 x i64> %a) { ; CHECK-LABEL: @trunc( -; CHECK-NEXT: [[TMP1:%.*]] = and <2 x i64> [[A:%.*]], <i64 1, i64 1> -; CHECK-NEXT: [[T:%.*]] = icmp ne <2 x i64> [[TMP1]], zeroinitializer +; CHECK-NEXT: [[T:%.*]] = trunc <2 x i64> [[A:%.*]] to <2 x i1> ; CHECK-NEXT: ret <2 x i1> [[T]] ; %t = trunc <2 x i64> %a to <2 x i1> ret <2 x i1> %t } -; TODO: This could be just 1 instruction (trunc). +; This is trunc. define <2 x i1> @and_cmp_is_trunc(<2 x i64> %a) { ; CHECK-LABEL: @and_cmp_is_trunc( -; CHECK-NEXT: [[T:%.*]] = and <2 x i64> [[A:%.*]], <i64 1, i64 1> -; CHECK-NEXT: [[R:%.*]] = icmp ne <2 x i64> [[T]], zeroinitializer +; CHECK-NEXT: [[R:%.*]] = trunc <2 x i64> [[A:%.*]] to <2 x i1> ; CHECK-NEXT: ret <2 x i1> [[R]] ; %t = and <2 x i64> %a, <i64 1, i64 1> @@ -28,12 +24,11 @@ define <2 x i1> @and_cmp_is_trunc(<2 x i64> %a) { ret <2 x i1> %r } -; TODO: This could be just 1 instruction (trunc). +; This is trunc. define <2 x i1> @and_cmp_is_trunc_even_with_undef_elt(<2 x i64> %a) { ; CHECK-LABEL: @and_cmp_is_trunc_even_with_undef_elt( -; CHECK-NEXT: [[T:%.*]] = and <2 x i64> [[A:%.*]], <i64 undef, i64 1> -; CHECK-NEXT: [[R:%.*]] = icmp ne <2 x i64> [[T]], zeroinitializer +; CHECK-NEXT: [[R:%.*]] = trunc <2 x i64> [[A:%.*]] to <2 x i1> ; CHECK-NEXT: ret <2 x i1> [[R]] ; %t = and <2 x i64> %a, <i64 undef, i64 1> @@ -41,7 +36,7 @@ define <2 x i1> @and_cmp_is_trunc_even_with_undef_elt(<2 x i64> %a) { ret <2 x i1> %r } -; TODO: This could be just 1 instruction (trunc). +; TODO: This could be just 1 instruction (trunc), but our undef matching is incomplete. define <2 x i1> @and_cmp_is_trunc_even_with_undef_elts(<2 x i64> %a) { ; CHECK-LABEL: @and_cmp_is_trunc_even_with_undef_elts( |