hans accepted this revision. hans added a comment. This revision is now accepted and ready to land.
lgtm with some nits ================ Comment at: lib/CodeGen/CGBuiltin.cpp:7592 Value *LHS = EmitScalarExpr(E->getArg(0)); Value *RHS = EmitScalarExpr(E->getArg(1)); llvm::Type *ResType = ConvertType(E->getType()); ---------------- While you're here, or if you want to do a follow-up, I think this code could just use Ops[0] and Ops[1] directly, as the "EmitScaleExpr" was done earlier. ================ Comment at: lib/Headers/intrin.h:420 unsigned __int64 _shrx_u64(unsigned __int64, unsigned int); -/* - * Multiply two 64-bit integers and obtain a 64-bit result. - * The low-half is returned directly and the high half is in an out parameter. - */ -static __inline__ unsigned __int64 __DEFAULT_FN_ATTRS -_umul128(unsigned __int64 _Multiplier, unsigned __int64 _Multiplicand, - unsigned __int64 *_HighProduct) { - unsigned __int128 _FullProduct = - (unsigned __int128)_Multiplier * (unsigned __int128)_Multiplicand; - *_HighProduct = _FullProduct >> 64; - return _FullProduct; -} +static __inline__ unsigned __int64 _umul128(unsigned __int64 _Multiplier, + unsigned __int64 _Multiplicand, ---------------- Maybe move this one next to __mul128 (or move that here), so they're next to each other in the file. ================ Comment at: test/CodeGen/ms-x86-intrinsics.c:57 +// CHECK-X64-LABEL: define i64 @test_mul128(i64 %Multiplier, i64 %Multiplicand, i64*{{[a-z_ ]*}}%HighProduct) +// CHECK-X64: = mul nsw i128 % +// CHECK-X64: store i64 % ---------------- it would be good to check for the sext's too (and zext's for _umul128) https://reviews.llvm.org/D25353 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits