From 840564973fe0019467a7187fc510b7b70e0aa4f7 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Wed, 2 Mar 2016 23:22:03 +0000 Subject: [PATCH] [AArch64] add tests to demonstrate existing codegen for PR26819 llvm-svn: 262540 --- .../CodeGen/AArch64/neon-compare-instructions.ll | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/llvm/test/CodeGen/AArch64/neon-compare-instructions.ll b/llvm/test/CodeGen/AArch64/neon-compare-instructions.ll index 6d89dfb..127a9fa 100644 --- a/llvm/test/CodeGen/AArch64/neon-compare-instructions.ll +++ b/llvm/test/CodeGen/AArch64/neon-compare-instructions.ll @@ -801,6 +801,71 @@ define <2 x i64> @cmgez2xi64(<2 x i64> %A) { ret <2 x i64> %tmp4 } +; FIXME: The following 7 tests could be optimized to cmgez to save an instruction. + +define <8 x i8> @cmgez8xi8_alt(<8 x i8> %A) { +; CHECK-LABEL: cmgez8xi8_alt: +; CHECK: sshr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #7 +; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b + %sign = ashr <8 x i8> %A, + %not = xor <8 x i8> %sign, + ret <8 x i8> %not +} + +define <16 x i8> @cmgez16xi8_alt(<16 x i8> %A) { +; CHECK-LABEL: cmgez16xi8_alt: +; CHECK: sshr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #7 +; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b + %sign = ashr <16 x i8> %A, + %not = xor <16 x i8> %sign, + ret <16 x i8> %not +} + +define <4 x i16> @cmgez4xi16_alt(<4 x i16> %A) { +; CHECK-LABEL: cmgez4xi16_alt: +; CHECK: sshr {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #15 +; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b + %sign = ashr <4 x i16> %A, + %not = xor <4 x i16> %sign, + ret <4 x i16> %not +} + +define <8 x i16> @cmgez8xi16_alt(<8 x i16> %A) { +; CHECK-LABEL: cmgez8xi16_alt: +; CHECK: sshr {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #15 +; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b + %sign = ashr <8 x i16> %A, + %not = xor <8 x i16> %sign, + ret <8 x i16> %not +} + +define <2 x i32> @cmgez2xi32_alt(<2 x i32> %A) { +; CHECK-LABEL: cmgez2xi32_alt: +; CHECK: sshr {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #31 +; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b + %sign = ashr <2 x i32> %A, + %not = xor <2 x i32> %sign, + ret <2 x i32> %not +} + +define <4 x i32> @cmgez4xi32_alt(<4 x i32> %A) { +; CHECK-LABEL: cmgez4xi32_alt: +; CHECK: sshr {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #31 +; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b + %sign = ashr <4 x i32> %A, + %not = xor <4 x i32> %sign, + ret <4 x i32> %not +} + +define <2 x i64> @cmgez2xi64_alt(<2 x i64> %A) { +; CHECK-LABEL: cmgez2xi64_alt: +; CHECK: sshr {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #63 +; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b + %sign = ashr <2 x i64> %A, + %not = xor <2 x i64> %sign, + ret <2 x i64> %not +} + define <8 x i8> @cmgtz8xi8(<8 x i8> %A) { ; CHECK-LABEL: cmgtz8xi8: -- 2.7.4