From e6ed6ecfb0096e1e6d10ef5e3de71ba29b7bbdbf Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Fri, 21 Nov 2008 00:05:31 +0000 Subject: [PATCH] Introduce two new "add" intrinsics. These return the sum plus a bit indicating that an overflow/carry occured. These are converted into ISD::[SU]ADDO nodes, which are lowered in a target-independent way into something sane. Eventually, each target can implement their own method of checking the overflow/carry flags. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59756 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Intrinsics.td | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/include/llvm/Intrinsics.td b/include/llvm/Intrinsics.td index 9a713ceddeb..194ab5bee2d 100644 --- a/include/llvm/Intrinsics.td +++ b/include/llvm/Intrinsics.td @@ -314,6 +314,15 @@ def int_init_trampoline : Intrinsic<[llvm_ptr_ty], []>, GCCBuiltin<"__builtin_init_trampoline">; +//===------------------------ Overflow Intrinsics -------------------------===// +// + +// Expose the carry flag from add operations on two integrals. +def int_sadd_with_overflow : Intrinsic<[llvm_anyint_ty, llvm_i1_ty], + [LLVMMatchType<0>, LLVMMatchType<0>]>; +def int_uadd_with_overflow : Intrinsic<[llvm_anyint_ty, llvm_i1_ty], + [LLVMMatchType<0>, LLVMMatchType<0>]>; + //===------------------------- Atomic Intrinsics --------------------------===// // def int_memory_barrier : Intrinsic<[llvm_void_ty],