reference, declaration → definition definition → references, declarations, derived classes, virtual overrides reference to multiple definitions → definitions unreferenced |
1321 llvm::Value *Signed = CGF.EmitScalarExpr(SignedOp); 1322 llvm::Value *Unsigned = CGF.EmitScalarExpr(UnsignedOp); 1328 Signed = CGF.Builder.CreateSExt(Signed, Unsigned->getType(), "op.sext"); 1330 Unsigned = CGF.Builder.CreateZExt(Unsigned, Signed->getType(), "op.zext"); 1334 Address ResultPtr = CGF.EmitPointerWithAlignment(ResultArg); 1339 llvm::Value *IsNegative = CGF.Builder.CreateICmpSLT(Signed, Zero); 1340 llvm::Value *AbsOfNegative = CGF.Builder.CreateSub(Zero, Signed); 1342 CGF.Builder.CreateSelect(IsNegative, AbsOfNegative, Signed); 1347 EmitOverflowIntrinsic(CGF, llvm::Intrinsic::umul_with_overflow, AbsSigned, 1357 CGF.Builder.CreateAdd(llvm::ConstantInt::get(OpTy, IntMax), 1358 CGF.Builder.CreateZExt(IsNegative, OpTy)); 1360 CGF.Builder.CreateICmpUGT(UnsignedResult, MaxResult); 1361 Overflow = CGF.Builder.CreateOr(UnsignedOverflow, SignedOverflow); 1364 llvm::Value *NegativeResult = CGF.Builder.CreateNeg(UnsignedResult); 1366 CGF.Builder.CreateSelect(IsNegative, NegativeResult, UnsignedResult); 1367 Result = CGF.Builder.CreateTrunc(SignedResult, ResTy); 1370 llvm::Value *Underflow = CGF.Builder.CreateAnd( 1371 IsNegative, CGF.Builder.CreateIsNotNull(UnsignedResult)); 1372 Overflow = CGF.Builder.CreateOr(UnsignedOverflow, Underflow); 1376 llvm::Value *TruncOverflow = CGF.Builder.CreateICmpUGT( 1378 Overflow = CGF.Builder.CreateOr(Overflow, TruncOverflow); 1382 Result = CGF.Builder.CreateSelect( 1383 IsNegative, CGF.Builder.CreateNeg(UnsignedResult), UnsignedResult); 1385 Result = CGF.Builder.CreateTrunc(Result, ResTy); 1391 CGF.Builder.CreateStore(CGF.EmitToMemory(Result, ResultQTy), ResultPtr, 1391 CGF.Builder.CreateStore(CGF.EmitToMemory(Result, ResultQTy), ResultPtr,