================
Comment at: lib/CodeGen/CGBuiltin.cpp:112
@@ +111,3 @@
+  Result = EmitFromInt(CGF, Result, T, ValueType);
+  return Result;
+}
----------------
Don't really need the Result temporary here?

================
Comment at: lib/CodeGen/CGBuiltin.cpp:118
@@ -87,26 +117,3 @@
                                const CallExpr *E) {
-  QualType T = E->getType();
-  assert(E->getArg(0)->getType()->isPointerType());
-  assert(CGF.getContext().hasSameUnqualifiedType(T,
-                                  E->getArg(0)->getType()->getPointeeType()));
-  assert(CGF.getContext().hasSameUnqualifiedType(T, E->getArg(1)->getType()));
-
-  llvm::Value *DestPtr = CGF.EmitScalarExpr(E->getArg(0));
-  unsigned AddrSpace = DestPtr->getType()->getPointerAddressSpace();
-
-  llvm::IntegerType *IntType =
-    llvm::IntegerType::get(CGF.getLLVMContext(),
-                           CGF.getContext().getTypeSize(T));
-  llvm::Type *IntPtrType = IntType->getPointerTo(AddrSpace);
-
-  llvm::Value *Args[2];
-  Args[0] = CGF.Builder.CreateBitCast(DestPtr, IntPtrType);
-  Args[1] = CGF.EmitScalarExpr(E->getArg(1));
-  llvm::Type *ValueType = Args[1]->getType();
-  Args[1] = EmitToInt(CGF, Args[1], T, IntType);
-
-  llvm::Value *Result =
-      CGF.Builder.CreateAtomicRMW(Kind, Args[0], Args[1],
-                                  llvm::SequentiallyConsistent);
-  Result = EmitFromInt(CGF, Result, T, ValueType);
+  llvm::Value *Result = MakeBinaryAtomicValue(CGF, Kind, E);
   return RValue::get(Result);
----------------
You can just "return RValue::get(MakeBinary...)" -- similarly to how it's done 
below, for consistency

================
Comment at: lib/CodeGen/CGBuiltin.cpp:165
@@ +164,3 @@
+static Value *MakeAtomicCmpXchgValue(CodeGenFunction &CGF, const CallExpr *E,
+                                     bool ReturnBool) {
+  QualType T = ReturnBool ? E->getArg(1)->getType() : E->getType();
----------------
Please document all function parameters in the comment (especially ReturnBool)

================
Comment at: lib/CodeGen/CGBuiltin.cpp:174
@@ +173,3 @@
+
+  Value *Args[3];
+  Args[0] = CGF.Builder.CreateBitCast(DestPtr, IntPtrType);
----------------
Would universal initialization be simpler here?

Value *Args[3] = {CGF.Builder.CreateBi......, CGF.EmitScalar...}



================
Comment at: lib/CodeGen/CGBuiltin.cpp:6865
@@ +6864,3 @@
+
+Value *CodeGenFunction::EmitNVPTXBuiltinExpr(unsigned BuiltinID,
+                                             const CallExpr *E) {
----------------
I'm wondering if there's some unwritten rule saying that all target builtins 
should be crammed into a single file... It's closing in on 7KLOC now and no end 
in sight. Would it be very bad for NVPTX to have its own CGBuiltinNVPTX or 
something like that? Clang splits classes to multiple files (Sema, 
CodeGenFunction, etc) already... 

Eric?

http://reviews.llvm.org/D10666

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to