From a1488035df0c6f2a63d814db72fd60932fc5040a Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Mon, 23 Dec 2013 02:44:00 +0000 Subject: [PATCH] [AArch64]The compare to zero intrinsics should be implemented by 'icmp/fcmp' and 'sext' not 'zext'. Modify the implementation by replacing zext with sext. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197898 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGBuiltin.cpp | 2 +- test/CodeGen/aarch64-neon-misc.c | 28 ++++++++++++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index baeac6ec5d..267dea069e 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -2637,7 +2637,7 @@ Value *CodeGenFunction::EmitAArch64CompareBuiltinExpr( } else { Op = Builder.CreateICmp(Ip, Op, ConstantAggregateZero::get(OTy)); } - return Builder.CreateZExt(Op, Ty, Name); + return Builder.CreateSExt(Op, Ty, Name); } static Value *packTBLDVectorList(CodeGenFunction &CGF, ArrayRef Ops, diff --git a/test/CodeGen/aarch64-neon-misc.c b/test/CodeGen/aarch64-neon-misc.c index 8f59f6be7e..030c5aee0d 100644 --- a/test/CodeGen/aarch64-neon-misc.c +++ b/test/CodeGen/aarch64-neon-misc.c @@ -126,6 +126,18 @@ uint32x4_t test_vceqzq_f32(float32x4_t a) { return vceqzq_f32(a); } +// CHECK: test_vceqz_p8 +// CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x0 +uint8x8_t test_vceqz_p8(poly8x8_t a) { + return vceqz_p8(a); +} + +// CHECK: test_vceqzq_p8 +// CHECK: cmeq {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x0 +uint8x16_t test_vceqzq_p8(poly8x16_t a) { + return vceqzq_p8(a); +} + // CHECK: test_vceqz_p16 // CHECK: cmeq {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0x0 uint16x4_t test_vceqz_p16(poly16x4_t a) { @@ -367,49 +379,49 @@ uint64x2_t test_vcgtzq_f64(float64x2_t a) { } // CHECK: test_vcltz_s8 -// CHECK: cmlt {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0 +// CHECK: sshr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #7 uint8x8_t test_vcltz_s8(int8x8_t a) { return vcltz_s8(a); } // CHECK: test_vcltz_s16 -// CHECK: cmlt {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0 +// CHECK: sshr {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #15 uint16x4_t test_vcltz_s16(int16x4_t a) { return vcltz_s16(a); } // CHECK: test_vcltz_s32 -// CHECK: cmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0 +// CHECK: sshr {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #31 uint32x2_t test_vcltz_s32(int32x2_t a) { return vcltz_s32(a); } // CHECK: test_vcltz_s64 -// CHECK: cmlt {{d[0-9]+}}, {{d[0-9]+}}, #0 +// CHECK: sshr {{d[0-9]+}}, {{d[0-9]+}}, #63 uint64x1_t test_vcltz_s64(int64x1_t a) { return vcltz_s64(a); } // CHECK: test_vcltzq_s8 -// CHECK: cmlt {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0 +// CHECK: sshr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #7 uint8x16_t test_vcltzq_s8(int8x16_t a) { return vcltzq_s8(a); } // CHECK: test_vcltzq_s16 -// CHECK: cmlt {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #0 +// CHECK: sshr {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #15 uint16x8_t test_vcltzq_s16(int16x8_t a) { return vcltzq_s16(a); } // CHECK: test_vcltzq_s32 -// CHECK: cmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0 +// CHECK: sshr {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #31 uint32x4_t test_vcltzq_s32(int32x4_t a) { return vcltzq_s32(a); } // CHECK: test_vcltzq_s64 -// CHECK: cmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0 +// CHECK: sshr {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #63 uint64x2_t test_vcltzq_s64(int64x2_t a) { return vcltzq_s64(a); } -- 2.40.0