Lines Matching defs:Rem

348 /// Generate code to calculate the remainder of two integers, replacing Rem with
353 /// Replace Rem with generated code.
354 bool llvm::expandRemainder(BinaryOperator *Rem) {
355 assert((Rem->getOpcode() == Instruction::SRem ||
356 Rem->getOpcode() == Instruction::URem) &&
359 IRBuilder<> Builder(Rem);
361 assert(!Rem->getType()->isVectorTy() && "Div over vectors not supported");
364 if (Rem->getOpcode() == Instruction::SRem) {
365 Value *Remainder = generateSignedRemainderCode(Rem->getOperand(0),
366 Rem->getOperand(1), Builder);
368 // Check whether this is the insert point while Rem is still valid.
369 bool IsInsertPoint = Rem->getIterator() == Builder.GetInsertPoint();
370 Rem->replaceAllUsesWith(Remainder);
371 Rem->dropAllReferences();
372 Rem->eraseFromParent();
381 Rem = BO;
384 Value *Remainder = generateUnsignedRemainderCode(Rem->getOperand(0),
385 Rem->getOperand(1), Builder);
387 Rem->replaceAllUsesWith(Remainder);
388 Rem->dropAllReferences();
389 Rem->eraseFromParent();
454 /// Replace Rem with emulation code.
455 bool llvm::expandRemainderUpTo32Bits(BinaryOperator *Rem) {
456 assert((Rem->getOpcode() == Instruction::SRem ||
457 Rem->getOpcode() == Instruction::URem) &&
460 Type *RemTy = Rem->getType();
469 return expandRemainder(Rem);
473 IRBuilder<> Builder(Rem);
481 if (Rem->getOpcode() == Instruction::SRem) {
482 ExtDividend = Builder.CreateSExt(Rem->getOperand(0), Int32Ty);
483 ExtDivisor = Builder.CreateSExt(Rem->getOperand(1), Int32Ty);
486 ExtDividend = Builder.CreateZExt(Rem->getOperand(0), Int32Ty);
487 ExtDivisor = Builder.CreateZExt(Rem->getOperand(1), Int32Ty);
492 Rem->replaceAllUsesWith(Trunc);
493 Rem->dropAllReferences();
494 Rem->eraseFromParent();
503 /// Replace Rem with emulation code.
504 bool llvm::expandRemainderUpTo64Bits(BinaryOperator *Rem) {
505 assert((Rem->getOpcode() == Instruction::SRem ||
506 Rem->getOpcode() == Instruction::URem) &&
509 Type *RemTy = Rem->getType();
515 return expandRemainder(Rem);
519 IRBuilder<> Builder(Rem);
527 if (Rem->getOpcode() == Instruction::SRem) {
528 ExtDividend = Builder.CreateSExt(Rem->getOperand(0), Int64Ty);
529 ExtDivisor = Builder.CreateSExt(Rem->getOperand(1), Int64Ty);
532 ExtDividend = Builder.CreateZExt(Rem->getOperand(0), Int64Ty);
533 ExtDivisor = Builder.CreateZExt(Rem->getOperand(1), Int64Ty);
538 Rem->replaceAllUsesWith(Trunc);
539 Rem->dropAllReferences();
540 Rem->eraseFromParent();