Lines Matching full:builder

30 static Value *fitArgInto64Bits(IRBuilder<> &Builder, Value *Arg) {
31 auto Int64Ty = Builder.getInt64Ty();
37 return Builder.CreateZExt(Arg, Int64Ty);
44 return Builder.CreateBitCast(Arg, Int64Ty);
48 return Builder.CreatePtrToInt(Arg, Int64Ty);
54 static Value *callPrintfBegin(IRBuilder<> &Builder, Value *Version) {
55 auto Int64Ty = Builder.getInt64Ty();
56 auto M = Builder.GetInsertBlock()->getModule();
58 return Builder.CreateCall(Fn, Version);
61 static Value *callAppendArgs(IRBuilder<> &Builder, Value *Desc, int NumArgs,
65 auto Int64Ty = Builder.getInt64Ty();
66 auto Int32Ty = Builder.getInt32Ty();
67 auto M = Builder.GetInsertBlock()->getModule();
71 auto IsLastValue = Builder.getInt32(IsLast);
72 auto NumArgsValue = Builder.getInt32(NumArgs);
73 return Builder.CreateCall(Fn, {Desc, NumArgsValue, Arg0, Arg1, Arg2, Arg3,
77 static Value *appendArg(IRBuilder<> &Builder, Value *Desc, Value *Arg,
79 auto Arg0 = fitArgInto64Bits(Builder, Arg);
80 auto Zero = Builder.getInt64(0);
81 return callAppendArgs(Builder, Desc, 1, Arg0, Zero, Zero, Zero, Zero, Zero,
87 static Value *getStrlenWithNull(IRBuilder<> &Builder, Value *Str) {
88 auto *Prev = Builder.GetInsertBlock();
91 auto CharZero = Builder.getInt8(0);
92 auto One = Builder.getInt64(1);
93 auto Zero = Builder.getInt64(0);
94 auto Int64Ty = Builder.getInt64Ty();
104 Join = Prev->splitBasicBlock(Builder.GetInsertPoint(),
119 Builder.SetInsertPoint(Prev);
121 Builder.CreateICmpEQ(Str, Constant::getNullValue(Str->getType()));
125 Builder.SetInsertPoint(While);
127 auto PtrPhi = Builder.CreatePHI(Str->getType(), 2);
129 auto PtrNext = Builder.CreateGEP(Builder.getInt8Ty(), PtrPhi, One);
133 auto Data = Builder.CreateLoad(Builder.getInt8Ty(), PtrPhi);
134 auto Cmp = Builder.CreateICmpEQ(Data, CharZero);
135 Builder.CreateCondBr(Cmp, WhileDone, While);
138 Builder.SetInsertPoint(WhileDone, WhileDone->begin());
139 auto Begin = Builder.CreatePtrToInt(Str, Int64Ty);
140 auto End = Builder.CreatePtrToInt(PtrPhi, Int64Ty);
141 auto Len = Builder.CreateSub(End, Begin);
142 Len = Builder.CreateAdd(Len, One);
146 Builder.SetInsertPoint(Join, Join->begin());
147 auto LenPhi = Builder.CreatePHI(Len->getType(), 2);
154 static Value *callAppendStringN(IRBuilder<> &Builder, Value *Desc, Value *Str,
156 auto Int64Ty = Builder.getInt64Ty();
157 auto IsLastInt32 = Builder.getInt32(isLast);
158 auto M = Builder.GetInsertBlock()->getModule();
162 return Builder.CreateCall(Fn, {Desc, Str, Length, IsLastInt32});
165 static Value *appendString(IRBuilder<> &Builder, Value *Desc, Value *Arg,
167 auto Length = getStrlenWithNull(Builder, Arg);
168 return callAppendStringN(Builder, Desc, Arg, Length, IsLast);
171 static Value *processArg(IRBuilder<> &Builder, Value *Desc, Value *Arg,
174 return appendString(Builder, Desc, Arg, IsLast);
179 return appendArg(Builder, Desc, Arg, IsLast);
223 IRBuilder<> &Builder, ArrayRef<Value *> Args, Value *Fmt,
226 Module *M = Builder.GetInsertBlock()->getModule();
238 LenWithNull = getStrlenWithNull(Builder, Fmt);
241 TempAdd = Builder.CreateAdd(LenWithNull,
243 NonConstStrLen = Builder.CreateAnd(
260 LenWithNull = getStrlenWithNull(Builder, Args[i]);
263 TempAdd = Builder.CreateAdd(
265 LenWithNullAligned = Builder.CreateAnd(
269 auto Val = Builder.CreateAdd(LenWithNullAligned, NonConstStrLen,
287 Value *SizeToReserve = ConstantInt::get(Builder.getInt64Ty(), BufSize, false);
290 SizeToReserve = Builder.CreateAdd(NonConstStrLen, SizeToReserve);
292 ArgSize = Builder.CreateTrunc(SizeToReserve, Builder.getInt32Ty());
297 Builder.getContext(), AttributeList::FunctionIndex, Attribute::NoUnwind);
299 Type *Tys_alloc[1] = {Builder.getInt32Ty()};
301 Builder.getPtrTy(M->getDataLayout().getDefaultGlobalsAddressSpace());
306 return Builder.CreateCall(PrintfAllocFn, Alloc_args, "printf_alloc_fn");
310 static void processConstantStringArg(StringData *SD, IRBuilder<> &Builder,
344 Type *IntTy = Type::getIntNTy(Builder.getContext(), IntVal.getBitWidth());
350 WhatToStore.push_back(ConstantInt::get(Builder.getInt32Ty(), 0));
353 static Value *processNonStringArg(Value *Arg, IRBuilder<> &Builder) {
354 const DataLayout &DL = Builder.GetInsertBlock()->getDataLayout();
359 return Builder.CreateZExt(Arg, Builder.getInt64Ty());
365 return Builder.CreateFPExt(Arg, Builder.getDoubleTy());
373 callBufferedPrintfArgPush(IRBuilder<> &Builder, ArrayRef<Value *> Args,
377 Module *M = Builder.GetInsertBlock()->getModule();
385 processConstantStringArg(StrIt, Builder, WhatToStore);
393 Builder.CreateMemCpy(PtrToStore, /*DstAlign*/ Align(1), Args[i],
398 Builder.CreateInBoundsGEP(Builder.getInt8Ty(), PtrToStore,
408 WhatToStore.push_back(processNonStringArg(Args[i], Builder));
412 StoreInst *StBuff = Builder.CreateStore(toStore, PtrToStore);
416 PtrToStore = Builder.CreateConstInBoundsGEP1_32(
417 Builder.getInt8Ty(), PtrToStore,
426 Value *llvm::emitAMDGPUPrintfCall(IRBuilder<> &Builder, ArrayRef<Value *> Args,
440 Module *M = Builder.GetInsertBlock()->getModule();
441 LLVMContext &Ctx = Builder.getContext();
442 auto Int8Ty = Builder.getInt8Ty();
443 auto Int32Ty = Builder.getInt32Ty();
448 callBufferedPrintfStart(Builder, Args, Fmt, IsConstFmtStr,
456 auto *Cmp = cast<ICmpInst>(Builder.CreateICmpNE(Ptr, zeroIntPtr, ""));
459 Builder.GetInsertBlock()->getParent());
461 Ctx, "argpush.block", Builder.GetInsertBlock()->getParent());
463 BranchInst::Create(ArgPush, End, Cmp, Builder.GetInsertBlock());
464 Builder.SetInsertPoint(ArgPush);
470 auto ConstantTwo = Builder.getInt32(2);
471 auto ControlDWord = Builder.CreateShl(ArgSize, ConstantTwo);
473 ControlDWord = Builder.CreateOr(ControlDWord, ConstantTwo);
475 Builder.CreateStore(ControlDWord, Ptr);
477 Ptr = Builder.CreateConstInBoundsGEP1_32(Int8Ty, Ptr, 4);
497 Builder.CreateStore(Builder.getInt64(Hash.low()), Ptr);
498 Ptr = Builder.CreateConstInBoundsGEP1_32(Int8Ty, Ptr, 8);
512 callBufferedPrintfArgPush(Builder, Args, Ptr, SpecIsCString, StringContents,
517 Builder.SetInsertPoint(End);
518 return Builder.CreateSExt(Builder.CreateNot(Cmp), Int32Ty, "printf_result");
521 auto Desc = callPrintfBegin(Builder, Builder.getIntN(64, 0));
522 Desc = appendString(Builder, Desc, Fmt, NumOps == 1);
530 Desc = processArg(Builder, Desc, Args[i], IsCString, IsLast);
533 return Builder.CreateTrunc(Desc, Builder.getInt32Ty());