[llvm-commits] [llvm-gcc-4.2] r47853 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Andrew Lenharth alenhar2 at cs.uiuc.edu
Mon Mar 3 11:39:27 PST 2008


Author: alenhar2
Date: Mon Mar  3 13:39:27 2008
New Revision: 47853

URL: http://llvm.org/viewvc/llvm-project?rev=47853&view=rev
Log:
add some other atomic builtins that don't require loops

Modified:
    llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=47853&r1=47852&r2=47853&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Mon Mar  3 13:39:27 2008
@@ -4300,7 +4300,12 @@
   case BUILT_IN_VAL_COMPARE_AND_SWAP_2:
   case BUILT_IN_VAL_COMPARE_AND_SWAP_4:
   case BUILT_IN_VAL_COMPARE_AND_SWAP_8:
-  case BUILT_IN_VAL_COMPARE_AND_SWAP_16: {
+  case BUILT_IN_VAL_COMPARE_AND_SWAP_16:
+  case BUILT_IN_BOOL_COMPARE_AND_SWAP_1:
+  case BUILT_IN_BOOL_COMPARE_AND_SWAP_2:
+  case BUILT_IN_BOOL_COMPARE_AND_SWAP_4:
+  case BUILT_IN_BOOL_COMPARE_AND_SWAP_8:
+  case BUILT_IN_BOOL_COMPARE_AND_SWAP_16: {
     const Type *Ty = ConvertType(TREE_TYPE(exp));
     tree arglist = TREE_OPERAND(exp, 1);
     Value* C[3] = {
@@ -4318,6 +4323,12 @@
                                                    Intrinsic::atomic_lcs, 
                                                    &Ty, 1),
       C, C + 3);
+    if (((DECL_FUNCTION_CODE(fndecl)) == BUILT_IN_BOOL_COMPARE_AND_SWAP_1) ||
+        ((DECL_FUNCTION_CODE(fndecl)) == BUILT_IN_BOOL_COMPARE_AND_SWAP_2) ||
+        ((DECL_FUNCTION_CODE(fndecl)) == BUILT_IN_BOOL_COMPARE_AND_SWAP_4) ||
+        ((DECL_FUNCTION_CODE(fndecl)) == BUILT_IN_BOOL_COMPARE_AND_SWAP_8) ||
+        ((DECL_FUNCTION_CODE(fndecl)) == BUILT_IN_BOOL_COMPARE_AND_SWAP_16))
+      Result = Builder.CreateICmpEQ(Result, C[1]);
    
     return true;
   }
@@ -4325,13 +4336,24 @@
   case BUILT_IN_FETCH_AND_ADD_2:
   case BUILT_IN_FETCH_AND_ADD_4:
   case BUILT_IN_FETCH_AND_ADD_8:
-  case BUILT_IN_FETCH_AND_ADD_16: {
+  case BUILT_IN_FETCH_AND_ADD_16:
+  case BUILT_IN_FETCH_AND_SUB_1:
+  case BUILT_IN_FETCH_AND_SUB_2:
+  case BUILT_IN_FETCH_AND_SUB_4:
+  case BUILT_IN_FETCH_AND_SUB_8:
+  case BUILT_IN_FETCH_AND_SUB_16: {
     const Type *Ty = ConvertType(TREE_TYPE(exp));
     tree arglist = TREE_OPERAND(exp, 1);
     Value* C[2] = {
       Emit(TREE_VALUE(arglist), 0),
       Emit(TREE_VALUE(TREE_CHAIN(arglist)), 0)
     };
+    if (((DECL_FUNCTION_CODE(fndecl)) == BUILT_IN_FETCH_AND_SUB_1) ||
+        ((DECL_FUNCTION_CODE(fndecl)) == BUILT_IN_FETCH_AND_SUB_2) ||
+        ((DECL_FUNCTION_CODE(fndecl)) == BUILT_IN_FETCH_AND_SUB_4) ||
+        ((DECL_FUNCTION_CODE(fndecl)) == BUILT_IN_FETCH_AND_SUB_8) ||
+        ((DECL_FUNCTION_CODE(fndecl)) == BUILT_IN_FETCH_AND_SUB_16))
+      C[1] = Builder.CreateNeg(C[1]);
     if (C[1]->getType() != Ty)
       C[1] = Builder.CreateIntCast(C[1], Ty, "cast");
     Result = 





More information about the llvm-commits mailing list