]> granicus.if.org Git - clang/commitdiff
Remove support for nand atomic builtins. They are inconsistently implemented in
authorDaniel Dunbar <daniel@zuster.org>
Thu, 25 Mar 2010 17:13:09 +0000 (17:13 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 25 Mar 2010 17:13:09 +0000 (17:13 +0000)
gcc, and the common expectation seems to be that they are unused. If and when
someone cares we can add them back with well documented demantics.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99522 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/Builtins.def
lib/CodeGen/CGBuiltin.cpp
lib/Sema/SemaChecking.cpp
test/CodeGen/atomic.c

index 3afdaf5b0eb1244e13109aa47c9e2383fb41aacb..453f660c360a33fb820661389a86aab7df8c07e2 100644 (file)
@@ -397,13 +397,6 @@ BUILTIN(__sync_fetch_and_xor_4, "ii*i.", "n")
 BUILTIN(__sync_fetch_and_xor_8, "LLiLLi*LLi.", "n")
 BUILTIN(__sync_fetch_and_xor_16, "LLLiLLLi*LLLi.", "n")
 
-BUILTIN(__sync_fetch_and_nand, "v.", "")
-BUILTIN(__sync_fetch_and_nand_1, "cc*c.", "n")
-BUILTIN(__sync_fetch_and_nand_2, "ss*s.", "n")
-BUILTIN(__sync_fetch_and_nand_4, "ii*i.", "n")
-BUILTIN(__sync_fetch_and_nand_8, "LLiLLi*LLi.", "n")
-BUILTIN(__sync_fetch_and_nand_16, "LLLiLLLi*LLLi.", "n")
-
 
 BUILTIN(__sync_add_and_fetch, "v.", "")
 BUILTIN(__sync_add_and_fetch_1, "cc*c.", "n")
@@ -440,14 +433,6 @@ BUILTIN(__sync_xor_and_fetch_4, "ii*i.", "n")
 BUILTIN(__sync_xor_and_fetch_8, "LLiLLi*LLi.", "n")
 BUILTIN(__sync_xor_and_fetch_16, "LLLiLLLi*LLLi.", "n")
 
-BUILTIN(__sync_nand_and_fetch, "v.", "")
-BUILTIN(__sync_nand_and_fetch_1, "cc*c.", "n")
-BUILTIN(__sync_nand_and_fetch_2, "ss*s.", "n")
-BUILTIN(__sync_nand_and_fetch_4, "ii*i.", "n")
-BUILTIN(__sync_nand_and_fetch_8, "LLiLLi*LLi.", "n")
-BUILTIN(__sync_nand_and_fetch_16, "LLLiLLLi*LLLi.", "n")
-
-
 BUILTIN(__sync_bool_compare_and_swap, "v.", "")
 BUILTIN(__sync_bool_compare_and_swap_1, "bcD*cc.", "n")
 BUILTIN(__sync_bool_compare_and_swap_2, "bsD*ss.", "n")
index 419ed734e83e62a6f109987c6f7d37ca7b83eead..a9b0b645a4a6e64b23796ba8ce4c672fb858e2c1 100644 (file)
@@ -81,10 +81,6 @@ static RValue EmitBinaryAtomicPost(CodeGenFunction& CGF,
   Value *Args[2] = { CGF.EmitScalarExpr(E->getArg(0)),
                      CGF.EmitScalarExpr(E->getArg(1)) };
   Value *Result = EmitCallWithBarrier(CGF, AtomF, Args, Args + 2);
-
-  if (Id == Intrinsic::atomic_load_nand)
-    Result = CGF.Builder.CreateNot(Result);
-
   return RValue::get(CGF.Builder.CreateBinOp(Op, Result, Args[1]));
 }
 
@@ -550,12 +546,6 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
   case Builtin::BI__sync_fetch_and_xor_8:
   case Builtin::BI__sync_fetch_and_xor_16:
     return EmitBinaryAtomic(*this, Intrinsic::atomic_load_xor, E);
-  case Builtin::BI__sync_fetch_and_nand_1:
-  case Builtin::BI__sync_fetch_and_nand_2:
-  case Builtin::BI__sync_fetch_and_nand_4:
-  case Builtin::BI__sync_fetch_and_nand_8:
-  case Builtin::BI__sync_fetch_and_nand_16:
-    return EmitBinaryAtomic(*this, Intrinsic::atomic_load_nand, E);
 
   // Clang extensions: not overloaded yet.
   case Builtin::BI__sync_fetch_and_min:
@@ -602,13 +592,6 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
   case Builtin::BI__sync_xor_and_fetch_16:
     return EmitBinaryAtomicPost(*this, Intrinsic::atomic_load_xor, E,
                                 llvm::Instruction::Xor);
-  case Builtin::BI__sync_nand_and_fetch_1:
-  case Builtin::BI__sync_nand_and_fetch_2:
-  case Builtin::BI__sync_nand_and_fetch_4:
-  case Builtin::BI__sync_nand_and_fetch_8:
-  case Builtin::BI__sync_nand_and_fetch_16:
-    return EmitBinaryAtomicPost(*this, Intrinsic::atomic_load_nand, E,
-                                llvm::Instruction::And);
 
   case Builtin::BI__sync_val_compare_and_swap_1:
   case Builtin::BI__sync_val_compare_and_swap_2:
index ff364fce750aef5c7259d37b8d34a07582e240cd..46aedfcb28865d109cfa21db1888a4d23b689792 100644 (file)
@@ -184,13 +184,11 @@ Sema::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
   case Builtin::BI__sync_fetch_and_or:
   case Builtin::BI__sync_fetch_and_and:
   case Builtin::BI__sync_fetch_and_xor:
-  case Builtin::BI__sync_fetch_and_nand:
   case Builtin::BI__sync_add_and_fetch:
   case Builtin::BI__sync_sub_and_fetch:
   case Builtin::BI__sync_and_and_fetch:
   case Builtin::BI__sync_or_and_fetch:
   case Builtin::BI__sync_xor_and_fetch:
-  case Builtin::BI__sync_nand_and_fetch:
   case Builtin::BI__sync_val_compare_and_swap:
   case Builtin::BI__sync_bool_compare_and_swap:
   case Builtin::BI__sync_lock_test_and_set:
@@ -304,14 +302,12 @@ bool Sema::SemaBuiltinAtomicOverloaded(CallExpr *TheCall) {
     BUILTIN_ROW(__sync_fetch_and_or),
     BUILTIN_ROW(__sync_fetch_and_and),
     BUILTIN_ROW(__sync_fetch_and_xor),
-    BUILTIN_ROW(__sync_fetch_and_nand),
 
     BUILTIN_ROW(__sync_add_and_fetch),
     BUILTIN_ROW(__sync_sub_and_fetch),
     BUILTIN_ROW(__sync_and_and_fetch),
     BUILTIN_ROW(__sync_or_and_fetch),
     BUILTIN_ROW(__sync_xor_and_fetch),
-    BUILTIN_ROW(__sync_nand_and_fetch),
 
     BUILTIN_ROW(__sync_val_compare_and_swap),
     BUILTIN_ROW(__sync_bool_compare_and_swap),
@@ -346,26 +342,24 @@ bool Sema::SemaBuiltinAtomicOverloaded(CallExpr *TheCall) {
   case Builtin::BI__sync_fetch_and_or:  BuiltinIndex = 2; break;
   case Builtin::BI__sync_fetch_and_and: BuiltinIndex = 3; break;
   case Builtin::BI__sync_fetch_and_xor: BuiltinIndex = 4; break;
-  case Builtin::BI__sync_fetch_and_nand:BuiltinIndex = 5; break;
 
-  case Builtin::BI__sync_add_and_fetch: BuiltinIndex = 6; break;
-  case Builtin::BI__sync_sub_and_fetch: BuiltinIndex = 7; break;
-  case Builtin::BI__sync_and_and_fetch: BuiltinIndex = 8; break;
-  case Builtin::BI__sync_or_and_fetch:  BuiltinIndex = 9; break;
-  case Builtin::BI__sync_xor_and_fetch: BuiltinIndex =10; break;
-  case Builtin::BI__sync_nand_and_fetch:BuiltinIndex =11; break;
+  case Builtin::BI__sync_add_and_fetch: BuiltinIndex = 5; break;
+  case Builtin::BI__sync_sub_and_fetch: BuiltinIndex = 6; break;
+  case Builtin::BI__sync_and_and_fetch: BuiltinIndex = 7; break;
+  case Builtin::BI__sync_or_and_fetch:  BuiltinIndex = 8; break;
+  case Builtin::BI__sync_xor_and_fetch: BuiltinIndex = 9; break;
 
   case Builtin::BI__sync_val_compare_and_swap:
-    BuiltinIndex = 12;
+    BuiltinIndex = 10;
     NumFixed = 2;
     break;
   case Builtin::BI__sync_bool_compare_and_swap:
-    BuiltinIndex = 13;
+    BuiltinIndex = 11;
     NumFixed = 2;
     break;
-  case Builtin::BI__sync_lock_test_and_set: BuiltinIndex = 14; break;
+  case Builtin::BI__sync_lock_test_and_set: BuiltinIndex = 12; break;
   case Builtin::BI__sync_lock_release:
-    BuiltinIndex = 15;
+    BuiltinIndex = 13;
     NumFixed = 0;
     break;
   }
index c201a1ad6606e7b9fce8c050fc4586ef528d86c0..aa5aa1507b037f3d53ab8862d6aefd111d6e877b 100644 (file)
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 %s -emit-llvm -o - -triple=i686-apple-darwin9 > %t1
-// RUN: grep @llvm.memory.barrier %t1 | count 42
+// RUN: grep @llvm.memory.barrier %t1 | count 38
 // RUN: grep @llvm.atomic.load.add.i32 %t1 | count 3
 // RUN: grep @llvm.atomic.load.sub.i8 %t1 | count 2
 // RUN: grep @llvm.atomic.load.min.i32 %t1
@@ -8,7 +8,7 @@
 // RUN: grep @llvm.atomic.load.umax.i32 %t1
 // RUN: grep @llvm.atomic.swap.i32 %t1
 // RUN: grep @llvm.atomic.cmp.swap.i32 %t1 | count 4
-// RUN: grep @llvm.atomic.load.and.i32 %t1 | count 2
+// RUN: grep @llvm.atomic.load.and.i32 %t1
 // RUN: grep @llvm.atomic.load.or.i8 %t1
 // RUN: grep @llvm.atomic.load.xor.i8 %t1
 
@@ -34,14 +34,12 @@ int atomic(void)
   old = __sync_fetch_and_and(&val, 0x9);
   old = __sync_fetch_and_or(&val, 0xa);
   old = __sync_fetch_and_xor(&val, 0xb);
-  old = __sync_fetch_and_nand(&val, 0xb);
 
   old = __sync_add_and_fetch(&val, 1);
   old = __sync_sub_and_fetch(&val, 2);
   old = __sync_and_and_fetch(&valc, 3);
   old = __sync_or_and_fetch(&valc, 4);
   old = __sync_xor_and_fetch(&valc, 5);
-  old = __sync_nand_and_fetch(&valc, 5);
 
   
   __sync_val_compare_and_swap((void **)0, (void *)0, (void *)0);