1 /*========================== begin_copyright_notice ============================
2 
3 Copyright (C) 2018-2021 Intel Corporation
4 
5 SPDX-License-Identifier: MIT
6 
7 ============================= end_copyright_notice ===========================*/
8 
9 //
10 // @file gen_builder.hpp
11 //
12 // @brief auto-generated file
13 //
14 // DO NOT EDIT
15 //
16 // Generation Command Line:
17 //  gen_llvm_ir_macros.py
18 //    --input
19 //    /cygdrive/d/cm-llvm/llvm/include/llvm/IR/IRBuilder.h
20 //    --output-dir
21 //    .
22 //    --gen_h
23 //    --gen_meta_h
24 //    --gen_intrin_h
25 //
26 //============================================================================
27 // clang-format off
28 #pragma once
29 
30 //============================================================================
31 // Auto-generated Builder IR Wrappers
32 //============================================================================
GLOBAL_STRING(StringRef Str,const Twine & Name="",unsigned AddressSpace=0)33 GlobalVariable* GLOBAL_STRING(StringRef Str, const Twine &Name = "", unsigned AddressSpace = 0)
34 {
35     return IRB()->CreateGlobalString(Str, Name, AddressSpace);
36 }
37 
MEMSET(Value * Ptr,Value * Val,uint64_t Size,unsigned Align,bool isVolatile=false,MDNode * TBAATag=nullptr,MDNode * ScopeTag=nullptr,MDNode * NoAliasTag=nullptr)38 CallInst* MEMSET(Value *Ptr, Value *Val, uint64_t Size, unsigned Align, bool isVolatile = false, MDNode *TBAATag = nullptr, MDNode *ScopeTag = nullptr, MDNode *NoAliasTag = nullptr)
39 {
40     return IRB()->CreateMemSet(Ptr, Val, Size, IGCLLVM::getCorrectAlign(Align), isVolatile, TBAATag, ScopeTag, NoAliasTag);
41 }
42 
MEMSET(Value * Ptr,Value * Val,Value * Size,unsigned Align,bool isVolatile=false,MDNode * TBAATag=nullptr,MDNode * ScopeTag=nullptr,MDNode * NoAliasTag=nullptr)43 CallInst* MEMSET(Value *Ptr, Value *Val, Value *Size, unsigned Align, bool isVolatile = false, MDNode *TBAATag = nullptr, MDNode *ScopeTag = nullptr, MDNode *NoAliasTag = nullptr)
44 {
45     return IRB()->CreateMemSet(Ptr, Val, Size, IGCLLVM::getCorrectAlign(Align), isVolatile, TBAATag, ScopeTag, NoAliasTag);
46 }
47 
MEMCOPY(Value * Dst,Value * Src,uint64_t Size,unsigned Align,bool isVolatile=false,MDNode * TBAATag=nullptr,MDNode * TBAAStructTag=nullptr,MDNode * ScopeTag=nullptr,MDNode * NoAliasTag=nullptr)48 CallInst* MEMCOPY(Value *Dst, Value *Src, uint64_t Size, unsigned Align, bool isVolatile = false, MDNode *TBAATag = nullptr, MDNode *TBAAStructTag = nullptr, MDNode *ScopeTag = nullptr, MDNode *NoAliasTag = nullptr)
49 {
50     return IRB()->CreateMemCpy(Dst, IGCLLVM::getCorrectAlign(Align), Src, IGCLLVM::getCorrectAlign(Align), Size, isVolatile, TBAATag, TBAAStructTag, ScopeTag, NoAliasTag);
51 }
52 
MEMCOPY(Value * Dst,Value * Src,Value * Size,unsigned Align,bool isVolatile=false,MDNode * TBAATag=nullptr,MDNode * TBAAStructTag=nullptr,MDNode * ScopeTag=nullptr,MDNode * NoAliasTag=nullptr)53 CallInst* MEMCOPY(Value *Dst, Value *Src, Value *Size, unsigned Align, bool isVolatile = false, MDNode *TBAATag = nullptr, MDNode *TBAAStructTag = nullptr, MDNode *ScopeTag = nullptr, MDNode *NoAliasTag = nullptr)
54 {
55     return IRB()->CreateMemCpy(Dst, IGCLLVM::getCorrectAlign(Align), Src, IGCLLVM::getCorrectAlign(Align), Size, isVolatile, TBAATag, TBAAStructTag, ScopeTag, NoAliasTag);
56 }
57 
ELEMENT_UNORDERED_ATOMIC_MEM_CPY(Value * Dst,unsigned DstAlign,Value * Src,unsigned SrcAlign,uint64_t Size,uint32_t ElementSize,MDNode * TBAATag=nullptr,MDNode * TBAAStructTag=nullptr,MDNode * ScopeTag=nullptr,MDNode * NoAliasTag=nullptr)58 CallInst* ELEMENT_UNORDERED_ATOMIC_MEM_CPY(Value *Dst, unsigned DstAlign, Value *Src, unsigned SrcAlign, uint64_t Size, uint32_t ElementSize, MDNode *TBAATag = nullptr, MDNode *TBAAStructTag = nullptr, MDNode *ScopeTag = nullptr, MDNode *NoAliasTag = nullptr)
59 {
60     return IRB()->CreateElementUnorderedAtomicMemCpy(Dst, IGCLLVM::getAlignmentValueIfNeeded(IGCLLVM::getAlign(DstAlign)), Src, IGCLLVM::getAlignmentValueIfNeeded(IGCLLVM::getAlign(SrcAlign)), IRB()->getInt64(Size), ElementSize, TBAATag, TBAAStructTag, ScopeTag, NoAliasTag);
61 }
62 
ELEMENT_UNORDERED_ATOMIC_MEM_CPY(Value * Dst,unsigned DstAlign,Value * Src,unsigned SrcAlign,Value * Size,uint32_t ElementSize,MDNode * TBAATag=nullptr,MDNode * TBAAStructTag=nullptr,MDNode * ScopeTag=nullptr,MDNode * NoAliasTag=nullptr)63 CallInst* ELEMENT_UNORDERED_ATOMIC_MEM_CPY(Value *Dst, unsigned DstAlign, Value *Src, unsigned SrcAlign, Value *Size, uint32_t ElementSize, MDNode *TBAATag = nullptr, MDNode *TBAAStructTag = nullptr, MDNode *ScopeTag = nullptr, MDNode *NoAliasTag = nullptr)
64 {
65     return IRB()->CreateElementUnorderedAtomicMemCpy(Dst, IGCLLVM::getAlignmentValueIfNeeded(IGCLLVM::getAlign(DstAlign)), Src, IGCLLVM::getAlignmentValueIfNeeded(IGCLLVM::getAlign(SrcAlign)), Size, ElementSize, TBAATag, TBAAStructTag, ScopeTag, NoAliasTag);
66 }
67 
MEMMOVE(Value * Dst,Value * Src,uint64_t Size,unsigned Align,bool isVolatile=false,MDNode * TBAATag=nullptr,MDNode * ScopeTag=nullptr,MDNode * NoAliasTag=nullptr)68 CallInst* MEMMOVE(Value *Dst, Value *Src, uint64_t Size, unsigned Align, bool isVolatile = false, MDNode *TBAATag = nullptr, MDNode *ScopeTag = nullptr, MDNode *NoAliasTag = nullptr)
69 {
70     return IRB()->CreateMemMove(Dst, IGCLLVM::getCorrectAlign(Align), Src, IGCLLVM::getCorrectAlign(Align), Size, isVolatile, TBAATag, ScopeTag, NoAliasTag);
71 }
72 
MEMMOVE(Value * Dst,Value * Src,Value * Size,unsigned Align,bool isVolatile=false,MDNode * TBAATag=nullptr,MDNode * ScopeTag=nullptr,MDNode * NoAliasTag=nullptr)73 CallInst* MEMMOVE(Value *Dst, Value *Src, Value *Size, unsigned Align, bool isVolatile = false, MDNode *TBAATag = nullptr, MDNode *ScopeTag = nullptr, MDNode *NoAliasTag = nullptr)
74 {
75     return IRB()->CreateMemMove(Dst, IGCLLVM::getCorrectAlign(Align), Src, IGCLLVM::getCorrectAlign(Align), Size, isVolatile, TBAATag, ScopeTag, NoAliasTag);
76 }
77 
FADD_REDUCE(Value * Acc,Value * Src)78 CallInst* FADD_REDUCE(Value *Acc, Value *Src)
79 {
80     return IRB()->CreateFAddReduce(Acc, Src);
81 }
82 
FMUL_REDUCE(Value * Acc,Value * Src)83 CallInst* FMUL_REDUCE(Value *Acc, Value *Src)
84 {
85     return IRB()->CreateFMulReduce(Acc, Src);
86 }
87 
ADD_REDUCE(Value * Src)88 CallInst* ADD_REDUCE(Value *Src)
89 {
90     return IRB()->CreateAddReduce(Src);
91 }
92 
MUL_REDUCE(Value * Src)93 CallInst* MUL_REDUCE(Value *Src)
94 {
95     return IRB()->CreateMulReduce(Src);
96 }
97 
AND_REDUCE(Value * Src)98 CallInst* AND_REDUCE(Value *Src)
99 {
100     return IRB()->CreateAndReduce(Src);
101 }
102 
OR_REDUCE(Value * Src)103 CallInst* OR_REDUCE(Value *Src)
104 {
105     return IRB()->CreateOrReduce(Src);
106 }
107 
XOR_REDUCE(Value * Src)108 CallInst* XOR_REDUCE(Value *Src)
109 {
110     return IRB()->CreateXorReduce(Src);
111 }
112 
INT_MAX_REDUCE(Value * Src,bool IsSigned=false)113 CallInst* INT_MAX_REDUCE(Value *Src, bool IsSigned = false)
114 {
115     return IRB()->CreateIntMaxReduce(Src, IsSigned);
116 }
117 
INT_MIN_REDUCE(Value * Src,bool IsSigned=false)118 CallInst* INT_MIN_REDUCE(Value *Src, bool IsSigned = false)
119 {
120     return IRB()->CreateIntMinReduce(Src, IsSigned);
121 }
122 
FP_MAX_REDUCE(Value * Src)123 CallInst* FP_MAX_REDUCE(Value *Src)
124 {
125     return IRB()->CreateFPMaxReduce(Src);
126 }
127 
FP_MIN_REDUCE(Value * Src)128 CallInst* FP_MIN_REDUCE(Value *Src)
129 {
130     return IRB()->CreateFPMinReduce(Src);
131 }
132 
LIFETIME_START(Value * Ptr,ConstantInt * Size=nullptr)133 CallInst* LIFETIME_START(Value *Ptr, ConstantInt *Size = nullptr)
134 {
135     return IRB()->CreateLifetimeStart(Ptr, Size);
136 }
137 
LIFETIME_END(Value * Ptr,ConstantInt * Size=nullptr)138 CallInst* LIFETIME_END(Value *Ptr, ConstantInt *Size = nullptr)
139 {
140     return IRB()->CreateLifetimeEnd(Ptr, Size);
141 }
142 
INVARIANT_START(Value * Ptr,ConstantInt * Size=nullptr)143 CallInst* INVARIANT_START(Value *Ptr, ConstantInt *Size = nullptr)
144 {
145     return IRB()->CreateInvariantStart(Ptr, Size);
146 }
147 
MASKED_STORE(Value * Val,Value * Ptr,unsigned Align,Value * Mask)148 CallInst* MASKED_STORE(Value *Val, Value *Ptr, unsigned Align, Value *Mask)
149 {
150     return IRB()->CreateMaskedStore(Val, Ptr, IGCLLVM::getAlignmentValueIfNeeded(IGCLLVM::getAlign(Align)), Mask);
151 }
152 
MASKED_GATHER(Value * Ptrs,unsigned Align,Value * Mask=nullptr,Value * PassThru=nullptr,const Twine & Name="")153 CallInst* MASKED_GATHER(Value *Ptrs, unsigned Align, Value *Mask = nullptr, Value *PassThru = nullptr, const Twine& Name = "")
154 {
155     return IRB()->CreateMaskedGather(Ptrs, IGCLLVM::getAlignmentValueIfNeeded(IGCLLVM::getAlign(Align)), Mask, PassThru, Name);
156 }
157 
MASKED_SCATTER(Value * Val,Value * Ptrs,unsigned Align,Value * Mask=nullptr)158 CallInst* MASKED_SCATTER(Value *Val, Value *Ptrs, unsigned Align, Value *Mask = nullptr)
159 {
160     return IRB()->CreateMaskedScatter(Val, Ptrs, IGCLLVM::getAlignmentValueIfNeeded(IGCLLVM::getAlign(Align)), Mask);
161 }
162 
ASSUMPTION(Value * Cond)163 CallInst* ASSUMPTION(Value *Cond)
164 {
165     return IRB()->CreateAssumption(Cond);
166 }
167 
BINARY_INTRINSIC(Intrinsic::ID ID,Value * LHS,Value * RHS,const Twine & Name="")168 CallInst* BINARY_INTRINSIC(Intrinsic::ID ID, Value *LHS, Value *RHS, const Twine &Name = "")
169 {
170     return IRB()->CreateBinaryIntrinsic(ID, LHS, RHS, nullptr, Name);
171 }
172 
MIN_NUM(Value * LHS,Value * RHS,const Twine & Name="")173 CallInst* MIN_NUM(Value *LHS, Value *RHS, const Twine &Name = "")
174 {
175     return IRB()->CreateMinNum(LHS, RHS, Name);
176 }
177 
MAX_NUM(Value * LHS,Value * RHS,const Twine & Name="")178 CallInst* MAX_NUM(Value *LHS, Value *RHS, const Twine &Name = "")
179 {
180     return IRB()->CreateMaxNum(LHS, RHS, Name);
181 }
182 
RET_VOID()183 ReturnInst* RET_VOID()
184 {
185     return IRB()->CreateRetVoid();
186 }
187 
RET(Value * V)188 ReturnInst* RET(Value *V)
189 {
190     return IRB()->CreateRet(V);
191 }
192 
AGGREGATE_RET(Value * const * retVals,unsigned N)193 ReturnInst* AGGREGATE_RET(Value *const *retVals, unsigned N)
194 {
195     return IRB()->CreateAggregateRet(retVals, N);
196 }
197 
BR(BasicBlock * Dest)198 BranchInst* BR(BasicBlock *Dest)
199 {
200     return IRB()->CreateBr(Dest);
201 }
202 
COND_BR(Value * Cond,BasicBlock * True,BasicBlock * False,MDNode * BranchWeights=nullptr,MDNode * Unpredictable=nullptr)203 BranchInst* COND_BR(Value *Cond, BasicBlock *True, BasicBlock *False, MDNode *BranchWeights = nullptr, MDNode *Unpredictable = nullptr)
204 {
205     return IRB()->CreateCondBr(Cond, True, False, BranchWeights, Unpredictable);
206 }
207 
COND_BR(Value * Cond,BasicBlock * True,BasicBlock * False,Instruction * MDSrc)208 BranchInst* COND_BR(Value *Cond, BasicBlock *True, BasicBlock *False, Instruction *MDSrc)
209 {
210     return IRB()->CreateCondBr(Cond, True, False, MDSrc);
211 }
212 
SWITCH(Value * V,BasicBlock * Dest,unsigned NumCases=10,MDNode * BranchWeights=nullptr,MDNode * Unpredictable=nullptr)213 SwitchInst* SWITCH(Value *V, BasicBlock *Dest, unsigned NumCases = 10, MDNode *BranchWeights = nullptr, MDNode *Unpredictable = nullptr)
214 {
215     return IRB()->CreateSwitch(V, Dest, NumCases, BranchWeights, Unpredictable);
216 }
217 
INDIRECT_BR(Value * Addr,unsigned NumDests=10)218 IndirectBrInst* INDIRECT_BR(Value *Addr, unsigned NumDests = 10)
219 {
220     return IRB()->CreateIndirectBr(Addr, NumDests);
221 }
222 
INVOKE(Value * Callee,BasicBlock * NormalDest,BasicBlock * UnwindDest,ArrayRef<Value * > Args=None,const Twine & Name="")223 InvokeInst* INVOKE(Value *Callee, BasicBlock *NormalDest, BasicBlock *UnwindDest, ArrayRef<Value *> Args = None, const Twine &Name = "")
224 {
225 #if LLVM_VERSION_MAJOR >= 11
226     auto *PTy = cast<PointerType>(Callee->getType());
227     auto *FTy = cast<FunctionType>(PTy->getElementType());
228 #endif
229     return IRB()->CreateInvoke(
230 #if LLVM_VERSION_MAJOR >= 11
231 	    FTy,
232 #endif
233 	    Callee, NormalDest, UnwindDest, Args, Name);
234 }
235 
INVOKE(Value * Callee,BasicBlock * NormalDest,BasicBlock * UnwindDest,ArrayRef<Value * > Args,ArrayRef<OperandBundleDef> OpBundles,const Twine & Name="")236 InvokeInst* INVOKE(Value *Callee, BasicBlock *NormalDest, BasicBlock *UnwindDest, ArrayRef<Value *> Args, ArrayRef<OperandBundleDef> OpBundles, const Twine &Name = "")
237 {
238 #if LLVM_VERSION_MAJOR >= 11
239     auto *PTy = cast<PointerType>(Callee->getType());
240     auto *FTy = cast<FunctionType>(PTy->getElementType());
241 #endif
242     return IRB()->CreateInvoke(
243 #if LLVM_VERSION_MAJOR >= 11
244 	    FTy,
245 #endif
246 	    Callee, NormalDest, UnwindDest, Args, OpBundles, Name);
247 }
248 
RESUME(Value * Exn)249 ResumeInst* RESUME(Value *Exn)
250 {
251     return IRB()->CreateResume(Exn);
252 }
253 
CLEANUP_RET(CleanupPadInst * CleanupPad,BasicBlock * UnwindBB=nullptr)254 CleanupReturnInst* CLEANUP_RET(CleanupPadInst *CleanupPad, BasicBlock *UnwindBB = nullptr)
255 {
256     return IRB()->CreateCleanupRet(CleanupPad, UnwindBB);
257 }
258 
CATCH_SWITCH(Value * ParentPad,BasicBlock * UnwindBB,unsigned NumHandlers,const Twine & Name="")259 CatchSwitchInst* CATCH_SWITCH(Value *ParentPad, BasicBlock *UnwindBB, unsigned NumHandlers, const Twine &Name = "")
260 {
261     return IRB()->CreateCatchSwitch(ParentPad, UnwindBB, NumHandlers, Name);
262 }
263 
CATCH_PAD(Value * ParentPad,ArrayRef<Value * > Args,const Twine & Name="")264 CatchPadInst* CATCH_PAD(Value *ParentPad, ArrayRef<Value *> Args, const Twine &Name = "")
265 {
266     return IRB()->CreateCatchPad(ParentPad, Args, Name);
267 }
268 
CLEANUP_PAD(Value * ParentPad,ArrayRef<Value * > Args=None,const Twine & Name="")269 CleanupPadInst* CLEANUP_PAD(Value *ParentPad, ArrayRef<Value *> Args = None, const Twine &Name = "")
270 {
271     return IRB()->CreateCleanupPad(ParentPad, Args, Name);
272 }
273 
CATCH_RET(CatchPadInst * CatchPad,BasicBlock * BB)274 CatchReturnInst* CATCH_RET(CatchPadInst *CatchPad, BasicBlock *BB)
275 {
276     return IRB()->CreateCatchRet(CatchPad, BB);
277 }
278 
UNREACHABLE()279 UnreachableInst* UNREACHABLE()
280 {
281     return IRB()->CreateUnreachable();
282 }
283 
ADD(Value * LHS,Value * RHS,const Twine & Name="",bool HasNUW=false,bool HasNSW=false)284 Value* ADD(Value *LHS, Value *RHS, const Twine &Name = "", bool HasNUW = false, bool HasNSW = false)
285 {
286     return IRB()->CreateAdd(LHS, RHS, Name, HasNUW, HasNSW);
287 }
288 
NSW_ADD(Value * LHS,Value * RHS,const Twine & Name="")289 Value* NSW_ADD(Value *LHS, Value *RHS, const Twine &Name = "")
290 {
291     return IRB()->CreateNSWAdd(LHS, RHS, Name);
292 }
293 
NUW_ADD(Value * LHS,Value * RHS,const Twine & Name="")294 Value* NUW_ADD(Value *LHS, Value *RHS, const Twine &Name = "")
295 {
296     return IRB()->CreateNUWAdd(LHS, RHS, Name);
297 }
298 
FADD(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)299 Value* FADD(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
300 {
301     return IRB()->CreateFAdd(LHS, RHS, Name, FPMathTag);
302 }
303 
SUB(Value * LHS,Value * RHS,const Twine & Name="",bool HasNUW=false,bool HasNSW=false)304 Value* SUB(Value *LHS, Value *RHS, const Twine &Name = "", bool HasNUW = false, bool HasNSW = false)
305 {
306     return IRB()->CreateSub(LHS, RHS, Name, HasNUW, HasNSW);
307 }
308 
NSW_SUB(Value * LHS,Value * RHS,const Twine & Name="")309 Value* NSW_SUB(Value *LHS, Value *RHS, const Twine &Name = "")
310 {
311     return IRB()->CreateNSWSub(LHS, RHS, Name);
312 }
313 
NUW_SUB(Value * LHS,Value * RHS,const Twine & Name="")314 Value* NUW_SUB(Value *LHS, Value *RHS, const Twine &Name = "")
315 {
316     return IRB()->CreateNUWSub(LHS, RHS, Name);
317 }
318 
FSUB(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)319 Value* FSUB(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
320 {
321     return IRB()->CreateFSub(LHS, RHS, Name, FPMathTag);
322 }
323 
MUL(Value * LHS,Value * RHS,const Twine & Name="",bool HasNUW=false,bool HasNSW=false)324 Value* MUL(Value *LHS, Value *RHS, const Twine &Name = "", bool HasNUW = false, bool HasNSW = false)
325 {
326     return IRB()->CreateMul(LHS, RHS, Name, HasNUW, HasNSW);
327 }
328 
NSW_MUL(Value * LHS,Value * RHS,const Twine & Name="")329 Value* NSW_MUL(Value *LHS, Value *RHS, const Twine &Name = "")
330 {
331     return IRB()->CreateNSWMul(LHS, RHS, Name);
332 }
333 
NUW_MUL(Value * LHS,Value * RHS,const Twine & Name="")334 Value* NUW_MUL(Value *LHS, Value *RHS, const Twine &Name = "")
335 {
336     return IRB()->CreateNUWMul(LHS, RHS, Name);
337 }
338 
FMUL(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)339 Value* FMUL(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
340 {
341     return IRB()->CreateFMul(LHS, RHS, Name, FPMathTag);
342 }
343 
UDIV(Value * LHS,Value * RHS,const Twine & Name="",bool isExact=false)344 Value* UDIV(Value *LHS, Value *RHS, const Twine &Name = "", bool isExact = false)
345 {
346     return IRB()->CreateUDiv(LHS, RHS, Name, isExact);
347 }
348 
EXACT_U_DIV(Value * LHS,Value * RHS,const Twine & Name="")349 Value* EXACT_U_DIV(Value *LHS, Value *RHS, const Twine &Name = "")
350 {
351     return IRB()->CreateExactUDiv(LHS, RHS, Name);
352 }
353 
SDIV(Value * LHS,Value * RHS,const Twine & Name="",bool isExact=false)354 Value* SDIV(Value *LHS, Value *RHS, const Twine &Name = "", bool isExact = false)
355 {
356     return IRB()->CreateSDiv(LHS, RHS, Name, isExact);
357 }
358 
EXACT_S_DIV(Value * LHS,Value * RHS,const Twine & Name="")359 Value* EXACT_S_DIV(Value *LHS, Value *RHS, const Twine &Name = "")
360 {
361     return IRB()->CreateExactSDiv(LHS, RHS, Name);
362 }
363 
FDIV(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)364 Value* FDIV(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
365 {
366     return IRB()->CreateFDiv(LHS, RHS, Name, FPMathTag);
367 }
368 
UREM(Value * LHS,Value * RHS,const Twine & Name="")369 Value* UREM(Value *LHS, Value *RHS, const Twine &Name = "")
370 {
371     return IRB()->CreateURem(LHS, RHS, Name);
372 }
373 
SREM(Value * LHS,Value * RHS,const Twine & Name="")374 Value* SREM(Value *LHS, Value *RHS, const Twine &Name = "")
375 {
376     return IRB()->CreateSRem(LHS, RHS, Name);
377 }
378 
FREM(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)379 Value* FREM(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
380 {
381     return IRB()->CreateFRem(LHS, RHS, Name, FPMathTag);
382 }
383 
SHL(Value * LHS,Value * RHS,const Twine & Name="",bool HasNUW=false,bool HasNSW=false)384 Value* SHL(Value *LHS, Value *RHS, const Twine &Name = "", bool HasNUW = false, bool HasNSW = false)
385 {
386     return IRB()->CreateShl(LHS, RHS, Name, HasNUW, HasNSW);
387 }
388 
SHL(Value * LHS,const APInt & RHS,const Twine & Name="",bool HasNUW=false,bool HasNSW=false)389 Value* SHL(Value *LHS, const APInt &RHS, const Twine &Name = "", bool HasNUW = false, bool HasNSW = false)
390 {
391     return IRB()->CreateShl(LHS, RHS, Name, HasNUW, HasNSW);
392 }
393 
SHL(Value * LHS,uint64_t RHS,const Twine & Name="",bool HasNUW=false,bool HasNSW=false)394 Value* SHL(Value *LHS, uint64_t RHS, const Twine &Name = "", bool HasNUW = false, bool HasNSW = false)
395 {
396     return IRB()->CreateShl(LHS, RHS, Name, HasNUW, HasNSW);
397 }
398 
LSHR(Value * LHS,Value * RHS,const Twine & Name="",bool isExact=false)399 Value* LSHR(Value *LHS, Value *RHS, const Twine &Name = "", bool isExact = false)
400 {
401     return IRB()->CreateLShr(LHS, RHS, Name, isExact);
402 }
403 
LSHR(Value * LHS,const APInt & RHS,const Twine & Name="",bool isExact=false)404 Value* LSHR(Value *LHS, const APInt &RHS, const Twine &Name = "", bool isExact = false)
405 {
406     return IRB()->CreateLShr(LHS, RHS, Name, isExact);
407 }
408 
LSHR(Value * LHS,uint64_t RHS,const Twine & Name="",bool isExact=false)409 Value* LSHR(Value *LHS, uint64_t RHS, const Twine &Name = "", bool isExact = false)
410 {
411     return IRB()->CreateLShr(LHS, RHS, Name, isExact);
412 }
413 
ASHR(Value * LHS,Value * RHS,const Twine & Name="",bool isExact=false)414 Value* ASHR(Value *LHS, Value *RHS, const Twine &Name = "", bool isExact = false)
415 {
416     return IRB()->CreateAShr(LHS, RHS, Name, isExact);
417 }
418 
ASHR(Value * LHS,const APInt & RHS,const Twine & Name="",bool isExact=false)419 Value* ASHR(Value *LHS, const APInt &RHS, const Twine &Name = "", bool isExact = false)
420 {
421     return IRB()->CreateAShr(LHS, RHS, Name, isExact);
422 }
423 
ASHR(Value * LHS,uint64_t RHS,const Twine & Name="",bool isExact=false)424 Value* ASHR(Value *LHS, uint64_t RHS, const Twine &Name = "", bool isExact = false)
425 {
426     return IRB()->CreateAShr(LHS, RHS, Name, isExact);
427 }
428 
AND(Value * LHS,Value * RHS,const Twine & Name="")429 Value* AND(Value *LHS, Value *RHS, const Twine &Name = "")
430 {
431     return IRB()->CreateAnd(LHS, RHS, Name);
432 }
433 
AND(Value * LHS,const APInt & RHS,const Twine & Name="")434 Value* AND(Value *LHS, const APInt &RHS, const Twine &Name = "")
435 {
436     return IRB()->CreateAnd(LHS, RHS, Name);
437 }
438 
AND(Value * LHS,uint64_t RHS,const Twine & Name="")439 Value* AND(Value *LHS, uint64_t RHS, const Twine &Name = "")
440 {
441     return IRB()->CreateAnd(LHS, RHS, Name);
442 }
443 
OR(Value * LHS,Value * RHS,const Twine & Name="")444 Value* OR(Value *LHS, Value *RHS, const Twine &Name = "")
445 {
446     return IRB()->CreateOr(LHS, RHS, Name);
447 }
448 
OR(Value * LHS,const APInt & RHS,const Twine & Name="")449 Value* OR(Value *LHS, const APInt &RHS, const Twine &Name = "")
450 {
451     return IRB()->CreateOr(LHS, RHS, Name);
452 }
453 
OR(Value * LHS,uint64_t RHS,const Twine & Name="")454 Value* OR(Value *LHS, uint64_t RHS, const Twine &Name = "")
455 {
456     return IRB()->CreateOr(LHS, RHS, Name);
457 }
458 
XOR(Value * LHS,Value * RHS,const Twine & Name="")459 Value* XOR(Value *LHS, Value *RHS, const Twine &Name = "")
460 {
461     return IRB()->CreateXor(LHS, RHS, Name);
462 }
463 
XOR(Value * LHS,const APInt & RHS,const Twine & Name="")464 Value* XOR(Value *LHS, const APInt &RHS, const Twine &Name = "")
465 {
466     return IRB()->CreateXor(LHS, RHS, Name);
467 }
468 
XOR(Value * LHS,uint64_t RHS,const Twine & Name="")469 Value* XOR(Value *LHS, uint64_t RHS, const Twine &Name = "")
470 {
471     return IRB()->CreateXor(LHS, RHS, Name);
472 }
473 
BINOP(Instruction::BinaryOps Opc,Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)474 Value* BINOP(Instruction::BinaryOps Opc, Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
475 {
476     return IRB()->CreateBinOp(Opc, LHS, RHS, Name, FPMathTag);
477 }
478 
NEG(Value * V,const Twine & Name="",bool HasNUW=false,bool HasNSW=false)479 Value* NEG(Value *V, const Twine &Name = "", bool HasNUW = false, bool HasNSW = false)
480 {
481     return IRB()->CreateNeg(V, Name, HasNUW, HasNSW);
482 }
483 
NSW_NEG(Value * V,const Twine & Name="")484 Value* NSW_NEG(Value *V, const Twine &Name = "")
485 {
486     return IRB()->CreateNSWNeg(V, Name);
487 }
488 
NUW_NEG(Value * V,const Twine & Name="")489 Value* NUW_NEG(Value *V, const Twine &Name = "")
490 {
491     return IRB()->CreateNUWNeg(V, Name);
492 }
493 
FNEG(Value * V,const Twine & Name="",MDNode * FPMathTag=nullptr)494 Value* FNEG(Value *V, const Twine &Name = "", MDNode *FPMathTag = nullptr)
495 {
496     return IRB()->CreateFNeg(V, Name, FPMathTag);
497 }
498 
NOT(Value * V,const Twine & Name="")499 Value* NOT(Value *V, const Twine &Name = "")
500 {
501     return IRB()->CreateNot(V, Name);
502 }
503 
ALLOCA(Type * Ty,unsigned AddrSpace,Value * ArraySize=nullptr,const Twine & Name="")504 AllocaInst* ALLOCA(Type *Ty, unsigned AddrSpace, Value *ArraySize = nullptr, const Twine &Name = "")
505 {
506     return IRB()->CreateAlloca(Ty, ArraySize, Name, AddrSpace /* IGCLLVM wrapper interface */);
507 }
508 
ALLOCA(Type * Ty,Value * ArraySize=nullptr,const Twine & Name="")509 AllocaInst* ALLOCA(Type *Ty, Value *ArraySize = nullptr, const Twine &Name = "")
510 {
511     return IRB()->CreateAlloca(Ty, ArraySize, Name);
512 }
513 
STORE(Value * Val,Value * Ptr,bool isVolatile=false)514 StoreInst* STORE(Value *Val, Value *Ptr, bool isVolatile = false)
515 {
516     return IRB()->CreateStore(Val, Ptr, isVolatile);
517 }
518 
ALIGNED_LOAD(Value * Ptr,IGCLLVM::Align Align,const char * Name)519 inline LoadInst* ALIGNED_LOAD(Value *Ptr, IGCLLVM::Align Align, const char *Name)
520 {
521     return IRB()->CreateAlignedLoad(Ptr, Align, Name);
522 }
523 
ALIGNED_LOAD(Value * Ptr,IGCLLVM::Align Align,const Twine & Name="")524 inline LoadInst* ALIGNED_LOAD(Value *Ptr, IGCLLVM::Align Align, const Twine &Name = "")
525 {
526     return IRB()->CreateAlignedLoad(Ptr, Align, Name);
527 }
528 
ALIGNED_LOAD(Value * Ptr,IGCLLVM::Align Align,bool isVolatile,const Twine & Name="")529 inline LoadInst* ALIGNED_LOAD(Value *Ptr, IGCLLVM::Align Align, bool isVolatile, const Twine &Name = "")
530 {
531     return IRB()->CreateAlignedLoad(Ptr, Align, isVolatile, Name);
532 }
533 
ALIGNED_STORE(Value * Val,Value * Ptr,IGCLLVM::Align Align,bool isVolatile=false)534 inline StoreInst* ALIGNED_STORE(Value *Val, Value *Ptr, IGCLLVM::Align Align, bool isVolatile = false)
535 {
536     return IRB()->CreateAlignedStore(Val, Ptr, Align, isVolatile);
537 }
538 
FENCE(AtomicOrdering Ordering,SyncScope::ID SSID=SyncScope::System,const Twine & Name="")539 FenceInst* FENCE(AtomicOrdering Ordering, SyncScope::ID SSID = SyncScope::System, const Twine &Name = "")
540 {
541     return IRB()->CreateFence(Ordering, SSID, Name);
542 }
543 
ATOMIC_CMP_XCHG(Value * Ptr,Value * Cmp,Value * New,AtomicOrdering SuccessOrdering,AtomicOrdering FailureOrdering,SyncScope::ID SSID=SyncScope::System)544 AtomicCmpXchgInst* ATOMIC_CMP_XCHG(Value *Ptr, Value *Cmp, Value *New, AtomicOrdering SuccessOrdering, AtomicOrdering FailureOrdering, SyncScope::ID SSID = SyncScope::System)
545 {
546     return IRB()->CreateAtomicCmpXchg(Ptr, Cmp, New, SuccessOrdering, FailureOrdering, SSID);
547 }
548 
ATOMIC_RMW(AtomicRMWInst::BinOp Op,Value * Ptr,Value * Val,AtomicOrdering Ordering,SyncScope::ID SSID=SyncScope::System)549 AtomicRMWInst* ATOMIC_RMW(AtomicRMWInst::BinOp Op, Value *Ptr, Value *Val, AtomicOrdering Ordering, SyncScope::ID SSID = SyncScope::System)
550 {
551     return IRB()->CreateAtomicRMW(Op, Ptr, Val, Ordering, SSID);
552 }
553 
IN_BOUNDS_GEP(Value * Ptr,ArrayRef<Value * > IdxList,const Twine & Name="")554 Value* IN_BOUNDS_GEP(Value *Ptr, ArrayRef<Value *> IdxList, const Twine &Name = "")
555 {
556     return IRB()->CreateInBoundsGEP(Ptr, IdxList, Name);
557 }
558 
IN_BOUNDS_GEP(Type * Ty,Value * Ptr,ArrayRef<Value * > IdxList,const Twine & Name="")559 Value* IN_BOUNDS_GEP(Type *Ty, Value *Ptr, ArrayRef<Value *> IdxList, const Twine &Name = "")
560 {
561     return IRB()->CreateInBoundsGEP(Ty, Ptr, IdxList, Name);
562 }
563 
IN_BOUNDS_GEP(Type * Ty,Value * Ptr,Value * Idx,const Twine & Name="")564 Value* IN_BOUNDS_GEP(Type *Ty, Value *Ptr, Value *Idx, const Twine &Name = "")
565 {
566     return IRB()->CreateInBoundsGEP(Ty, Ptr, Idx, Name);
567 }
568 
CONST_GEP1_32(Type * Ty,Value * Ptr,unsigned Idx0,const Twine & Name="")569 Value* CONST_GEP1_32(Type *Ty, Value *Ptr, unsigned Idx0, const Twine &Name = "")
570 {
571     return IRB()->CreateConstGEP1_32(Ty, Ptr, Idx0, Name);
572 }
573 
CONST_IN_BOUNDS_GEP1_32(Type * Ty,Value * Ptr,unsigned Idx0,const Twine & Name="")574 Value* CONST_IN_BOUNDS_GEP1_32(Type *Ty, Value *Ptr, unsigned Idx0, const Twine &Name = "")
575 {
576     return IRB()->CreateConstInBoundsGEP1_32(Ty, Ptr, Idx0, Name);
577 }
578 
CONST_GEP2_32(Type * Ty,Value * Ptr,unsigned Idx0,unsigned Idx1,const Twine & Name="")579 Value* CONST_GEP2_32(Type *Ty, Value *Ptr, unsigned Idx0, unsigned Idx1, const Twine &Name = "")
580 {
581     return IRB()->CreateConstGEP2_32(Ty, Ptr, Idx0, Idx1, Name);
582 }
583 
CONST_IN_BOUNDS_GEP2_32(Type * Ty,Value * Ptr,unsigned Idx0,unsigned Idx1,const Twine & Name="")584 Value* CONST_IN_BOUNDS_GEP2_32(Type *Ty, Value *Ptr, unsigned Idx0, unsigned Idx1, const Twine &Name = "")
585 {
586     return IRB()->CreateConstInBoundsGEP2_32(Ty, Ptr, Idx0, Idx1, Name);
587 }
588 
CONST_GEP1_64(Type * Ty,Value * Ptr,uint64_t Idx0,const Twine & Name="")589 Value* CONST_GEP1_64(Type *Ty, Value *Ptr, uint64_t Idx0, const Twine &Name = "")
590 {
591     return IRB()->CreateConstGEP1_64(Ty, Ptr, Idx0, Name);
592 }
593 
CONST_IN_BOUNDS_GEP1_64(Type * Ty,Value * Ptr,uint64_t Idx0,const Twine & Name="")594 Value* CONST_IN_BOUNDS_GEP1_64(Type *Ty, Value *Ptr, uint64_t Idx0, const Twine &Name = "")
595 {
596     return IRB()->CreateConstInBoundsGEP1_64(Ty, Ptr, Idx0, Name);
597 }
598 
CONST_GEP2_64(Type * Ty,Value * Ptr,uint64_t Idx0,uint64_t Idx1,const Twine & Name="")599 Value* CONST_GEP2_64(Type *Ty, Value *Ptr, uint64_t Idx0, uint64_t Idx1, const Twine &Name = "")
600 {
601     return IRB()->CreateConstGEP2_64(Ty, Ptr, Idx0, Idx1, Name);
602 }
603 
CONST_IN_BOUNDS_GEP2_64(Type * Ty,Value * Ptr,uint64_t Idx0,uint64_t Idx1,const Twine & Name="")604 Value* CONST_IN_BOUNDS_GEP2_64(Type *Ty, Value *Ptr, uint64_t Idx0, uint64_t Idx1, const Twine &Name = "")
605 {
606     return IRB()->CreateConstInBoundsGEP2_64(Ty, Ptr, Idx0, Idx1, Name);
607 }
608 
STRUCT_GEP(Type * Ty,Value * Ptr,unsigned Idx,const Twine & Name="")609 Value* STRUCT_GEP(Type *Ty, Value *Ptr, unsigned Idx, const Twine &Name = "")
610 {
611     return IRB()->CreateStructGEP(Ty, Ptr, Idx, Name);
612 }
613 
GLOBAL_STRING_PTR(StringRef Str,const Twine & Name="",unsigned AddressSpace=0)614 Value* GLOBAL_STRING_PTR(StringRef Str, const Twine &Name = "", unsigned AddressSpace = 0)
615 {
616     return IRB()->CreateGlobalStringPtr(Str, Name, AddressSpace);
617 }
618 
TRUNC(Value * V,Type * DestTy,const Twine & Name="")619 Value* TRUNC(Value *V, Type *DestTy, const Twine &Name = "")
620 {
621     return IRB()->CreateTrunc(V, DestTy, Name);
622 }
623 
Z_EXT(Value * V,Type * DestTy,const Twine & Name="")624 Value* Z_EXT(Value *V, Type *DestTy, const Twine &Name = "")
625 {
626     return IRB()->CreateZExt(V, DestTy, Name);
627 }
628 
S_EXT(Value * V,Type * DestTy,const Twine & Name="")629 Value* S_EXT(Value *V, Type *DestTy, const Twine &Name = "")
630 {
631     return IRB()->CreateSExt(V, DestTy, Name);
632 }
633 
Z_EXT_OR_TRUNC(Value * V,Type * DestTy,const Twine & Name="")634 Value* Z_EXT_OR_TRUNC(Value *V, Type *DestTy, const Twine &Name = "")
635 {
636     return IRB()->CreateZExtOrTrunc(V, DestTy, Name);
637 }
638 
S_EXT_OR_TRUNC(Value * V,Type * DestTy,const Twine & Name="")639 Value* S_EXT_OR_TRUNC(Value *V, Type *DestTy, const Twine &Name = "")
640 {
641     return IRB()->CreateSExtOrTrunc(V, DestTy, Name);
642 }
643 
FP_TO_UI(Value * V,Type * DestTy,const Twine & Name="")644 Value* FP_TO_UI(Value *V, Type *DestTy, const Twine &Name = "")
645 {
646     return IRB()->CreateFPToUI(V, DestTy, Name);
647 }
648 
FP_TO_SI(Value * V,Type * DestTy,const Twine & Name="")649 Value* FP_TO_SI(Value *V, Type *DestTy, const Twine &Name = "")
650 {
651     return IRB()->CreateFPToSI(V, DestTy, Name);
652 }
653 
UI_TO_FP(Value * V,Type * DestTy,const Twine & Name="")654 Value* UI_TO_FP(Value *V, Type *DestTy, const Twine &Name = "")
655 {
656     return IRB()->CreateUIToFP(V, DestTy, Name);
657 }
658 
SI_TO_FP(Value * V,Type * DestTy,const Twine & Name="")659 Value* SI_TO_FP(Value *V, Type *DestTy, const Twine &Name = "")
660 {
661     return IRB()->CreateSIToFP(V, DestTy, Name);
662 }
663 
FP_TRUNC(Value * V,Type * DestTy,const Twine & Name="")664 Value* FP_TRUNC(Value *V, Type *DestTy, const Twine &Name = "")
665 {
666     return IRB()->CreateFPTrunc(V, DestTy, Name);
667 }
668 
FP_EXT(Value * V,Type * DestTy,const Twine & Name="")669 Value* FP_EXT(Value *V, Type *DestTy, const Twine &Name = "")
670 {
671     return IRB()->CreateFPExt(V, DestTy, Name);
672 }
673 
PTR_TO_INT(Value * V,Type * DestTy,const Twine & Name="")674 Value* PTR_TO_INT(Value *V, Type *DestTy, const Twine &Name = "")
675 {
676     return IRB()->CreatePtrToInt(V, DestTy, Name);
677 }
678 
INT_TO_PTR(Value * V,Type * DestTy,const Twine & Name="")679 Value* INT_TO_PTR(Value *V, Type *DestTy, const Twine &Name = "")
680 {
681     return IRB()->CreateIntToPtr(V, DestTy, Name);
682 }
683 
BITCAST(Value * V,Type * DestTy,const Twine & Name="")684 Value* BITCAST(Value *V, Type *DestTy, const Twine &Name = "")
685 {
686     return IRB()->CreateBitCast(V, DestTy, Name);
687 }
688 
ADDR_SPACE_CAST(Value * V,Type * DestTy,const Twine & Name="")689 Value* ADDR_SPACE_CAST(Value *V, Type *DestTy, const Twine &Name = "")
690 {
691     return IRB()->CreateAddrSpaceCast(V, DestTy, Name);
692 }
693 
Z_EXT_OR_BIT_CAST(Value * V,Type * DestTy,const Twine & Name="")694 Value* Z_EXT_OR_BIT_CAST(Value *V, Type *DestTy, const Twine &Name = "")
695 {
696     return IRB()->CreateZExtOrBitCast(V, DestTy, Name);
697 }
698 
S_EXT_OR_BIT_CAST(Value * V,Type * DestTy,const Twine & Name="")699 Value* S_EXT_OR_BIT_CAST(Value *V, Type *DestTy, const Twine &Name = "")
700 {
701     return IRB()->CreateSExtOrBitCast(V, DestTy, Name);
702 }
703 
TRUNC_OR_BIT_CAST(Value * V,Type * DestTy,const Twine & Name="")704 Value* TRUNC_OR_BIT_CAST(Value *V, Type *DestTy, const Twine &Name = "")
705 {
706     return IRB()->CreateTruncOrBitCast(V, DestTy, Name);
707 }
708 
CAST(Instruction::CastOps Op,Value * V,Type * DestTy,const Twine & Name="")709 Value* CAST(Instruction::CastOps Op, Value *V, Type *DestTy, const Twine &Name = "")
710 {
711     return IRB()->CreateCast(Op, V, DestTy, Name);
712 }
713 
POINTER_CAST(Value * V,Type * DestTy,const Twine & Name="")714 Value* POINTER_CAST(Value *V, Type *DestTy, const Twine &Name = "")
715 {
716     return IRB()->CreatePointerCast(V, DestTy, Name);
717 }
718 
POINTER_BIT_CAST_OR_ADDR_SPACE_CAST(Value * V,Type * DestTy,const Twine & Name="")719 Value* POINTER_BIT_CAST_OR_ADDR_SPACE_CAST(Value *V, Type *DestTy, const Twine &Name = "")
720 {
721     return IRB()->CreatePointerBitCastOrAddrSpaceCast(V, DestTy, Name);
722 }
723 
INT_CAST(Value * V,Type * DestTy,bool isSigned,const Twine & Name="")724 Value* INT_CAST(Value *V, Type *DestTy, bool isSigned, const Twine &Name = "")
725 {
726     return IRB()->CreateIntCast(V, DestTy, isSigned, Name);
727 }
728 
BIT_OR_POINTER_CAST(Value * V,Type * DestTy,const Twine & Name="")729 Value* BIT_OR_POINTER_CAST(Value *V, Type *DestTy, const Twine &Name = "")
730 {
731     return IRB()->CreateBitOrPointerCast(V, DestTy, Name);
732 }
733 
FP_CAST(Value * V,Type * DestTy,const Twine & Name="")734 Value* FP_CAST(Value *V, Type *DestTy, const Twine &Name = "")
735 {
736     return IRB()->CreateFPCast(V, DestTy, Name);
737 }
738 
ICMP_EQ(Value * LHS,Value * RHS,const Twine & Name="")739 Value* ICMP_EQ(Value *LHS, Value *RHS, const Twine &Name = "")
740 {
741     return IRB()->CreateICmpEQ(LHS, RHS, Name);
742 }
743 
ICMP_NE(Value * LHS,Value * RHS,const Twine & Name="")744 Value* ICMP_NE(Value *LHS, Value *RHS, const Twine &Name = "")
745 {
746     return IRB()->CreateICmpNE(LHS, RHS, Name);
747 }
748 
ICMP_UGT(Value * LHS,Value * RHS,const Twine & Name="")749 Value* ICMP_UGT(Value *LHS, Value *RHS, const Twine &Name = "")
750 {
751     return IRB()->CreateICmpUGT(LHS, RHS, Name);
752 }
753 
ICMP_UGE(Value * LHS,Value * RHS,const Twine & Name="")754 Value* ICMP_UGE(Value *LHS, Value *RHS, const Twine &Name = "")
755 {
756     return IRB()->CreateICmpUGE(LHS, RHS, Name);
757 }
758 
ICMP_ULT(Value * LHS,Value * RHS,const Twine & Name="")759 Value* ICMP_ULT(Value *LHS, Value *RHS, const Twine &Name = "")
760 {
761     return IRB()->CreateICmpULT(LHS, RHS, Name);
762 }
763 
ICMP_ULE(Value * LHS,Value * RHS,const Twine & Name="")764 Value* ICMP_ULE(Value *LHS, Value *RHS, const Twine &Name = "")
765 {
766     return IRB()->CreateICmpULE(LHS, RHS, Name);
767 }
768 
ICMP_SGT(Value * LHS,Value * RHS,const Twine & Name="")769 Value* ICMP_SGT(Value *LHS, Value *RHS, const Twine &Name = "")
770 {
771     return IRB()->CreateICmpSGT(LHS, RHS, Name);
772 }
773 
ICMP_SGE(Value * LHS,Value * RHS,const Twine & Name="")774 Value* ICMP_SGE(Value *LHS, Value *RHS, const Twine &Name = "")
775 {
776     return IRB()->CreateICmpSGE(LHS, RHS, Name);
777 }
778 
ICMP_SLT(Value * LHS,Value * RHS,const Twine & Name="")779 Value* ICMP_SLT(Value *LHS, Value *RHS, const Twine &Name = "")
780 {
781     return IRB()->CreateICmpSLT(LHS, RHS, Name);
782 }
783 
ICMP_SLE(Value * LHS,Value * RHS,const Twine & Name="")784 Value* ICMP_SLE(Value *LHS, Value *RHS, const Twine &Name = "")
785 {
786     return IRB()->CreateICmpSLE(LHS, RHS, Name);
787 }
788 
FCMP_OEQ(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)789 Value* FCMP_OEQ(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
790 {
791     return IRB()->CreateFCmpOEQ(LHS, RHS, Name, FPMathTag);
792 }
793 
FCMP_OGT(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)794 Value* FCMP_OGT(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
795 {
796     return IRB()->CreateFCmpOGT(LHS, RHS, Name, FPMathTag);
797 }
798 
FCMP_OGE(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)799 Value* FCMP_OGE(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
800 {
801     return IRB()->CreateFCmpOGE(LHS, RHS, Name, FPMathTag);
802 }
803 
FCMP_OLT(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)804 Value* FCMP_OLT(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
805 {
806     return IRB()->CreateFCmpOLT(LHS, RHS, Name, FPMathTag);
807 }
808 
FCMP_OLE(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)809 Value* FCMP_OLE(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
810 {
811     return IRB()->CreateFCmpOLE(LHS, RHS, Name, FPMathTag);
812 }
813 
FCMP_ONE(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)814 Value* FCMP_ONE(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
815 {
816     return IRB()->CreateFCmpONE(LHS, RHS, Name, FPMathTag);
817 }
818 
FCMP_ORD(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)819 Value* FCMP_ORD(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
820 {
821     return IRB()->CreateFCmpORD(LHS, RHS, Name, FPMathTag);
822 }
823 
FCMP_UNO(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)824 Value* FCMP_UNO(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
825 {
826     return IRB()->CreateFCmpUNO(LHS, RHS, Name, FPMathTag);
827 }
828 
FCMP_UEQ(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)829 Value* FCMP_UEQ(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
830 {
831     return IRB()->CreateFCmpUEQ(LHS, RHS, Name, FPMathTag);
832 }
833 
FCMP_UGT(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)834 Value* FCMP_UGT(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
835 {
836     return IRB()->CreateFCmpUGT(LHS, RHS, Name, FPMathTag);
837 }
838 
FCMP_UGE(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)839 Value* FCMP_UGE(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
840 {
841     return IRB()->CreateFCmpUGE(LHS, RHS, Name, FPMathTag);
842 }
843 
FCMP_ULT(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)844 Value* FCMP_ULT(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
845 {
846     return IRB()->CreateFCmpULT(LHS, RHS, Name, FPMathTag);
847 }
848 
FCMP_ULE(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)849 Value* FCMP_ULE(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
850 {
851     return IRB()->CreateFCmpULE(LHS, RHS, Name, FPMathTag);
852 }
853 
FCMP_UNE(Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)854 Value* FCMP_UNE(Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
855 {
856     return IRB()->CreateFCmpUNE(LHS, RHS, Name, FPMathTag);
857 }
858 
ICMP(CmpInst::Predicate P,Value * LHS,Value * RHS,const Twine & Name="")859 Value* ICMP(CmpInst::Predicate P, Value *LHS, Value *RHS, const Twine &Name = "")
860 {
861     return IRB()->CreateICmp(P, LHS, RHS, Name);
862 }
863 
FCMP(CmpInst::Predicate P,Value * LHS,Value * RHS,const Twine & Name="",MDNode * FPMathTag=nullptr)864 Value* FCMP(CmpInst::Predicate P, Value *LHS, Value *RHS, const Twine &Name = "", MDNode *FPMathTag = nullptr)
865 {
866     return IRB()->CreateFCmp(P, LHS, RHS, Name, FPMathTag);
867 }
868 
PHI(Type * Ty,unsigned NumReservedValues,const Twine & Name="")869 PHINode* PHI(Type *Ty, unsigned NumReservedValues, const Twine &Name = "")
870 {
871     return IRB()->CreatePHI(Ty, NumReservedValues, Name);
872 }
873 
CALLA(Value * Callee,ArrayRef<Value * > Args=None,const Twine & Name="",MDNode * FPMathTag=nullptr)874 CallInst* CALLA(Value *Callee, ArrayRef<Value *> Args = None, const Twine &Name = "", MDNode *FPMathTag = nullptr)
875 {
876     return IRB()->CreateCall(Callee, Args, Name, FPMathTag);
877 }
878 
CALLA(FunctionType * FTy,Value * Callee,ArrayRef<Value * > Args,const Twine & Name="",MDNode * FPMathTag=nullptr)879 CallInst* CALLA(FunctionType *FTy, Value *Callee, ArrayRef<Value *> Args, const Twine &Name = "", MDNode *FPMathTag = nullptr)
880 {
881     return IRB()->CreateCall(FTy, Callee, Args, Name, FPMathTag);
882 }
883 
CALLA(Value * Callee,ArrayRef<Value * > Args,ArrayRef<OperandBundleDef> OpBundles,const Twine & Name="",MDNode * FPMathTag=nullptr)884 CallInst* CALLA(Value *Callee, ArrayRef<Value *> Args, ArrayRef<OperandBundleDef> OpBundles, const Twine &Name = "", MDNode *FPMathTag = nullptr)
885 {
886     return IRB()->CreateCall(Callee, Args, OpBundles, Name, FPMathTag);
887 }
888 
CALLA(Function * Callee,ArrayRef<Value * > Args,const Twine & Name="",MDNode * FPMathTag=nullptr)889 CallInst* CALLA(Function *Callee, ArrayRef<Value *> Args, const Twine &Name = "", MDNode *FPMathTag = nullptr)
890 {
891     return IRB()->CreateCall(Callee, Args, Name, FPMathTag);
892 }
893 
SELECT(Value * C,Value * True,Value * False,const Twine & Name="",Instruction * MDFrom=nullptr)894 Value* SELECT(Value *C, Value *True, Value *False, const Twine &Name = "", Instruction *MDFrom = nullptr)
895 {
896     return IRB()->CreateSelect(C, True, False, Name, MDFrom);
897 }
898 
VA_ARG(Value * List,Type * Ty,const Twine & Name="")899 VAArgInst* VA_ARG(Value *List, Type *Ty, const Twine &Name = "")
900 {
901     return IRB()->CreateVAArg(List, Ty, Name);
902 }
903 
VEXTRACT(Value * Vec,Value * Idx,const Twine & Name="")904 Value* VEXTRACT(Value *Vec, Value *Idx, const Twine &Name = "")
905 {
906     return IRB()->CreateExtractElement(Vec, Idx, Name);
907 }
908 
VEXTRACT(Value * Vec,uint64_t Idx,const Twine & Name="")909 Value* VEXTRACT(Value *Vec, uint64_t Idx, const Twine &Name = "")
910 {
911     return IRB()->CreateExtractElement(Vec, Idx, Name);
912 }
913 
VINSERT(Value * Vec,Value * NewElt,Value * Idx,const Twine & Name="")914 Value* VINSERT(Value *Vec, Value *NewElt, Value *Idx, const Twine &Name = "")
915 {
916     return IRB()->CreateInsertElement(Vec, NewElt, Idx, Name);
917 }
918 
VINSERT(Value * Vec,Value * NewElt,uint64_t Idx,const Twine & Name="")919 Value* VINSERT(Value *Vec, Value *NewElt, uint64_t Idx, const Twine &Name = "")
920 {
921     return IRB()->CreateInsertElement(Vec, NewElt, Idx, Name);
922 }
923 
VSHUFFLE(Value * V1,Value * V2,Value * Mask,const Twine & Name="")924 Value* VSHUFFLE(Value *V1, Value *V2, Value *Mask, const Twine &Name = "")
925 {
926     return IRB()->CreateShuffleVector(V1, V2, Mask, Name);
927 }
928 
VSHUFFLE(Value * V1,Value * V2,ArrayRef<uint32_t> IntMask,const Twine & Name="")929 Value* VSHUFFLE(Value *V1, Value *V2, ArrayRef<uint32_t> IntMask, const Twine &Name = "")
930 {
931     Value *Mask = ConstantDataVector::get(getContext(), IntMask);
932     return IRB()->CreateShuffleVector(V1, V2, Mask, Name);
933 }
934 
EXTRACT_VALUE(Value * Agg,ArrayRef<unsigned> Idxs,const Twine & Name="")935 Value* EXTRACT_VALUE(Value *Agg, ArrayRef<unsigned> Idxs, const Twine &Name = "")
936 {
937     return IRB()->CreateExtractValue(Agg, Idxs, Name);
938 }
939 
INSERT_VALUE(Value * Agg,Value * Val,ArrayRef<unsigned> Idxs,const Twine & Name="")940 Value* INSERT_VALUE(Value *Agg, Value *Val, ArrayRef<unsigned> Idxs, const Twine &Name = "")
941 {
942     return IRB()->CreateInsertValue(Agg, Val, Idxs, Name);
943 }
944 
LANDING_PAD(Type * Ty,unsigned NumClauses,const Twine & Name="")945 LandingPadInst* LANDING_PAD(Type *Ty, unsigned NumClauses, const Twine &Name = "")
946 {
947     return IRB()->CreateLandingPad(Ty, NumClauses, Name);
948 }
949 
IS_NULL(Value * Arg,const Twine & Name="")950 Value* IS_NULL(Value *Arg, const Twine &Name = "")
951 {
952     return IRB()->CreateIsNull(Arg, Name);
953 }
954 
IS_NOT_NULL(Value * Arg,const Twine & Name="")955 Value* IS_NOT_NULL(Value *Arg, const Twine &Name = "")
956 {
957     return IRB()->CreateIsNotNull(Arg, Name);
958 }
959 
PTR_DIFF(Value * LHS,Value * RHS,const Twine & Name="")960 Value* PTR_DIFF(Value *LHS, Value *RHS, const Twine &Name = "")
961 {
962     return IRB()->CreatePtrDiff(LHS, RHS, Name);
963 }
964 
INVARIANT_GROUP_BARRIER(Value * Ptr)965 Value* INVARIANT_GROUP_BARRIER(Value *Ptr)
966 {
967     return IRB()->CreateLaunderInvariantGroup(Ptr);
968 }
969 
VECTOR_SPLAT(unsigned NumElts,Value * V,const Twine & Name="")970 Value* VECTOR_SPLAT(unsigned NumElts, Value *V, const Twine &Name = "")
971 {
972     return IRB()->CreateVectorSplat(NumElts, V, Name);
973 }
974 
EXTRACT_INTEGER(const DataLayout & DL,Value * From,IntegerType * ExtractedTy,uint64_t Offset,const Twine & Name)975 Value* EXTRACT_INTEGER(const DataLayout &DL, Value *From, IntegerType *ExtractedTy, uint64_t Offset, const Twine &Name)
976 {
977     return IRB()->CreateExtractInteger(DL, From, ExtractedTy, Offset, Name);
978 }
979 
ALIGNMENT_ASSUMPTION(const DataLayout & DL,Value * PtrValue,unsigned Alignment,Value * OffsetValue=nullptr)980 CallInst* ALIGNMENT_ASSUMPTION(const DataLayout &DL, Value *PtrValue, unsigned Alignment, Value *OffsetValue = nullptr)
981 {
982     return IRB()->CreateAlignmentAssumption(DL, PtrValue, Alignment, OffsetValue);
983 }
984 
ALIGNMENT_ASSUMPTION(const DataLayout & DL,Value * PtrValue,Value * Alignment,Value * OffsetValue=nullptr)985 CallInst* ALIGNMENT_ASSUMPTION(const DataLayout &DL, Value *PtrValue, Value *Alignment, Value *OffsetValue = nullptr)
986 {
987     return IRB()->CreateAlignmentAssumption(DL, PtrValue, Alignment, OffsetValue);
988 }
989 
990     // clang-format on
991