[llvm] b18405f - Add vector trunc(or(shl(zext(x),c1),zext(x))) tests
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 3 05:33:19 PDT 2020
Author: Simon Pilgrim
Date: 2020-07-03T13:32:00+01:00
New Revision: b18405fbc02ec4af5d485c181fa703dc7df76f63
URL: https://github.com/llvm/llvm-project/commit/b18405fbc02ec4af5d485c181fa703dc7df76f63
DIFF: https://github.com/llvm/llvm-project/commit/b18405fbc02ec4af5d485c181fa703dc7df76f63.diff
LOG: Add vector trunc(or(shl(zext(x),c1),zext(x))) tests
Added:
Modified:
llvm/test/Transforms/InstCombine/trunc.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/InstCombine/trunc.ll b/llvm/test/Transforms/InstCombine/trunc.ll
index bc1ab8603dda..0dfe60796f8c 100644
--- a/llvm/test/Transforms/InstCombine/trunc.ll
+++ b/llvm/test/Transforms/InstCombine/trunc.ll
@@ -268,6 +268,56 @@ define i64 @test8(i32 %A, i32 %B) {
ret i64 %G
}
+define <2 x i64> @test8_vec(<2 x i32> %A, <2 x i32> %B) {
+; CHECK-LABEL: @test8_vec(
+; CHECK-NEXT: [[C:%.*]] = zext <2 x i32> [[A:%.*]] to <2 x i64>
+; CHECK-NEXT: [[D:%.*]] = zext <2 x i32> [[B:%.*]] to <2 x i64>
+; CHECK-NEXT: [[E:%.*]] = shl nuw <2 x i64> [[D]], <i64 32, i64 32>
+; CHECK-NEXT: [[F:%.*]] = or <2 x i64> [[E]], [[C]]
+; CHECK-NEXT: ret <2 x i64> [[F]]
+;
+ %C = zext <2 x i32> %A to <2 x i128>
+ %D = zext <2 x i32> %B to <2 x i128>
+ %E = shl <2 x i128> %D, <i128 32, i128 32>
+ %F = or <2 x i128> %E, %C
+ %G = trunc <2 x i128> %F to <2 x i64>
+ ret <2 x i64> %G
+}
+
+define <2 x i64> @test8_vec_nonuniform(<2 x i32> %A, <2 x i32> %B) {
+; CHECK-LABEL: @test8_vec_nonuniform(
+; CHECK-NEXT: [[C:%.*]] = zext <2 x i32> [[A:%.*]] to <2 x i128>
+; CHECK-NEXT: [[D:%.*]] = zext <2 x i32> [[B:%.*]] to <2 x i128>
+; CHECK-NEXT: [[E:%.*]] = shl <2 x i128> [[D]], <i128 32, i128 48>
+; CHECK-NEXT: [[F:%.*]] = or <2 x i128> [[E]], [[C]]
+; CHECK-NEXT: [[G:%.*]] = trunc <2 x i128> [[F]] to <2 x i64>
+; CHECK-NEXT: ret <2 x i64> [[G]]
+;
+ %C = zext <2 x i32> %A to <2 x i128>
+ %D = zext <2 x i32> %B to <2 x i128>
+ %E = shl <2 x i128> %D, <i128 32, i128 48>
+ %F = or <2 x i128> %E, %C
+ %G = trunc <2 x i128> %F to <2 x i64>
+ ret <2 x i64> %G
+}
+
+define <2 x i64> @test8_vec_undef(<2 x i32> %A, <2 x i32> %B) {
+; CHECK-LABEL: @test8_vec_undef(
+; CHECK-NEXT: [[C:%.*]] = zext <2 x i32> [[A:%.*]] to <2 x i128>
+; CHECK-NEXT: [[D:%.*]] = zext <2 x i32> [[B:%.*]] to <2 x i128>
+; CHECK-NEXT: [[E:%.*]] = shl <2 x i128> [[D]], <i128 32, i128 undef>
+; CHECK-NEXT: [[F:%.*]] = or <2 x i128> [[E]], [[C]]
+; CHECK-NEXT: [[G:%.*]] = trunc <2 x i128> [[F]] to <2 x i64>
+; CHECK-NEXT: ret <2 x i64> [[G]]
+;
+ %C = zext <2 x i32> %A to <2 x i128>
+ %D = zext <2 x i32> %B to <2 x i128>
+ %E = shl <2 x i128> %D, <i128 32, i128 undef>
+ %F = or <2 x i128> %E, %C
+ %G = trunc <2 x i128> %F to <2 x i64>
+ ret <2 x i64> %G
+}
+
define i8 @test9(i32 %X) {
; CHECK-LABEL: @test9(
; CHECK-NEXT: [[TMP1:%.*]] = trunc i32 [[X:%.*]] to i8
More information about the llvm-commits
mailing list