From 6d7a7ef9ebafdf8a9f71508f4a5c9ecf31266df6 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Mon, 10 Dec 2018 06:07:59 +0000 Subject: [PATCH] [X86] Remove the addcarry builtins. Leaving only the addcarryx builtins since that matches gcc. The addcarry and addcarryx builtins do the same thing. The only difference is that addcarryx previously required adx feature. This commit removes the adx feature check from addcarryx and removes the addcarry builtin. This matches the builtins that gcc has. We don't guarantee compatibility in builtins, but we generally try to be consistent if its not a burden. llvm-svn: 348738 --- clang/include/clang/Basic/BuiltinsX86.def | 3 +-- clang/include/clang/Basic/BuiltinsX86_64.def | 3 +-- clang/lib/CodeGen/CGBuiltin.cpp | 16 ++++------------ clang/lib/Headers/adxintrin.h | 4 ++-- clang/test/CodeGen/adc-builtins.c | 8 ++++---- clang/test/CodeGen/adx-builtins.c | 4 ++-- 6 files changed, 14 insertions(+), 24 deletions(-) diff --git a/clang/include/clang/Basic/BuiltinsX86.def b/clang/include/clang/Basic/BuiltinsX86.def index 45d3663..d97ec58 100644 --- a/clang/include/clang/Basic/BuiltinsX86.def +++ b/clang/include/clang/Basic/BuiltinsX86.def @@ -719,8 +719,7 @@ TARGET_BUILTIN(__builtin_ia32_wbinvd, "v", "n", "") TARGET_BUILTIN(__builtin_ia32_wbnoinvd, "v", "n", "wbnoinvd") // ADX -TARGET_BUILTIN(__builtin_ia32_addcarryx_u32, "UcUcUiUiUi*", "n", "adx") -TARGET_BUILTIN(__builtin_ia32_addcarry_u32, "UcUcUiUiUi*", "n", "") +TARGET_BUILTIN(__builtin_ia32_addcarryx_u32, "UcUcUiUiUi*", "n", "") TARGET_BUILTIN(__builtin_ia32_subborrow_u32, "UcUcUiUiUi*", "n", "") // RDSEED diff --git a/clang/include/clang/Basic/BuiltinsX86_64.def b/clang/include/clang/Basic/BuiltinsX86_64.def index b59f82d..5e8cce5c 100644 --- a/clang/include/clang/Basic/BuiltinsX86_64.def +++ b/clang/include/clang/Basic/BuiltinsX86_64.def @@ -76,8 +76,7 @@ TARGET_BUILTIN(__builtin_ia32_incsspq, "vULLi", "n", "shstk") TARGET_BUILTIN(__builtin_ia32_rdsspq, "ULLiULLi", "n", "shstk") TARGET_BUILTIN(__builtin_ia32_wrssq, "vULLiv*", "n", "shstk") TARGET_BUILTIN(__builtin_ia32_wrussq, "vULLiv*", "n", "shstk") -TARGET_BUILTIN(__builtin_ia32_addcarryx_u64, "UcUcULLiULLiULLi*", "n", "adx") -TARGET_BUILTIN(__builtin_ia32_addcarry_u64, "UcUcULLiULLiULLi*", "n", "") +TARGET_BUILTIN(__builtin_ia32_addcarryx_u64, "UcUcULLiULLiULLi*", "n", "") TARGET_BUILTIN(__builtin_ia32_subborrow_u64, "UcUcULLiULLiULLi*", "n", "") TARGET_BUILTIN(__builtin_ia32_rdrand64_step, "UiULLi*", "n", "rdrnd") TARGET_BUILTIN(__builtin_ia32_rdseed64_step, "UiULLi*", "n", "rdseed") diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index cb15f19..847a9d3 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -10930,30 +10930,22 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID, } case X86::BI__builtin_ia32_addcarryx_u32: case X86::BI__builtin_ia32_addcarryx_u64: - case X86::BI__builtin_ia32_addcarry_u32: - case X86::BI__builtin_ia32_addcarry_u64: case X86::BI__builtin_ia32_subborrow_u32: case X86::BI__builtin_ia32_subborrow_u64: { Intrinsic::ID IID; switch (BuiltinID) { default: llvm_unreachable("Unsupported intrinsic!"); case X86::BI__builtin_ia32_addcarryx_u32: - IID = Intrinsic::x86_addcarryx_u32; + IID = Intrinsic::x86_addcarry_32; break; case X86::BI__builtin_ia32_addcarryx_u64: - IID = Intrinsic::x86_addcarryx_u64; - break; - case X86::BI__builtin_ia32_addcarry_u32: - IID = Intrinsic::x86_addcarry_u32; - break; - case X86::BI__builtin_ia32_addcarry_u64: - IID = Intrinsic::x86_addcarry_u64; + IID = Intrinsic::x86_addcarry_64; break; case X86::BI__builtin_ia32_subborrow_u32: - IID = Intrinsic::x86_subborrow_u32; + IID = Intrinsic::x86_subborrow_32; break; case X86::BI__builtin_ia32_subborrow_u64: - IID = Intrinsic::x86_subborrow_u64; + IID = Intrinsic::x86_subborrow_64; break; } diff --git a/clang/lib/Headers/adxintrin.h b/clang/lib/Headers/adxintrin.h index ee34728..d6c454d 100644 --- a/clang/lib/Headers/adxintrin.h +++ b/clang/lib/Headers/adxintrin.h @@ -53,7 +53,7 @@ static __inline unsigned char __DEFAULT_FN_ATTRS _addcarry_u32(unsigned char __cf, unsigned int __x, unsigned int __y, unsigned int *__p) { - return __builtin_ia32_addcarry_u32(__cf, __x, __y, __p); + return __builtin_ia32_addcarryx_u32(__cf, __x, __y, __p); } #ifdef __x86_64__ @@ -61,7 +61,7 @@ static __inline unsigned char __DEFAULT_FN_ATTRS _addcarry_u64(unsigned char __cf, unsigned long long __x, unsigned long long __y, unsigned long long *__p) { - return __builtin_ia32_addcarry_u64(__cf, __x, __y, __p); + return __builtin_ia32_addcarryx_u64(__cf, __x, __y, __p); } #endif diff --git a/clang/test/CodeGen/adc-builtins.c b/clang/test/CodeGen/adc-builtins.c index feb6671..036c25c 100644 --- a/clang/test/CodeGen/adc-builtins.c +++ b/clang/test/CodeGen/adc-builtins.c @@ -5,7 +5,7 @@ unsigned char test_addcarry_u32(unsigned char __cf, unsigned int __x, unsigned int __y, unsigned int *__p) { // CHECK-LABEL: test_addcarry_u32 -// CHECK: [[ADC:%.*]] = call { i8, i32 } @llvm.x86.addcarry.u32 +// CHECK: [[ADC:%.*]] = call { i8, i32 } @llvm.x86.addcarry.32 // CHECK: [[DATA:%.*]] = extractvalue { i8, i32 } [[ADC]], 1 // CHECK: store i32 [[DATA]], i32* %{{.*}} // CHECK: [[CF:%.*]] = extractvalue { i8, i32 } [[ADC]], 0 @@ -16,7 +16,7 @@ unsigned char test_addcarry_u64(unsigned char __cf, unsigned long long __x, unsigned long long __y, unsigned long long *__p) { // CHECK-LABEL: test_addcarry_u64 -// CHECK: [[ADC:%.*]] = call { i8, i64 } @llvm.x86.addcarry.u64 +// CHECK: [[ADC:%.*]] = call { i8, i64 } @llvm.x86.addcarry.64 // CHECK: [[DATA:%.*]] = extractvalue { i8, i64 } [[ADC]], 1 // CHECK: store i64 [[DATA]], i64* %{{.*}} // CHECK: [[CF:%.*]] = extractvalue { i8, i64 } [[ADC]], 0 @@ -26,7 +26,7 @@ unsigned char test_addcarry_u64(unsigned char __cf, unsigned long long __x, unsigned char test_subborrow_u32(unsigned char __cf, unsigned int __x, unsigned int __y, unsigned int *__p) { // CHECK-LABEL: test_subborrow_u32 -// CHECK: [[SBB:%.*]] = call { i8, i32 } @llvm.x86.subborrow.u32 +// CHECK: [[SBB:%.*]] = call { i8, i32 } @llvm.x86.subborrow.32 // CHECK: [[DATA:%.*]] = extractvalue { i8, i32 } [[SBB]], 1 // CHECK: store i32 [[DATA]], i32* %{{.*}} // CHECK: [[CF:%.*]] = extractvalue { i8, i32 } [[SBB]], 0 @@ -37,7 +37,7 @@ unsigned char test_subborrow_u64(unsigned char __cf, unsigned long long __x, unsigned long long __y, unsigned long long *__p) { // CHECK-LABEL: test_subborrow_u64 -// CHECK: [[SBB:%.*]] = call { i8, i64 } @llvm.x86.subborrow.u64 +// CHECK: [[SBB:%.*]] = call { i8, i64 } @llvm.x86.subborrow.64 // CHECK: [[DATA:%.*]] = extractvalue { i8, i64 } [[SBB]], 1 // CHECK: store i64 [[DATA]], i64* %{{.*}} // CHECK: [[CF:%.*]] = extractvalue { i8, i64 } [[SBB]], 0 diff --git a/clang/test/CodeGen/adx-builtins.c b/clang/test/CodeGen/adx-builtins.c index 8fd95c0..4047bba 100644 --- a/clang/test/CodeGen/adx-builtins.c +++ b/clang/test/CodeGen/adx-builtins.c @@ -5,7 +5,7 @@ unsigned char test_addcarryx_u32(unsigned char __cf, unsigned int __x, unsigned int __y, unsigned int *__p) { // CHECK-LABEL: test_addcarryx_u32 -// CHECK: [[ADC:%.*]] = call { i8, i32 } @llvm.x86.addcarryx.u32 +// CHECK: [[ADC:%.*]] = call { i8, i32 } @llvm.x86.addcarry.32 // CHECK: [[DATA:%.*]] = extractvalue { i8, i32 } [[ADC]], 1 // CHECK: store i32 [[DATA]], i32* %{{.*}} // CHECK: [[CF:%.*]] = extractvalue { i8, i32 } [[ADC]], 0 @@ -16,7 +16,7 @@ unsigned char test_addcarryx_u64(unsigned char __cf, unsigned long long __x, unsigned long long __y, unsigned long long *__p) { // CHECK-LABEL: test_addcarryx_u64 -// CHECK: [[ADC:%.*]] = call { i8, i64 } @llvm.x86.addcarryx.u64 +// CHECK: [[ADC:%.*]] = call { i8, i64 } @llvm.x86.addcarry.64 // CHECK: [[DATA:%.*]] = extractvalue { i8, i64 } [[ADC]], 1 // CHECK: store i64 [[DATA]], i64* %{{.*}} // CHECK: [[CF:%.*]] = extractvalue { i8, i64 } [[ADC]], 0 -- 2.7.4