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

Dale Johannesen dalej at apple.com
Thu Jul 31 13:21:18 PDT 2008


Author: johannes
Date: Thu Jul 31 15:21:18 2008
New Revision: 54252

URL: http://llvm.org/viewvc/llvm-project?rev=54252&view=rev
Log:
Support __sync_and_and_fetch.


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=54252&r1=54251&r2=54252&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Thu Jul 31 15:21:18 2008
@@ -4820,6 +4820,34 @@
     Result = Builder.CreateIntToPtr(Result, OrigTy);
     return true;
   }
+  case BUILT_IN_AND_AND_FETCH_1:
+  case BUILT_IN_AND_AND_FETCH_2:
+  case BUILT_IN_AND_AND_FETCH_4:
+  case BUILT_IN_AND_AND_FETCH_8:
+  case BUILT_IN_AND_AND_FETCH_16: {
+    const Type *ResultTy = 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)
+    };
+    const Type *OrigTy = cast<PointerType>(C[0]->getType())->getElementType();
+    const Type* Ty[2];
+    Ty[0] = OrigTy;
+    if (isa<PointerType>(Ty[0])) 
+      Ty[0] = TD.getIntPtrType();     
+    Ty[1] = C[0]->getType();
+    C[0] = Builder.CreateBitCast(C[0], PointerType::getUnqual(Ty[0]));
+    C[1] = Builder.CreateIntCast(C[1], Ty[0], "cast");
+    Result = 
+      Builder.CreateCall(Intrinsic::getDeclaration(TheModule, 
+                                                   Intrinsic::atomic_load_and,
+                                                   Ty, 2),
+                         C, C + 2);
+    Result = Builder.CreateAnd(Result, C[1]);
+    Result = Builder.CreateIntToPtr(Result, OrigTy);
+    return true;
+  }
   case BUILT_IN_XOR_AND_FETCH_1:
   case BUILT_IN_XOR_AND_FETCH_2:
   case BUILT_IN_XOR_AND_FETCH_4:





More information about the llvm-commits mailing list