diff --git a/clang/include/clang/Basic/arm_neon.td b/clang/include/clang/Basic/arm_neon.td index d0269f31c32d..6369e5a8e342 100644 --- a/clang/include/clang/Basic/arm_neon.td +++ b/clang/include/clang/Basic/arm_neon.td @@ -830,7 +830,7 @@ def XTN2 : SOpInst<"vmovn_high", "(; //////////////////////////////////////////////////////////////////////////////// // Signed integer saturating extract and unsigned narrow to high -def SQXTUN2 : SOpInst<"vqmovun_high", "(; +def SQXTUN2 : SOpInst<"vqmovun_high", "(; //////////////////////////////////////////////////////////////////////////////// // Integer saturating extract and narrow to high @@ -1498,7 +1498,7 @@ def SCALAR_SQDMULL : SInst<"vqdmull", "(1>)11", "SsSi">; //////////////////////////////////////////////////////////////////////////////// // Scalar Signed Saturating Extract Unsigned Narrow -def SCALAR_SQXTUN : SInst<"vqmovun", "(1<)1", "SsSiSl">; +def SCALAR_SQXTUN : SInst<"vqmovun", "(U1<)1", "SsSiSl">; //////////////////////////////////////////////////////////////////////////////// // Scalar Signed Saturating Extract Narrow diff --git a/clang/test/CodeGen/aarch64-neon-intrinsics.c b/clang/test/CodeGen/aarch64-neon-intrinsics.c index de7e77025605..89632fcd0a98 100644 --- a/clang/test/CodeGen/aarch64-neon-intrinsics.c +++ b/clang/test/CodeGen/aarch64-neon-intrinsics.c @@ -14094,8 +14094,8 @@ int64_t test_vqdmulls_s32(int32_t a, int32_t b) { // CHECK: [[VQMOVUNH_S16_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtun.v8i8(<8 x i16> [[TMP0]]) // CHECK: [[TMP1:%.*]] = extractelement <8 x i8> [[VQMOVUNH_S16_I]], i64 0 // CHECK: ret i8 [[TMP1]] -int8_t test_vqmovunh_s16(int16_t a) { - return (int8_t)vqmovunh_s16(a); +uint8_t test_vqmovunh_s16(int16_t a) { + return (uint8_t)vqmovunh_s16(a); } // CHECK-LABEL: @test_vqmovuns_s32( @@ -14103,15 +14103,15 @@ int8_t test_vqmovunh_s16(int16_t a) { // CHECK: [[VQMOVUNS_S32_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqxtun.v4i16(<4 x i32> [[TMP0]]) // CHECK: [[TMP1:%.*]] = extractelement <4 x i16> [[VQMOVUNS_S32_I]], i64 0 // CHECK: ret i16 [[TMP1]] -int16_t test_vqmovuns_s32(int32_t a) { - return (int16_t)vqmovuns_s32(a); +uint16_t test_vqmovuns_s32(int32_t a) { + return (uint16_t)vqmovuns_s32(a); } // CHECK-LABEL: @test_vqmovund_s64( // CHECK: [[VQMOVUND_S64_I:%.*]] = call i32 @llvm.aarch64.neon.scalar.sqxtun.i32.i64(i64 %a) // CHECK: ret i32 [[VQMOVUND_S64_I]] -int32_t test_vqmovund_s64(int64_t a) { - return (int32_t)vqmovund_s64(a); +uint32_t test_vqmovund_s64(int64_t a) { + return (uint32_t)vqmovund_s64(a); } // CHECK-LABEL: @test_vqmovnh_s16( diff --git a/clang/test/CodeGen/aarch64-neon-misc.c b/clang/test/CodeGen/aarch64-neon-misc.c index 14b5a357f61e..88020a1a69c2 100644 --- a/clang/test/CodeGen/aarch64-neon-misc.c +++ b/clang/test/CodeGen/aarch64-neon-misc.c @@ -1908,7 +1908,7 @@ int32x2_t test_vqmovun_s64(int64x2_t a) { // CHECK: [[VQMOVUN_V1_I_I:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqxtun.v8i8(<8 x i16> %b) // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <8 x i8> %a, <8 x i8> [[VQMOVUN_V1_I_I]], <16 x i32> // CHECK: ret <16 x i8> [[SHUFFLE_I_I]] -int8x16_t test_vqmovun_high_s16(int8x8_t a, int16x8_t b) { +uint8x16_t test_vqmovun_high_s16(uint8x8_t a, int16x8_t b) { return vqmovun_high_s16(a, b); } @@ -1918,7 +1918,7 @@ int8x16_t test_vqmovun_high_s16(int8x8_t a, int16x8_t b) { // CHECK: [[VQMOVUN_V2_I_I:%.*]] = bitcast <4 x i16> [[VQMOVUN_V1_I_I]] to <8 x i8> // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <4 x i16> %a, <4 x i16> [[VQMOVUN_V1_I_I]], <8 x i32> // CHECK: ret <8 x i16> [[SHUFFLE_I_I]] -int16x8_t test_vqmovun_high_s32(int16x4_t a, int32x4_t b) { +uint16x8_t test_vqmovun_high_s32(uint16x4_t a, int32x4_t b) { return vqmovun_high_s32(a, b); } @@ -1928,7 +1928,7 @@ int16x8_t test_vqmovun_high_s32(int16x4_t a, int32x4_t b) { // CHECK: [[VQMOVUN_V2_I_I:%.*]] = bitcast <2 x i32> [[VQMOVUN_V1_I_I]] to <8 x i8> // CHECK: [[SHUFFLE_I_I:%.*]] = shufflevector <2 x i32> %a, <2 x i32> [[VQMOVUN_V1_I_I]], <4 x i32> // CHECK: ret <4 x i32> [[SHUFFLE_I_I]] -int32x4_t test_vqmovun_high_s64(int32x2_t a, int64x2_t b) { +uint32x4_t test_vqmovun_high_s64(uint32x2_t a, int64x2_t b) { return vqmovun_high_s64(a, b); } diff --git a/clang/test/Sema/arm64-neon-header.c b/clang/test/Sema/arm64-neon-header.c index 0ae082113a57..640cc76fd995 100644 --- a/clang/test/Sema/arm64-neon-header.c +++ b/clang/test/Sema/arm64-neon-header.c @@ -2,6 +2,6 @@ #include -int16x8_t foo(int8x8_t p0, int16x8_t p1) { +int16x8_t foo(uint8x8_t p0, int16x8_t p1) { return vqmovun_high_s16(p0, p1); // expected-warning {{incompatible vector types returning 'uint8x16_t'}} }