• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/llvmCore-3425.0.34/lib/Transforms/Utils/

Lines Matching defs:Builder

27 /// remainder, which will have the sign of the dividend. Builder's insert point
29 /// instruction. This will generate a urem in the process, and Builder's insert
33 IRBuilder<> &Builder) {
34 ConstantInt *ThirtyOne = Builder.getInt32(31);
45 Value *DividendSign = Builder.CreateAShr(Dividend, ThirtyOne);
46 Value *DivisorSign = Builder.CreateAShr(Divisor, ThirtyOne);
47 Value *DvdXor = Builder.CreateXor(Dividend, DividendSign);
48 Value *DvsXor = Builder.CreateXor(Divisor, DivisorSign);
49 Value *UDividend = Builder.CreateSub(DvdXor, DividendSign);
50 Value *UDivisor = Builder.CreateSub(DvsXor, DivisorSign);
51 Value *URem = Builder.CreateURem(UDividend, UDivisor);
52 Value *Xored = Builder.CreateXor(URem, DividendSign);
53 Value *SRem = Builder.CreateSub(Xored, DividendSign);
56 Builder.SetInsertPoint(URemInst);
63 /// remainder. Builder's insert point should be pointing where the caller wants
65 /// the process, and Builder's insert point will be pointing at the udiv (if
68 IRBuilder<> &Builder) {
74 Value *Quotient = Builder.CreateUDiv(Dividend, Divisor);
75 Value *Product = Builder.CreateMul(Divisor, Quotient);
76 Value *Remainder = Builder.CreateSub(Dividend, Product);
79 Builder.SetInsertPoint(UDiv);
85 /// towards 0. Builder's insert point should be pointing where the caller wants
87 /// the process, and Builder's insert point will be pointing at the udiv (if
90 IRBuilder<> &Builder) {
93 ConstantInt *ThirtyOne = Builder.getInt32(31);
105 Value *Tmp = Builder.CreateAShr(Dividend, ThirtyOne);
106 Value *Tmp1 = Builder.CreateAShr(Divisor, ThirtyOne);
107 Value *Tmp2 = Builder.CreateXor(Tmp, Dividend);
108 Value *U_Dvnd = Builder.CreateSub(Tmp2, Tmp);
109 Value *Tmp3 = Builder.CreateXor(Tmp1, Divisor);
110 Value *U_Dvsr = Builder.CreateSub(Tmp3, Tmp1);
111 Value *Q_Sgn = Builder.CreateXor(Tmp1, Tmp);
112 Value *Q_Mag = Builder.CreateUDiv(U_Dvnd, U_Dvsr);
113 Value *Tmp4 = Builder.CreateXor(Q_Mag, Q_Sgn);
114 Value *Q = Builder.CreateSub(Tmp4, Q_Sgn);
117 Builder.SetInsertPoint(UDiv);
123 /// quotient, rounded towards 0. Builder's insert point should be pointing where
126 IRBuilder<> &Builder) {
132 IntegerType *I32Ty = Builder.getInt32Ty();
134 ConstantInt *Zero = Builder.getInt32(0);
135 ConstantInt *One = Builder.getInt32(1);
136 ConstantInt *ThirtyOne = Builder.getInt32(31);
138 ConstantInt *True = Builder.getTrue();
140 BasicBlock *IBB = Builder.GetInsertBlock();
177 BasicBlock *SpecialCases = Builder.GetInsertBlock();
179 BasicBlock *End = SpecialCases->splitBasicBlock(Builder.GetInsertPoint(),
181 BasicBlock *LoopExit = BasicBlock::Create(Builder.getContext(),
183 BasicBlock *DoWhile = BasicBlock::Create(Builder.getContext(),
185 BasicBlock *Preheader = BasicBlock::Create(Builder.getContext(),
187 BasicBlock *BB1 = BasicBlock::Create(Builder.getContext(),
208 Builder.SetInsertPoint(SpecialCases);
209 Value *Ret0_1 = Builder.CreateICmpEQ(Divisor, Zero);
210 Value *Ret0_2 = Builder.CreateICmpEQ(Dividend, Zero);
211 Value *Ret0_3 = Builder.CreateOr(Ret0_1, Ret0_2);
212 Value *Tmp0 = Builder.CreateCall2(CTLZi32, Divisor, True);
213 Value *Tmp1 = Builder.CreateCall2(CTLZi32, Dividend, True);
214 Value *SR = Builder.CreateSub(Tmp0, Tmp1);
215 Value *Ret0_4 = Builder.CreateICmpUGT(SR, ThirtyOne);
216 Value *Ret0 = Builder.CreateOr(Ret0_3, Ret0_4);
217 Value *RetDividend = Builder.CreateICmpEQ(SR, ThirtyOne);
218 Value *RetVal = Builder.CreateSelect(Ret0, Zero, Dividend);
219 Value *EarlyRet = Builder.CreateOr(Ret0, RetDividend);
220 Builder.CreateCondBr(EarlyRet, End, BB1);
228 Builder.SetInsertPoint(BB1);
229 Value *SR_1 = Builder.CreateAdd(SR, One);
230 Value *Tmp2 = Builder.CreateSub(ThirtyOne, SR);
231 Value *Q = Builder.CreateShl(Dividend, Tmp2);
232 Value *SkipLoop = Builder.CreateICmpEQ(SR_1, Zero);
233 Builder.CreateCondBr(SkipLoop, LoopExit, Preheader);
239 Builder.SetInsertPoint(Preheader);
240 Value *Tmp3 = Builder.CreateLShr(Dividend, SR_1);
241 Value *Tmp4 = Builder.CreateAdd(Divisor, NegOne);
242 Builder.CreateBr(DoWhile);
262 Builder.SetInsertPoint(DoWhile);
263 PHINode *Carry_1 = Builder.CreatePHI(I32Ty, 2);
264 PHINode *SR_3 = Builder.CreatePHI(I32Ty, 2);
265 PHINode *R_1 = Builder.CreatePHI(I32Ty, 2);
266 PHINode *Q_2 = Builder.CreatePHI(I32Ty, 2);
267 Value *Tmp5 = Builder.CreateShl(R_1, One);
268 Value *Tmp6 = Builder.CreateLShr(Q_2, ThirtyOne);
269 Value *Tmp7 = Builder.CreateOr(Tmp5, Tmp6);
270 Value *Tmp8 = Builder.CreateShl(Q_2, One);
271 Value *Q_1 = Builder.CreateOr(Carry_1, Tmp8);
272 Value *Tmp9 = Builder.CreateSub(Tmp4, Tmp7);
273 Value *Tmp10 = Builder.CreateAShr(Tmp9, 31);
274 Value *Carry = Builder.CreateAnd(Tmp10, One);
275 Value *Tmp11 = Builder.CreateAnd(Tmp10, Divisor);
276 Value *R = Builder.CreateSub(Tmp7, Tmp11);
277 Value *SR_2 = Builder.CreateAdd(SR_3, NegOne);
278 Value *Tmp12 = Builder.CreateICmpEQ(SR_2, Zero);
279 Builder.CreateCondBr(Tmp12, LoopExit, DoWhile);
287 Builder.SetInsertPoint(LoopExit);
288 PHINode *Carry_2 = Builder.CreatePHI(I32Ty, 2);
289 PHINode *Q_3 = Builder.CreatePHI(I32Ty, 2);
290 Value *Tmp13 = Builder.CreateShl(Q_3, One);
291 Value *Q_4 = Builder.CreateOr(Carry_2, Tmp13);
292 Builder.CreateBr(End);
297 Builder.SetInsertPoint(End, End->begin());
298 PHINode *Q_5 = Builder.CreatePHI(I32Ty, 2);
339 IRBuilder<> Builder(Rem);
344 Rem->getOperand(1), Builder);
351 BinaryOperator *BO = dyn_cast<BinaryOperator>(Builder.GetInsertPoint());
360 Builder);
367 if (BinaryOperator *UDiv = dyn_cast<BinaryOperator>(Builder.GetInsertPoint())) {
389 IRBuilder<> Builder(Div);
398 Div->getOperand(1), Builder);
404 BinaryOperator *BO = dyn_cast<BinaryOperator>(Builder.GetInsertPoint());
414 Builder);