Lines Matching defs:Rem
326 /// Generate code to calculate the remainder of two integers, replacing Rem with
333 /// @brief Replace Rem with generated code.
334 bool llvm::expandRemainder(BinaryOperator *Rem) {
335 assert((Rem->getOpcode() == Instruction::SRem ||
336 Rem->getOpcode() == Instruction::URem) &&
339 IRBuilder<> Builder(Rem);
342 if (Rem->getOpcode() == Instruction::SRem) {
343 Value *Remainder = generateSignedRemainderCode(Rem->getOperand(0),
344 Rem->getOperand(1), Builder);
346 Rem->replaceAllUsesWith(Remainder);
347 Rem->dropAllReferences();
348 Rem->eraseFromParent();
355 Rem = BO;
358 Value *Remainder = generatedUnsignedRemainderCode(Rem->getOperand(0),
359 Rem->getOperand(1),
362 Rem->replaceAllUsesWith(Remainder);
363 Rem->dropAllReferences();
364 Rem->eraseFromParent();
428 /// @brief Replace Rem with emulation code.
429 bool llvm::expandRemainderUpTo32Bits(BinaryOperator *Rem) {
430 assert((Rem->getOpcode() == Instruction::SRem ||
431 Rem->getOpcode() == Instruction::URem) &&
434 Type *RemTy = Rem->getType();
444 return expandRemainder(Rem);
448 IRBuilder<> Builder(Rem);
456 if (Rem->getOpcode() == Instruction::SRem) {
457 ExtDividend = Builder.CreateSExt(Rem->getOperand(0), Int32Ty);
458 ExtDivisor = Builder.CreateSExt(Rem->getOperand(1), Int32Ty);
461 ExtDividend = Builder.CreateZExt(Rem->getOperand(0), Int32Ty);
462 ExtDivisor = Builder.CreateZExt(Rem->getOperand(1), Int32Ty);
467 Rem->replaceAllUsesWith(Trunc);
468 Rem->dropAllReferences();
469 Rem->eraseFromParent();