Introduce two new "add" intrinsics. These return the sum plus a bit indicating
authorBill Wendling <isanbard@gmail.com>
Fri, 21 Nov 2008 00:05:31 +0000 (00:05 +0000)
committerBill Wendling <isanbard@gmail.com>
Fri, 21 Nov 2008 00:05:31 +0000 (00:05 +0000)
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

index 9a713ceddeb3670a747fa40d1bce5e9dbb389e0d..194ab5bee2d2c7ee3a881c3baeb6b0726e40a6d2 100644 (file)
@@ -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],