LLVM 23.0.0git
Core.cpp
Go to the documentation of this file.
1//===-- Core.cpp ----------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file implements the common infrastructure (including the C bindings)
10// for libLLVMCore.a, which implements the LLVM intermediate representation.
11//
12//===----------------------------------------------------------------------===//
13
14#include "llvm-c/Core.h"
15#include "llvm-c/Types.h"
16#include "llvm/IR/Attributes.h"
17#include "llvm/IR/BasicBlock.h"
19#include "llvm/IR/Constants.h"
25#include "llvm/IR/GlobalAlias.h"
27#include "llvm/IR/IRBuilder.h"
28#include "llvm/IR/InlineAsm.h"
31#include "llvm/IR/LLVMContext.h"
33#include "llvm/IR/Module.h"
35#include "llvm/PassRegistry.h"
36#include "llvm/Support/Debug.h"
44#include <cassert>
45#include <cstdlib>
46#include <cstring>
47#include <system_error>
48
49using namespace llvm;
50
52
54 return reinterpret_cast<BasicBlock **>(BBs);
55}
56
57#define DEBUG_TYPE "ir"
58
66
69}
70
71/*===-- Version query -----------------------------------------------------===*/
72
73void LLVMGetVersion(unsigned *Major, unsigned *Minor, unsigned *Patch) {
74 if (Major)
75 *Major = LLVM_VERSION_MAJOR;
76 if (Minor)
77 *Minor = LLVM_VERSION_MINOR;
78 if (Patch)
79 *Patch = LLVM_VERSION_PATCH;
80}
81
82/*===-- Error handling ----------------------------------------------------===*/
83
84char *LLVMCreateMessage(const char *Message) {
85 return strdup(Message);
86}
87
88void LLVMDisposeMessage(char *Message) {
89 free(Message);
90}
91
92
93/*===-- Operations on contexts --------------------------------------------===*/
94
96 static LLVMContext GlobalContext;
97 return GlobalContext;
98}
99
103
107
109
111 LLVMDiagnosticHandler Handler,
112 void *DiagnosticContext) {
113 unwrap(C)->setDiagnosticHandlerCallBack(
115 Handler),
116 DiagnosticContext);
117}
118
120 return LLVM_EXTENSION reinterpret_cast<LLVMDiagnosticHandler>(
121 unwrap(C)->getDiagnosticHandlerCallBack());
122}
123
125 return unwrap(C)->getDiagnosticContext();
126}
127
129 void *OpaqueHandle) {
130 auto YieldCallback =
131 LLVM_EXTENSION reinterpret_cast<LLVMContext::YieldCallbackTy>(Callback);
132 unwrap(C)->setYieldCallback(YieldCallback, OpaqueHandle);
133}
134
136 return unwrap(C)->shouldDiscardValueNames();
137}
138
140 unwrap(C)->setDiscardValueNames(Discard);
141}
142
144 delete unwrap(C);
145}
146
147unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char *Name,
148 unsigned SLen) {
149 return unwrap(C)->getMDKindID(StringRef(Name, SLen));
150}
151
152unsigned LLVMGetMDKindID(const char *Name, unsigned SLen) {
154}
155
156unsigned LLVMGetSyncScopeID(LLVMContextRef C, const char *Name, size_t SLen) {
157 return unwrap(C)->getOrInsertSyncScopeID(StringRef(Name, SLen));
158}
159
160unsigned LLVMGetEnumAttributeKindForName(const char *Name, size_t SLen) {
161 return Attribute::getAttrKindFromName(StringRef(Name, SLen));
162}
163
167
169 uint64_t Val) {
170 auto &Ctx = *unwrap(C);
171 auto AttrKind = (Attribute::AttrKind)KindID;
172 return wrap(Attribute::get(Ctx, AttrKind, Val));
173}
174
178
180 auto Attr = unwrap(A);
181 if (Attr.isEnumAttribute())
182 return 0;
183 return Attr.getValueAsInt();
184}
185
187 LLVMTypeRef type_ref) {
188 auto &Ctx = *unwrap(C);
189 auto AttrKind = (Attribute::AttrKind)KindID;
190 return wrap(Attribute::get(Ctx, AttrKind, unwrap(type_ref)));
191}
192
194 auto Attr = unwrap(A);
195 return wrap(Attr.getValueAsType());
196}
197
199 unsigned KindID,
200 unsigned NumBits,
201 const uint64_t LowerWords[],
202 const uint64_t UpperWords[]) {
203 auto &Ctx = *unwrap(C);
204 auto AttrKind = (Attribute::AttrKind)KindID;
205 unsigned NumWords = divideCeil(NumBits, 64);
206 return wrap(Attribute::get(
207 Ctx, AttrKind,
208 ConstantRange(APInt(NumBits, ArrayRef(LowerWords, NumWords)),
209 APInt(NumBits, ArrayRef(UpperWords, NumWords)))));
210}
211
213 LLVMContextRef C, LLVMDenormalModeKind DefaultModeOutput,
214 LLVMDenormalModeKind DefaultModeInput, LLVMDenormalModeKind FloatModeOutput,
215 LLVMDenormalModeKind FloatModeInput) {
216 auto &Ctx = *unwrap(C);
217
218 DenormalFPEnv Env(
220 static_cast<DenormalMode::DenormalModeKind>(DefaultModeOutput),
221 static_cast<DenormalMode::DenormalModeKind>(DefaultModeInput)),
223 static_cast<DenormalMode::DenormalModeKind>(FloatModeOutput),
224 static_cast<DenormalMode::DenormalModeKind>(FloatModeInput)));
225 return wrap(Attribute::get(Ctx, Attribute::DenormalFPEnv, Env.toIntValue()));
226}
227
229 const char *K, unsigned KLength,
230 const char *V, unsigned VLength) {
231 return wrap(Attribute::get(*unwrap(C), StringRef(K, KLength),
232 StringRef(V, VLength)));
233}
234
236 unsigned *Length) {
237 auto S = unwrap(A).getKindAsString();
238 *Length = S.size();
239 return S.data();
240}
241
243 unsigned *Length) {
244 auto S = unwrap(A).getValueAsString();
245 *Length = S.size();
246 return S.data();
247}
248
250 auto Attr = unwrap(A);
251 return Attr.isEnumAttribute() || Attr.isIntAttribute();
252}
253
257
261
263 std::string MsgStorage;
264 raw_string_ostream Stream(MsgStorage);
266
267 unwrap(DI)->print(DP);
268
269 return LLVMCreateMessage(MsgStorage.c_str());
270}
271
273 LLVMDiagnosticSeverity severity;
274
275 switch(unwrap(DI)->getSeverity()) {
276 default:
277 severity = LLVMDSError;
278 break;
279 case DS_Warning:
280 severity = LLVMDSWarning;
281 break;
282 case DS_Remark:
283 severity = LLVMDSRemark;
284 break;
285 case DS_Note:
286 severity = LLVMDSNote;
287 break;
288 }
289
290 return severity;
291}
292
293/*===-- Operations on modules ---------------------------------------------===*/
294
296 return wrap(new Module(ModuleID, getGlobalContext()));
297}
298
301 return wrap(new Module(ModuleID, *unwrap(C)));
302}
303
305 delete unwrap(M);
306}
307
308const char *LLVMGetModuleIdentifier(LLVMModuleRef M, size_t *Len) {
309 auto &Str = unwrap(M)->getModuleIdentifier();
310 *Len = Str.length();
311 return Str.c_str();
312}
313
314void LLVMSetModuleIdentifier(LLVMModuleRef M, const char *Ident, size_t Len) {
315 unwrap(M)->setModuleIdentifier(StringRef(Ident, Len));
316}
317
318const char *LLVMGetSourceFileName(LLVMModuleRef M, size_t *Len) {
319 auto &Str = unwrap(M)->getSourceFileName();
320 *Len = Str.length();
321 return Str.c_str();
322}
323
324void LLVMSetSourceFileName(LLVMModuleRef M, const char *Name, size_t Len) {
325 unwrap(M)->setSourceFileName(StringRef(Name, Len));
326}
327
328/*--.. Data layout .........................................................--*/
330 return unwrap(M)->getDataLayoutStr().c_str();
331}
332
334 return LLVMGetDataLayoutStr(M);
335}
336
337void LLVMSetDataLayout(LLVMModuleRef M, const char *DataLayoutStr) {
338 unwrap(M)->setDataLayout(DataLayoutStr);
339}
340
341/*--.. Target triple .......................................................--*/
343 return unwrap(M)->getTargetTriple().str().c_str();
344}
345
346void LLVMSetTarget(LLVMModuleRef M, const char *TripleStr) {
347 unwrap(M)->setTargetTriple(Triple(TripleStr));
348}
349
350/*--.. Module flags ........................................................--*/
352 LLVMModuleFlagBehavior Behavior;
353 const char *Key;
354 size_t KeyLen;
356};
357
376
396
399 unwrap(M)->getModuleFlagsMetadata(MFEs);
400
402 safe_malloc(MFEs.size() * sizeof(LLVMOpaqueModuleFlagEntry)));
403 for (unsigned i = 0; i < MFEs.size(); ++i) {
404 const auto &ModuleFlag = MFEs[i];
405 Result[i].Behavior = map_from_llvmModFlagBehavior(ModuleFlag.Behavior);
406 Result[i].Key = ModuleFlag.Key->getString().data();
407 Result[i].KeyLen = ModuleFlag.Key->getString().size();
408 Result[i].Metadata = wrap(ModuleFlag.Val);
409 }
410 *Len = MFEs.size();
411 return Result;
412}
413
415 free(Entries);
416}
417
420 unsigned Index) {
422 static_cast<LLVMOpaqueModuleFlagEntry>(Entries[Index]);
423 return MFE.Behavior;
424}
425
427 unsigned Index, size_t *Len) {
429 static_cast<LLVMOpaqueModuleFlagEntry>(Entries[Index]);
430 *Len = MFE.KeyLen;
431 return MFE.Key;
432}
433
435 unsigned Index) {
437 static_cast<LLVMOpaqueModuleFlagEntry>(Entries[Index]);
438 return MFE.Metadata;
439}
440
442 const char *Key, size_t KeyLen) {
443 return wrap(unwrap(M)->getModuleFlag({Key, KeyLen}));
444}
445
447 const char *Key, size_t KeyLen,
448 LLVMMetadataRef Val) {
449 unwrap(M)->addModuleFlag(map_to_llvmModFlagBehavior(Behavior),
450 {Key, KeyLen}, unwrap(Val));
451}
452
454
456 if (!UseNewFormat)
457 llvm_unreachable("LLVM no longer supports intrinsic based debug-info");
458 (void)M;
459}
460
461/*--.. Printing modules ....................................................--*/
462
464 unwrap(M)->print(errs(), nullptr,
465 /*ShouldPreserveUseListOrder=*/false, /*IsForDebug=*/true);
466}
467
469 char **ErrorMessage) {
470 std::error_code EC;
472 if (EC) {
473 *ErrorMessage = strdup(EC.message().c_str());
474 return true;
475 }
476
477 unwrap(M)->print(dest, nullptr);
478
479 dest.close();
480
481 if (dest.has_error()) {
482 std::string E = "Error printing to file: " + dest.error().message();
483 *ErrorMessage = strdup(E.c_str());
484 return true;
485 }
486
487 return false;
488}
489
491 std::string buf;
492 raw_string_ostream os(buf);
493
494 unwrap(M)->print(os, nullptr);
495
496 return strdup(buf.c_str());
497}
498
499/*--.. Operations on inline assembler ......................................--*/
500void LLVMSetModuleInlineAsm2(LLVMModuleRef M, const char *Asm, size_t Len) {
501 unwrap(M)->setModuleInlineAsm(StringRef(Asm, Len));
502}
503
504void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm) {
505 unwrap(M)->setModuleInlineAsm(StringRef(Asm));
506}
507
508void LLVMAppendModuleInlineAsm(LLVMModuleRef M, const char *Asm, size_t Len) {
509 unwrap(M)->appendModuleInlineAsm(StringRef(Asm, Len));
510}
511
512const char *LLVMGetModuleInlineAsm(LLVMModuleRef M, size_t *Len) {
513 auto &Str = unwrap(M)->getModuleInlineAsm();
514 *Len = Str.length();
515 return Str.c_str();
516}
517
518LLVMValueRef LLVMGetInlineAsm(LLVMTypeRef Ty, const char *AsmString,
519 size_t AsmStringSize, const char *Constraints,
520 size_t ConstraintsSize, LLVMBool HasSideEffects,
521 LLVMBool IsAlignStack,
522 LLVMInlineAsmDialect Dialect, LLVMBool CanThrow) {
524 switch (Dialect) {
527 break;
530 break;
531 }
533 StringRef(AsmString, AsmStringSize),
534 StringRef(Constraints, ConstraintsSize),
535 HasSideEffects, IsAlignStack, AD, CanThrow));
536}
537
538const char *LLVMGetInlineAsmAsmString(LLVMValueRef InlineAsmVal, size_t *Len) {
539
540 Value *Val = unwrap<Value>(InlineAsmVal);
541 StringRef AsmString = cast<InlineAsm>(Val)->getAsmString();
542
543 *Len = AsmString.size();
544 return AsmString.data();
545}
546
548 size_t *Len) {
549 Value *Val = unwrap<Value>(InlineAsmVal);
550 StringRef ConstraintString = cast<InlineAsm>(Val)->getConstraintString();
551
552 *Len = ConstraintString.size();
553 return ConstraintString.data();
554}
555
557
558 Value *Val = unwrap<Value>(InlineAsmVal);
559 InlineAsm::AsmDialect Dialect = cast<InlineAsm>(Val)->getDialect();
560
561 switch (Dialect) {
566 }
567
568 llvm_unreachable("Unrecognized inline assembly dialect");
570}
571
573 Value *Val = unwrap<Value>(InlineAsmVal);
574 return (LLVMTypeRef)cast<InlineAsm>(Val)->getFunctionType();
575}
576
578 Value *Val = unwrap<Value>(InlineAsmVal);
579 return cast<InlineAsm>(Val)->hasSideEffects();
580}
581
583 Value *Val = unwrap<Value>(InlineAsmVal);
584 return cast<InlineAsm>(Val)->isAlignStack();
585}
586
588 Value *Val = unwrap<Value>(InlineAsmVal);
589 return cast<InlineAsm>(Val)->canThrow();
590}
591
592/*--.. Operations on module contexts ......................................--*/
594 return wrap(&unwrap(M)->getContext());
595}
596
597
598/*===-- Operations on types -----------------------------------------------===*/
599
600/*--.. Operations on all types (mostly) ....................................--*/
601
603 switch (unwrap(Ty)->getTypeID()) {
604 case Type::VoidTyID:
605 return LLVMVoidTypeKind;
606 case Type::HalfTyID:
607 return LLVMHalfTypeKind;
608 case Type::BFloatTyID:
609 return LLVMBFloatTypeKind;
610 case Type::FloatTyID:
611 return LLVMFloatTypeKind;
612 case Type::DoubleTyID:
613 return LLVMDoubleTypeKind;
616 case Type::FP128TyID:
617 return LLVMFP128TypeKind;
620 case Type::LabelTyID:
621 return LLVMLabelTypeKind;
624 case Type::ByteTyID:
625 return LLVMByteTypeKind;
627 return LLVMIntegerTypeKind;
630 case Type::StructTyID:
631 return LLVMStructTypeKind;
632 case Type::ArrayTyID:
633 return LLVMArrayTypeKind;
635 return LLVMPointerTypeKind;
637 return LLVMVectorTypeKind;
639 return LLVMX86_AMXTypeKind;
640 case Type::TokenTyID:
641 return LLVMTokenTypeKind;
647 llvm_unreachable("Typed pointers are unsupported via the C API");
648 }
649 llvm_unreachable("Unhandled TypeID.");
650}
651
653{
654 return unwrap(Ty)->isSized();
655}
656
658 return wrap(&unwrap(Ty)->getContext());
659}
660
662 return unwrap(Ty)->print(errs(), /*IsForDebug=*/true);
663}
664
666 std::string buf;
667 raw_string_ostream os(buf);
668
669 if (unwrap(Ty))
670 unwrap(Ty)->print(os);
671 else
672 os << "Printing <null> Type";
673
674 return strdup(buf.c_str());
675}
676
677/*--.. Operations on byte types ............................................--*/
678
680 return wrap(ByteType::get(*unwrap(C), NumBits));
681}
682
684 return unwrap<ByteType>(ByteTy)->getBitWidth();
685}
686
687/*--.. Operations on integer types .........................................--*/
688
708 return wrap(IntegerType::get(*unwrap(C), NumBits));
709}
710
729LLVMTypeRef LLVMIntType(unsigned NumBits) {
731}
732
733unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy) {
734 return unwrap<IntegerType>(IntegerTy)->getBitWidth();
735}
736
737/*--.. Operations on real types ............................................--*/
738
763
788
789/*--.. Operations on function types ........................................--*/
790
792 LLVMTypeRef *ParamTypes, unsigned ParamCount,
793 LLVMBool IsVarArg) {
794 ArrayRef<Type*> Tys(unwrap(ParamTypes), ParamCount);
795 return wrap(FunctionType::get(unwrap(ReturnType), Tys, IsVarArg != 0));
796}
797
799 return unwrap<FunctionType>(FunctionTy)->isVarArg();
800}
801
803 return wrap(unwrap<FunctionType>(FunctionTy)->getReturnType());
804}
805
806unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy) {
807 return unwrap<FunctionType>(FunctionTy)->getNumParams();
808}
809
811 FunctionType *Ty = unwrap<FunctionType>(FunctionTy);
812 for (Type *T : Ty->params())
813 *Dest++ = wrap(T);
814}
815
816/*--.. Operations on struct types ..........................................--*/
817
819 unsigned ElementCount, LLVMBool Packed) {
820 ArrayRef<Type*> Tys(unwrap(ElementTypes), ElementCount);
821 return wrap(StructType::get(*unwrap(C), Tys, Packed != 0));
822}
823
825 unsigned ElementCount, LLVMBool Packed) {
827 ElementCount, Packed);
828}
829
831{
832 return wrap(StructType::create(*unwrap(C), Name));
833}
834
836{
838 if (!Type->hasName())
839 return nullptr;
840 return Type->getName().data();
841}
842
843void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes,
844 unsigned ElementCount, LLVMBool Packed) {
845 ArrayRef<Type*> Tys(unwrap(ElementTypes), ElementCount);
846 unwrap<StructType>(StructTy)->setBody(Tys, Packed != 0);
847}
848
850 return unwrap<StructType>(StructTy)->getNumElements();
851}
852
854 StructType *Ty = unwrap<StructType>(StructTy);
855 for (Type *T : Ty->elements())
856 *Dest++ = wrap(T);
857}
858
860 StructType *Ty = unwrap<StructType>(StructTy);
861 return wrap(Ty->getTypeAtIndex(i));
862}
863
865 return unwrap<StructType>(StructTy)->isPacked();
866}
867
869 return unwrap<StructType>(StructTy)->isOpaque();
870}
871
873 return unwrap<StructType>(StructTy)->isLiteral();
874}
875
877 return wrap(StructType::getTypeByName(unwrap(M)->getContext(), Name));
878}
879
881 return wrap(StructType::getTypeByName(*unwrap(C), Name));
882}
883
884/*--.. Operations on array, pointer, and vector types (sequence types) .....--*/
885
887 int i = 0;
888 for (auto *T : unwrap(Tp)->subtypes()) {
889 Arr[i] = wrap(T);
890 i++;
891 }
892}
893
895 return wrap(ArrayType::get(unwrap(ElementType), ElementCount));
896}
897
901
903 return wrap(
904 PointerType::get(unwrap(ElementType)->getContext(), AddressSpace));
905}
906
908 return true;
909}
910
912 return wrap(FixedVectorType::get(unwrap(ElementType), ElementCount));
913}
914
916 unsigned ElementCount) {
917 return wrap(ScalableVectorType::get(unwrap(ElementType), ElementCount));
918}
919
921 auto *Ty = unwrap(WrappedTy);
922 if (auto *ATy = dyn_cast<ArrayType>(Ty))
923 return wrap(ATy->getElementType());
924 return wrap(cast<VectorType>(Ty)->getElementType());
925}
926
928 return unwrap(Tp)->getNumContainedTypes();
929}
930
932 return unwrap<ArrayType>(ArrayTy)->getNumElements();
933}
934
936 return unwrap<ArrayType>(ArrayTy)->getNumElements();
937}
938
940 return unwrap<PointerType>(PointerTy)->getAddressSpace();
941}
942
943unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy) {
944 return unwrap<VectorType>(VectorTy)->getElementCount().getKnownMinValue();
945}
946
950
954
956 return wrap(unwrap<ConstantPtrAuth>(PtrAuth)->getDiscriminator());
957}
958
960 return wrap(unwrap<ConstantPtrAuth>(PtrAuth)->getAddrDiscriminator());
961}
962
963/*--.. Operations on other types ...........................................--*/
964
968
981
988
990 LLVMTypeRef *TypeParams,
991 unsigned TypeParamCount,
992 unsigned *IntParams,
993 unsigned IntParamCount) {
994 ArrayRef<Type *> TypeParamArray(unwrap(TypeParams), TypeParamCount);
995 ArrayRef<unsigned> IntParamArray(IntParams, IntParamCount);
996 return wrap(
997 TargetExtType::get(*unwrap(C), Name, TypeParamArray, IntParamArray));
998}
999
1000const char *LLVMGetTargetExtTypeName(LLVMTypeRef TargetExtTy) {
1002 return Type->getName().data();
1003}
1004
1007 return Type->getNumTypeParameters();
1008}
1009
1011 unsigned Idx) {
1013 return wrap(Type->getTypeParameter(Idx));
1014}
1015
1018 return Type->getNumIntParameters();
1019}
1020
1021unsigned LLVMGetTargetExtTypeIntParam(LLVMTypeRef TargetExtTy, unsigned Idx) {
1023 return Type->getIntParameter(Idx);
1024}
1025
1026/*===-- Operations on values ----------------------------------------------===*/
1027
1028/*--.. Operations on all values ............................................--*/
1029
1031 return wrap(unwrap(Val)->getType());
1032}
1033
1035 switch(unwrap(Val)->getValueID()) {
1036#define LLVM_C_API 1
1037#define HANDLE_VALUE(Name) \
1038 case Value::Name##Val: \
1039 return LLVM##Name##ValueKind;
1040#include "llvm/IR/Value.def"
1041 default:
1043 }
1044}
1045
1046const char *LLVMGetValueName2(LLVMValueRef Val, size_t *Length) {
1047 auto *V = unwrap(Val);
1048 *Length = V->getName().size();
1049 return V->getName().data();
1050}
1051
1052void LLVMSetValueName2(LLVMValueRef Val, const char *Name, size_t NameLen) {
1053 unwrap(Val)->setName(StringRef(Name, NameLen));
1054}
1055
1057 return unwrap(Val)->getName().data();
1058}
1059
1060void LLVMSetValueName(LLVMValueRef Val, const char *Name) {
1061 unwrap(Val)->setName(Name);
1062}
1063
1065 unwrap(Val)->print(errs(), /*IsForDebug=*/true);
1066}
1067
1069 std::string buf;
1070 raw_string_ostream os(buf);
1071
1072 if (unwrap(Val))
1073 unwrap(Val)->print(os);
1074 else
1075 os << "Printing <null> Value";
1076
1077 return strdup(buf.c_str());
1078}
1079
1081 return wrap(&unwrap(Val)->getContext());
1082}
1083
1085 std::string buf;
1086 raw_string_ostream os(buf);
1087
1088 if (unwrap(Record))
1089 unwrap(Record)->print(os);
1090 else
1091 os << "Printing <null> DbgRecord";
1092
1093 return strdup(buf.c_str());
1094}
1095
1097 unwrap(OldVal)->replaceAllUsesWith(unwrap(NewVal));
1098}
1099
1101 return unwrap<Instruction>(Inst)->hasMetadata();
1102}
1103
1105 auto *I = unwrap<Instruction>(Inst);
1106 assert(I && "Expected instruction");
1107 if (auto *MD = I->getMetadata(KindID))
1108 return wrap(MetadataAsValue::get(I->getContext(), MD));
1109 return nullptr;
1110}
1111
1112// MetadataAsValue uses a canonical format which strips the actual MDNode for
1113// MDNode with just a single constant value, storing just a ConstantAsMetadata
1114// This undoes this canonicalization, reconstructing the MDNode.
1116 Metadata *MD = MAV->getMetadata();
1118 "Expected a metadata node or a canonicalized constant");
1119
1120 if (MDNode *N = dyn_cast<MDNode>(MD))
1121 return N;
1122
1123 return MDNode::get(MAV->getContext(), MD);
1124}
1125
1126void LLVMSetMetadata(LLVMValueRef Inst, unsigned KindID, LLVMValueRef Val) {
1127 MDNode *N = Val ? extractMDNode(unwrap<MetadataAsValue>(Val)) : nullptr;
1128
1129 unwrap<Instruction>(Inst)->setMetadata(KindID, N);
1130}
1131
1136
1139llvm_getMetadata(size_t *NumEntries,
1140 llvm::function_ref<void(MetadataEntries &)> AccessMD) {
1142 AccessMD(MVEs);
1143
1145 static_cast<LLVMOpaqueValueMetadataEntry *>(
1147 for (unsigned i = 0; i < MVEs.size(); ++i) {
1148 const auto &ModuleFlag = MVEs[i];
1149 Result[i].Kind = ModuleFlag.first;
1150 Result[i].Metadata = wrap(ModuleFlag.second);
1151 }
1152 *NumEntries = MVEs.size();
1153 return Result;
1154}
1155
1158 size_t *NumEntries) {
1159 return llvm_getMetadata(NumEntries, [&Value](MetadataEntries &Entries) {
1160 Entries.clear();
1161 unwrap<Instruction>(Value)->getAllMetadata(Entries);
1162 });
1163}
1164
1165/*--.. Conversion functions ................................................--*/
1166
1167#define LLVM_DEFINE_VALUE_CAST(name) \
1168 LLVMValueRef LLVMIsA##name(LLVMValueRef Val) { \
1169 return wrap(static_cast<Value*>(dyn_cast_or_null<name>(unwrap(Val)))); \
1170 }
1171
1173
1175 if (Value *V = unwrap(Val))
1176 return isa<UncondBrInst, CondBrInst>(V) ? Val : nullptr;
1177 return nullptr;
1178}
1179
1181 if (auto *MD = dyn_cast_or_null<MetadataAsValue>(unwrap(Val)))
1182 if (isa<MDNode>(MD->getMetadata()) ||
1183 isa<ValueAsMetadata>(MD->getMetadata()))
1184 return Val;
1185 return nullptr;
1186}
1187
1189 if (auto *MD = dyn_cast_or_null<MetadataAsValue>(unwrap(Val)))
1190 if (isa<ValueAsMetadata>(MD->getMetadata()))
1191 return Val;
1192 return nullptr;
1193}
1194
1196 if (auto *MD = dyn_cast_or_null<MetadataAsValue>(unwrap(Val)))
1197 if (isa<MDString>(MD->getMetadata()))
1198 return Val;
1199 return nullptr;
1200}
1201
1202/*--.. Operations on Uses ..................................................--*/
1204 Value *V = unwrap(Val);
1205 Value::use_iterator I = V->use_begin();
1206 if (I == V->use_end())
1207 return nullptr;
1208 return wrap(&*I);
1209}
1210
1212 Use *Next = unwrap(U)->getNext();
1213 if (Next)
1214 return wrap(Next);
1215 return nullptr;
1216}
1217
1219 return wrap(unwrap(U)->getUser());
1220}
1221
1225
1226/*--.. Operations on Users .................................................--*/
1227
1229 unsigned Index) {
1230 Metadata *Op = N->getOperand(Index);
1231 if (!Op)
1232 return nullptr;
1233 if (auto *C = dyn_cast<ConstantAsMetadata>(Op))
1234 return wrap(C->getValue());
1235 return wrap(MetadataAsValue::get(Context, Op));
1236}
1237
1239 Value *V = unwrap(Val);
1240 if (auto *MD = dyn_cast<MetadataAsValue>(V)) {
1241 if (auto *L = dyn_cast<ValueAsMetadata>(MD->getMetadata())) {
1242 assert(Index == 0 && "Function-local metadata can only have one operand");
1243 return wrap(L->getValue());
1244 }
1245 return getMDNodeOperandImpl(V->getContext(),
1246 cast<MDNode>(MD->getMetadata()), Index);
1247 }
1248
1249 return wrap(cast<User>(V)->getOperand(Index));
1250}
1251
1253 Value *V = unwrap(Val);
1254 return wrap(&cast<User>(V)->getOperandUse(Index));
1255}
1256
1257void LLVMSetOperand(LLVMValueRef Val, unsigned Index, LLVMValueRef Op) {
1258 unwrap<User>(Val)->setOperand(Index, unwrap(Op));
1259}
1260
1262 Value *V = unwrap(Val);
1263 if (isa<MetadataAsValue>(V))
1264 return LLVMGetMDNodeNumOperands(Val);
1265
1266 return cast<User>(V)->getNumOperands();
1267}
1268
1269/*--.. Operations on constants of any type .................................--*/
1270
1274
1278
1282
1286
1290
1292 if (Constant *C = dyn_cast<Constant>(unwrap(Val)))
1293 return C->isNullValue();
1294 return false;
1295}
1296
1300
1304
1308
1309/*--.. Operations on metadata nodes ........................................--*/
1310
1312 size_t SLen) {
1313 return wrap(MDString::get(*unwrap(C), StringRef(Str, SLen)));
1314}
1315
1320
1322 unsigned SLen) {
1323 LLVMContext &Context = *unwrap(C);
1325 Context, MDString::get(Context, StringRef(Str, SLen))));
1326}
1327
1328LLVMValueRef LLVMMDString(const char *Str, unsigned SLen) {
1330}
1331
1333 unsigned Count) {
1334 LLVMContext &Context = *unwrap(C);
1336 for (auto *OV : ArrayRef(Vals, Count)) {
1337 Value *V = unwrap(OV);
1338 Metadata *MD;
1339 if (!V)
1340 MD = nullptr;
1341 else if (auto *C = dyn_cast<Constant>(V))
1343 else if (auto *MDV = dyn_cast<MetadataAsValue>(V)) {
1344 MD = MDV->getMetadata();
1345 assert(!isa<LocalAsMetadata>(MD) && "Unexpected function-local metadata "
1346 "outside of direct argument to call");
1347 } else {
1348 // This is function-local metadata. Pretend to make an MDNode.
1349 assert(Count == 1 &&
1350 "Expected only one operand to function-local metadata");
1351 return wrap(MetadataAsValue::get(Context, LocalAsMetadata::get(V)));
1352 }
1353
1354 MDs.push_back(MD);
1355 }
1356 return wrap(MetadataAsValue::get(Context, MDNode::get(Context, MDs)));
1357}
1358
1362
1366
1368 auto *V = unwrap(Val);
1369 if (auto *C = dyn_cast<Constant>(V))
1371 if (auto *MAV = dyn_cast<MetadataAsValue>(V))
1372 return wrap(MAV->getMetadata());
1373 return wrap(ValueAsMetadata::get(V));
1374}
1375
1376const char *LLVMGetMDString(LLVMValueRef V, unsigned *Length) {
1377 if (const auto *MD = dyn_cast<MetadataAsValue>(unwrap(V)))
1378 if (const MDString *S = dyn_cast<MDString>(MD->getMetadata())) {
1379 *Length = S->getString().size();
1380 return S->getString().data();
1381 }
1382 *Length = 0;
1383 return nullptr;
1384}
1385
1387 auto *MD = unwrap<MetadataAsValue>(V);
1388 if (isa<ValueAsMetadata>(MD->getMetadata()))
1389 return 1;
1390 return cast<MDNode>(MD->getMetadata())->getNumOperands();
1391}
1392
1394 Module *Mod = unwrap(M);
1395 Module::named_metadata_iterator I = Mod->named_metadata_begin();
1396 if (I == Mod->named_metadata_end())
1397 return nullptr;
1398 return wrap(&*I);
1399}
1400
1402 Module *Mod = unwrap(M);
1403 Module::named_metadata_iterator I = Mod->named_metadata_end();
1404 if (I == Mod->named_metadata_begin())
1405 return nullptr;
1406 return wrap(&*--I);
1407}
1408
1410 NamedMDNode *NamedNode = unwrap(NMD);
1412 if (++I == NamedNode->getParent()->named_metadata_end())
1413 return nullptr;
1414 return wrap(&*I);
1415}
1416
1418 NamedMDNode *NamedNode = unwrap(NMD);
1420 if (I == NamedNode->getParent()->named_metadata_begin())
1421 return nullptr;
1422 return wrap(&*--I);
1423}
1424
1426 const char *Name, size_t NameLen) {
1427 return wrap(unwrap(M)->getNamedMetadata(StringRef(Name, NameLen)));
1428}
1429
1431 const char *Name, size_t NameLen) {
1432 return wrap(unwrap(M)->getOrInsertNamedMetadata({Name, NameLen}));
1433}
1434
1435const char *LLVMGetNamedMetadataName(LLVMNamedMDNodeRef NMD, size_t *NameLen) {
1436 NamedMDNode *NamedNode = unwrap(NMD);
1437 *NameLen = NamedNode->getName().size();
1438 return NamedNode->getName().data();
1439}
1440
1442 auto *MD = unwrap<MetadataAsValue>(V);
1443 if (auto *MDV = dyn_cast<ValueAsMetadata>(MD->getMetadata())) {
1444 *Dest = wrap(MDV->getValue());
1445 return;
1446 }
1447 const auto *N = cast<MDNode>(MD->getMetadata());
1448 const unsigned numOperands = N->getNumOperands();
1449 LLVMContext &Context = unwrap(V)->getContext();
1450 for (unsigned i = 0; i < numOperands; i++)
1451 Dest[i] = getMDNodeOperandImpl(Context, N, i);
1452}
1453
1455 LLVMMetadataRef Replacement) {
1456 auto *MD = cast<MetadataAsValue>(unwrap(V));
1457 auto *N = cast<MDNode>(MD->getMetadata());
1458 N->replaceOperandWith(Index, unwrap<Metadata>(Replacement));
1459}
1460
1461unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char *Name) {
1462 if (NamedMDNode *N = unwrap(M)->getNamedMetadata(Name)) {
1463 return N->getNumOperands();
1464 }
1465 return 0;
1466}
1467
1469 LLVMValueRef *Dest) {
1470 NamedMDNode *N = unwrap(M)->getNamedMetadata(Name);
1471 if (!N)
1472 return;
1473 LLVMContext &Context = unwrap(M)->getContext();
1474 for (unsigned i=0;i<N->getNumOperands();i++)
1475 Dest[i] = wrap(MetadataAsValue::get(Context, N->getOperand(i)));
1476}
1477
1479 LLVMValueRef Val) {
1480 NamedMDNode *N = unwrap(M)->getOrInsertNamedMetadata(Name);
1481 if (!N)
1482 return;
1483 if (!Val)
1484 return;
1485 N->addOperand(extractMDNode(unwrap<MetadataAsValue>(Val)));
1486}
1487
1488const char *LLVMGetDebugLocDirectory(LLVMValueRef Val, unsigned *Length) {
1489 if (!Length) return nullptr;
1490 StringRef S;
1491 if (const auto *I = dyn_cast<Instruction>(unwrap(Val))) {
1492 if (const auto &DL = I->getDebugLoc()) {
1493 S = DL->getDirectory();
1494 }
1495 } else if (const auto *GV = dyn_cast<GlobalVariable>(unwrap(Val))) {
1497 GV->getDebugInfo(GVEs);
1498 if (GVEs.size())
1499 if (const DIGlobalVariable *DGV = GVEs[0]->getVariable())
1500 S = DGV->getDirectory();
1501 } else if (const auto *F = dyn_cast<Function>(unwrap(Val))) {
1502 if (const DISubprogram *DSP = F->getSubprogram())
1503 S = DSP->getDirectory();
1504 } else {
1505 assert(0 && "Expected Instruction, GlobalVariable or Function");
1506 return nullptr;
1507 }
1508 *Length = S.size();
1509 return S.data();
1510}
1511
1512const char *LLVMGetDebugLocFilename(LLVMValueRef Val, unsigned *Length) {
1513 if (!Length) return nullptr;
1514 StringRef S;
1515 if (const auto *I = dyn_cast<Instruction>(unwrap(Val))) {
1516 if (const auto &DL = I->getDebugLoc()) {
1517 S = DL->getFilename();
1518 }
1519 } else if (const auto *GV = dyn_cast<GlobalVariable>(unwrap(Val))) {
1521 GV->getDebugInfo(GVEs);
1522 if (GVEs.size())
1523 if (const DIGlobalVariable *DGV = GVEs[0]->getVariable())
1524 S = DGV->getFilename();
1525 } else if (const auto *F = dyn_cast<Function>(unwrap(Val))) {
1526 if (const DISubprogram *DSP = F->getSubprogram())
1527 S = DSP->getFilename();
1528 } else {
1529 assert(0 && "Expected Instruction, GlobalVariable or Function");
1530 return nullptr;
1531 }
1532 *Length = S.size();
1533 return S.data();
1534}
1535
1537 unsigned L = 0;
1538 if (const auto *I = dyn_cast<Instruction>(unwrap(Val))) {
1539 if (const auto &DL = I->getDebugLoc()) {
1540 L = DL->getLine();
1541 }
1542 } else if (const auto *GV = dyn_cast<GlobalVariable>(unwrap(Val))) {
1544 GV->getDebugInfo(GVEs);
1545 if (GVEs.size())
1546 if (const DIGlobalVariable *DGV = GVEs[0]->getVariable())
1547 L = DGV->getLine();
1548 } else if (const auto *F = dyn_cast<Function>(unwrap(Val))) {
1549 if (const DISubprogram *DSP = F->getSubprogram())
1550 L = DSP->getLine();
1551 } else {
1552 assert(0 && "Expected Instruction, GlobalVariable or Function");
1553 return -1;
1554 }
1555 return L;
1556}
1557
1559 unsigned C = 0;
1560 if (const auto *I = dyn_cast<Instruction>(unwrap(Val)))
1561 if (const auto &DL = I->getDebugLoc())
1562 C = DL->getColumn();
1563 return C;
1564}
1565
1566/*--.. Operations on scalar constants ......................................--*/
1567
1568LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N,
1569 LLVMBool SignExtend) {
1570 return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), N, SignExtend != 0));
1571}
1572
1574 unsigned NumWords,
1575 const uint64_t Words[]) {
1576 IntegerType *Ty = unwrap<IntegerType>(IntTy);
1577 return wrap(ConstantInt::get(
1578 Ty->getContext(), APInt(Ty->getBitWidth(), ArrayRef(Words, NumWords))));
1579}
1580
1582 uint8_t Radix) {
1583 return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), StringRef(Str),
1584 Radix));
1585}
1586
1588 unsigned SLen, uint8_t Radix) {
1589 return wrap(ConstantInt::get(unwrap<IntegerType>(IntTy), StringRef(Str, SLen),
1590 Radix));
1591}
1592
1593LLVMValueRef LLVMConstByte(LLVMTypeRef ByteTy, unsigned long long N) {
1594 return wrap(ConstantByte::get(unwrap<ByteType>(ByteTy), N));
1595}
1596
1598 unsigned NumWords,
1599 const uint64_t Words[]) {
1600 ByteType *Ty = unwrap<ByteType>(ByteTy);
1601 return wrap(ConstantByte::get(
1602 Ty->getContext(), APInt(Ty->getBitWidth(), ArrayRef(Words, NumWords))));
1603}
1604
1606 uint8_t Radix) {
1607 return wrap(
1608 ConstantByte::get(unwrap<ByteType>(ByteTy), StringRef(Str), Radix));
1609}
1610
1612 size_t SLen, uint8_t Radix) {
1613 return wrap(
1614 ConstantByte::get(unwrap<ByteType>(ByteTy), StringRef(Str, SLen), Radix));
1615}
1616
1618 return wrap(ConstantFP::get(unwrap(RealTy), N));
1619}
1620
1622 return wrap(ConstantFP::get(unwrap(RealTy), StringRef(Text)));
1623}
1624
1626 unsigned SLen) {
1627 return wrap(ConstantFP::get(unwrap(RealTy), StringRef(Str, SLen)));
1628}
1629
1631 Type *T = unwrap(Ty);
1632 unsigned SB = T->getScalarSizeInBits();
1633 APInt AI(SB, ArrayRef<uint64_t>(N, divideCeil(SB, 64)));
1634 APFloat Quad(T->getFltSemantics(), AI);
1635 return wrap(ConstantFP::get(T, Quad));
1636}
1637
1638unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal) {
1639 return unwrap<ConstantInt>(ConstantVal)->getZExtValue();
1640}
1641
1643 return unwrap<ConstantInt>(ConstantVal)->getSExtValue();
1644}
1645
1646unsigned long long LLVMConstByteGetZExtValue(LLVMValueRef ConstantVal) {
1647 return unwrap<ConstantByte>(ConstantVal)->getZExtValue();
1648}
1649
1651 return unwrap<ConstantByte>(ConstantVal)->getSExtValue();
1652}
1653
1654double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *LosesInfo) {
1655 ConstantFP *cFP = unwrap<ConstantFP>(ConstantVal) ;
1656 Type *Ty = cFP->getType();
1657
1658 if (Ty->isHalfTy() || Ty->isBFloatTy() || Ty->isFloatTy() ||
1659 Ty->isDoubleTy()) {
1660 *LosesInfo = false;
1661 return cFP->getValueAPF().convertToDouble();
1662 }
1663
1664 bool APFLosesInfo;
1665 APFloat APF = cFP->getValueAPF();
1667 *LosesInfo = APFLosesInfo;
1668 return APF.convertToDouble();
1669}
1670
1671/*--.. Operations on composite constants ...................................--*/
1672
1674 unsigned Length,
1675 LLVMBool DontNullTerminate) {
1676 /* Inverted the sense of AddNull because ', 0)' is a
1677 better mnemonic for null termination than ', 1)'. */
1679 DontNullTerminate == 0));
1680}
1681
1683 size_t Length,
1684 LLVMBool DontNullTerminate) {
1685 /* Inverted the sense of AddNull because ', 0)' is a
1686 better mnemonic for null termination than ', 1)'. */
1688 DontNullTerminate == 0));
1689}
1690
1691LLVMValueRef LLVMConstString(const char *Str, unsigned Length,
1692 LLVMBool DontNullTerminate) {
1694 DontNullTerminate);
1695}
1696
1698 return wrap(unwrap<Constant>(C)->getAggregateElement(Idx));
1699}
1700
1702 return wrap(unwrap<ConstantDataSequential>(C)->getElementAsConstant(idx));
1703}
1704
1708
1709const char *LLVMGetAsString(LLVMValueRef C, size_t *Length) {
1711 *Length = Str.size();
1712 return Str.data();
1713}
1714
1715const char *LLVMGetRawDataValues(LLVMValueRef C, size_t *SizeInBytes) {
1716 StringRef Str = unwrap<ConstantDataSequential>(C)->getRawDataValues();
1717 *SizeInBytes = Str.size();
1718 return Str.data();
1719}
1720
1722 LLVMValueRef *ConstantVals, unsigned Length) {
1724 return wrap(ConstantArray::get(ArrayType::get(unwrap(ElementTy), Length), V));
1725}
1726
1728 uint64_t Length) {
1730 return wrap(ConstantArray::get(ArrayType::get(unwrap(ElementTy), Length), V));
1731}
1732
1734 size_t SizeInBytes) {
1735 Type *Ty = unwrap(ElementTy);
1736 size_t Len = SizeInBytes / (Ty->getPrimitiveSizeInBits() / 8);
1737 return wrap(ConstantDataArray::getRaw(StringRef(Data, SizeInBytes), Len, Ty));
1738}
1739
1741 LLVMValueRef *ConstantVals,
1742 unsigned Count, LLVMBool Packed) {
1743 Constant **Elements = unwrap<Constant>(ConstantVals, Count);
1744 return wrap(ConstantStruct::getAnon(*unwrap(C), ArrayRef(Elements, Count),
1745 Packed != 0));
1746}
1747
1749 LLVMBool Packed) {
1751 Count, Packed);
1752}
1753
1755 LLVMValueRef *ConstantVals,
1756 unsigned Count) {
1757 Constant **Elements = unwrap<Constant>(ConstantVals, Count);
1758 StructType *Ty = unwrap<StructType>(StructTy);
1759
1760 return wrap(ConstantStruct::get(Ty, ArrayRef(Elements, Count)));
1761}
1762
1763LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size) {
1765 ArrayRef(unwrap<Constant>(ScalarConstantVals, Size), Size)));
1766}
1767
1776
1777/*-- Opcode mapping */
1778
1780{
1781 switch (opcode) {
1782 default: llvm_unreachable("Unhandled Opcode.");
1783#define HANDLE_INST(num, opc, clas) case num: return LLVM##opc;
1784#include "llvm/IR/Instruction.def"
1785#undef HANDLE_INST
1786 }
1787}
1788
1790{
1791 switch (code) {
1792#define HANDLE_INST(num, opc, clas) case LLVM##opc: return num;
1793#include "llvm/IR/Instruction.def"
1794#undef HANDLE_INST
1795 }
1796 llvm_unreachable("Unhandled Opcode.");
1797}
1798
1799/*-- GEP wrap flag conversions */
1800
1802 GEPNoWrapFlags NewGEPFlags;
1803 if ((GEPFlags & LLVMGEPFlagInBounds) != 0)
1804 NewGEPFlags |= GEPNoWrapFlags::inBounds();
1805 if ((GEPFlags & LLVMGEPFlagNUSW) != 0)
1806 NewGEPFlags |= GEPNoWrapFlags::noUnsignedSignedWrap();
1807 if ((GEPFlags & LLVMGEPFlagNUW) != 0)
1808 NewGEPFlags |= GEPNoWrapFlags::noUnsignedWrap();
1809
1810 return NewGEPFlags;
1811}
1812
1814 LLVMGEPNoWrapFlags NewGEPFlags = 0;
1815 if (GEPFlags.isInBounds())
1816 NewGEPFlags |= LLVMGEPFlagInBounds;
1817 if (GEPFlags.hasNoUnsignedSignedWrap())
1818 NewGEPFlags |= LLVMGEPFlagNUSW;
1819 if (GEPFlags.hasNoUnsignedWrap())
1820 NewGEPFlags |= LLVMGEPFlagNUW;
1821
1822 return NewGEPFlags;
1823}
1824
1825/*--.. Constant expressions ................................................--*/
1826
1830
1834
1838
1840 return wrap(ConstantExpr::getNeg(unwrap<Constant>(ConstantVal)));
1841}
1842
1846
1850
1851
1853 return wrap(ConstantExpr::getNot(unwrap<Constant>(ConstantVal)));
1854}
1855
1857 return wrap(ConstantExpr::getAdd(unwrap<Constant>(LHSConstant),
1858 unwrap<Constant>(RHSConstant)));
1859}
1860
1862 LLVMValueRef RHSConstant) {
1863 return wrap(ConstantExpr::getNSWAdd(unwrap<Constant>(LHSConstant),
1864 unwrap<Constant>(RHSConstant)));
1865}
1866
1868 LLVMValueRef RHSConstant) {
1869 return wrap(ConstantExpr::getNUWAdd(unwrap<Constant>(LHSConstant),
1870 unwrap<Constant>(RHSConstant)));
1871}
1872
1874 return wrap(ConstantExpr::getSub(unwrap<Constant>(LHSConstant),
1875 unwrap<Constant>(RHSConstant)));
1876}
1877
1879 LLVMValueRef RHSConstant) {
1880 return wrap(ConstantExpr::getNSWSub(unwrap<Constant>(LHSConstant),
1881 unwrap<Constant>(RHSConstant)));
1882}
1883
1885 LLVMValueRef RHSConstant) {
1886 return wrap(ConstantExpr::getNUWSub(unwrap<Constant>(LHSConstant),
1887 unwrap<Constant>(RHSConstant)));
1888}
1889
1891 return wrap(ConstantExpr::getXor(unwrap<Constant>(LHSConstant),
1892 unwrap<Constant>(RHSConstant)));
1893}
1894
1896 LLVMValueRef *ConstantIndices, unsigned NumIndices) {
1897 ArrayRef<Constant *> IdxList(unwrap<Constant>(ConstantIndices, NumIndices),
1898 NumIndices);
1899 Constant *Val = unwrap<Constant>(ConstantVal);
1900 return wrap(ConstantExpr::getGetElementPtr(unwrap(Ty), Val, IdxList));
1901}
1902
1904 LLVMValueRef *ConstantIndices,
1905 unsigned NumIndices) {
1906 ArrayRef<Constant *> IdxList(unwrap<Constant>(ConstantIndices, NumIndices),
1907 NumIndices);
1908 Constant *Val = unwrap<Constant>(ConstantVal);
1909 return wrap(ConstantExpr::getInBoundsGetElementPtr(unwrap(Ty), Val, IdxList));
1910}
1911
1913 LLVMValueRef ConstantVal,
1914 LLVMValueRef *ConstantIndices,
1915 unsigned NumIndices,
1916 LLVMGEPNoWrapFlags NoWrapFlags) {
1917 ArrayRef<Constant *> IdxList(unwrap<Constant>(ConstantIndices, NumIndices),
1918 NumIndices);
1919 Constant *Val = unwrap<Constant>(ConstantVal);
1921 unwrap(Ty), Val, IdxList, mapFromLLVMGEPNoWrapFlags(NoWrapFlags)));
1922}
1923
1925 return wrap(ConstantExpr::getTrunc(unwrap<Constant>(ConstantVal),
1926 unwrap(ToType)));
1927}
1928
1931 unwrap(ToType)));
1932}
1933
1936 unwrap(ToType)));
1937}
1938
1941 unwrap(ToType)));
1942}
1943
1945 LLVMTypeRef ToType) {
1947 unwrap(ToType)));
1948}
1949
1951 LLVMTypeRef ToType) {
1953 unwrap(ToType)));
1954}
1955
1957 LLVMTypeRef ToType) {
1959 unwrap(ToType)));
1960}
1961
1963 LLVMValueRef IndexConstant) {
1965 unwrap<Constant>(IndexConstant)));
1966}
1967
1969 LLVMValueRef ElementValueConstant,
1970 LLVMValueRef IndexConstant) {
1972 unwrap<Constant>(ElementValueConstant),
1973 unwrap<Constant>(IndexConstant)));
1974}
1975
1977 LLVMValueRef VectorBConstant,
1978 LLVMValueRef MaskConstant) {
1979 SmallVector<int, 16> IntMask;
1982 unwrap<Constant>(VectorBConstant),
1983 IntMask));
1984}
1985
1987 const char *Constraints,
1988 LLVMBool HasSideEffects,
1989 LLVMBool IsAlignStack) {
1990 return wrap(InlineAsm::get(dyn_cast<FunctionType>(unwrap(Ty)), AsmString,
1991 Constraints, HasSideEffects, IsAlignStack));
1992}
1993
1997
2001
2003 return wrap(unwrap<BlockAddress>(BlockAddr)->getBasicBlock());
2004}
2005
2006/*--.. Operations on global variables, functions, and aliases (globals) ....--*/
2007
2011
2015
2044
2047
2048 switch (Linkage) {
2051 break;
2054 break;
2057 break;
2060 break;
2062 LLVM_DEBUG(
2063 errs() << "LLVMSetLinkage(): LLVMLinkOnceODRAutoHideLinkage is no "
2064 "longer supported.");
2065 break;
2066 case LLVMWeakAnyLinkage:
2068 break;
2069 case LLVMWeakODRLinkage:
2071 break;
2074 break;
2077 break;
2078 case LLVMPrivateLinkage:
2080 break;
2083 break;
2086 break;
2088 LLVM_DEBUG(
2089 errs()
2090 << "LLVMSetLinkage(): LLVMDLLImportLinkage is no longer supported.");
2091 break;
2093 LLVM_DEBUG(
2094 errs()
2095 << "LLVMSetLinkage(): LLVMDLLExportLinkage is no longer supported.");
2096 break;
2099 break;
2100 case LLVMGhostLinkage:
2101 LLVM_DEBUG(
2102 errs() << "LLVMSetLinkage(): LLVMGhostLinkage is no longer supported.");
2103 break;
2104 case LLVMCommonLinkage:
2106 break;
2107 }
2108}
2109
2111 // Using .data() is safe because of how GlobalObject::setSection is
2112 // implemented.
2113 return unwrap<GlobalValue>(Global)->getSection().data();
2114}
2115
2116void LLVMSetSection(LLVMValueRef Global, const char *Section) {
2117 unwrap<GlobalObject>(Global)->setSection(Section);
2118}
2119
2121 return static_cast<LLVMVisibility>(
2122 unwrap<GlobalValue>(Global)->getVisibility());
2123}
2124
2127 ->setVisibility(static_cast<GlobalValue::VisibilityTypes>(Viz));
2128}
2129
2131 return static_cast<LLVMDLLStorageClass>(
2132 unwrap<GlobalValue>(Global)->getDLLStorageClass());
2133}
2134
2136 unwrap<GlobalValue>(Global)->setDLLStorageClass(
2137 static_cast<GlobalValue::DLLStorageClassTypes>(Class));
2138}
2139
2151
2164
2166 return unwrap<GlobalValue>(Global)->hasGlobalUnnamedAddr();
2167}
2168
2170 unwrap<GlobalValue>(Global)->setUnnamedAddr(
2171 HasUnnamedAddr ? GlobalValue::UnnamedAddr::Global
2173}
2174
2178
2179/*--.. Operations on global variables, load and store instructions .........--*/
2180
2182 Value *P = unwrap(V);
2184 return GV->getAlign() ? GV->getAlign()->value() : 0;
2186 return F->getAlign() ? F->getAlign()->value() : 0;
2188 return AI->getAlign().value();
2189 if (LoadInst *LI = dyn_cast<LoadInst>(P))
2190 return LI->getAlign().value();
2192 return SI->getAlign().value();
2194 return RMWI->getAlign().value();
2196 return CXI->getAlign().value();
2197
2199 "only GlobalValue, AllocaInst, LoadInst, StoreInst, AtomicRMWInst, "
2200 "and AtomicCmpXchgInst have alignment");
2201}
2202
2203void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes) {
2204 Value *P = unwrap(V);
2206 GV->setAlignment(MaybeAlign(Bytes));
2207 else if (Function *F = dyn_cast<Function>(P))
2208 F->setAlignment(MaybeAlign(Bytes));
2209 else if (AllocaInst *AI = dyn_cast<AllocaInst>(P))
2210 AI->setAlignment(Align(Bytes));
2211 else if (LoadInst *LI = dyn_cast<LoadInst>(P))
2212 LI->setAlignment(Align(Bytes));
2213 else if (StoreInst *SI = dyn_cast<StoreInst>(P))
2214 SI->setAlignment(Align(Bytes));
2215 else if (AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(P))
2216 RMWI->setAlignment(Align(Bytes));
2218 CXI->setAlignment(Align(Bytes));
2219 else
2221 "only GlobalValue, AllocaInst, LoadInst, StoreInst, AtomicRMWInst, and "
2222 "and AtomicCmpXchgInst have alignment");
2223}
2224
2226 size_t *NumEntries) {
2227 return llvm_getMetadata(NumEntries, [&Value](MetadataEntries &Entries) {
2228 Entries.clear();
2230 Instr->getAllMetadata(Entries);
2231 } else {
2232 unwrap<GlobalObject>(Value)->getAllMetadata(Entries);
2233 }
2234 });
2235}
2236
2238 unsigned Index) {
2240 static_cast<LLVMOpaqueValueMetadataEntry>(Entries[Index]);
2241 return MVE.Kind;
2242}
2243
2246 unsigned Index) {
2248 static_cast<LLVMOpaqueValueMetadataEntry>(Entries[Index]);
2249 return MVE.Metadata;
2250}
2251
2253 free(Entries);
2254}
2255
2257 LLVMMetadataRef MD) {
2258 unwrap<GlobalObject>(Global)->setMetadata(Kind, unwrap<MDNode>(MD));
2259}
2260
2262 LLVMMetadataRef MD) {
2263 unwrap<GlobalObject>(Global)->addMetadata(Kind, *unwrap<MDNode>(MD));
2264}
2265
2267 unwrap<GlobalObject>(Global)->eraseMetadata(Kind);
2268}
2269
2273
2278
2279/*--.. Operations on global variables ......................................--*/
2280
2282 return wrap(new GlobalVariable(*unwrap(M), unwrap(Ty), false,
2283 GlobalValue::ExternalLinkage, nullptr, Name));
2284}
2285
2287 const char *Name,
2288 unsigned AddressSpace) {
2289 return wrap(new GlobalVariable(*unwrap(M), unwrap(Ty), false,
2290 GlobalValue::ExternalLinkage, nullptr, Name,
2292 AddressSpace));
2293}
2294
2296 return wrap(unwrap(M)->getNamedGlobal(Name));
2297}
2298
2300 size_t Length) {
2301 return wrap(unwrap(M)->getNamedGlobal(StringRef(Name, Length)));
2302}
2303
2305 Module *Mod = unwrap(M);
2306 Module::global_iterator I = Mod->global_begin();
2307 if (I == Mod->global_end())
2308 return nullptr;
2309 return wrap(&*I);
2310}
2311
2313 Module *Mod = unwrap(M);
2314 Module::global_iterator I = Mod->global_end();
2315 if (I == Mod->global_begin())
2316 return nullptr;
2317 return wrap(&*--I);
2318}
2319
2321 GlobalVariable *GV = unwrap<GlobalVariable>(GlobalVar);
2323 if (++I == GV->getParent()->global_end())
2324 return nullptr;
2325 return wrap(&*I);
2326}
2327
2329 GlobalVariable *GV = unwrap<GlobalVariable>(GlobalVar);
2331 if (I == GV->getParent()->global_begin())
2332 return nullptr;
2333 return wrap(&*--I);
2334}
2335
2337 unwrap<GlobalVariable>(GlobalVar)->eraseFromParent();
2338}
2339
2341 GlobalVariable* GV = unwrap<GlobalVariable>(GlobalVar);
2342 if ( !GV->hasInitializer() )
2343 return nullptr;
2344 return wrap(GV->getInitializer());
2345}
2346
2347void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal) {
2348 unwrap<GlobalVariable>(GlobalVar)->setInitializer(
2349 ConstantVal ? unwrap<Constant>(ConstantVal) : nullptr);
2350}
2351
2353 return unwrap<GlobalVariable>(GlobalVar)->isThreadLocal();
2354}
2355
2356void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal) {
2357 unwrap<GlobalVariable>(GlobalVar)->setThreadLocal(IsThreadLocal != 0);
2358}
2359
2361 return unwrap<GlobalVariable>(GlobalVar)->isConstant();
2362}
2363
2364void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant) {
2365 unwrap<GlobalVariable>(GlobalVar)->setConstant(IsConstant != 0);
2366}
2367
2369 switch (unwrap<GlobalVariable>(GlobalVar)->getThreadLocalMode()) {
2371 return LLVMNotThreadLocal;
2379 return LLVMLocalExecTLSModel;
2380 }
2381
2382 llvm_unreachable("Invalid GlobalVariable thread local mode");
2383}
2384
2406
2408 return unwrap<GlobalVariable>(GlobalVar)->isExternallyInitialized();
2409}
2410
2412 unwrap<GlobalVariable>(GlobalVar)->setExternallyInitialized(IsExtInit);
2413}
2414
2415/*--.. Operations on aliases ......................................--*/
2416
2418 unsigned AddrSpace, LLVMValueRef Aliasee,
2419 const char *Name) {
2420 return wrap(GlobalAlias::create(unwrap(ValueTy), AddrSpace,
2422 unwrap<Constant>(Aliasee), unwrap(M)));
2423}
2424
2426 const char *Name, size_t NameLen) {
2427 return wrap(unwrap(M)->getNamedAlias(StringRef(Name, NameLen)));
2428}
2429
2431 Module *Mod = unwrap(M);
2432 Module::alias_iterator I = Mod->alias_begin();
2433 if (I == Mod->alias_end())
2434 return nullptr;
2435 return wrap(&*I);
2436}
2437
2439 Module *Mod = unwrap(M);
2440 Module::alias_iterator I = Mod->alias_end();
2441 if (I == Mod->alias_begin())
2442 return nullptr;
2443 return wrap(&*--I);
2444}
2445
2447 GlobalAlias *Alias = unwrap<GlobalAlias>(GA);
2449 if (++I == Alias->getParent()->alias_end())
2450 return nullptr;
2451 return wrap(&*I);
2452}
2453
2455 GlobalAlias *Alias = unwrap<GlobalAlias>(GA);
2457 if (I == Alias->getParent()->alias_begin())
2458 return nullptr;
2459 return wrap(&*--I);
2460}
2461
2463 return wrap(unwrap<GlobalAlias>(Alias)->getAliasee());
2464}
2465
2467 unwrap<GlobalAlias>(Alias)->setAliasee(unwrap<Constant>(Aliasee));
2468}
2469
2470/*--.. Operations on functions .............................................--*/
2471
2473 LLVMTypeRef FunctionTy) {
2474 return wrap(Function::Create(unwrap<FunctionType>(FunctionTy),
2476}
2477
2479 size_t NameLen, LLVMTypeRef FunctionTy) {
2480 return wrap(unwrap(M)
2481 ->getOrInsertFunction(StringRef(Name, NameLen),
2482 unwrap<FunctionType>(FunctionTy))
2483 .getCallee());
2484}
2485
2487 return wrap(unwrap(M)->getFunction(Name));
2488}
2489
2491 size_t Length) {
2492 return wrap(unwrap(M)->getFunction(StringRef(Name, Length)));
2493}
2494
2496 Module *Mod = unwrap(M);
2497 Module::iterator I = Mod->begin();
2498 if (I == Mod->end())
2499 return nullptr;
2500 return wrap(&*I);
2501}
2502
2504 Module *Mod = unwrap(M);
2505 Module::iterator I = Mod->end();
2506 if (I == Mod->begin())
2507 return nullptr;
2508 return wrap(&*--I);
2509}
2510
2512 Function *Func = unwrap<Function>(Fn);
2513 Module::iterator I(Func);
2514 if (++I == Func->getParent()->end())
2515 return nullptr;
2516 return wrap(&*I);
2517}
2518
2520 Function *Func = unwrap<Function>(Fn);
2521 Module::iterator I(Func);
2522 if (I == Func->getParent()->begin())
2523 return nullptr;
2524 return wrap(&*--I);
2525}
2526
2528 unwrap<Function>(Fn)->eraseFromParent();
2529}
2530
2532 return unwrap<Function>(Fn)->hasPersonalityFn();
2533}
2534
2536 return wrap(unwrap<Function>(Fn)->getPersonalityFn());
2537}
2538
2540 unwrap<Function>(Fn)->setPersonalityFn(
2541 PersonalityFn ? unwrap<Constant>(PersonalityFn) : nullptr);
2542}
2543
2545 if (Function *F = dyn_cast<Function>(unwrap(Fn)))
2546 return F->getIntrinsicID();
2547 return 0;
2548}
2549
2551 assert(ID < llvm::Intrinsic::num_intrinsics && "Intrinsic ID out of range");
2552 return llvm::Intrinsic::ID(ID);
2553}
2554
2556 LLVMTypeRef *OverloadTypes,
2557 size_t OverloadCount) {
2558 ArrayRef<Type *> OverloadTys(unwrap(OverloadTypes), OverloadCount);
2559 auto IID = llvm_map_to_intrinsic_id(ID);
2560 return wrap(
2562}
2563
2564const char *LLVMIntrinsicGetName(unsigned ID, size_t *NameLength) {
2565 auto IID = llvm_map_to_intrinsic_id(ID);
2566 auto Str = llvm::Intrinsic::getName(IID);
2567 *NameLength = Str.size();
2568 return Str.data();
2569}
2570
2572 LLVMTypeRef *OverloadTypes,
2573 size_t OverloadCount) {
2574 auto IID = llvm_map_to_intrinsic_id(ID);
2575 ArrayRef<Type *> OverloadTys(unwrap(OverloadTypes), OverloadCount);
2576 return wrap(llvm::Intrinsic::getType(*unwrap(Ctx), IID, OverloadTys));
2577}
2578
2579char *LLVMIntrinsicCopyOverloadedName(unsigned ID, LLVMTypeRef *OverloadTypes,
2580 size_t OverloadCount,
2581 size_t *NameLength) {
2582 auto IID = llvm_map_to_intrinsic_id(ID);
2583 ArrayRef<Type *> OverloadTys(unwrap(OverloadTypes), OverloadCount);
2584 auto Str = llvm::Intrinsic::getNameNoUnnamedTypes(IID, OverloadTys);
2585 *NameLength = Str.length();
2586 return strdup(Str.c_str());
2587}
2588
2590 LLVMTypeRef *OverloadTypes,
2591 size_t OverloadCount,
2592 size_t *NameLength) {
2593 auto IID = llvm_map_to_intrinsic_id(ID);
2594 ArrayRef<Type *> OverloadTys(unwrap(OverloadTypes), OverloadCount);
2595 auto Str = llvm::Intrinsic::getName(IID, OverloadTys, unwrap(Mod));
2596 *NameLength = Str.length();
2597 return strdup(Str.c_str());
2598}
2599
2600unsigned LLVMLookupIntrinsicID(const char *Name, size_t NameLen) {
2601 return Intrinsic::lookupIntrinsicID({Name, NameLen});
2602}
2603
2608
2610 return unwrap<Function>(Fn)->getCallingConv();
2611}
2612
2614 return unwrap<Function>(Fn)->setCallingConv(
2615 static_cast<CallingConv::ID>(CC));
2616}
2617
2618const char *LLVMGetGC(LLVMValueRef Fn) {
2620 return F->hasGC()? F->getGC().c_str() : nullptr;
2621}
2622
2623void LLVMSetGC(LLVMValueRef Fn, const char *GC) {
2625 if (GC)
2626 F->setGC(GC);
2627 else
2628 F->clearGC();
2629}
2630
2633 return wrap(F->getPrefixData());
2634}
2635
2638 return F->hasPrefixData();
2639}
2640
2643 Constant *prefix = unwrap<Constant>(prefixData);
2644 F->setPrefixData(prefix);
2645}
2646
2649 return wrap(F->getPrologueData());
2650}
2651
2654 return F->hasPrologueData();
2655}
2656
2659 Constant *prologue = unwrap<Constant>(prologueData);
2660 F->setPrologueData(prologue);
2661}
2662
2665 unwrap<Function>(F)->addAttributeAtIndex(Idx, unwrap(A));
2666}
2667
2669 auto AS = unwrap<Function>(F)->getAttributes().getAttributes(Idx);
2670 return AS.getNumAttributes();
2671}
2672
2674 LLVMAttributeRef *Attrs) {
2675 auto AS = unwrap<Function>(F)->getAttributes().getAttributes(Idx);
2676 for (auto A : AS)
2677 *Attrs++ = wrap(A);
2678}
2679
2682 unsigned KindID) {
2683 return wrap(unwrap<Function>(F)->getAttributeAtIndex(
2684 Idx, (Attribute::AttrKind)KindID));
2685}
2686
2689 const char *K, unsigned KLen) {
2690 return wrap(
2691 unwrap<Function>(F)->getAttributeAtIndex(Idx, StringRef(K, KLen)));
2692}
2693
2695 unsigned KindID) {
2696 unwrap<Function>(F)->removeAttributeAtIndex(Idx, (Attribute::AttrKind)KindID);
2697}
2698
2700 const char *K, unsigned KLen) {
2701 unwrap<Function>(F)->removeAttributeAtIndex(Idx, StringRef(K, KLen));
2702}
2703
2705 const char *V) {
2706 Function *Func = unwrap<Function>(Fn);
2707 Attribute Attr = Attribute::get(Func->getContext(), A, V);
2708 Func->addFnAttr(Attr);
2709}
2710
2711/*--.. Operations on parameters ............................................--*/
2712
2714 // This function is strictly redundant to
2715 // LLVMCountParamTypes(LLVMGlobalGetValueType(FnRef))
2716 return unwrap<Function>(FnRef)->arg_size();
2717}
2718
2719void LLVMGetParams(LLVMValueRef FnRef, LLVMValueRef *ParamRefs) {
2720 Function *Fn = unwrap<Function>(FnRef);
2721 for (Argument &A : Fn->args())
2722 *ParamRefs++ = wrap(&A);
2723}
2724
2726 Function *Fn = unwrap<Function>(FnRef);
2727 return wrap(&Fn->arg_begin()[index]);
2728}
2729
2733
2735 Function *Func = unwrap<Function>(Fn);
2736 Function::arg_iterator I = Func->arg_begin();
2737 if (I == Func->arg_end())
2738 return nullptr;
2739 return wrap(&*I);
2740}
2741
2743 Function *Func = unwrap<Function>(Fn);
2744 Function::arg_iterator I = Func->arg_end();
2745 if (I == Func->arg_begin())
2746 return nullptr;
2747 return wrap(&*--I);
2748}
2749
2751 Argument *A = unwrap<Argument>(Arg);
2752 Function *Fn = A->getParent();
2753 if (A->getArgNo() + 1 >= Fn->arg_size())
2754 return nullptr;
2755 return wrap(&Fn->arg_begin()[A->getArgNo() + 1]);
2756}
2757
2759 Argument *A = unwrap<Argument>(Arg);
2760 if (A->getArgNo() == 0)
2761 return nullptr;
2762 return wrap(&A->getParent()->arg_begin()[A->getArgNo() - 1]);
2763}
2764
2765void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align) {
2766 Argument *A = unwrap<Argument>(Arg);
2767 A->addAttr(Attribute::getWithAlignment(A->getContext(), Align(align)));
2768}
2769
2770/*--.. Operations on ifuncs ................................................--*/
2771
2773 const char *Name, size_t NameLen,
2774 LLVMTypeRef Ty, unsigned AddrSpace,
2776 return wrap(GlobalIFunc::create(unwrap(Ty), AddrSpace,
2778 StringRef(Name, NameLen),
2780}
2781
2783 const char *Name, size_t NameLen) {
2784 return wrap(unwrap(M)->getNamedIFunc(StringRef(Name, NameLen)));
2785}
2786
2788 Module *Mod = unwrap(M);
2789 Module::ifunc_iterator I = Mod->ifunc_begin();
2790 if (I == Mod->ifunc_end())
2791 return nullptr;
2792 return wrap(&*I);
2793}
2794
2796 Module *Mod = unwrap(M);
2797 Module::ifunc_iterator I = Mod->ifunc_end();
2798 if (I == Mod->ifunc_begin())
2799 return nullptr;
2800 return wrap(&*--I);
2801}
2802
2804 GlobalIFunc *GIF = unwrap<GlobalIFunc>(IFunc);
2806 if (++I == GIF->getParent()->ifunc_end())
2807 return nullptr;
2808 return wrap(&*I);
2809}
2810
2812 GlobalIFunc *GIF = unwrap<GlobalIFunc>(IFunc);
2814 if (I == GIF->getParent()->ifunc_begin())
2815 return nullptr;
2816 return wrap(&*--I);
2817}
2818
2820 return wrap(unwrap<GlobalIFunc>(IFunc)->getResolver());
2821}
2822
2826
2828 unwrap<GlobalIFunc>(IFunc)->eraseFromParent();
2829}
2830
2832 unwrap<GlobalIFunc>(IFunc)->removeFromParent();
2833}
2834
2835/*--.. Operations on operand bundles........................................--*/
2836
2837LLVMOperandBundleRef LLVMCreateOperandBundle(const char *Tag, size_t TagLen,
2838 LLVMValueRef *Args,
2839 unsigned NumArgs) {
2840 return wrap(new OperandBundleDef(std::string(Tag, TagLen),
2841 ArrayRef(unwrap(Args), NumArgs)));
2842}
2843
2845 delete unwrap(Bundle);
2846}
2847
2848const char *LLVMGetOperandBundleTag(LLVMOperandBundleRef Bundle, size_t *Len) {
2849 StringRef Str = unwrap(Bundle)->getTag();
2850 *Len = Str.size();
2851 return Str.data();
2852}
2853
2855 return unwrap(Bundle)->inputs().size();
2856}
2857
2859 unsigned Index) {
2860 return wrap(unwrap(Bundle)->inputs()[Index]);
2861}
2862
2863/*--.. Operations on basic blocks ..........................................--*/
2864
2866 return wrap(static_cast<Value*>(unwrap(BB)));
2867}
2868
2872
2876
2878 return unwrap(BB)->getName().data();
2879}
2880
2884
2886 return wrap(unwrap(BB)->getTerminatorOrNull());
2887}
2888
2890 return unwrap<Function>(FnRef)->size();
2891}
2892
2894 Function *Fn = unwrap<Function>(FnRef);
2895 for (BasicBlock &BB : *Fn)
2896 *BasicBlocksRefs++ = wrap(&BB);
2897}
2898
2900 return wrap(&unwrap<Function>(Fn)->getEntryBlock());
2901}
2902
2904 Function *Func = unwrap<Function>(Fn);
2905 Function::iterator I = Func->begin();
2906 if (I == Func->end())
2907 return nullptr;
2908 return wrap(&*I);
2909}
2910
2912 Function *Func = unwrap<Function>(Fn);
2913 Function::iterator I = Func->end();
2914 if (I == Func->begin())
2915 return nullptr;
2916 return wrap(&*--I);
2917}
2918
2920 BasicBlock *Block = unwrap(BB);
2922 if (++I == Block->getParent()->end())
2923 return nullptr;
2924 return wrap(&*I);
2925}
2926
2928 BasicBlock *Block = unwrap(BB);
2930 if (I == Block->getParent()->begin())
2931 return nullptr;
2932 return wrap(&*--I);
2933}
2934
2939
2941 LLVMBasicBlockRef BB) {
2942 BasicBlock *ToInsert = unwrap(BB);
2943 BasicBlock *CurBB = unwrap(Builder)->GetInsertBlock();
2944 assert(CurBB && "current insertion point is invalid!");
2945 CurBB->getParent()->insert(std::next(CurBB->getIterator()), ToInsert);
2946}
2947
2949 LLVMBasicBlockRef BB) {
2950 unwrap<Function>(Fn)->insert(unwrap<Function>(Fn)->end(), unwrap(BB));
2951}
2952
2954 LLVMValueRef FnRef,
2955 const char *Name) {
2956 return wrap(BasicBlock::Create(*unwrap(C), Name, unwrap<Function>(FnRef)));
2957}
2958
2962
2964 LLVMBasicBlockRef BBRef,
2965 const char *Name) {
2966 BasicBlock *BB = unwrap(BBRef);
2967 return wrap(BasicBlock::Create(*unwrap(C), Name, BB->getParent(), BB));
2968}
2969
2974
2976 unwrap(BBRef)->eraseFromParent();
2977}
2978
2980 unwrap(BBRef)->removeFromParent();
2981}
2982
2984 unwrap(BB)->moveBefore(unwrap(MovePos));
2985}
2986
2988 unwrap(BB)->moveAfter(unwrap(MovePos));
2989}
2990
2991/*--.. Operations on instructions ..........................................--*/
2992
2996
2998 BasicBlock *Block = unwrap(BB);
2999 BasicBlock::iterator I = Block->begin();
3000 if (I == Block->end())
3001 return nullptr;
3002 return wrap(&*I);
3003}
3004
3006 BasicBlock *Block = unwrap(BB);
3007 BasicBlock::iterator I = Block->end();
3008 if (I == Block->begin())
3009 return nullptr;
3010 return wrap(&*--I);
3011}
3012
3014 Instruction *Instr = unwrap<Instruction>(Inst);
3015 BasicBlock::iterator I(Instr);
3016 if (++I == Instr->getParent()->end())
3017 return nullptr;
3018 return wrap(&*I);
3019}
3020
3022 Instruction *Instr = unwrap<Instruction>(Inst);
3023 BasicBlock::iterator I(Instr);
3024 if (I == Instr->getParent()->begin())
3025 return nullptr;
3026 return wrap(&*--I);
3027}
3028
3030 unwrap<Instruction>(Inst)->removeFromParent();
3031}
3032
3034 unwrap<Instruction>(Inst)->eraseFromParent();
3035}
3036
3038 unwrap<Instruction>(Inst)->deleteValue();
3039}
3040
3042 if (ICmpInst *I = dyn_cast<ICmpInst>(unwrap(Inst)))
3043 return (LLVMIntPredicate)I->getPredicate();
3044 return (LLVMIntPredicate)0;
3045}
3046
3048 return unwrap<ICmpInst>(Inst)->hasSameSign();
3049}
3050
3052 unwrap<ICmpInst>(Inst)->setSameSign(SameSign);
3053}
3054
3056 if (FCmpInst *I = dyn_cast<FCmpInst>(unwrap(Inst)))
3057 return (LLVMRealPredicate)I->getPredicate();
3058 return (LLVMRealPredicate)0;
3059}
3060
3063 return map_to_llvmopcode(C->getOpcode());
3064 return (LLVMOpcode)0;
3065}
3066
3069 return wrap(C->clone());
3070 return nullptr;
3071}
3072
3075 return (I && I->isTerminator()) ? wrap(I) : nullptr;
3076}
3077
3079 Instruction *Instr = unwrap<Instruction>(Inst);
3080 if (!Instr->DebugMarker)
3081 return nullptr;
3082 auto I = Instr->DebugMarker->StoredDbgRecords.begin();
3083 if (I == Instr->DebugMarker->StoredDbgRecords.end())
3084 return nullptr;
3085 return wrap(&*I);
3086}
3087
3089 Instruction *Instr = unwrap<Instruction>(Inst);
3090 if (!Instr->DebugMarker)
3091 return nullptr;
3092 auto I = Instr->DebugMarker->StoredDbgRecords.rbegin();
3093 if (I == Instr->DebugMarker->StoredDbgRecords.rend())
3094 return nullptr;
3095 return wrap(&*I);
3096}
3097
3101 if (++I == Record->getInstruction()->DebugMarker->StoredDbgRecords.end())
3102 return nullptr;
3103 return wrap(&*I);
3104}
3105
3109 if (I == Record->getInstruction()->DebugMarker->StoredDbgRecords.begin())
3110 return nullptr;
3111 return wrap(&*--I);
3112}
3113
3117
3121 return LLVMDbgRecordLabel;
3123 assert(VariableRecord && "unexpected record");
3124 if (VariableRecord->isDbgDeclare())
3125 return LLVMDbgRecordDeclare;
3126 if (VariableRecord->isDbgValue())
3127 return LLVMDbgRecordValue;
3128 assert(VariableRecord->isDbgAssign() && "unexpected record");
3129 return LLVMDbgRecordAssign;
3130}
3131
3136
3140
3144
3146 if (FuncletPadInst *FPI = dyn_cast<FuncletPadInst>(unwrap(Instr))) {
3147 return FPI->arg_size();
3148 }
3149 return unwrap<CallBase>(Instr)->arg_size();
3150}
3151
3152/*--.. Call and invoke instructions ........................................--*/
3153
3155 return unwrap<CallBase>(Instr)->getCallingConv();
3156}
3157
3159 return unwrap<CallBase>(Instr)->setCallingConv(
3160 static_cast<CallingConv::ID>(CC));
3161}
3162
3164 unsigned align) {
3165 auto *Call = unwrap<CallBase>(Instr);
3166 Attribute AlignAttr =
3167 Attribute::getWithAlignment(Call->getContext(), Align(align));
3168 Call->addAttributeAtIndex(Idx, AlignAttr);
3169}
3170
3173 unwrap<CallBase>(C)->addAttributeAtIndex(Idx, unwrap(A));
3174}
3175
3177 LLVMAttributeIndex Idx) {
3178 auto *Call = unwrap<CallBase>(C);
3179 auto AS = Call->getAttributes().getAttributes(Idx);
3180 return AS.getNumAttributes();
3181}
3182
3184 LLVMAttributeRef *Attrs) {
3185 auto *Call = unwrap<CallBase>(C);
3186 auto AS = Call->getAttributes().getAttributes(Idx);
3187 for (auto A : AS)
3188 *Attrs++ = wrap(A);
3189}
3190
3193 unsigned KindID) {
3194 return wrap(unwrap<CallBase>(C)->getAttributeAtIndex(
3195 Idx, (Attribute::AttrKind)KindID));
3196}
3197
3200 const char *K, unsigned KLen) {
3201 return wrap(
3202 unwrap<CallBase>(C)->getAttributeAtIndex(Idx, StringRef(K, KLen)));
3203}
3204
3206 unsigned KindID) {
3207 unwrap<CallBase>(C)->removeAttributeAtIndex(Idx, (Attribute::AttrKind)KindID);
3208}
3209
3211 const char *K, unsigned KLen) {
3212 unwrap<CallBase>(C)->removeAttributeAtIndex(Idx, StringRef(K, KLen));
3213}
3214
3216 return wrap(unwrap<CallBase>(Instr)->getCalledOperand());
3217}
3218
3220 return wrap(unwrap<CallBase>(Instr)->getFunctionType());
3221}
3222
3224 return unwrap<CallBase>(C)->getNumOperandBundles();
3225}
3226
3228 unsigned Index) {
3229 return wrap(
3230 new OperandBundleDef(unwrap<CallBase>(C)->getOperandBundleAt(Index)));
3231}
3232
3233/*--.. Operations on call instructions (only) ..............................--*/
3234
3236 return unwrap<CallInst>(Call)->isTailCall();
3237}
3238
3240 unwrap<CallInst>(Call)->setTailCall(isTailCall);
3241}
3242
3246
3250
3251/*--.. Operations on invoke instructions (only) ............................--*/
3252
3254 return wrap(unwrap<InvokeInst>(Invoke)->getNormalDest());
3255}
3256
3259 return wrap(CRI->getUnwindDest());
3260 } else if (CatchSwitchInst *CSI = dyn_cast<CatchSwitchInst>(unwrap(Invoke))) {
3261 return wrap(CSI->getUnwindDest());
3262 }
3263 return wrap(unwrap<InvokeInst>(Invoke)->getUnwindDest());
3264}
3265
3267 unwrap<InvokeInst>(Invoke)->setNormalDest(unwrap(B));
3268}
3269
3272 return CRI->setUnwindDest(unwrap(B));
3273 } else if (CatchSwitchInst *CSI = dyn_cast<CatchSwitchInst>(unwrap(Invoke))) {
3274 return CSI->setUnwindDest(unwrap(B));
3275 }
3276 unwrap<InvokeInst>(Invoke)->setUnwindDest(unwrap(B));
3277}
3278
3280 return wrap(unwrap<CallBrInst>(CallBr)->getDefaultDest());
3281}
3282
3284 return unwrap<CallBrInst>(CallBr)->getNumIndirectDests();
3285}
3286
3288 return wrap(unwrap<CallBrInst>(CallBr)->getIndirectDest(Idx));
3289}
3290
3291/*--.. Operations on terminators ...........................................--*/
3292
3294 return unwrap<Instruction>(Term)->getNumSuccessors();
3295}
3296
3298 return wrap(unwrap<Instruction>(Term)->getSuccessor(i));
3299}
3300
3302 return unwrap<Instruction>(Term)->setSuccessor(i, unwrap(block));
3303}
3304
3305/*--.. Operations on branch instructions (only) ............................--*/
3306
3310
3314
3316 return unwrap<CondBrInst>(Branch)->setCondition(unwrap(Cond));
3317}
3318
3319/*--.. Operations on switch instructions (only) ............................--*/
3320
3322 return wrap(unwrap<SwitchInst>(Switch)->getDefaultDest());
3323}
3324
3326 assert(i > 0 && i <= unwrap<SwitchInst>(Switch)->getNumCases());
3327 auto It = unwrap<SwitchInst>(Switch)->case_begin() + (i - 1);
3328 return wrap(It->getCaseValue());
3329}
3330
3331void LLVMSetSwitchCaseValue(LLVMValueRef Switch, unsigned i,
3332 LLVMValueRef CaseValue) {
3333 assert(i > 0 && i <= unwrap<SwitchInst>(Switch)->getNumCases());
3334 auto It = unwrap<SwitchInst>(Switch)->case_begin() + (i - 1);
3335 It->setValue(unwrap<ConstantInt>(CaseValue));
3336}
3337
3338/*--.. Operations on alloca instructions (only) ............................--*/
3339
3341 return wrap(unwrap<AllocaInst>(Alloca)->getAllocatedType());
3342}
3343
3344/*--.. Operations on gep instructions (only) ...............................--*/
3345
3347 return unwrap<GEPOperator>(GEP)->isInBounds();
3348}
3349
3351 return unwrap<GetElementPtrInst>(GEP)->setIsInBounds(InBounds);
3352}
3353
3357
3362
3367
3368/*--.. Operations on phi nodes .............................................--*/
3369
3370void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
3371 LLVMBasicBlockRef *IncomingBlocks, unsigned Count) {
3372 PHINode *PhiVal = unwrap<PHINode>(PhiNode);
3373 for (unsigned I = 0; I != Count; ++I)
3374 PhiVal->addIncoming(unwrap(IncomingValues[I]), unwrap(IncomingBlocks[I]));
3375}
3376
3378 return unwrap<PHINode>(PhiNode)->getNumIncomingValues();
3379}
3380
3382 return wrap(unwrap<PHINode>(PhiNode)->getIncomingValue(Index));
3383}
3384
3386 return wrap(unwrap<PHINode>(PhiNode)->getIncomingBlock(Index));
3387}
3388
3389/*--.. Operations on extractvalue and insertvalue nodes ....................--*/
3390
3392 auto *I = unwrap(Inst);
3393 if (auto *GEP = dyn_cast<GEPOperator>(I))
3394 return GEP->getNumIndices();
3395 if (auto *EV = dyn_cast<ExtractValueInst>(I))
3396 return EV->getNumIndices();
3397 if (auto *IV = dyn_cast<InsertValueInst>(I))
3398 return IV->getNumIndices();
3400 "LLVMGetNumIndices applies only to extractvalue and insertvalue!");
3401}
3402
3403const unsigned *LLVMGetIndices(LLVMValueRef Inst) {
3404 auto *I = unwrap(Inst);
3405 if (auto *EV = dyn_cast<ExtractValueInst>(I))
3406 return EV->getIndices().data();
3407 if (auto *IV = dyn_cast<InsertValueInst>(I))
3408 return IV->getIndices().data();
3410 "LLVMGetIndices applies only to extractvalue and insertvalue!");
3411}
3412
3413
3414/*===-- Instruction builders ----------------------------------------------===*/
3415
3419
3423
3425 Instruction *Instr, bool BeforeDbgRecords) {
3426 BasicBlock::iterator I = Instr ? Instr->getIterator() : Block->end();
3427 I.setHeadBit(BeforeDbgRecords);
3428 Builder->SetInsertPoint(Block, I);
3429}
3430
3432 LLVMValueRef Instr) {
3433 return LLVMPositionBuilderImpl(unwrap(Builder), unwrap(Block),
3434 unwrap<Instruction>(Instr), false);
3435}
3436
3443
3446 return LLVMPositionBuilderImpl(unwrap(Builder), I->getParent(), I, false);
3447}
3448
3450 LLVMValueRef Instr) {
3452 return LLVMPositionBuilderImpl(unwrap(Builder), I->getParent(), I, true);
3453}
3454
3456 BasicBlock *BB = unwrap(Block);
3457 unwrap(Builder)->SetInsertPoint(BB);
3458}
3459
3461 return wrap(unwrap(Builder)->GetInsertBlock());
3462}
3463
3465 unwrap(Builder)->ClearInsertionPoint();
3466}
3467
3469 unwrap(Builder)->Insert(unwrap<Instruction>(Instr));
3470}
3471
3473 const char *Name) {
3474 unwrap(Builder)->Insert(unwrap<Instruction>(Instr), Name);
3475}
3476
3478 delete unwrap(Builder);
3479}
3480
3481/*--.. Metadata builders ...................................................--*/
3482
3484 return wrap(unwrap(Builder)->getCurrentDebugLocation().getAsMDNode());
3485}
3486
3488 if (Loc)
3489 unwrap(Builder)->SetCurrentDebugLocation(DebugLoc(unwrap<MDNode>(Loc)));
3490 else
3491 unwrap(Builder)->SetCurrentDebugLocation(DebugLoc());
3492}
3493
3495 MDNode *Loc =
3496 L ? cast<MDNode>(unwrap<MetadataAsValue>(L)->getMetadata()) : nullptr;
3497 unwrap(Builder)->SetCurrentDebugLocation(DebugLoc(Loc));
3498}
3499
3501 LLVMContext &Context = unwrap(Builder)->getContext();
3503 Context, unwrap(Builder)->getCurrentDebugLocation().getAsMDNode()));
3504}
3505
3507 unwrap(Builder)->SetInstDebugLocation(unwrap<Instruction>(Inst));
3508}
3509
3511 unwrap(Builder)->AddMetadataToInst(unwrap<Instruction>(Inst));
3512}
3513
3515 LLVMMetadataRef FPMathTag) {
3516
3517 unwrap(Builder)->setDefaultFPMathTag(FPMathTag
3518 ? unwrap<MDNode>(FPMathTag)
3519 : nullptr);
3520}
3521
3523 return wrap(&unwrap(Builder)->getContext());
3524}
3525
3527 return wrap(unwrap(Builder)->getDefaultFPMathTag());
3528}
3529
3530/*--.. Instruction builders ................................................--*/
3531
3533 return wrap(unwrap(B)->CreateRetVoid());
3534}
3535
3537 return wrap(unwrap(B)->CreateRet(unwrap(V)));
3538}
3539
3541 unsigned N) {
3542 return wrap(unwrap(B)->CreateAggregateRet({unwrap(RetVals), N}));
3543}
3544
3546 return wrap(unwrap(B)->CreateBr(unwrap(Dest)));
3547}
3548
3551 return wrap(unwrap(B)->CreateCondBr(unwrap(If), unwrap(Then), unwrap(Else)));
3552}
3553
3555 LLVMBasicBlockRef Else, unsigned NumCases) {
3556 return wrap(unwrap(B)->CreateSwitch(unwrap(V), unwrap(Else), NumCases));
3557}
3558
3560 unsigned NumDests) {
3561 return wrap(unwrap(B)->CreateIndirectBr(unwrap(Addr), NumDests));
3562}
3563
3565 LLVMBasicBlockRef DefaultDest,
3566 LLVMBasicBlockRef *IndirectDests,
3567 unsigned NumIndirectDests, LLVMValueRef *Args,
3568 unsigned NumArgs, LLVMOperandBundleRef *Bundles,
3569 unsigned NumBundles, const char *Name) {
3570
3572 for (auto *Bundle : ArrayRef(Bundles, NumBundles)) {
3573 OperandBundleDef *OB = unwrap(Bundle);
3574 OBs.push_back(*OB);
3575 }
3576
3577 return wrap(unwrap(B)->CreateCallBr(
3578 unwrap<FunctionType>(Ty), unwrap(Fn), unwrap(DefaultDest),
3579 ArrayRef(unwrap(IndirectDests), NumIndirectDests),
3580 ArrayRef<Value *>(unwrap(Args), NumArgs), OBs, Name));
3581}
3582
3584 LLVMValueRef *Args, unsigned NumArgs,
3586 const char *Name) {
3587 return wrap(unwrap(B)->CreateInvoke(unwrap<FunctionType>(Ty), unwrap(Fn),
3588 unwrap(Then), unwrap(Catch),
3589 ArrayRef(unwrap(Args), NumArgs), Name));
3590}
3591
3594 unsigned NumArgs, LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
3595 LLVMOperandBundleRef *Bundles, unsigned NumBundles, const char *Name) {
3597 for (auto *Bundle : ArrayRef(Bundles, NumBundles)) {
3598 OperandBundleDef *OB = unwrap(Bundle);
3599 OBs.push_back(*OB);
3600 }
3601 return wrap(unwrap(B)->CreateInvoke(
3602 unwrap<FunctionType>(Ty), unwrap(Fn), unwrap(Then), unwrap(Catch),
3603 ArrayRef(unwrap(Args), NumArgs), OBs, Name));
3604}
3605
3607 LLVMValueRef PersFn, unsigned NumClauses,
3608 const char *Name) {
3609 // The personality used to live on the landingpad instruction, but now it
3610 // lives on the parent function. For compatibility, take the provided
3611 // personality and put it on the parent function.
3612 if (PersFn)
3613 unwrap(B)->GetInsertBlock()->getParent()->setPersonalityFn(
3614 unwrap<Function>(PersFn));
3615 return wrap(unwrap(B)->CreateLandingPad(unwrap(Ty), NumClauses, Name));
3616}
3617
3619 LLVMValueRef *Args, unsigned NumArgs,
3620 const char *Name) {
3621 return wrap(unwrap(B)->CreateCatchPad(unwrap(ParentPad),
3622 ArrayRef(unwrap(Args), NumArgs), Name));
3623}
3624
3626 LLVMValueRef *Args, unsigned NumArgs,
3627 const char *Name) {
3628 if (ParentPad == nullptr) {
3629 Type *Ty = Type::getTokenTy(unwrap(B)->getContext());
3630 ParentPad = wrap(Constant::getNullValue(Ty));
3631 }
3632 return wrap(unwrap(B)->CreateCleanupPad(
3633 unwrap(ParentPad), ArrayRef(unwrap(Args), NumArgs), Name));
3634}
3635
3637 return wrap(unwrap(B)->CreateResume(unwrap(Exn)));
3638}
3639
3641 LLVMBasicBlockRef UnwindBB,
3642 unsigned NumHandlers, const char *Name) {
3643 if (ParentPad == nullptr) {
3644 Type *Ty = Type::getTokenTy(unwrap(B)->getContext());
3645 ParentPad = wrap(Constant::getNullValue(Ty));
3646 }
3647 return wrap(unwrap(B)->CreateCatchSwitch(unwrap(ParentPad), unwrap(UnwindBB),
3648 NumHandlers, Name));
3649}
3650
3652 LLVMBasicBlockRef BB) {
3653 return wrap(unwrap(B)->CreateCatchRet(unwrap<CatchPadInst>(CatchPad),
3654 unwrap(BB)));
3655}
3656
3658 LLVMBasicBlockRef BB) {
3659 return wrap(unwrap(B)->CreateCleanupRet(unwrap<CleanupPadInst>(CatchPad),
3660 unwrap(BB)));
3661}
3662
3664 return wrap(unwrap(B)->CreateUnreachable());
3665}
3666
3668 LLVMBasicBlockRef Dest) {
3669 unwrap<SwitchInst>(Switch)->addCase(unwrap<ConstantInt>(OnVal), unwrap(Dest));
3670}
3671
3673 unwrap<IndirectBrInst>(IndirectBr)->addDestination(unwrap(Dest));
3674}
3675
3676unsigned LLVMGetNumClauses(LLVMValueRef LandingPad) {
3677 return unwrap<LandingPadInst>(LandingPad)->getNumClauses();
3678}
3679
3680LLVMValueRef LLVMGetClause(LLVMValueRef LandingPad, unsigned Idx) {
3681 return wrap(unwrap<LandingPadInst>(LandingPad)->getClause(Idx));
3682}
3683
3684void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal) {
3685 unwrap<LandingPadInst>(LandingPad)->addClause(unwrap<Constant>(ClauseVal));
3686}
3687
3689 return unwrap<LandingPadInst>(LandingPad)->isCleanup();
3690}
3691
3692void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val) {
3693 unwrap<LandingPadInst>(LandingPad)->setCleanup(Val);
3694}
3695
3697 unwrap<CatchSwitchInst>(CatchSwitch)->addHandler(unwrap(Dest));
3698}
3699
3700unsigned LLVMGetNumHandlers(LLVMValueRef CatchSwitch) {
3701 return unwrap<CatchSwitchInst>(CatchSwitch)->getNumHandlers();
3702}
3703
3704void LLVMGetHandlers(LLVMValueRef CatchSwitch, LLVMBasicBlockRef *Handlers) {
3705 CatchSwitchInst *CSI = unwrap<CatchSwitchInst>(CatchSwitch);
3706 for (const BasicBlock *H : CSI->handlers())
3707 *Handlers++ = wrap(H);
3708}
3709
3711 return wrap(unwrap<CatchPadInst>(CatchPad)->getCatchSwitch());
3712}
3713
3715 unwrap<CatchPadInst>(CatchPad)
3716 ->setCatchSwitch(unwrap<CatchSwitchInst>(CatchSwitch));
3717}
3718
3719/*--.. Funclets ...........................................................--*/
3720
3722 return wrap(unwrap<FuncletPadInst>(Funclet)->getArgOperand(i));
3723}
3724
3725void LLVMSetArgOperand(LLVMValueRef Funclet, unsigned i, LLVMValueRef value) {
3726 unwrap<FuncletPadInst>(Funclet)->setArgOperand(i, unwrap(value));
3727}
3728
3729/*--.. Arithmetic ..........................................................--*/
3730
3732 FastMathFlags NewFMF;
3733 NewFMF.setAllowReassoc((FMF & LLVMFastMathAllowReassoc) != 0);
3734 NewFMF.setNoNaNs((FMF & LLVMFastMathNoNaNs) != 0);
3735 NewFMF.setNoInfs((FMF & LLVMFastMathNoInfs) != 0);
3736 NewFMF.setNoSignedZeros((FMF & LLVMFastMathNoSignedZeros) != 0);
3738 NewFMF.setAllowContract((FMF & LLVMFastMathAllowContract) != 0);
3739 NewFMF.setApproxFunc((FMF & LLVMFastMathApproxFunc) != 0);
3740
3741 return NewFMF;
3742}
3743
3746 if (FMF.allowReassoc())
3747 NewFMF |= LLVMFastMathAllowReassoc;
3748 if (FMF.noNaNs())
3749 NewFMF |= LLVMFastMathNoNaNs;
3750 if (FMF.noInfs())
3751 NewFMF |= LLVMFastMathNoInfs;
3752 if (FMF.noSignedZeros())
3753 NewFMF |= LLVMFastMathNoSignedZeros;
3754 if (FMF.allowReciprocal())
3756 if (FMF.allowContract())
3757 NewFMF |= LLVMFastMathAllowContract;
3758 if (FMF.approxFunc())
3759 NewFMF |= LLVMFastMathApproxFunc;
3760
3761 return NewFMF;
3762}
3763
3765 const char *Name) {
3766 return wrap(unwrap(B)->CreateAdd(unwrap(LHS), unwrap(RHS), Name));
3767}
3768
3770 const char *Name) {
3771 return wrap(unwrap(B)->CreateNSWAdd(unwrap(LHS), unwrap(RHS), Name));
3772}
3773
3775 const char *Name) {
3776 return wrap(unwrap(B)->CreateNUWAdd(unwrap(LHS), unwrap(RHS), Name));
3777}
3778
3780 const char *Name) {
3781 return wrap(unwrap(B)->CreateFAdd(unwrap(LHS), unwrap(RHS), Name));
3782}
3783
3785 const char *Name) {
3786 return wrap(unwrap(B)->CreateSub(unwrap(LHS), unwrap(RHS), Name));
3787}
3788
3790 const char *Name) {
3791 return wrap(unwrap(B)->CreateNSWSub(unwrap(LHS), unwrap(RHS), Name));
3792}
3793
3795 const char *Name) {
3796 return wrap(unwrap(B)->CreateNUWSub(unwrap(LHS), unwrap(RHS), Name));
3797}
3798
3800 const char *Name) {
3801 return wrap(unwrap(B)->CreateFSub(unwrap(LHS), unwrap(RHS), Name));
3802}
3803
3805 const char *Name) {
3806 return wrap(unwrap(B)->CreateMul(unwrap(LHS), unwrap(RHS), Name));
3807}
3808
3810 const char *Name) {
3811 return wrap(unwrap(B)->CreateNSWMul(unwrap(LHS), unwrap(RHS), Name));
3812}
3813
3815 const char *Name) {
3816 return wrap(unwrap(B)->CreateNUWMul(unwrap(LHS), unwrap(RHS), Name));
3817}
3818
3820 const char *Name) {
3821 return wrap(unwrap(B)->CreateFMul(unwrap(LHS), unwrap(RHS), Name));
3822}
3823
3825 const char *Name) {
3826 return wrap(unwrap(B)->CreateUDiv(unwrap(LHS), unwrap(RHS), Name));
3827}
3828
3830 LLVMValueRef RHS, const char *Name) {
3831 return wrap(unwrap(B)->CreateExactUDiv(unwrap(LHS), unwrap(RHS), Name));
3832}
3833
3835 const char *Name) {
3836 return wrap(unwrap(B)->CreateSDiv(unwrap(LHS), unwrap(RHS), Name));
3837}
3838
3840 LLVMValueRef RHS, const char *Name) {
3841 return wrap(unwrap(B)->CreateExactSDiv(unwrap(LHS), unwrap(RHS), Name));
3842}
3843
3845 const char *Name) {
3846 return wrap(unwrap(B)->CreateFDiv(unwrap(LHS), unwrap(RHS), Name));
3847}
3848
3850 const char *Name) {
3851 return wrap(unwrap(B)->CreateURem(unwrap(LHS), unwrap(RHS), Name));
3852}
3853
3855 const char *Name) {
3856 return wrap(unwrap(B)->CreateSRem(unwrap(LHS), unwrap(RHS), Name));
3857}
3858
3860 const char *Name) {
3861 return wrap(unwrap(B)->CreateFRem(unwrap(LHS), unwrap(RHS), Name));
3862}
3863
3865 const char *Name) {
3866 return wrap(unwrap(B)->CreateShl(unwrap(LHS), unwrap(RHS), Name));
3867}
3868
3870 const char *Name) {
3871 return wrap(unwrap(B)->CreateLShr(unwrap(LHS), unwrap(RHS), Name));
3872}
3873
3875 const char *Name) {
3876 return wrap(unwrap(B)->CreateAShr(unwrap(LHS), unwrap(RHS), Name));
3877}
3878
3880 const char *Name) {
3881 return wrap(unwrap(B)->CreateAnd(unwrap(LHS), unwrap(RHS), Name));
3882}
3883
3885 const char *Name) {
3886 return wrap(unwrap(B)->CreateOr(unwrap(LHS), unwrap(RHS), Name));
3887}
3888
3890 const char *Name) {
3891 return wrap(unwrap(B)->CreateXor(unwrap(LHS), unwrap(RHS), Name));
3892}
3893
3900
3902 return wrap(unwrap(B)->CreateNeg(unwrap(V), Name));
3903}
3904
3906 const char *Name) {
3907 return wrap(unwrap(B)->CreateNSWNeg(unwrap(V), Name));
3908}
3909
3911 const char *Name) {
3912 Value *Neg = unwrap(B)->CreateNeg(unwrap(V), Name);
3913 if (auto *I = dyn_cast<BinaryOperator>(Neg))
3914 I->setHasNoUnsignedWrap();
3915 return wrap(Neg);
3916}
3917
3919 return wrap(unwrap(B)->CreateFNeg(unwrap(V), Name));
3920}
3921
3923 return wrap(unwrap(B)->CreateNot(unwrap(V), Name));
3924}
3925
3927 Value *P = unwrap<Value>(ArithInst);
3928 return cast<Instruction>(P)->hasNoUnsignedWrap();
3929}
3930
3931void LLVMSetNUW(LLVMValueRef ArithInst, LLVMBool HasNUW) {
3932 Value *P = unwrap<Value>(ArithInst);
3933 cast<Instruction>(P)->setHasNoUnsignedWrap(HasNUW);
3934}
3935
3937 Value *P = unwrap<Value>(ArithInst);
3938 return cast<Instruction>(P)->hasNoSignedWrap();
3939}
3940
3941void LLVMSetNSW(LLVMValueRef ArithInst, LLVMBool HasNSW) {
3942 Value *P = unwrap<Value>(ArithInst);
3943 cast<Instruction>(P)->setHasNoSignedWrap(HasNSW);
3944}
3945
3947 Value *P = unwrap<Value>(DivOrShrInst);
3948 return cast<Instruction>(P)->isExact();
3949}
3950
3951void LLVMSetExact(LLVMValueRef DivOrShrInst, LLVMBool IsExact) {
3952 Value *P = unwrap<Value>(DivOrShrInst);
3953 cast<Instruction>(P)->setIsExact(IsExact);
3954}
3955
3957 Value *P = unwrap<Value>(NonNegInst);
3958 return cast<Instruction>(P)->hasNonNeg();
3959}
3960
3961void LLVMSetNNeg(LLVMValueRef NonNegInst, LLVMBool IsNonNeg) {
3962 Value *P = unwrap<Value>(NonNegInst);
3963 cast<Instruction>(P)->setNonNeg(IsNonNeg);
3964}
3965
3967 Value *P = unwrap<Value>(FPMathInst);
3968 FastMathFlags FMF = cast<Instruction>(P)->getFastMathFlags();
3969 return mapToLLVMFastMathFlags(FMF);
3970}
3971
3973 Value *P = unwrap<Value>(FPMathInst);
3974 cast<Instruction>(P)->setFastMathFlags(mapFromLLVMFastMathFlags(FMF));
3975}
3976
3981
3983 Value *P = unwrap<Value>(Inst);
3984 return cast<PossiblyDisjointInst>(P)->isDisjoint();
3985}
3986
3988 Value *P = unwrap<Value>(Inst);
3989 cast<PossiblyDisjointInst>(P)->setIsDisjoint(IsDisjoint);
3990}
3991
3992/*--.. Memory ..............................................................--*/
3993
3995 const char *Name) {
3996 Type* ITy = Type::getInt32Ty(unwrap(B)->GetInsertBlock()->getContext());
3997 Constant* AllocSize = ConstantExpr::getSizeOf(unwrap(Ty));
3998 AllocSize = ConstantExpr::getTruncOrBitCast(AllocSize, ITy);
3999 return wrap(unwrap(B)->CreateMalloc(ITy, unwrap(Ty), AllocSize, nullptr,
4000 nullptr, Name));
4001}
4002
4004 LLVMValueRef Val, const char *Name) {
4005 Type* ITy = Type::getInt32Ty(unwrap(B)->GetInsertBlock()->getContext());
4006 Constant* AllocSize = ConstantExpr::getSizeOf(unwrap(Ty));
4007 AllocSize = ConstantExpr::getTruncOrBitCast(AllocSize, ITy);
4008 return wrap(unwrap(B)->CreateMalloc(ITy, unwrap(Ty), AllocSize, unwrap(Val),
4009 nullptr, Name));
4010}
4011
4013 LLVMValueRef Val, LLVMValueRef Len,
4014 unsigned Align) {
4015 return wrap(unwrap(B)->CreateMemSet(unwrap(Ptr), unwrap(Val), unwrap(Len),
4016 MaybeAlign(Align)));
4017}
4018
4020 LLVMValueRef Dst, unsigned DstAlign,
4021 LLVMValueRef Src, unsigned SrcAlign,
4023 return wrap(unwrap(B)->CreateMemCpy(unwrap(Dst), MaybeAlign(DstAlign),
4024 unwrap(Src), MaybeAlign(SrcAlign),
4025 unwrap(Size)));
4026}
4027
4029 LLVMValueRef Dst, unsigned DstAlign,
4030 LLVMValueRef Src, unsigned SrcAlign,
4032 return wrap(unwrap(B)->CreateMemMove(unwrap(Dst), MaybeAlign(DstAlign),
4033 unwrap(Src), MaybeAlign(SrcAlign),
4034 unwrap(Size)));
4035}
4036
4038 const char *Name) {
4039 return wrap(unwrap(B)->CreateAlloca(unwrap(Ty), nullptr, Name));
4040}
4041
4043 LLVMValueRef Val, const char *Name) {
4044 return wrap(unwrap(B)->CreateAlloca(unwrap(Ty), unwrap(Val), Name));
4045}
4046
4048 return wrap(unwrap(B)->CreateFree(unwrap(PointerVal)));
4049}
4050
4052 LLVMValueRef PointerVal, const char *Name) {
4053 return wrap(unwrap(B)->CreateLoad(unwrap(Ty), unwrap(PointerVal), Name));
4054}
4055
4057 LLVMValueRef PointerVal) {
4058 return wrap(unwrap(B)->CreateStore(unwrap(Val), unwrap(PointerVal)));
4059}
4060
4076
4092
4094 switch (BinOp) {
4126 }
4127
4128 llvm_unreachable("Invalid LLVMAtomicRMWBinOp value!");
4129}
4130
4132 switch (BinOp) {
4164 default: break;
4165 }
4166
4167 llvm_unreachable("Invalid AtomicRMWBinOp value!");
4168}
4169
4171 LLVMBool isSingleThread, const char *Name) {
4172 return wrap(
4173 unwrap(B)->CreateFence(mapFromLLVMOrdering(Ordering),
4174 isSingleThread ? SyncScope::SingleThread
4176 Name));
4177}
4178
4180 LLVMAtomicOrdering Ordering, unsigned SSID,
4181 const char *Name) {
4182 return wrap(
4183 unwrap(B)->CreateFence(mapFromLLVMOrdering(Ordering), SSID, Name));
4184}
4185
4187 LLVMValueRef Pointer, LLVMValueRef *Indices,
4188 unsigned NumIndices, const char *Name) {
4189 ArrayRef<Value *> IdxList(unwrap(Indices), NumIndices);
4190 return wrap(unwrap(B)->CreateGEP(unwrap(Ty), unwrap(Pointer), IdxList, Name));
4191}
4192
4194 LLVMValueRef Pointer, LLVMValueRef *Indices,
4195 unsigned NumIndices, const char *Name) {
4196 ArrayRef<Value *> IdxList(unwrap(Indices), NumIndices);
4197 return wrap(
4198 unwrap(B)->CreateInBoundsGEP(unwrap(Ty), unwrap(Pointer), IdxList, Name));
4199}
4200
4202 LLVMValueRef Pointer,
4203 LLVMValueRef *Indices,
4204 unsigned NumIndices, const char *Name,
4205 LLVMGEPNoWrapFlags NoWrapFlags) {
4206 ArrayRef<Value *> IdxList(unwrap(Indices), NumIndices);
4207 return wrap(unwrap(B)->CreateGEP(unwrap(Ty), unwrap(Pointer), IdxList, Name,
4208 mapFromLLVMGEPNoWrapFlags(NoWrapFlags)));
4209}
4210
4212 LLVMValueRef Pointer, unsigned Idx,
4213 const char *Name) {
4214 return wrap(
4215 unwrap(B)->CreateStructGEP(unwrap(Ty), unwrap(Pointer), Idx, Name));
4216}
4217
4219 const char *Name) {
4220 return wrap(unwrap(B)->CreateGlobalString(Str, Name));
4221}
4222
4224 const char *Name) {
4225 return wrap(unwrap(B)->CreateGlobalString(Str, Name));
4226}
4227
4229 return cast<Instruction>(unwrap(Inst))->isVolatile();
4230}
4231
4232void LLVMSetVolatile(LLVMValueRef MemAccessInst, LLVMBool isVolatile) {
4233 Value *P = unwrap(MemAccessInst);
4234 if (LoadInst *LI = dyn_cast<LoadInst>(P))
4235 return LI->setVolatile(isVolatile);
4237 return SI->setVolatile(isVolatile);
4239 return AI->setVolatile(isVolatile);
4240 return cast<AtomicCmpXchgInst>(P)->setVolatile(isVolatile);
4241}
4242
4244 return unwrap<AtomicCmpXchgInst>(CmpXchgInst)->isWeak();
4245}
4246
4247void LLVMSetWeak(LLVMValueRef CmpXchgInst, LLVMBool isWeak) {
4248 return unwrap<AtomicCmpXchgInst>(CmpXchgInst)->setWeak(isWeak);
4249}
4250
4252 Value *P = unwrap(MemAccessInst);
4254 if (LoadInst *LI = dyn_cast<LoadInst>(P))
4255 O = LI->getOrdering();
4256 else if (StoreInst *SI = dyn_cast<StoreInst>(P))
4257 O = SI->getOrdering();
4258 else if (FenceInst *FI = dyn_cast<FenceInst>(P))
4259 O = FI->getOrdering();
4260 else
4261 O = cast<AtomicRMWInst>(P)->getOrdering();
4262 return mapToLLVMOrdering(O);
4263}
4264
4265void LLVMSetOrdering(LLVMValueRef MemAccessInst, LLVMAtomicOrdering Ordering) {
4266 Value *P = unwrap(MemAccessInst);
4267 AtomicOrdering O = mapFromLLVMOrdering(Ordering);
4268
4269 if (LoadInst *LI = dyn_cast<LoadInst>(P))
4270 return LI->setOrdering(O);
4271 else if (FenceInst *FI = dyn_cast<FenceInst>(P))
4272 return FI->setOrdering(O);
4273 else if (AtomicRMWInst *ARWI = dyn_cast<AtomicRMWInst>(P))
4274 return ARWI->setOrdering(O);
4275 return cast<StoreInst>(P)->setOrdering(O);
4276}
4277
4281
4283 unwrap<AtomicRMWInst>(Inst)->setOperation(mapFromLLVMRMWBinOp(BinOp));
4284}
4285
4286/*--.. Casts ...............................................................--*/
4287
4289 LLVMTypeRef DestTy, const char *Name) {
4290 return wrap(unwrap(B)->CreateTrunc(unwrap(Val), unwrap(DestTy), Name));
4291}
4292
4294 LLVMTypeRef DestTy, const char *Name) {
4295 return wrap(unwrap(B)->CreateZExt(unwrap(Val), unwrap(DestTy), Name));
4296}
4297
4299 LLVMTypeRef DestTy, const char *Name) {
4300 return wrap(unwrap(B)->CreateSExt(unwrap(Val), unwrap(DestTy), Name));
4301}
4302
4304 LLVMTypeRef DestTy, const char *Name) {
4305 return wrap(unwrap(B)->CreateFPToUI(unwrap(Val), unwrap(DestTy), Name));
4306}
4307
4309 LLVMTypeRef DestTy, const char *Name) {
4310 return wrap(unwrap(B)->CreateFPToSI(unwrap(Val), unwrap(DestTy), Name));
4311}
4312
4314 LLVMTypeRef DestTy, const char *Name) {
4315 return wrap(unwrap(B)->CreateUIToFP(unwrap(Val), unwrap(DestTy), Name));
4316}
4317
4319 LLVMTypeRef DestTy, const char *Name) {
4320 return wrap(unwrap(B)->CreateSIToFP(unwrap(Val), unwrap(DestTy), Name));
4321}
4322
4324 LLVMTypeRef DestTy, const char *Name) {
4325 return wrap(unwrap(B)->CreateFPTrunc(unwrap(Val), unwrap(DestTy), Name));
4326}
4327
4329 LLVMTypeRef DestTy, const char *Name) {
4330 return wrap(unwrap(B)->CreateFPExt(unwrap(Val), unwrap(DestTy), Name));
4331}
4332
4334 LLVMTypeRef DestTy, const char *Name) {
4335 return wrap(unwrap(B)->CreatePtrToInt(unwrap(Val), unwrap(DestTy), Name));
4336}
4337
4339 LLVMTypeRef DestTy, const char *Name) {
4340 return wrap(unwrap(B)->CreateIntToPtr(unwrap(Val), unwrap(DestTy), Name));
4341}
4342
4344 LLVMTypeRef DestTy, const char *Name) {
4345 return wrap(unwrap(B)->CreateBitCast(unwrap(Val), unwrap(DestTy), Name));
4346}
4347
4349 LLVMTypeRef DestTy, const char *Name) {
4350 return wrap(unwrap(B)->CreateAddrSpaceCast(unwrap(Val), unwrap(DestTy), Name));
4351}
4352
4354 LLVMTypeRef DestTy, const char *Name) {
4355 return wrap(unwrap(B)->CreateZExtOrBitCast(unwrap(Val), unwrap(DestTy),
4356 Name));
4357}
4358
4360 LLVMTypeRef DestTy, const char *Name) {
4361 return wrap(unwrap(B)->CreateSExtOrBitCast(unwrap(Val), unwrap(DestTy),
4362 Name));
4363}
4364
4366 LLVMTypeRef DestTy, const char *Name) {
4367 return wrap(unwrap(B)->CreateTruncOrBitCast(unwrap(Val), unwrap(DestTy),
4368 Name));
4369}
4370
4372 LLVMTypeRef DestTy, const char *Name) {
4373 return wrap(unwrap(B)->CreateCast(Instruction::CastOps(map_from_llvmopcode(Op)), unwrap(Val),
4374 unwrap(DestTy), Name));
4375}
4376
4378 LLVMTypeRef DestTy, const char *Name) {
4379 return wrap(unwrap(B)->CreatePointerCast(unwrap(Val), unwrap(DestTy), Name));
4380}
4381
4383 LLVMTypeRef DestTy, LLVMBool IsSigned,
4384 const char *Name) {
4385 return wrap(
4386 unwrap(B)->CreateIntCast(unwrap(Val), unwrap(DestTy), IsSigned, Name));
4387}
4388
4390 LLVMTypeRef DestTy, const char *Name) {
4391 return wrap(unwrap(B)->CreateIntCast(unwrap(Val), unwrap(DestTy),
4392 /*isSigned*/true, Name));
4393}
4394
4396 LLVMTypeRef DestTy, const char *Name) {
4397 return wrap(unwrap(B)->CreateFPCast(unwrap(Val), unwrap(DestTy), Name));
4398}
4399
4401 LLVMTypeRef DestTy, LLVMBool DestIsSigned) {
4403 unwrap(Src), SrcIsSigned, unwrap(DestTy), DestIsSigned));
4404}
4405
4406/*--.. Comparisons .........................................................--*/
4407
4410 const char *Name) {
4411 return wrap(unwrap(B)->CreateICmp(static_cast<ICmpInst::Predicate>(Op),
4412 unwrap(LHS), unwrap(RHS), Name));
4413}
4414
4417 const char *Name) {
4418 return wrap(unwrap(B)->CreateFCmp(static_cast<FCmpInst::Predicate>(Op),
4419 unwrap(LHS), unwrap(RHS), Name));
4420}
4421
4422/*--.. Miscellaneous instructions ..........................................--*/
4423
4425 return wrap(unwrap(B)->CreatePHI(unwrap(Ty), 0, Name));
4426}
4427
4429 LLVMValueRef *Args, unsigned NumArgs,
4430 const char *Name) {
4432 return wrap(unwrap(B)->CreateCall(FTy, unwrap(Fn),
4433 ArrayRef(unwrap(Args), NumArgs), Name));
4434}
4435
4438 LLVMValueRef Fn, LLVMValueRef *Args,
4439 unsigned NumArgs, LLVMOperandBundleRef *Bundles,
4440 unsigned NumBundles, const char *Name) {
4443 for (auto *Bundle : ArrayRef(Bundles, NumBundles)) {
4444 OperandBundleDef *OB = unwrap(Bundle);
4445 OBs.push_back(*OB);
4446 }
4447 return wrap(unwrap(B)->CreateCall(
4448 FTy, unwrap(Fn), ArrayRef(unwrap(Args), NumArgs), OBs, Name));
4449}
4450
4452 LLVMValueRef Then, LLVMValueRef Else,
4453 const char *Name) {
4454 return wrap(unwrap(B)->CreateSelect(unwrap(If), unwrap(Then), unwrap(Else),
4455 Name));
4456}
4457
4459 LLVMTypeRef Ty, const char *Name) {
4460 return wrap(unwrap(B)->CreateVAArg(unwrap(List), unwrap(Ty), Name));
4461}
4462
4464 LLVMValueRef Index, const char *Name) {
4465 return wrap(unwrap(B)->CreateExtractElement(unwrap(VecVal), unwrap(Index),
4466 Name));
4467}
4468
4470 LLVMValueRef EltVal, LLVMValueRef Index,
4471 const char *Name) {
4472 return wrap(unwrap(B)->CreateInsertElement(unwrap(VecVal), unwrap(EltVal),
4473 unwrap(Index), Name));
4474}
4475
4477 LLVMValueRef V2, LLVMValueRef Mask,
4478 const char *Name) {
4479 return wrap(unwrap(B)->CreateShuffleVector(unwrap(V1), unwrap(V2),
4480 unwrap(Mask), Name));
4481}
4482
4484 unsigned Index, const char *Name) {
4485 return wrap(unwrap(B)->CreateExtractValue(unwrap(AggVal), Index, Name));
4486}
4487
4489 LLVMValueRef EltVal, unsigned Index,
4490 const char *Name) {
4491 return wrap(unwrap(B)->CreateInsertValue(unwrap(AggVal), unwrap(EltVal),
4492 Index, Name));
4493}
4494
4496 const char *Name) {
4497 return wrap(unwrap(B)->CreateFreeze(unwrap(Val), Name));
4498}
4499
4501 const char *Name) {
4502 return wrap(unwrap(B)->CreateIsNull(unwrap(Val), Name));
4503}
4504
4506 const char *Name) {
4507 return wrap(unwrap(B)->CreateIsNotNull(unwrap(Val), Name));
4508}
4509
4512 const char *Name) {
4513 IRBuilderBase *Builder = unwrap(B);
4514 Value *Diff =
4515 Builder->CreatePtrDiff(unwrap(ElemTy), unwrap(LHS), unwrap(RHS), Name);
4516 return wrap(Builder->CreateSExtOrTrunc(Diff, Builder->getInt64Ty()));
4517}
4518
4520 LLVMValueRef PTR, LLVMValueRef Val,
4521 LLVMAtomicOrdering ordering,
4522 LLVMBool singleThread) {
4524 return wrap(unwrap(B)->CreateAtomicRMW(
4525 intop, unwrap(PTR), unwrap(Val), MaybeAlign(),
4526 mapFromLLVMOrdering(ordering),
4527 singleThread ? SyncScope::SingleThread : SyncScope::System));
4528}
4529
4532 LLVMValueRef PTR, LLVMValueRef Val,
4533 LLVMAtomicOrdering ordering,
4534 unsigned SSID) {
4536 return wrap(unwrap(B)->CreateAtomicRMW(intop, unwrap(PTR), unwrap(Val),
4537 MaybeAlign(),
4538 mapFromLLVMOrdering(ordering), SSID));
4539}
4540
4542 LLVMValueRef Cmp, LLVMValueRef New,
4543 LLVMAtomicOrdering SuccessOrdering,
4544 LLVMAtomicOrdering FailureOrdering,
4545 LLVMBool singleThread) {
4546
4547 return wrap(unwrap(B)->CreateAtomicCmpXchg(
4548 unwrap(Ptr), unwrap(Cmp), unwrap(New), MaybeAlign(),
4549 mapFromLLVMOrdering(SuccessOrdering),
4550 mapFromLLVMOrdering(FailureOrdering),
4551 singleThread ? SyncScope::SingleThread : SyncScope::System));
4552}
4553
4555 LLVMValueRef Cmp, LLVMValueRef New,
4556 LLVMAtomicOrdering SuccessOrdering,
4557 LLVMAtomicOrdering FailureOrdering,
4558 unsigned SSID) {
4559 return wrap(unwrap(B)->CreateAtomicCmpXchg(
4560 unwrap(Ptr), unwrap(Cmp), unwrap(New), MaybeAlign(),
4561 mapFromLLVMOrdering(SuccessOrdering),
4562 mapFromLLVMOrdering(FailureOrdering), SSID));
4563}
4564
4566 Value *P = unwrap(SVInst);
4568 return I->getShuffleMask().size();
4569}
4570
4571int LLVMGetMaskValue(LLVMValueRef SVInst, unsigned Elt) {
4572 Value *P = unwrap(SVInst);
4574 return I->getMaskValue(Elt);
4575}
4576
4578
4580 return unwrap<Instruction>(Inst)->isAtomic();
4581}
4582
4584 // Backwards compatibility: return false for non-atomic instructions
4585 Instruction *I = unwrap<Instruction>(AtomicInst);
4586 if (!I->isAtomic())
4587 return 0;
4588
4590}
4591
4593 // Backwards compatibility: ignore non-atomic instructions
4594 Instruction *I = unwrap<Instruction>(AtomicInst);
4595 if (!I->isAtomic())
4596 return;
4597
4599 setAtomicSyncScopeID(I, SSID);
4600}
4601
4603 Instruction *I = unwrap<Instruction>(AtomicInst);
4604 assert(I->isAtomic() && "Expected an atomic instruction");
4605 return *getAtomicSyncScopeID(I);
4606}
4607
4608void LLVMSetAtomicSyncScopeID(LLVMValueRef AtomicInst, unsigned SSID) {
4609 Instruction *I = unwrap<Instruction>(AtomicInst);
4610 assert(I->isAtomic() && "Expected an atomic instruction");
4611 setAtomicSyncScopeID(I, SSID);
4612}
4613
4615 Value *P = unwrap(CmpXchgInst);
4616 return mapToLLVMOrdering(cast<AtomicCmpXchgInst>(P)->getSuccessOrdering());
4617}
4618
4620 LLVMAtomicOrdering Ordering) {
4621 Value *P = unwrap(CmpXchgInst);
4622 AtomicOrdering O = mapFromLLVMOrdering(Ordering);
4623
4624 return cast<AtomicCmpXchgInst>(P)->setSuccessOrdering(O);
4625}
4626
4628 Value *P = unwrap(CmpXchgInst);
4629 return mapToLLVMOrdering(cast<AtomicCmpXchgInst>(P)->getFailureOrdering());
4630}
4631
4633 LLVMAtomicOrdering Ordering) {
4634 Value *P = unwrap(CmpXchgInst);
4635 AtomicOrdering O = mapFromLLVMOrdering(Ordering);
4636
4637 return cast<AtomicCmpXchgInst>(P)->setFailureOrdering(O);
4638}
4639
4640/*===-- Module providers --------------------------------------------------===*/
4641
4646
4650
4651
4652/*===-- Memory buffers ----------------------------------------------------===*/
4653
4655 const char *Path,
4656 LLVMMemoryBufferRef *OutMemBuf,
4657 char **OutMessage) {
4658
4660 if (std::error_code EC = MBOrErr.getError()) {
4661 *OutMessage = strdup(EC.message().c_str());
4662 return 1;
4663 }
4664 *OutMemBuf = wrap(MBOrErr.get().release());
4665 return 0;
4666}
4667
4669 char **OutMessage) {
4671 if (std::error_code EC = MBOrErr.getError()) {
4672 *OutMessage = strdup(EC.message().c_str());
4673 return 1;
4674 }
4675 *OutMemBuf = wrap(MBOrErr.get().release());
4676 return 0;
4677}
4678
4680 const char *InputData,
4681 size_t InputDataLength,
4682 const char *BufferName,
4683 LLVMBool RequiresNullTerminator) {
4684
4685 return wrap(MemoryBuffer::getMemBuffer(StringRef(InputData, InputDataLength),
4686 StringRef(BufferName),
4687 RequiresNullTerminator).release());
4688}
4689
4691 const char *InputData,
4692 size_t InputDataLength,
4693 const char *BufferName) {
4694
4695 return wrap(
4696 MemoryBuffer::getMemBufferCopy(StringRef(InputData, InputDataLength),
4697 StringRef(BufferName)).release());
4698}
4699
4701 return unwrap(MemBuf)->getBufferStart();
4702}
4703
4705 return unwrap(MemBuf)->getBufferSize();
4706}
4707
4709 delete unwrap(MemBuf);
4710}
4711
4712/*===-- Pass Manager ------------------------------------------------------===*/
4713
4717
4721
4726
4730
4734
4738
4742
4744 delete unwrap(PM);
4745}
4746
4747/*===-- Threading ------------------------------------------------------===*/
4748
4752
4755
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
always inline
This file contains the simple types necessary to represent the attributes associated with functions a...
static const Function * getParent(const Value *V)
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
#define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)
#define LLVM_EXTENSION
LLVM_EXTENSION - Support compilers where we have a keyword to suppress pedantic diagnostics.
Definition Compiler.h:472
This file contains the declarations for the subclasses of Constant, which represent the different fla...
DXIL Finalize Linkage
static char getTypeID(Type *Ty)
static Value * getCondition(Instruction *I)
#define op(i)
Hexagon Common GEP
Value * getPointer(Value *Ptr)
LLVMTypeRef LLVMFP128Type(void)
Definition Core.cpp:779
LLVMValueRef LLVMGetElementAsConstant(LLVMValueRef C, unsigned idx)
Definition Core.cpp:1701
LLVMTypeRef LLVMInt64Type(void)
Definition Core.cpp:723
static Module::ModFlagBehavior map_to_llvmModFlagBehavior(LLVMModuleFlagBehavior Behavior)
Definition Core.cpp:359
LLVMValueRef LLVMConstStruct(LLVMValueRef *ConstantVals, unsigned Count, LLVMBool Packed)
Definition Core.cpp:1748
#define LLVM_DEFINE_VALUE_CAST(name)
Definition Core.cpp:1167
LLVMBasicBlockRef LLVMAppendBasicBlock(LLVMValueRef FnRef, const char *Name)
Definition Core.cpp:2959
LLVMTypeRef LLVMVoidType(void)
Definition Core.cpp:982
static LLVMValueMetadataEntry * llvm_getMetadata(size_t *NumEntries, llvm::function_ref< void(MetadataEntries &)> AccessMD)
Definition Core.cpp:1139
static GEPNoWrapFlags mapFromLLVMGEPNoWrapFlags(LLVMGEPNoWrapFlags GEPFlags)
Definition Core.cpp:1801
LLVMValueRef LLVMMDString(const char *Str, unsigned SLen)
Definition Core.cpp:1328
static MDNode * extractMDNode(MetadataAsValue *MAV)
Definition Core.cpp:1115
SmallVectorImpl< std::pair< unsigned, MDNode * > > MetadataEntries
Definition Core.cpp:1137
static void LLVMPositionBuilderImpl(IRBuilder<> *Builder, BasicBlock *Block, Instruction *Instr, bool BeforeDbgRecords)
Definition Core.cpp:3424
static LLVMOpcode map_to_llvmopcode(int opcode)
Definition Core.cpp:1779
LLVMTypeRef LLVMBFloatType(void)
Definition Core.cpp:767
LLVMValueRef LLVMConstByteOfString(LLVMTypeRef ByteTy, const char Str[], uint8_t Radix)
Definition Core.cpp:1605
LLVMTypeRef LLVMInt32Type(void)
Definition Core.cpp:720
static LLVMFastMathFlags mapToLLVMFastMathFlags(FastMathFlags FMF)
Definition Core.cpp:3744
static FastMathFlags mapFromLLVMFastMathFlags(LLVMFastMathFlags FMF)
Definition Core.cpp:3731
LLVMTypeRef LLVMHalfType(void)
Definition Core.cpp:764
LLVMTypeRef LLVMIntType(unsigned NumBits)
Definition Core.cpp:729
LLVMTypeRef LLVMX86AMXType(void)
Definition Core.cpp:785
LLVMValueRef LLVMConstIntOfString(LLVMTypeRef IntTy, const char Str[], uint8_t Radix)
Definition Core.cpp:1581
LLVMTypeRef LLVMStructType(LLVMTypeRef *ElementTypes, unsigned ElementCount, LLVMBool Packed)
Definition Core.cpp:824
static AtomicOrdering mapFromLLVMOrdering(LLVMAtomicOrdering Ordering)
Definition Core.cpp:4061
static Intrinsic::ID llvm_map_to_intrinsic_id(unsigned ID)
Definition Core.cpp:2550
static LLVMModuleFlagBehavior map_from_llvmModFlagBehavior(Module::ModFlagBehavior Behavior)
Definition Core.cpp:378
LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID)
Definition Core.cpp:295
static LLVMAtomicOrdering mapToLLVMOrdering(AtomicOrdering Ordering)
Definition Core.cpp:4077
LLVMTypeRef LLVMX86FP80Type(void)
Definition Core.cpp:776
LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef BBRef, const char *Name)
Definition Core.cpp:2970
LLVMValueRef LLVMBuildNUWNeg(LLVMBuilderRef B, LLVMValueRef V, const char *Name)
Definition Core.cpp:3910
static LLVMValueRef getMDNodeOperandImpl(LLVMContext &Context, const MDNode *N, unsigned Index)
Definition Core.cpp:1228
LLVMValueRef LLVMConstRealOfStringAndSize(LLVMTypeRef RealTy, const char Str[], unsigned SLen)
Definition Core.cpp:1625
LLVMTypeRef LLVMPPCFP128Type(void)
Definition Core.cpp:782
LLVMTypeRef LLVMFloatType(void)
Definition Core.cpp:770
static int map_from_llvmopcode(LLVMOpcode code)
Definition Core.cpp:1789
static LLVMAtomicRMWBinOp mapToLLVMRMWBinOp(AtomicRMWInst::BinOp BinOp)
Definition Core.cpp:4131
LLVMTypeRef LLVMLabelType(void)
Definition Core.cpp:985
LLVMValueRef LLVMConstString(const char *Str, unsigned Length, LLVMBool DontNullTerminate)
Definition Core.cpp:1691
unsigned LLVMGetMDKindID(const char *Name, unsigned SLen)
Definition Core.cpp:152
LLVMTypeRef LLVMInt8Type(void)
Definition Core.cpp:714
LLVMTypeRef LLVMDoubleType(void)
Definition Core.cpp:773
LLVMValueRef LLVMConstByteOfStringAndSize(LLVMTypeRef ByteTy, const char Str[], size_t SLen, uint8_t Radix)
Definition Core.cpp:1611
LLVMTypeRef LLVMInt1Type(void)
Definition Core.cpp:711
LLVMBuilderRef LLVMCreateBuilder(void)
Definition Core.cpp:3420
LLVMTypeRef LLVMInt128Type(void)
Definition Core.cpp:726
static AtomicRMWInst::BinOp mapFromLLVMRMWBinOp(LLVMAtomicRMWBinOp BinOp)
Definition Core.cpp:4093
LLVMValueRef LLVMIsABranchInst(LLVMValueRef Val)
Definition Core.cpp:1174
LLVMValueRef LLVMConstNUWNeg(LLVMValueRef ConstantVal)
Definition Core.cpp:1847
LLVMValueRef LLVMConstIntOfStringAndSize(LLVMTypeRef IntTy, const char Str[], unsigned SLen, uint8_t Radix)
Definition Core.cpp:1587
LLVMTypeRef LLVMInt16Type(void)
Definition Core.cpp:717
LLVMValueRef LLVMMDNode(LLVMValueRef *Vals, unsigned Count)
Definition Core.cpp:1359
static LLVMContext & getGlobalContext()
Definition Core.cpp:95
static LLVMGEPNoWrapFlags mapToLLVMGEPNoWrapFlags(GEPNoWrapFlags GEPFlags)
Definition Core.cpp:1813
LLVMContextRef LLVMGetGlobalContext()
Definition Core.cpp:108
Module.h This file contains the declarations for the Module class.
#define F(x, y, z)
Definition MD5.cpp:54
#define I(x, y, z)
Definition MD5.cpp:57
#define H(x, y, z)
Definition MD5.cpp:56
Machine Check Debug Module
static DebugLoc getDebugLoc(MachineBasicBlock::instr_iterator FirstMI, MachineBasicBlock::instr_iterator LastMI)
Return the first DebugLoc that has line number information, given a range of instructions.
#define T
MachineInstr unsigned OpIdx
static constexpr StringLiteral Filename
#define P(N)
if(auto Err=PB.parsePassPipeline(MPM, Passes)) return wrap(std MPM run * Mod
const SmallVectorImpl< MachineOperand > & Cond
static BinaryOperator * CreateMul(Value *S1, Value *S2, const Twine &Name, BasicBlock::iterator InsertBefore, Value *FlagsOp)
static BinaryOperator * CreateAdd(Value *S1, Value *S2, const Twine &Name, BasicBlock::iterator InsertBefore, Value *FlagsOp)
static Instruction * CreateNeg(Value *S1, const Twine &Name, BasicBlock::iterator InsertBefore, Value *FlagsOp)
static cl::opt< RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode > Mode("regalloc-enable-advisor", cl::Hidden, cl::init(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Default), cl::desc("Enable regalloc advisor mode"), cl::values(clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Default, "default", "Default"), clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Release, "release", "precompiled"), clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Development, "development", "for training")))
static Type * getValueType(Value *V, bool LookThroughCmp=false)
Returns the "element type" of the given value/instruction V.
#define LLVM_DEBUG(...)
Definition Debug.h:114
static SymbolRef::Type getType(const Symbol *Sym)
Definition TapiFile.cpp:39
unify loop Fixup each natural loop to have a single exit block
static std::optional< unsigned > getOpcode(ArrayRef< VPValue * > Values)
Returns the opcode of Values or ~0 if they do not all agree.
Definition VPlanSLP.cpp:247
static Function * getFunction(FunctionType *Ty, const Twine &Name, Module *M)
Value * RHS
Value * LHS
static const uint32_t IV[8]
Definition blake3_impl.h:83
static const fltSemantics & IEEEdouble()
Definition APFloat.h:297
static constexpr roundingMode rmNearestTiesToEven
Definition APFloat.h:344
LLVM_ABI opStatus convert(const fltSemantics &ToSemantics, roundingMode RM, bool *losesInfo)
Definition APFloat.cpp:5890
LLVM_ABI double convertToDouble() const
Converts this APFloat to host double value.
Definition APFloat.cpp:5949
Class for arbitrary precision integers.
Definition APInt.h:78
an instruction to allocate memory on the stack
This class represents an incoming formal argument to a Function.
Definition Argument.h:32
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
static LLVM_ABI ArrayType * get(Type *ElementType, uint64_t NumElements)
This static method is the primary way to construct an ArrayType.
An instruction that atomically checks whether a specified value is in a memory location,...
an instruction that atomically reads a memory location, combines it with another value,...
BinOp
This enumeration lists the possible modifications atomicrmw can make.
@ Add
*p = old + v
@ FAdd
*p = old + v
@ USubCond
Subtract only if no unsigned overflow.
@ FMinimum
*p = minimum(old, v) minimum matches the behavior of llvm.minimum.
@ Min
*p = old <signed v ? old : v
@ Sub
*p = old - v
@ And
*p = old & v
@ Xor
*p = old ^ v
@ USubSat
*p = usub.sat(old, v) usub.sat matches the behavior of llvm.usub.sat.
@ FMaximum
*p = maximum(old, v) maximum matches the behavior of llvm.maximum.
@ FSub
*p = old - v
@ UIncWrap
Increment one up to a maximum value.
@ Max
*p = old >signed v ? old : v
@ UMin
*p = old <unsigned v ? old : v
@ FMin
*p = minnum(old, v) minnum matches the behavior of llvm.minnum.
@ UMax
*p = old >unsigned v ? old : v
@ FMaximumNum
*p = maximumnum(old, v) maximumnum matches the behavior of llvm.maximumnum.
@ FMax
*p = maxnum(old, v) maxnum matches the behavior of llvm.maxnum.
@ UDecWrap
Decrement one until a minimum value or zero.
@ FMinimumNum
*p = minimumnum(old, v) minimumnum matches the behavior of llvm.minimumnum.
@ Nand
*p = ~(old & v)
Functions, function parameters, and return types can have attributes to indicate how they should be t...
Definition Attributes.h:105
LLVM_ABI bool isStringAttribute() const
Return true if the attribute is a string (target-dependent) attribute.
static LLVM_ABI Attribute::AttrKind getAttrKindFromName(StringRef AttrName)
LLVM_ABI StringRef getKindAsString() const
Return the attribute's kind as a string.
static LLVM_ABI Attribute get(LLVMContext &Context, AttrKind Kind, uint64_t Val=0)
Return a uniquified Attribute object.
LLVM_ABI std::string getAsString(bool InAttrGrp=false) const
The Attribute is converted to a string of equivalent mnemonic.
LLVM_ABI Attribute::AttrKind getKindAsEnum() const
Return the attribute's kind as an enum (Attribute::AttrKind).
LLVM_ABI StringRef getValueAsString() const
Return the attribute's value as a string.
AttrKind
This enumeration lists the attributes that can be associated with parameters, function results,...
Definition Attributes.h:124
@ EndAttrKinds
Sentinel value useful for loops.
Definition Attributes.h:129
LLVM_ABI bool isTypeAttribute() const
Return true if the attribute is a type attribute.
static LLVM_ABI Attribute getWithAlignment(LLVMContext &Context, Align Alignment)
Return a uniquified Attribute object that has the specific alignment set.
LLVM Basic Block Representation.
Definition BasicBlock.h:62
const Function * getParent() const
Return the enclosing method, or null if none.
Definition BasicBlock.h:213
static BasicBlock * Create(LLVMContext &Context, const Twine &Name="", Function *Parent=nullptr, BasicBlock *InsertBefore=nullptr)
Creates a new BasicBlock.
Definition BasicBlock.h:206
InstListType::iterator iterator
Instruction iterators...
Definition BasicBlock.h:170
static LLVM_ABI BlockAddress * get(Function *F, BasicBlock *BB)
Return a BlockAddress for the specified function and basic block.
Class to represent byte types.
static LLVM_ABI ByteType * get(LLVMContext &C, unsigned NumBits)
This static method is the primary way of constructing a ByteType.
Definition Type.cpp:384
static LLVM_ABI Instruction::CastOps getCastOpcode(const Value *Val, bool SrcIsSigned, Type *Ty, bool DstIsSigned)
Returns the opcode necessary to cast Val into Ty using usual casting rules.
handler_range handlers()
iteration adapter for range-for loops.
Predicate
This enumeration lists the possible predicates for CmpInst subclasses.
Definition InstrTypes.h:676
static LLVM_ABI Constant * get(ArrayType *T, ArrayRef< Constant * > V)
static ConstantAsMetadata * get(Constant *C)
Definition Metadata.h:537
static LLVM_ABI Constant * getString(LLVMContext &Context, StringRef Initializer, bool AddNull=true, bool ByteString=false)
This method constructs a CDS and initializes it with a text string.
static Constant * getRaw(StringRef Data, uint64_t NumElements, Type *ElementTy)
getRaw() constructor - Return a constant with array type with an element count and element type match...
Definition Constants.h:878
static LLVM_ABI Constant * getIntToPtr(Constant *C, Type *Ty, bool OnlyIfReduced=false)
static LLVM_ABI Constant * getExtractElement(Constant *Vec, Constant *Idx, Type *OnlyIfReducedTy=nullptr)
static LLVM_ABI Constant * getAlignOf(Type *Ty)
getAlignOf constant expr - computes the alignment of a type in a target independent way (Note: the re...
static Constant * getNUWSub(Constant *C1, Constant *C2)
Definition Constants.h:1357
static Constant * getInBoundsGetElementPtr(Type *Ty, Constant *C, ArrayRef< Constant * > IdxList)
Create an "inbounds" getelementptr.
Definition Constants.h:1482
static LLVM_ABI Constant * getPointerCast(Constant *C, Type *Ty)
Create a BitCast, AddrSpaceCast, or a PtrToInt cast constant expression.
static LLVM_ABI Constant * getTruncOrBitCast(Constant *C, Type *Ty)
static Constant * getNSWAdd(Constant *C1, Constant *C2)
Definition Constants.h:1345
static LLVM_ABI Constant * getSub(Constant *C1, Constant *C2, bool HasNUW=false, bool HasNSW=false)
static LLVM_ABI Constant * getNot(Constant *C)
static LLVM_ABI Constant * getInsertElement(Constant *Vec, Constant *Elt, Constant *Idx, Type *OnlyIfReducedTy=nullptr)
static LLVM_ABI Constant * getPtrToInt(Constant *C, Type *Ty, bool OnlyIfReduced=false)
static LLVM_ABI Constant * getShuffleVector(Constant *V1, Constant *V2, ArrayRef< int > Mask, Type *OnlyIfReducedTy=nullptr)
static LLVM_ABI Constant * getSizeOf(Type *Ty)
getSizeOf constant expr - computes the (alloc) size of a type (in address-units, not bits) in a targe...
static LLVM_ABI Constant * getXor(Constant *C1, Constant *C2)
static Constant * getNSWNeg(Constant *C)
Definition Constants.h:1343
static Constant * getNSWSub(Constant *C1, Constant *C2)
Definition Constants.h:1353
static Constant * getNUWAdd(Constant *C1, Constant *C2)
Definition Constants.h:1349
static LLVM_ABI Constant * getAddrSpaceCast(Constant *C, Type *Ty, bool OnlyIfReduced=false)
static Constant * getGetElementPtr(Type *Ty, Constant *C, ArrayRef< Constant * > IdxList, GEPNoWrapFlags NW=GEPNoWrapFlags::none(), std::optional< ConstantRange > InRange=std::nullopt, Type *OnlyIfReducedTy=nullptr)
Getelementptr form.
Definition Constants.h:1445
static LLVM_ABI Constant * getAdd(Constant *C1, Constant *C2, bool HasNUW=false, bool HasNSW=false)
static LLVM_ABI Constant * getBitCast(Constant *C, Type *Ty, bool OnlyIfReduced=false)
static LLVM_ABI Constant * getNeg(Constant *C, bool HasNSW=false)
static LLVM_ABI Constant * getTrunc(Constant *C, Type *Ty, bool OnlyIfReduced=false)
ConstantFP - Floating Point Values [float, double].
Definition Constants.h:420
const APFloat & getValueAPF() const
Definition Constants.h:463
static LLVM_ABI ConstantPointerNull * get(PointerType *T)
Static factory methods - Return objects of the specified value.
static LLVM_ABI ConstantPtrAuth * get(Constant *Ptr, ConstantInt *Key, ConstantInt *Disc, Constant *AddrDisc, Constant *DeactivationSymbol)
Return a pointer signed with the specified parameters.
This class represents a range of values.
static LLVM_ABI Constant * get(StructType *T, ArrayRef< Constant * > V)
static Constant * getAnon(ArrayRef< Constant * > V, bool Packed=false)
Return an anonymous struct that has the specified elements.
Definition Constants.h:629
static LLVM_ABI Constant * get(ArrayRef< Constant * > V)
This is an important base class in LLVM.
Definition Constant.h:43
static LLVM_ABI Constant * getAllOnesValue(Type *Ty)
static LLVM_ABI Constant * getNullValue(Type *Ty)
Constructor to create a '0' constant of arbitrary type.
Subprogram description. Uses SubclassData1.
Base class for non-instruction debug metadata records that have positions within IR.
Record of a variable value-assignment, aka a non instruction representation of the dbg....
Basic diagnostic printer that uses an underlying raw_ostream.
Represents either an error or a value T.
Definition ErrorOr.h:56
reference get()
Definition ErrorOr.h:149
std::error_code getError() const
Definition ErrorOr.h:152
This instruction compares its operands according to the predicate given to the constructor.
Convenience struct for specifying and reasoning about fast-math flags.
Definition FMF.h:23
void setAllowContract(bool B=true)
Definition FMF.h:93
bool noSignedZeros() const
Definition FMF.h:70
bool noInfs() const
Definition FMF.h:69
void setAllowReciprocal(bool B=true)
Definition FMF.h:90
bool allowReciprocal() const
Definition FMF.h:71
void setNoSignedZeros(bool B=true)
Definition FMF.h:87
bool allowReassoc() const
Flag queries.
Definition FMF.h:67
bool approxFunc() const
Definition FMF.h:73
void setNoNaNs(bool B=true)
Definition FMF.h:81
void setAllowReassoc(bool B=true)
Flag setters.
Definition FMF.h:78
bool noNaNs() const
Definition FMF.h:68
void setApproxFunc(bool B=true)
Definition FMF.h:96
void setNoInfs(bool B=true)
Definition FMF.h:84
bool allowContract() const
Definition FMF.h:72
An instruction for ordering other memory operations.
static LLVM_ABI FixedVectorType * get(Type *ElementType, unsigned NumElts)
Definition Type.cpp:873
static LLVM_ABI FunctionType * get(Type *Result, ArrayRef< Type * > Params, bool isVarArg)
This static method is the primary way of constructing a FunctionType.
static Function * Create(FunctionType *Ty, LinkageTypes Linkage, unsigned AddrSpace, const Twine &N="", Module *M=nullptr)
Definition Function.h:168
BasicBlockListType::iterator iterator
Definition Function.h:70
Argument * arg_iterator
Definition Function.h:73
iterator_range< arg_iterator > args()
Definition Function.h:892
arg_iterator arg_begin()
Definition Function.h:868
Function::iterator insert(Function::iterator Position, BasicBlock *BB)
Insert BB in the basic block list at Position.
Definition Function.h:755
size_t arg_size() const
Definition Function.h:901
Represents flags for the getelementptr instruction/expression.
static GEPNoWrapFlags inBounds()
static GEPNoWrapFlags noUnsignedWrap()
static GEPNoWrapFlags noUnsignedSignedWrap()
bool hasNoUnsignedSignedWrap() const
bool hasNoUnsignedWrap() const
bool isInBounds() const
GEPNoWrapFlags getNoWrapFlags() const
Definition Operator.h:425
an instruction for type-safe pointer arithmetic to access elements of arrays and structs
LLVM_ABI void setNoWrapFlags(GEPNoWrapFlags NW)
Set nowrap flags for GEP instruction.
static LLVM_ABI GlobalAlias * create(Type *Ty, unsigned AddressSpace, LinkageTypes Linkage, const Twine &Name, Constant *Aliasee, Module *Parent)
If a parent module is specified, the alias is automatically inserted into the end of the specified mo...
Definition Globals.cpp:621
static LLVM_ABI GlobalIFunc * create(Type *Ty, unsigned AddressSpace, LinkageTypes Linkage, const Twine &Name, Constant *Resolver, Module *Parent)
If a parent module is specified, the ifunc is automatically inserted into the end of the specified mo...
Definition Globals.cpp:678
void setUnnamedAddr(UnnamedAddr Val)
void setThreadLocalMode(ThreadLocalMode Val)
void setLinkage(LinkageTypes LT)
DLLStorageClassTypes
Storage classes of global values for PE targets.
Definition GlobalValue.h:74
Module * getParent()
Get the module that this global value is contained inside of...
VisibilityTypes
An enumeration for the kinds of visibility of global values.
Definition GlobalValue.h:67
@ PrivateLinkage
Like Internal, but omit from symbol table.
Definition GlobalValue.h:61
@ CommonLinkage
Tentative definitions.
Definition GlobalValue.h:63
@ InternalLinkage
Rename collisions when linking (static functions).
Definition GlobalValue.h:60
@ LinkOnceAnyLinkage
Keep one copy of function when linking (inline)
Definition GlobalValue.h:55
@ WeakODRLinkage
Same, but only replaced by something equivalent.
Definition GlobalValue.h:58
@ ExternalLinkage
Externally visible function.
Definition GlobalValue.h:53
@ WeakAnyLinkage
Keep one copy of named function when linking (weak)
Definition GlobalValue.h:57
@ AppendingLinkage
Special purpose, only applies to global arrays.
Definition GlobalValue.h:59
@ AvailableExternallyLinkage
Available for inspection, not emission.
Definition GlobalValue.h:54
@ ExternalWeakLinkage
ExternalWeak linkage description.
Definition GlobalValue.h:62
@ LinkOnceODRLinkage
Same, but only replaced by something equivalent.
Definition GlobalValue.h:56
const Constant * getInitializer() const
getInitializer - Return the initializer for this global variable.
bool hasInitializer() const
Definitions have initializers, declarations don't.
This instruction compares its operands according to the predicate given to the constructor.
Common base class shared among various IRBuilders.
Definition IRBuilder.h:114
This provides a uniform API for creating instructions and inserting them into a basic block: either a...
Definition IRBuilder.h:2829
static LLVM_ABI InlineAsm * get(FunctionType *Ty, StringRef AsmString, StringRef Constraints, bool hasSideEffects, bool isAlignStack=false, AsmDialect asmDialect=AD_ATT, bool canThrow=false)
InlineAsm::get - Return the specified uniqued inline asm string.
Definition InlineAsm.cpp:43
Class to represent integer types.
static LLVM_ABI IntegerType * get(LLVMContext &C, unsigned NumBits)
This static method is the primary way of constructing an IntegerType.
Definition Type.cpp:354
This is an important class for using LLVM in a threaded context.
Definition LLVMContext.h:68
void(*)(LLVMContext *Context, void *OpaqueHandle) YieldCallbackTy
Defines the type of a yield callback.
An instruction for reading from memory.
static LocalAsMetadata * get(Value *Local)
Definition Metadata.h:563
Metadata node.
Definition Metadata.h:1080
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
Definition Metadata.h:1572
A single uniqued string.
Definition Metadata.h:722
static LLVM_ABI MDString * get(LLVMContext &Context, StringRef Str)
Definition Metadata.cpp:614
static std::unique_ptr< MemoryBuffer > getMemBuffer(StringRef InputData, StringRef BufferName="", bool RequiresNullTerminator=true)
Open the specified memory range as a MemoryBuffer.
static std::unique_ptr< MemoryBuffer > getMemBufferCopy(StringRef InputData, const Twine &BufferName="")
Open the specified memory range as a MemoryBuffer, copying the contents and taking ownership of it.
static ErrorOr< std::unique_ptr< MemoryBuffer > > getFile(const Twine &Filename, bool IsText=false, bool RequiresNullTerminator=true, bool IsVolatile=false, std::optional< Align > Alignment=std::nullopt)
Open the specified file as a MemoryBuffer, returning a new MemoryBuffer if successful,...
static ErrorOr< std::unique_ptr< MemoryBuffer > > getSTDIN()
Read all of stdin into a file buffer, and return it.
Metadata wrapper in the Value hierarchy.
Definition Metadata.h:184
static LLVM_ABI MetadataAsValue * get(LLVMContext &Context, Metadata *MD)
Definition Metadata.cpp:110
Metadata * getMetadata() const
Definition Metadata.h:202
Root of the metadata hierarchy.
Definition Metadata.h:64
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:67
global_iterator global_begin()
Definition Module.h:677
ifunc_iterator ifunc_begin()
Definition Module.h:746
ModFlagBehavior
This enumeration defines the supported behaviors of module flags.
Definition Module.h:117
@ AppendUnique
Appends the two values, which are required to be metadata nodes.
Definition Module.h:146
@ Override
Uses the specified value, regardless of the behavior or value of the other module.
Definition Module.h:138
@ Warning
Emits a warning if two values disagree.
Definition Module.h:124
@ Error
Emits an error if two values disagree, otherwise the resulting value is that of the operands.
Definition Module.h:120
@ Append
Appends the two values, which are required to be metadata nodes.
Definition Module.h:141
@ Require
Adds a requirement that another module flag be present and have a specified value after linking is pe...
Definition Module.h:133
global_iterator global_end()
Definition Module.h:679
NamedMDListType::iterator named_metadata_iterator
The named metadata iterators.
Definition Module.h:112
IFuncListType::iterator ifunc_iterator
The Global IFunc iterators.
Definition Module.h:107
named_metadata_iterator named_metadata_begin()
Definition Module.h:787
ifunc_iterator ifunc_end()
Definition Module.h:748
alias_iterator alias_end()
Definition Module.h:730
alias_iterator alias_begin()
Definition Module.h:728
FunctionListType::iterator iterator
The Function iterators.
Definition Module.h:92
GlobalListType::iterator global_iterator
The Global Variable iterator.
Definition Module.h:87
AliasListType::iterator alias_iterator
The Global Alias iterators.
Definition Module.h:102
named_metadata_iterator named_metadata_end()
Definition Module.h:792
A tuple of MDNodes.
Definition Metadata.h:1760
LLVM_ABI StringRef getName() const
Module * getParent()
Get the module that holds this named metadata collection.
Definition Metadata.h:1830
void addIncoming(Value *V, BasicBlock *BB)
Add an incoming value to the end of the PHI list.
PassRegistry - This class manages the registration and intitialization of the pass subsystem as appli...
static LLVM_ABI PointerType * get(Type *ElementType, unsigned AddressSpace)
This constructs a pointer to an object of the specified type in a numbered address space.
static LLVM_ABI PoisonValue * get(Type *T)
Static factory methods - Return an 'poison' object of the specified type.
A global registry used in conjunction with static constructors to make pluggable components (like tar...
Definition Registry.h:116
Interface for looking up the initializer for a variable name, used by Init::resolveReferences.
Definition Record.h:2199
static LLVM_ABI ScalableVectorType * get(Type *ElementType, unsigned MinNumElts)
Definition Type.cpp:895
This instruction constructs a fixed permutation of two input vectors.
ArrayRef< int > getShuffleMask() const
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
An instruction for storing to memory.
StringRef - Represent a constant reference to a string, i.e.
Definition StringRef.h:55
constexpr size_t size() const
size - Get the string size.
Definition StringRef.h:143
constexpr const char * data() const
data - Get a pointer to the start of the string (which may not be null terminated).
Definition StringRef.h:137
Class to represent struct types.
static LLVM_ABI StructType * get(LLVMContext &Context, ArrayRef< Type * > Elements, bool isPacked=false)
This static method is the primary way to create a literal StructType.
Definition Type.cpp:483
static LLVM_ABI StructType * getTypeByName(LLVMContext &C, StringRef Name)
Return the type with the specified name, or null if there is none by that name.
Definition Type.cpp:808
static LLVM_ABI StructType * create(LLVMContext &Context, StringRef Name)
This creates an identified struct.
Definition Type.cpp:689
Class to represent target extensions types, which are generally unintrospectable from target-independ...
static LLVM_ABI TargetExtType * get(LLVMContext &Context, StringRef Name, ArrayRef< Type * > Types={}, ArrayRef< unsigned > Ints={})
Return a target extension type having the specified name and optional type and integer parameters.
Definition Type.cpp:978
Triple - Helper class for working with autoconf configuration names.
Definition Triple.h:47
The instances of the Type class are immutable: once they are created, they are never changed.
Definition Type.h:46
static LLVM_ABI IntegerType * getInt64Ty(LLVMContext &C)
Definition Type.cpp:314
static LLVM_ABI Type * getX86_AMXTy(LLVMContext &C)
Definition Type.cpp:297
static LLVM_ABI Type * getMetadataTy(LLVMContext &C)
Definition Type.cpp:292
static LLVM_ABI Type * getTokenTy(LLVMContext &C)
Definition Type.cpp:293
static LLVM_ABI IntegerType * getInt128Ty(LLVMContext &C)
Definition Type.cpp:315
static LLVM_ABI IntegerType * getInt32Ty(LLVMContext &C)
Definition Type.cpp:313
static LLVM_ABI Type * getPPC_FP128Ty(LLVMContext &C)
Definition Type.cpp:296
static LLVM_ABI Type * getFP128Ty(LLVMContext &C)
Definition Type.cpp:295
static LLVM_ABI Type * getLabelTy(LLVMContext &C)
Definition Type.cpp:287
@ X86_AMXTyID
AMX vectors (8192 bits, X86 specific)
Definition Type.h:67
@ FunctionTyID
Functions.
Definition Type.h:73
@ ArrayTyID
Arrays.
Definition Type.h:76
@ TypedPointerTyID
Typed pointer used by some GPU targets.
Definition Type.h:79
@ HalfTyID
16-bit floating point type
Definition Type.h:57
@ TargetExtTyID
Target extension type.
Definition Type.h:80
@ VoidTyID
type with no size
Definition Type.h:64
@ ScalableVectorTyID
Scalable SIMD vector type.
Definition Type.h:78
@ LabelTyID
Labels.
Definition Type.h:65
@ FloatTyID
32-bit floating point type
Definition Type.h:59
@ StructTyID
Structures.
Definition Type.h:75
@ IntegerTyID
Arbitrary bit width integers.
Definition Type.h:71
@ FixedVectorTyID
Fixed width SIMD vector type.
Definition Type.h:77
@ BFloatTyID
16-bit floating point type (7-bit significand)
Definition Type.h:58
@ DoubleTyID
64-bit floating point type
Definition Type.h:60
@ X86_FP80TyID
80-bit floating point type (X87)
Definition Type.h:61
@ PPC_FP128TyID
128-bit floating point type (two 64-bits, PowerPC)
Definition Type.h:63
@ MetadataTyID
Metadata.
Definition Type.h:66
@ TokenTyID
Tokens.
Definition Type.h:68
@ ByteTyID
Arbitrary bit width bytes.
Definition Type.h:72
@ PointerTyID
Pointers.
Definition Type.h:74
@ FP128TyID
128-bit floating point type (112-bit significand)
Definition Type.h:62
static LLVM_ABI Type * getVoidTy(LLVMContext &C)
Definition Type.cpp:286
static LLVM_ABI IntegerType * getInt8Ty(LLVMContext &C)
Definition Type.cpp:311
static LLVM_ABI IntegerType * getInt16Ty(LLVMContext &C)
Definition Type.cpp:312
static LLVM_ABI IntegerType * getInt1Ty(LLVMContext &C)
Definition Type.cpp:310
static LLVM_ABI Type * getDoubleTy(LLVMContext &C)
Definition Type.cpp:291
static LLVM_ABI Type * getX86_FP80Ty(LLVMContext &C)
Definition Type.cpp:294
static LLVM_ABI Type * getFloatTy(LLVMContext &C)
Definition Type.cpp:290
static LLVM_ABI Type * getBFloatTy(LLVMContext &C)
Definition Type.cpp:289
static LLVM_ABI Type * getHalfTy(LLVMContext &C)
Definition Type.cpp:288
static LLVM_ABI UndefValue * get(Type *T)
Static factory methods - Return an 'undef' object of the specified type.
A Use represents the edge between a Value definition and its users.
Definition Use.h:35
static LLVM_ABI ValueAsMetadata * get(Value *V)
Definition Metadata.cpp:509
LLVM Value Representation.
Definition Value.h:75
Type * getType() const
All values are typed, get the type of this value.
Definition Value.h:255
LLVMContext & getContext() const
All values hold a context through their type.
Definition Value.h:258
use_iterator_impl< Use > use_iterator
Definition Value.h:353
An efficient, type-erasing, non-owning reference to a callable.
self_iterator getIterator()
Definition ilist_node.h:123
FunctionPassManager manages FunctionPasses.
PassManager manages ModulePassManagers.
A raw_ostream that writes to a file descriptor.
bool has_error() const
Return the value of the flag in this raw_fd_ostream indicating whether an output error has been encou...
std::error_code error() const
void close()
Manually flush the stream and close the file.
A raw_ostream that writes to an std::string.
ilist_select_iterator_type< OptionsT, false, false > iterator
CallInst * Call
LLVMTypeRef LLVMGetTypeByName2(LLVMContextRef C, const char *Name)
Obtain a Type from a context by its registered name.
Definition Core.cpp:880
LLVMBool LLVMIsEnumAttribute(LLVMAttributeRef A)
Check for the different types of attributes.
Definition Core.cpp:249
LLVMTypeRef LLVMGetTypeAttributeValue(LLVMAttributeRef A)
Get the type attribute's value.
Definition Core.cpp:193
void LLVMContextSetDiagnosticHandler(LLVMContextRef C, LLVMDiagnosticHandler Handler, void *DiagnosticContext)
Set the diagnostic handler for this context.
Definition Core.cpp:110
LLVMAttributeRef LLVMCreateDenormalFPEnvAttribute(LLVMContextRef C, LLVMDenormalModeKind DefaultModeOutput, LLVMDenormalModeKind DefaultModeInput, LLVMDenormalModeKind FloatModeOutput, LLVMDenormalModeKind FloatModeInput)
Create a DenormalFPEnv attribute.
Definition Core.cpp:212
const char * LLVMGetStringAttributeValue(LLVMAttributeRef A, unsigned *Length)
Get the string attribute's value.
Definition Core.cpp:242
uint64_t LLVMGetEnumAttributeValue(LLVMAttributeRef A)
Get the enum attribute's value.
Definition Core.cpp:179
LLVMDenormalModeKind
Represent different denormal handling kinds for use with LLVMCreateDenormalFPEnvAttribute.
Definition Core.h:748
LLVMBool LLVMIsStringAttribute(LLVMAttributeRef A)
Definition Core.cpp:254
LLVMAttributeRef LLVMCreateConstantRangeAttribute(LLVMContextRef C, unsigned KindID, unsigned NumBits, const uint64_t LowerWords[], const uint64_t UpperWords[])
Create a ConstantRange attribute.
Definition Core.cpp:198
unsigned LLVMGetEnumAttributeKindForName(const char *Name, size_t SLen)
Return an unique id given the name of a enum attribute, or 0 if no attribute by that name exists.
Definition Core.cpp:160
LLVMDiagnosticHandler LLVMContextGetDiagnosticHandler(LLVMContextRef C)
Get the diagnostic handler of this context.
Definition Core.cpp:119
void LLVMContextSetYieldCallback(LLVMContextRef C, LLVMYieldCallback Callback, void *OpaqueHandle)
Set the yield callback function for this context.
Definition Core.cpp:128
char * LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI)
Return a string representation of the DiagnosticInfo.
Definition Core.cpp:262
LLVMAttributeRef LLVMCreateStringAttribute(LLVMContextRef C, const char *K, unsigned KLength, const char *V, unsigned VLength)
Create a string attribute.
Definition Core.cpp:228
unsigned LLVMGetSyncScopeID(LLVMContextRef C, const char *Name, size_t SLen)
Maps a synchronization scope name to a ID unique within this context.
Definition Core.cpp:156
void LLVMContextSetDiscardValueNames(LLVMContextRef C, LLVMBool Discard)
Set whether the given context discards all value names.
Definition Core.cpp:139
unsigned LLVMGetMDKindIDInContext(LLVMContextRef C, const char *Name, unsigned SLen)
Definition Core.cpp:147
unsigned LLVMGetEnumAttributeKind(LLVMAttributeRef A)
Get the unique id corresponding to the enum attribute passed as argument.
Definition Core.cpp:175
void * LLVMContextGetDiagnosticContext(LLVMContextRef C)
Get the diagnostic context of this context.
Definition Core.cpp:124
LLVMAttributeRef LLVMCreateTypeAttribute(LLVMContextRef C, unsigned KindID, LLVMTypeRef type_ref)
Create a type attribute.
Definition Core.cpp:186
unsigned LLVMGetLastEnumAttributeKind(void)
Definition Core.cpp:164
LLVMBool LLVMContextShouldDiscardValueNames(LLVMContextRef C)
Retrieve whether the given context is set to discard all value names.
Definition Core.cpp:135
LLVMBool LLVMIsTypeAttribute(LLVMAttributeRef A)
Definition Core.cpp:258
void LLVMContextDispose(LLVMContextRef C)
Destroy a context instance.
Definition Core.cpp:143
void(* LLVMYieldCallback)(LLVMContextRef, void *)
Definition Core.h:589
LLVMAttributeRef LLVMCreateEnumAttribute(LLVMContextRef C, unsigned KindID, uint64_t Val)
Create an enum attribute.
Definition Core.cpp:168
const char * LLVMGetStringAttributeKind(LLVMAttributeRef A, unsigned *Length)
Get the string attribute's kind.
Definition Core.cpp:235
LLVMContextRef LLVMContextCreate()
Create a new context.
Definition Core.cpp:104
void(* LLVMDiagnosticHandler)(LLVMDiagnosticInfoRef, void *)
Definition Core.h:588
LLVMDiagnosticSeverity LLVMGetDiagInfoSeverity(LLVMDiagnosticInfoRef DI)
Return an enum LLVMDiagnosticSeverity.
Definition Core.cpp:272
LLVMValueRef LLVMBuildAggregateRet(LLVMBuilderRef B, LLVMValueRef *RetVals, unsigned N)
Definition Core.cpp:3540
LLVMValueRef LLVMBuildMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3804
LLVMValueRef LLVMBuildRetVoid(LLVMBuilderRef B)
Definition Core.cpp:3532
LLVMValueRef LLVMBuildSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3784
LLVMValueRef LLVMBuildNUWMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3814
LLVMBool LLVMGetWeak(LLVMValueRef CmpXchgInst)
Definition Core.cpp:4243
LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4371
LLVMValueRef LLVMBuildIsNull(LLVMBuilderRef B, LLVMValueRef Val, const char *Name)
Definition Core.cpp:4500
LLVMValueRef LLVMBuildGEPWithNoWrapFlags(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Pointer, LLVMValueRef *Indices, unsigned NumIndices, const char *Name, LLVMGEPNoWrapFlags NoWrapFlags)
Creates a GetElementPtr instruction.
Definition Core.cpp:4201
LLVMValueRef LLVMBuildAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3764
void LLVMSetWeak(LLVMValueRef CmpXchgInst, LLVMBool isWeak)
Definition Core.cpp:4247
LLVMValueRef LLVMBuildOr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3884
LLVMValueRef LLVMBuildBitCast(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4343
LLVMValueRef LLVMBuildExactUDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3829
LLVMValueRef LLVMBuildGEP2(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Pointer, LLVMValueRef *Indices, unsigned NumIndices, const char *Name)
Definition Core.cpp:4186
LLVMValueRef LLVMBuildNSWSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3789
void LLVMPositionBuilderBeforeInstrAndDbgRecords(LLVMBuilderRef Builder, LLVMValueRef Instr)
Set the builder position before Instr and any attached debug records.
Definition Core.cpp:3449
LLVMValueRef LLVMBuildIsNotNull(LLVMBuilderRef B, LLVMValueRef Val, const char *Name)
Definition Core.cpp:4505
void LLVMDisposeBuilder(LLVMBuilderRef Builder)
Definition Core.cpp:3477
void LLVMClearInsertionPosition(LLVMBuilderRef Builder)
Definition Core.cpp:3464
LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef PersFn, unsigned NumClauses, const char *Name)
Definition Core.cpp:3606
void LLVMSetIsDisjoint(LLVMValueRef Inst, LLVMBool IsDisjoint)
Sets the disjoint flag for the instruction.
Definition Core.cpp:3987
LLVMBool LLVMIsAtomicSingleThread(LLVMValueRef AtomicInst)
Definition Core.cpp:4583
LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn)
Definition Core.cpp:3636
void LLVMSetAtomicRMWBinOp(LLVMValueRef Inst, LLVMAtomicRMWBinOp BinOp)
Definition Core.cpp:4282
LLVMValueRef LLVMBuildFDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3844
LLVMValueRef LLVMBuildInvokeWithOperandBundles(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Fn, LLVMValueRef *Args, unsigned NumArgs, LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, LLVMOperandBundleRef *Bundles, unsigned NumBundles, const char *Name)
Definition Core.cpp:3592
LLVMValueRef LLVMBuildXor(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3889
LLVMBool LLVMGetExact(LLVMValueRef DivOrShrInst)
Definition Core.cpp:3946
LLVMValueRef LLVMBuildAddrSpaceCast(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4348
unsigned LLVMGetNumMaskElements(LLVMValueRef SVInst)
Get the number of elements in the mask of a ShuffleVector instruction.
Definition Core.cpp:4565
void LLVMInsertIntoBuilder(LLVMBuilderRef Builder, LLVMValueRef Instr)
Definition Core.cpp:3468
LLVMValueRef LLVMBuildCleanupRet(LLVMBuilderRef B, LLVMValueRef CatchPad, LLVMBasicBlockRef BB)
Definition Core.cpp:3657
LLVMValueRef LLVMBuildFPToSI(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4308
void LLVMGetHandlers(LLVMValueRef CatchSwitch, LLVMBasicBlockRef *Handlers)
Obtain the basic blocks acting as handlers for a catchswitch instruction.
Definition Core.cpp:3704
LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4288
LLVMValueRef LLVMGetArgOperand(LLVMValueRef Funclet, unsigned i)
Definition Core.cpp:3721
LLVMValueRef LLVMBuildAnd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3879
unsigned LLVMGetNumHandlers(LLVMValueRef CatchSwitch)
Definition Core.cpp:3700
LLVMValueRef LLVMBuildCallBr(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Fn, LLVMBasicBlockRef DefaultDest, LLVMBasicBlockRef *IndirectDests, unsigned NumIndirectDests, LLVMValueRef *Args, unsigned NumArgs, LLVMOperandBundleRef *Bundles, unsigned NumBundles, const char *Name)
Definition Core.cpp:3564
LLVMBasicBlockRef LLVMGetInsertBlock(LLVMBuilderRef Builder)
Definition Core.cpp:3460
LLVMValueRef LLVMBuildSDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3834
LLVMValueRef LLVMBuildSExtOrBitCast(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4359
LLVMValueRef LLVMBuildCall2(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Fn, LLVMValueRef *Args, unsigned NumArgs, const char *Name)
Definition Core.cpp:4428
void LLVMSetNSW(LLVMValueRef ArithInst, LLVMBool HasNSW)
Definition Core.cpp:3941
LLVMMetadataRef LLVMGetCurrentDebugLocation2(LLVMBuilderRef Builder)
Get location information used by debugging information.
Definition Core.cpp:3483
LLVMValueRef LLVMBuildUDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3824
LLVMValueRef LLVMBuildSelect(LLVMBuilderRef B, LLVMValueRef If, LLVMValueRef Then, LLVMValueRef Else, const char *Name)
Definition Core.cpp:4451
void LLVMPositionBuilderBefore(LLVMBuilderRef Builder, LLVMValueRef Instr)
Set the builder position before Instr but after any attached debug records.
Definition Core.cpp:3444
LLVMBool LLVMCanValueUseFastMathFlags(LLVMValueRef V)
Check if a given value can potentially have fast math flags.
Definition Core.cpp:3977
void LLVMSetArgOperand(LLVMValueRef Funclet, unsigned i, LLVMValueRef value)
Definition Core.cpp:3725
LLVMValueRef LLVMBuildCondBr(LLVMBuilderRef B, LLVMValueRef If, LLVMBasicBlockRef Then, LLVMBasicBlockRef Else)
Definition Core.cpp:3549
LLVMBool LLVMGetNUW(LLVMValueRef ArithInst)
Definition Core.cpp:3926
LLVMOpcode LLVMGetCastOpcode(LLVMValueRef Src, LLVMBool SrcIsSigned, LLVMTypeRef DestTy, LLVMBool DestIsSigned)
Definition Core.cpp:4400
void LLVMInsertIntoBuilderWithName(LLVMBuilderRef Builder, LLVMValueRef Instr, const char *Name)
Definition Core.cpp:3472
LLVMValueRef LLVMBuildSRem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3854
LLVMValueRef LLVMBuildCleanupPad(LLVMBuilderRef B, LLVMValueRef ParentPad, LLVMValueRef *Args, unsigned NumArgs, const char *Name)
Definition Core.cpp:3625
LLVMValueRef LLVMBuildIntCast(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Deprecated: This cast is always signed.
Definition Core.cpp:4389
LLVMValueRef LLVMGetCurrentDebugLocation(LLVMBuilderRef Builder)
Deprecated: Returning the NULL location will crash.
Definition Core.cpp:3500
LLVMValueRef LLVMBuildExtractElement(LLVMBuilderRef B, LLVMValueRef VecVal, LLVMValueRef Index, const char *Name)
Definition Core.cpp:4463
LLVMValueRef LLVMBuildShl(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3864
LLVMBuilderRef LLVMCreateBuilderInContext(LLVMContextRef C)
Definition Core.cpp:3416
LLVMValueRef LLVMBuildCatchRet(LLVMBuilderRef B, LLVMValueRef CatchPad, LLVMBasicBlockRef BB)
Definition Core.cpp:3651
LLVMValueRef LLVMBuildMemMove(LLVMBuilderRef B, LLVMValueRef Dst, unsigned DstAlign, LLVMValueRef Src, unsigned SrcAlign, LLVMValueRef Size)
Creates and inserts a memmove between the specified pointers.
Definition Core.cpp:4028
LLVMAtomicOrdering LLVMGetOrdering(LLVMValueRef MemAccessInst)
Definition Core.cpp:4251
LLVMValueRef LLVMBuildStructGEP2(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Pointer, unsigned Idx, const char *Name)
Definition Core.cpp:4211
int LLVMGetMaskValue(LLVMValueRef SVInst, unsigned Elt)
Get the mask value at position Elt in the mask of a ShuffleVector instruction.
Definition Core.cpp:4571
void LLVMAddCase(LLVMValueRef Switch, LLVMValueRef OnVal, LLVMBasicBlockRef Dest)
Definition Core.cpp:3667
LLVMValueRef LLVMBuildBr(LLVMBuilderRef B, LLVMBasicBlockRef Dest)
Definition Core.cpp:3545
LLVMValueRef LLVMBuildInsertElement(LLVMBuilderRef B, LLVMValueRef VecVal, LLVMValueRef EltVal, LLVMValueRef Index, const char *Name)
Definition Core.cpp:4469
void LLVMPositionBuilderBeforeDbgRecords(LLVMBuilderRef Builder, LLVMBasicBlockRef Block, LLVMValueRef Instr)
Set the builder position before Instr and any attached debug records, or if Instr is null set the pos...
Definition Core.cpp:3437
void LLVMSetFastMathFlags(LLVMValueRef FPMathInst, LLVMFastMathFlags FMF)
Sets the flags for which fast-math-style optimizations are allowed for this value.
Definition Core.cpp:3972
LLVMValueRef LLVMBuildIntCast2(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, LLVMBool IsSigned, const char *Name)
Definition Core.cpp:4382
LLVMValueRef LLVMBuildNUWSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3794
LLVMValueRef LLVMBuildFAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3779
LLVMValueRef LLVMBuildCatchPad(LLVMBuilderRef B, LLVMValueRef ParentPad, LLVMValueRef *Args, unsigned NumArgs, const char *Name)
Definition Core.cpp:3618
LLVMValueRef LLVMBuildCallWithOperandBundles(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Fn, LLVMValueRef *Args, unsigned NumArgs, LLVMOperandBundleRef *Bundles, unsigned NumBundles, const char *Name)
Definition Core.cpp:4437
LLVMBool LLVMIsCleanup(LLVMValueRef LandingPad)
Definition Core.cpp:3688
LLVMValueRef LLVMBuildZExtOrBitCast(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4353
LLVMBool LLVMGetVolatile(LLVMValueRef Inst)
Definition Core.cpp:4228
LLVMValueRef LLVMBuildFPCast(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4395
LLVMValueRef LLVMBuildPtrToInt(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4333
LLVMValueRef LLVMBuildPtrDiff2(LLVMBuilderRef B, LLVMTypeRef ElemTy, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:4510
LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4365
LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Val, const char *Name)
Definition Core.cpp:4042
LLVMValueRef LLVMGetClause(LLVMValueRef LandingPad, unsigned Idx)
Definition Core.cpp:3680
unsigned LLVMGetAtomicSyncScopeID(LLVMValueRef AtomicInst)
Returns the synchronization scope ID of an atomic instruction.
Definition Core.cpp:4602
LLVMValueRef LLVMBuildVAArg(LLVMBuilderRef B, LLVMValueRef List, LLVMTypeRef Ty, const char *Name)
Definition Core.cpp:4458
LLVMValueRef LLVMBuildAtomicCmpXchgSyncScope(LLVMBuilderRef B, LLVMValueRef Ptr, LLVMValueRef Cmp, LLVMValueRef New, LLVMAtomicOrdering SuccessOrdering, LLVMAtomicOrdering FailureOrdering, unsigned SSID)
Definition Core.cpp:4554
LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3894
LLVMBool LLVMIsAtomic(LLVMValueRef Inst)
Returns whether an instruction is an atomic instruction, e.g., atomicrmw, cmpxchg,...
Definition Core.cpp:4579
void LLVMSetVolatile(LLVMValueRef MemAccessInst, LLVMBool isVolatile)
Definition Core.cpp:4232
void LLVMSetAtomicSingleThread(LLVMValueRef AtomicInst, LLVMBool NewValue)
Definition Core.cpp:4592
LLVMValueRef LLVMBuildFRem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3859
LLVMValueRef LLVMBuildURem(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3849
LLVMValueRef LLVMBuildIntToPtr(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4338
LLVMBool LLVMGetNSW(LLVMValueRef ArithInst)
Definition Core.cpp:3936
LLVMValueRef LLVMBuildNSWMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3809
LLVMValueRef LLVMBuildFree(LLVMBuilderRef B, LLVMValueRef PointerVal)
Definition Core.cpp:4047
LLVMValueRef LLVMBuildNeg(LLVMBuilderRef B, LLVMValueRef V, const char *Name)
Definition Core.cpp:3901
LLVMValueRef LLVMBuildFSub(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3799
LLVMValueRef LLVMBuildCatchSwitch(LLVMBuilderRef B, LLVMValueRef ParentPad, LLVMBasicBlockRef UnwindBB, unsigned NumHandlers, const char *Name)
Definition Core.cpp:3640
LLVMValueRef LLVMBuildLoad2(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef PointerVal, const char *Name)
Definition Core.cpp:4051
LLVMValueRef LLVMBuildInBoundsGEP2(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Pointer, LLVMValueRef *Indices, unsigned NumIndices, const char *Name)
Definition Core.cpp:4193
LLVMValueRef LLVMBuildArrayMalloc(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Val, const char *Name)
Definition Core.cpp:4003
LLVMValueRef LLVMBuildAtomicCmpXchg(LLVMBuilderRef B, LLVMValueRef Ptr, LLVMValueRef Cmp, LLVMValueRef New, LLVMAtomicOrdering SuccessOrdering, LLVMAtomicOrdering FailureOrdering, LLVMBool singleThread)
Definition Core.cpp:4541
LLVMValueRef LLVMBuildIndirectBr(LLVMBuilderRef B, LLVMValueRef Addr, unsigned NumDests)
Definition Core.cpp:3559
LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef B)
Definition Core.cpp:3663
LLVMValueRef LLVMBuildSIToFP(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4318
LLVMValueRef LLVMBuildSExt(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4298
LLVMValueRef LLVMBuildFPToUI(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4303
void LLVMSetInstDebugLocation(LLVMBuilderRef Builder, LLVMValueRef Inst)
Attempts to set the debug location for the given instruction using the current debug location for the...
Definition Core.cpp:3506
void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Builder, LLVMMetadataRef Loc)
Set location information used by debugging information.
Definition Core.cpp:3487
LLVMValueRef LLVMBuildAlloca(LLVMBuilderRef B, LLVMTypeRef Ty, const char *Name)
Definition Core.cpp:4037
void LLVMSetCurrentDebugLocation(LLVMBuilderRef Builder, LLVMValueRef L)
Deprecated: Passing the NULL location will crash.
Definition Core.cpp:3494
LLVMValueRef LLVMBuildPhi(LLVMBuilderRef B, LLVMTypeRef Ty, const char *Name)
Definition Core.cpp:4424
void LLVMAddDestination(LLVMValueRef IndirectBr, LLVMBasicBlockRef Dest)
Definition Core.cpp:3672
LLVMBool LLVMGetNNeg(LLVMValueRef NonNegInst)
Gets if the instruction has the non-negative flag set.
Definition Core.cpp:3956
LLVMValueRef LLVMBuildAtomicRMWSyncScope(LLVMBuilderRef B, LLVMAtomicRMWBinOp op, LLVMValueRef PTR, LLVMValueRef Val, LLVMAtomicOrdering ordering, unsigned SSID)
Definition Core.cpp:4530
LLVMValueRef LLVMBuildRet(LLVMBuilderRef B, LLVMValueRef V)
Definition Core.cpp:3536
LLVMMetadataRef LLVMBuilderGetDefaultFPMathTag(LLVMBuilderRef Builder)
Get the dafult floating-point math metadata for a given builder.
Definition Core.cpp:3526
LLVMValueRef LLVMBuildExtractValue(LLVMBuilderRef B, LLVMValueRef AggVal, unsigned Index, const char *Name)
Definition Core.cpp:4483
LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str, const char *Name)
Deprecated: Use LLVMBuildGlobalString instead, which has identical behavior.
Definition Core.cpp:4223
LLVMValueRef LLVMBuildNSWAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3769
void LLVMPositionBuilderAtEnd(LLVMBuilderRef Builder, LLVMBasicBlockRef Block)
Definition Core.cpp:3455
LLVMValueRef LLVMBuildFMul(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3819
LLVMValueRef LLVMBuildLShr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3869
LLVMAtomicRMWBinOp LLVMGetAtomicRMWBinOp(LLVMValueRef Inst)
Definition Core.cpp:4278
LLVMValueRef LLVMBuildFNeg(LLVMBuilderRef B, LLVMValueRef V, const char *Name)
Definition Core.cpp:3918
LLVMValueRef LLVMBuildMemSet(LLVMBuilderRef B, LLVMValueRef Ptr, LLVMValueRef Val, LLVMValueRef Len, unsigned Align)
Creates and inserts a memset to the specified pointer and the specified value.
Definition Core.cpp:4012
void LLVMSetAtomicSyncScopeID(LLVMValueRef AtomicInst, unsigned SSID)
Sets the synchronization scope ID of an atomic instruction.
Definition Core.cpp:4608
LLVMContextRef LLVMGetBuilderContext(LLVMBuilderRef Builder)
Obtain the context to which this builder is associated.
Definition Core.cpp:3522
LLVMValueRef LLVMBuildMalloc(LLVMBuilderRef B, LLVMTypeRef Ty, const char *Name)
Definition Core.cpp:3994
LLVMValueRef LLVMBuildFreeze(LLVMBuilderRef B, LLVMValueRef Val, const char *Name)
Definition Core.cpp:4495
LLVMValueRef LLVMBuildGlobalString(LLVMBuilderRef B, const char *Str, const char *Name)
Definition Core.cpp:4218
void LLVMSetNUW(LLVMValueRef ArithInst, LLVMBool HasNUW)
Definition Core.cpp:3931
LLVMAtomicOrdering LLVMGetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst)
Definition Core.cpp:4614
LLVMValueRef LLVMBuildFCmp(LLVMBuilderRef B, LLVMRealPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:4415
LLVMValueRef LLVMBuildPointerCast(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4377
LLVMValueRef LLVMBuildExactSDiv(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3839
LLVMValueRef LLVMBuildShuffleVector(LLVMBuilderRef B, LLVMValueRef V1, LLVMValueRef V2, LLVMValueRef Mask, const char *Name)
Definition Core.cpp:4476
LLVMValueRef LLVMBuildFPExt(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4328
void LLVMSetCleanup(LLVMValueRef LandingPad, LLVMBool Val)
Definition Core.cpp:3692
LLVMValueRef LLVMBuildICmp(LLVMBuilderRef B, LLVMIntPredicate Op, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:4408
void LLVMSetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst, LLVMAtomicOrdering Ordering)
Definition Core.cpp:4632
void LLVMAddClause(LLVMValueRef LandingPad, LLVMValueRef ClauseVal)
Definition Core.cpp:3684
LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering Ordering, LLVMBool isSingleThread, const char *Name)
Definition Core.cpp:4170
void LLVMSetParentCatchSwitch(LLVMValueRef CatchPad, LLVMValueRef CatchSwitch)
Set the parent catchswitch instruction of a catchpad instruction.
Definition Core.cpp:3714
LLVMValueRef LLVMBuildFenceSyncScope(LLVMBuilderRef B, LLVMAtomicOrdering Ordering, unsigned SSID, const char *Name)
Definition Core.cpp:4179
LLVMValueRef LLVMBuildUIToFP(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4313
void LLVMPositionBuilder(LLVMBuilderRef Builder, LLVMBasicBlockRef Block, LLVMValueRef Instr)
Set the builder position before Instr but after any attached debug records, or if Instr is null set t...
Definition Core.cpp:3431
unsigned LLVMGetNumClauses(LLVMValueRef LandingPad)
Definition Core.cpp:3676
int LLVMGetUndefMaskElem(void)
Definition Core.cpp:4577
void LLVMSetCmpXchgSuccessOrdering(LLVMValueRef CmpXchgInst, LLVMAtomicOrdering Ordering)
Definition Core.cpp:4619
LLVMValueRef LLVMGetParentCatchSwitch(LLVMValueRef CatchPad)
Get the parent catchswitch instruction of a catchpad instruction.
Definition Core.cpp:3710
LLVMFastMathFlags LLVMGetFastMathFlags(LLVMValueRef FPMathInst)
Get the flags for which fast-math-style optimizations are allowed for this value.
Definition Core.cpp:3966
LLVMBool LLVMGetIsDisjoint(LLVMValueRef Inst)
Gets whether the instruction has the disjoint flag set.
Definition Core.cpp:3982
LLVMValueRef LLVMBuildSwitch(LLVMBuilderRef B, LLVMValueRef V, LLVMBasicBlockRef Else, unsigned NumCases)
Definition Core.cpp:3554
void LLVMSetNNeg(LLVMValueRef NonNegInst, LLVMBool IsNonNeg)
Sets the non-negative flag for the instruction.
Definition Core.cpp:3961
LLVMValueRef LLVMBuildMemCpy(LLVMBuilderRef B, LLVMValueRef Dst, unsigned DstAlign, LLVMValueRef Src, unsigned SrcAlign, LLVMValueRef Size)
Creates and inserts a memcpy between the specified pointers.
Definition Core.cpp:4019
void LLVMAddHandler(LLVMValueRef CatchSwitch, LLVMBasicBlockRef Dest)
Definition Core.cpp:3696
void LLVMSetExact(LLVMValueRef DivOrShrInst, LLVMBool IsExact)
Definition Core.cpp:3951
LLVMValueRef LLVMBuildNSWNeg(LLVMBuilderRef B, LLVMValueRef V, const char *Name)
Definition Core.cpp:3905
LLVMValueRef LLVMBuildAShr(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3874
LLVMValueRef LLVMBuildInvoke2(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Fn, LLVMValueRef *Args, unsigned NumArgs, LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch, const char *Name)
Definition Core.cpp:3583
void LLVMSetOrdering(LLVMValueRef MemAccessInst, LLVMAtomicOrdering Ordering)
Definition Core.cpp:4265
LLVMValueRef LLVMBuildFPTrunc(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4323
LLVMValueRef LLVMBuildStore(LLVMBuilderRef B, LLVMValueRef Val, LLVMValueRef PointerVal)
Definition Core.cpp:4056
void LLVMAddMetadataToInst(LLVMBuilderRef Builder, LLVMValueRef Inst)
Adds the metadata registered with the given builder to the given instruction.
Definition Core.cpp:3510
LLVMAtomicOrdering LLVMGetCmpXchgFailureOrdering(LLVMValueRef CmpXchgInst)
Definition Core.cpp:4627
LLVMValueRef LLVMBuildNUWAdd(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS, const char *Name)
Definition Core.cpp:3774
LLVMValueRef LLVMBuildInsertValue(LLVMBuilderRef B, LLVMValueRef AggVal, LLVMValueRef EltVal, unsigned Index, const char *Name)
Definition Core.cpp:4488
void LLVMBuilderSetDefaultFPMathTag(LLVMBuilderRef Builder, LLVMMetadataRef FPMathTag)
Set the default floating-point math metadata for the given builder.
Definition Core.cpp:3514
LLVMValueRef LLVMBuildZExt(LLVMBuilderRef B, LLVMValueRef Val, LLVMTypeRef DestTy, const char *Name)
Definition Core.cpp:4293
LLVMValueRef LLVMBuildNot(LLVMBuilderRef B, LLVMValueRef V, const char *Name)
Definition Core.cpp:3922
LLVMValueRef LLVMBuildAtomicRMW(LLVMBuilderRef B, LLVMAtomicRMWBinOp op, LLVMValueRef PTR, LLVMValueRef Val, LLVMAtomicOrdering ordering, LLVMBool singleThread)
Definition Core.cpp:4519
LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRange(const char *InputData, size_t InputDataLength, const char *BufferName, LLVMBool RequiresNullTerminator)
Definition Core.cpp:4679
size_t LLVMGetBufferSize(LLVMMemoryBufferRef MemBuf)
Definition Core.cpp:4704
LLVMMemoryBufferRef LLVMCreateMemoryBufferWithMemoryRangeCopy(const char *InputData, size_t InputDataLength, const char *BufferName)
Definition Core.cpp:4690
const char * LLVMGetBufferStart(LLVMMemoryBufferRef MemBuf)
Definition Core.cpp:4700
LLVMBool LLVMCreateMemoryBufferWithContentsOfFile(const char *Path, LLVMMemoryBufferRef *OutMemBuf, char **OutMessage)
Definition Core.cpp:4654
LLVMBool LLVMCreateMemoryBufferWithSTDIN(LLVMMemoryBufferRef *OutMemBuf, char **OutMessage)
Definition Core.cpp:4668
void LLVMDisposeMemoryBuffer(LLVMMemoryBufferRef MemBuf)
Definition Core.cpp:4708
LLVMModuleProviderRef LLVMCreateModuleProviderForExistingModule(LLVMModuleRef M)
Changes the type of M so it can be passed to FunctionPassManagers and the JIT.
Definition Core.cpp:4643
void LLVMDisposeModuleProvider(LLVMModuleProviderRef MP)
Destroys the module M.
Definition Core.cpp:4647
char * LLVMPrintModuleToString(LLVMModuleRef M)
Return a string representation of the module.
Definition Core.cpp:490
LLVMNamedMDNodeRef LLVMGetOrInsertNamedMetadata(LLVMModuleRef M, const char *Name, size_t NameLen)
Retrieve a NamedMDNode with the given name, creating a new node if no such node exists.
Definition Core.cpp:1430
LLVMValueRef LLVMGetNamedFunctionWithLength(LLVMModuleRef M, const char *Name, size_t Length)
Obtain a Function value from a Module by its name.
Definition Core.cpp:2490
unsigned LLVMGetDebugLocColumn(LLVMValueRef Val)
Return the column number of the debug location for this value, which must be an llvm::Instruction.
Definition Core.cpp:1558
LLVMNamedMDNodeRef LLVMGetNamedMetadata(LLVMModuleRef M, const char *Name, size_t NameLen)
Retrieve a NamedMDNode with the given name, returning NULL if no such node exists.
Definition Core.cpp:1425
LLVMModuleRef LLVMModuleCreateWithNameInContext(const char *ModuleID, LLVMContextRef C)
Create a new, empty module in a specific context.
Definition Core.cpp:299
const char * LLVMGetTarget(LLVMModuleRef M)
Obtain the target triple for a module.
Definition Core.cpp:342
LLVMBool LLVMGetInlineAsmCanUnwind(LLVMValueRef InlineAsmVal)
Get if the inline asm snippet may unwind the stack.
Definition Core.cpp:587
const char * LLVMGetModuleInlineAsm(LLVMModuleRef M, size_t *Len)
Get inline assembly for a module.
Definition Core.cpp:512
LLVMBool LLVMGetInlineAsmNeedsAlignedStack(LLVMValueRef InlineAsmVal)
Get if the inline asm snippet needs an aligned stack.
Definition Core.cpp:582
LLVMBool LLVMGetInlineAsmHasSideEffects(LLVMValueRef InlineAsmVal)
Get if the inline asm snippet has side effects.
Definition Core.cpp:577
unsigned LLVMGetNamedMetadataNumOperands(LLVMModuleRef M, const char *Name)
Obtain the number of operands for named metadata in a module.
Definition Core.cpp:1461
void LLVMDumpModule(LLVMModuleRef M)
Dump a representation of a module to stderr.
Definition Core.cpp:463
void LLVMSetTarget(LLVMModuleRef M, const char *TripleStr)
Set the target triple for a module.
Definition Core.cpp:346
LLVMTypeRef LLVMGetInlineAsmFunctionType(LLVMValueRef InlineAsmVal)
Get the function type of the inline assembly snippet.
Definition Core.cpp:572
LLVMBool LLVMIsNewDbgInfoFormat(LLVMModuleRef M)
Soon to be deprecated.
Definition Core.cpp:453
LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M)
Obtain the context to which this module is associated.
Definition Core.cpp:593
LLVMInlineAsmDialect LLVMGetInlineAsmDialect(LLVMValueRef InlineAsmVal)
Get the dialect used by the inline asm snippet.
Definition Core.cpp:556
void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm)
Deprecated: Use LLVMSetModuleInlineAsm2 instead.
Definition Core.cpp:504
LLVMValueRef LLVMGetNextFunction(LLVMValueRef Fn)
Advance a Function iterator to the next Function.
Definition Core.cpp:2511
const char * LLVMGetModuleIdentifier(LLVMModuleRef M, size_t *Len)
Obtain the identifier of a module.
Definition Core.cpp:308
const char * LLVMGetSourceFileName(LLVMModuleRef M, size_t *Len)
Obtain the module's original source file name.
Definition Core.cpp:318
const char * LLVMGetDataLayoutStr(LLVMModuleRef M)
Obtain the data layout for a module.
Definition Core.cpp:329
LLVMModuleFlagBehavior LLVMModuleFlagEntriesGetFlagBehavior(LLVMModuleFlagEntry *Entries, unsigned Index)
Returns the flag behavior for a module flag entry at a specific index.
Definition Core.cpp:419
void LLVMSetIsNewDbgInfoFormat(LLVMModuleRef M, LLVMBool UseNewFormat)
Soon to be deprecated.
Definition Core.cpp:455
LLVMTypeRef LLVMGetTypeByName(LLVMModuleRef M, const char *Name)
Deprecated: Use LLVMGetTypeByName2 instead.
Definition Core.cpp:876
void LLVMSetModuleIdentifier(LLVMModuleRef M, const char *Ident, size_t Len)
Set the identifier of a module to a string Ident with length Len.
Definition Core.cpp:314
const char * LLVMGetInlineAsmAsmString(LLVMValueRef InlineAsmVal, size_t *Len)
Get the template string used for an inline assembly snippet.
Definition Core.cpp:538
LLVMValueRef LLVMGetInlineAsm(LLVMTypeRef Ty, const char *AsmString, size_t AsmStringSize, const char *Constraints, size_t ConstraintsSize, LLVMBool HasSideEffects, LLVMBool IsAlignStack, LLVMInlineAsmDialect Dialect, LLVMBool CanThrow)
Create the specified uniqued inline asm string.
Definition Core.cpp:518
LLVMValueRef LLVMGetOrInsertFunction(LLVMModuleRef M, const char *Name, size_t NameLen, LLVMTypeRef FunctionTy)
Obtain or insert a function into a module.
Definition Core.cpp:2478
const char * LLVMGetInlineAsmConstraintString(LLVMValueRef InlineAsmVal, size_t *Len)
Get the raw constraint string for an inline assembly snippet.
Definition Core.cpp:547
LLVMNamedMDNodeRef LLVMGetNextNamedMetadata(LLVMNamedMDNodeRef NMD)
Advance a NamedMDNode iterator to the next NamedMDNode.
Definition Core.cpp:1409
void LLVMGetNamedMetadataOperands(LLVMModuleRef M, const char *Name, LLVMValueRef *Dest)
Obtain the named metadata operands for a module.
Definition Core.cpp:1468
LLVMMetadataRef LLVMGetModuleFlag(LLVMModuleRef M, const char *Key, size_t KeyLen)
Add a module-level flag to the module-level flags metadata if it doesn't already exist.
Definition Core.cpp:441
LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name, LLVMTypeRef FunctionTy)
Add a function to a module under a specified name.
Definition Core.cpp:2472
LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn)
Decrement a Function iterator to the previous Function.
Definition Core.cpp:2519
const char * LLVMGetDebugLocDirectory(LLVMValueRef Val, unsigned *Length)
Return the directory of the debug location for this value, which must be an llvm::Instruction,...
Definition Core.cpp:1488
void LLVMAddNamedMetadataOperand(LLVMModuleRef M, const char *Name, LLVMValueRef Val)
Add an operand to named metadata.
Definition Core.cpp:1478
unsigned LLVMGetDebugLocLine(LLVMValueRef Val)
Return the line number of the debug location for this value, which must be an llvm::Instruction,...
Definition Core.cpp:1536
LLVMMetadataRef LLVMModuleFlagEntriesGetMetadata(LLVMModuleFlagEntry *Entries, unsigned Index)
Returns the metadata for a module flag entry at a specific index.
Definition Core.cpp:434
void LLVMAddModuleFlag(LLVMModuleRef M, LLVMModuleFlagBehavior Behavior, const char *Key, size_t KeyLen, LLVMMetadataRef Val)
Add a module-level flag to the module-level flags metadata if it doesn't already exist.
Definition Core.cpp:446
LLVMValueRef LLVMGetLastFunction(LLVMModuleRef M)
Obtain an iterator to the last Function in a Module.
Definition Core.cpp:2503
LLVMNamedMDNodeRef LLVMGetPreviousNamedMetadata(LLVMNamedMDNodeRef NMD)
Decrement a NamedMDNode iterator to the previous NamedMDNode.
Definition Core.cpp:1417
const char * LLVMGetNamedMetadataName(LLVMNamedMDNodeRef NMD, size_t *NameLen)
Retrieve the name of a NamedMDNode.
Definition Core.cpp:1435
LLVMValueRef LLVMGetNamedFunction(LLVMModuleRef M, const char *Name)
Obtain a Function value from a Module by its name.
Definition Core.cpp:2486
const char * LLVMGetDebugLocFilename(LLVMValueRef Val, unsigned *Length)
Return the filename of the debug location for this value, which must be an llvm::Instruction,...
Definition Core.cpp:1512
void LLVMAppendModuleInlineAsm(LLVMModuleRef M, const char *Asm, size_t Len)
Append inline assembly to a module.
Definition Core.cpp:508
void LLVMSetDataLayout(LLVMModuleRef M, const char *DataLayoutStr)
Set the data layout for a module.
Definition Core.cpp:337
void LLVMDisposeModuleFlagsMetadata(LLVMModuleFlagEntry *Entries)
Destroys module flags metadata entries.
Definition Core.cpp:414
void LLVMDisposeModule(LLVMModuleRef M)
Destroy a module instance.
Definition Core.cpp:304
LLVMNamedMDNodeRef LLVMGetLastNamedMetadata(LLVMModuleRef M)
Obtain an iterator to the last NamedMDNode in a Module.
Definition Core.cpp:1401
void LLVMSetModuleInlineAsm2(LLVMModuleRef M, const char *Asm, size_t Len)
Set inline assembly for a module.
Definition Core.cpp:500
LLVMValueRef LLVMGetFirstFunction(LLVMModuleRef M)
Obtain an iterator to the first Function in a Module.
Definition Core.cpp:2495
LLVMNamedMDNodeRef LLVMGetFirstNamedMetadata(LLVMModuleRef M)
Obtain an iterator to the first NamedMDNode in a Module.
Definition Core.cpp:1393
const char * LLVMModuleFlagEntriesGetKey(LLVMModuleFlagEntry *Entries, unsigned Index, size_t *Len)
Returns the key for a module flag entry at a specific index.
Definition Core.cpp:426
void LLVMSetSourceFileName(LLVMModuleRef M, const char *Name, size_t Len)
Set the original source file name of a module to a string Name with length Len.
Definition Core.cpp:324
LLVMBool LLVMPrintModuleToFile(LLVMModuleRef M, const char *Filename, char **ErrorMessage)
Print a representation of a module to a file.
Definition Core.cpp:468
const char * LLVMGetDataLayout(LLVMModuleRef M)
Definition Core.cpp:333
LLVMModuleFlagEntry * LLVMCopyModuleFlagsMetadata(LLVMModuleRef M, size_t *Len)
Returns the module flags as an array of flag-key-value triples.
Definition Core.cpp:397
LLVMOperandBundleRef LLVMCreateOperandBundle(const char *Tag, size_t TagLen, LLVMValueRef *Args, unsigned NumArgs)
Create a new operand bundle.
Definition Core.cpp:2837
unsigned LLVMGetNumOperandBundleArgs(LLVMOperandBundleRef Bundle)
Obtain the number of operands for an operand bundle.
Definition Core.cpp:2854
const char * LLVMGetOperandBundleTag(LLVMOperandBundleRef Bundle, size_t *Len)
Obtain the tag of an operand bundle as a string.
Definition Core.cpp:2848
void LLVMDisposeOperandBundle(LLVMOperandBundleRef Bundle)
Destroy an operand bundle.
Definition Core.cpp:2844
LLVMValueRef LLVMGetOperandBundleArgAtIndex(LLVMOperandBundleRef Bundle, unsigned Index)
Obtain the operand for an operand bundle at the given index.
Definition Core.cpp:2858
LLVMPassManagerRef LLVMCreateFunctionPassManager(LLVMModuleProviderRef P)
Deprecated: Use LLVMCreateFunctionPassManagerForModule instead.
Definition Core.cpp:4722
LLVMPassManagerRef LLVMCreateFunctionPassManagerForModule(LLVMModuleRef M)
Constructs a new function-by-function pass pipeline over the module provider.
Definition Core.cpp:4718
LLVMBool LLVMFinalizeFunctionPassManager(LLVMPassManagerRef FPM)
Finalizes all of the function passes scheduled in the function pass manager.
Definition Core.cpp:4739
void LLVMDisposePassManager(LLVMPassManagerRef PM)
Frees the memory of a pass pipeline.
Definition Core.cpp:4743
LLVMBool LLVMRunFunctionPassManager(LLVMPassManagerRef FPM, LLVMValueRef F)
Executes all of the function passes scheduled in the function pass manager on the provided function.
Definition Core.cpp:4735
LLVMBool LLVMInitializeFunctionPassManager(LLVMPassManagerRef FPM)
Initializes all of the function passes scheduled in the function pass manager.
Definition Core.cpp:4731
LLVMBool LLVMRunPassManager(LLVMPassManagerRef PM, LLVMModuleRef M)
Initializes, executes on the provided module, and finalizes all of the passes scheduled in the pass m...
Definition Core.cpp:4727
LLVMPassManagerRef LLVMCreatePassManager()
Constructs a new whole-module pass pipeline.
Definition Core.cpp:4714
void LLVMStopMultithreaded()
Deprecated: Multi-threading can only be enabled/disabled with the compile time define LLVM_ENABLE_THR...
Definition Core.cpp:4753
LLVMBool LLVMStartMultithreaded()
Deprecated: Multi-threading can only be enabled/disabled with the compile time define LLVM_ENABLE_THR...
Definition Core.cpp:4749
LLVMBool LLVMIsMultithreaded()
Check whether LLVM is executing in thread-safe mode or not.
Definition Core.cpp:4756
LLVMTypeRef LLVMByteTypeInContext(LLVMContextRef C, unsigned NumBits)
Obtain a byte type from a context with specified bit width.
Definition Core.cpp:679
unsigned LLVMGetByteTypeWidth(LLVMTypeRef ByteTy)
Definition Core.cpp:683
LLVMTypeRef LLVMHalfTypeInContext(LLVMContextRef C)
Obtain a 16-bit floating point type from a context.
Definition Core.cpp:739
LLVMTypeRef LLVMBFloatTypeInContext(LLVMContextRef C)
Obtain a 16-bit brain floating point type from a context.
Definition Core.cpp:742
LLVMTypeRef LLVMPPCFP128TypeInContext(LLVMContextRef C)
Obtain a 128-bit floating point type (two 64-bits) from a context.
Definition Core.cpp:757
LLVMTypeRef LLVMDoubleTypeInContext(LLVMContextRef C)
Obtain a 64-bit floating point type from a context.
Definition Core.cpp:748
LLVMTypeRef LLVMFloatTypeInContext(LLVMContextRef C)
Obtain a 32-bit floating point type from a context.
Definition Core.cpp:745
LLVMTypeRef LLVMFP128TypeInContext(LLVMContextRef C)
Obtain a 128-bit floating point type (112-bit mantissa) from a context.
Definition Core.cpp:754
LLVMTypeRef LLVMX86FP80TypeInContext(LLVMContextRef C)
Obtain a 80-bit floating point type (X87) from a context.
Definition Core.cpp:751
LLVMTypeRef LLVMGetReturnType(LLVMTypeRef FunctionTy)
Obtain the Type this function Type returns.
Definition Core.cpp:802
LLVMTypeRef LLVMFunctionType(LLVMTypeRef ReturnType, LLVMTypeRef *ParamTypes, unsigned ParamCount, LLVMBool IsVarArg)
Obtain a function type consisting of a specified signature.
Definition Core.cpp:791
LLVMBool LLVMIsFunctionVarArg(LLVMTypeRef FunctionTy)
Returns whether a function type is variadic.
Definition Core.cpp:798
unsigned LLVMCountParamTypes(LLVMTypeRef FunctionTy)
Obtain the number of parameters this function accepts.
Definition Core.cpp:806
void LLVMGetParamTypes(LLVMTypeRef FunctionTy, LLVMTypeRef *Dest)
Obtain the types of a function's parameters.
Definition Core.cpp:810
LLVMTypeRef LLVMInt1TypeInContext(LLVMContextRef C)
Obtain an integer type from a context with specified bit width.
Definition Core.cpp:689
LLVMTypeRef LLVMInt8TypeInContext(LLVMContextRef C)
Definition Core.cpp:692
LLVMTypeRef LLVMInt32TypeInContext(LLVMContextRef C)
Definition Core.cpp:698
LLVMTypeRef LLVMIntTypeInContext(LLVMContextRef C, unsigned NumBits)
Definition Core.cpp:707
LLVMTypeRef LLVMInt64TypeInContext(LLVMContextRef C)
Definition Core.cpp:701
LLVMTypeRef LLVMInt16TypeInContext(LLVMContextRef C)
Definition Core.cpp:695
unsigned LLVMGetIntTypeWidth(LLVMTypeRef IntegerTy)
Definition Core.cpp:733
LLVMTypeRef LLVMInt128TypeInContext(LLVMContextRef C)
Definition Core.cpp:704
unsigned LLVMGetTargetExtTypeNumTypeParams(LLVMTypeRef TargetExtTy)
Obtain the number of type parameters for this target extension type.
Definition Core.cpp:1005
LLVMTypeRef LLVMX86AMXTypeInContext(LLVMContextRef C)
Create a X86 AMX type in a context.
Definition Core.cpp:760
const char * LLVMGetTargetExtTypeName(LLVMTypeRef TargetExtTy)
Obtain the name for this target extension type.
Definition Core.cpp:1000
LLVMTypeRef LLVMVoidTypeInContext(LLVMContextRef C)
Create a void type in a context.
Definition Core.cpp:969
LLVMTypeRef LLVMTokenTypeInContext(LLVMContextRef C)
Create a token type in a context.
Definition Core.cpp:975
unsigned LLVMGetTargetExtTypeNumIntParams(LLVMTypeRef TargetExtTy)
Obtain the number of int parameters for this target extension type.
Definition Core.cpp:1016
LLVMTypeRef LLVMLabelTypeInContext(LLVMContextRef C)
Create a label type in a context.
Definition Core.cpp:972
LLVMTypeRef LLVMMetadataTypeInContext(LLVMContextRef C)
Create a metadata type in a context.
Definition Core.cpp:978
LLVMTypeRef LLVMGetTargetExtTypeTypeParam(LLVMTypeRef TargetExtTy, unsigned Idx)
Get the type parameter at the given index for the target extension type.
Definition Core.cpp:1010
LLVMTypeRef LLVMTargetExtTypeInContext(LLVMContextRef C, const char *Name, LLVMTypeRef *TypeParams, unsigned TypeParamCount, unsigned *IntParams, unsigned IntParamCount)
Create a target extension type in LLVM context.
Definition Core.cpp:989
unsigned LLVMGetTargetExtTypeIntParam(LLVMTypeRef TargetExtTy, unsigned Idx)
Get the int parameter at the given index for the target extension type.
Definition Core.cpp:1021
LLVMValueRef LLVMGetConstantPtrAuthAddrDiscriminator(LLVMValueRef PtrAuth)
Get the address discriminator value for the associated ConstantPtrAuth constant.
Definition Core.cpp:959
LLVMBool LLVMPointerTypeIsOpaque(LLVMTypeRef Ty)
Determine whether a pointer is opaque.
Definition Core.cpp:907
LLVMTypeRef LLVMPointerTypeInContext(LLVMContextRef C, unsigned AddressSpace)
Create an opaque pointer type in a context.
Definition Core.cpp:965
LLVMTypeRef LLVMVectorType(LLVMTypeRef ElementType, unsigned ElementCount)
Create a vector type that contains a defined type and has a specific number of elements.
Definition Core.cpp:911
LLVMTypeRef LLVMGetElementType(LLVMTypeRef WrappedTy)
Obtain the element type of an array or vector type.
Definition Core.cpp:920
LLVMTypeRef LLVMScalableVectorType(LLVMTypeRef ElementType, unsigned ElementCount)
Create a vector type that contains a defined type and has a scalable number of elements.
Definition Core.cpp:915
LLVMValueRef LLVMGetConstantPtrAuthDiscriminator(LLVMValueRef PtrAuth)
Get the discriminator value for the associated ConstantPtrAuth constant.
Definition Core.cpp:955
uint64_t LLVMGetArrayLength2(LLVMTypeRef ArrayTy)
Obtain the length of an array type.
Definition Core.cpp:935
LLVMValueRef LLVMGetConstantPtrAuthKey(LLVMValueRef PtrAuth)
Get the key value for the associated ConstantPtrAuth constant.
Definition Core.cpp:951
unsigned LLVMGetArrayLength(LLVMTypeRef ArrayTy)
Obtain the length of an array type.
Definition Core.cpp:931
LLVMValueRef LLVMGetConstantPtrAuthPointer(LLVMValueRef PtrAuth)
Get the pointer value for the associated ConstantPtrAuth constant.
Definition Core.cpp:947
unsigned LLVMGetPointerAddressSpace(LLVMTypeRef PointerTy)
Obtain the address space of a pointer type.
Definition Core.cpp:939
LLVMTypeRef LLVMArrayType2(LLVMTypeRef ElementType, uint64_t ElementCount)
Create a fixed size array type that refers to a specific type.
Definition Core.cpp:898
unsigned LLVMGetVectorSize(LLVMTypeRef VectorTy)
Obtain the (possibly scalable) number of elements in a vector type.
Definition Core.cpp:943
LLVMTypeRef LLVMArrayType(LLVMTypeRef ElementType, unsigned ElementCount)
Create a fixed size array type that refers to a specific type.
Definition Core.cpp:894
void LLVMGetSubtypes(LLVMTypeRef Tp, LLVMTypeRef *Arr)
Returns type's subtypes.
Definition Core.cpp:886
LLVMTypeRef LLVMPointerType(LLVMTypeRef ElementType, unsigned AddressSpace)
Create a pointer type that points to a defined type.
Definition Core.cpp:902
unsigned LLVMGetNumContainedTypes(LLVMTypeRef Tp)
Return the number of types in the derived type.
Definition Core.cpp:927
LLVMTypeRef LLVMStructTypeInContext(LLVMContextRef C, LLVMTypeRef *ElementTypes, unsigned ElementCount, LLVMBool Packed)
Create a new structure type in a context.
Definition Core.cpp:818
void LLVMGetStructElementTypes(LLVMTypeRef StructTy, LLVMTypeRef *Dest)
Get the elements within a structure.
Definition Core.cpp:853
LLVMTypeRef LLVMStructGetTypeAtIndex(LLVMTypeRef StructTy, unsigned i)
Get the type of the element at a given index in the structure.
Definition Core.cpp:859
LLVMBool LLVMIsPackedStruct(LLVMTypeRef StructTy)
Determine whether a structure is packed.
Definition Core.cpp:864
LLVMTypeRef LLVMStructCreateNamed(LLVMContextRef C, const char *Name)
Create an empty structure in a context having a specified name.
Definition Core.cpp:830
void LLVMStructSetBody(LLVMTypeRef StructTy, LLVMTypeRef *ElementTypes, unsigned ElementCount, LLVMBool Packed)
Set the contents of a structure type.
Definition Core.cpp:843
LLVMBool LLVMIsOpaqueStruct(LLVMTypeRef StructTy)
Determine whether a structure is opaque.
Definition Core.cpp:868
unsigned LLVMCountStructElementTypes(LLVMTypeRef StructTy)
Get the number of elements defined inside the structure.
Definition Core.cpp:849
const char * LLVMGetStructName(LLVMTypeRef Ty)
Obtain the name of a structure.
Definition Core.cpp:835
LLVMBool LLVMIsLiteralStruct(LLVMTypeRef StructTy)
Determine whether a structure is literal.
Definition Core.cpp:872
void LLVMDumpType(LLVMTypeRef Ty)
Dump a representation of a type to stderr.
Definition Core.cpp:661
LLVMBool LLVMTypeIsSized(LLVMTypeRef Ty)
Whether the type has a known size.
Definition Core.cpp:652
LLVMContextRef LLVMGetTypeContext(LLVMTypeRef Ty)
Obtain the context to which this type instance is associated.
Definition Core.cpp:657
char * LLVMPrintTypeToString(LLVMTypeRef Ty)
Return a string representation of the type.
Definition Core.cpp:665
LLVMTypeKind LLVMGetTypeKind(LLVMTypeRef Ty)
Obtain the enumerated type of a Type instance.
Definition Core.cpp:602
LLVMTailCallKind
Tail call kind for LLVMSetTailCallKind and LLVMGetTailCallKind.
Definition Core.h:500
LLVMLinkage
Definition Core.h:177
LLVMOpcode
External users depend on the following values being stable.
Definition Core.h:61
LLVMRealPredicate
Definition Core.h:311
LLVMTypeKind
Definition Core.h:152
LLVMDLLStorageClass
Definition Core.h:212
LLVMValueKind
Definition Core.h:262
unsigned LLVMAttributeIndex
Definition Core.h:491
LLVMDbgRecordKind
Definition Core.h:544
LLVMIntPredicate
Definition Core.h:298
unsigned LLVMFastMathFlags
Flags to indicate what fast-math-style optimizations are allowed on operations.
Definition Core.h:528
LLVMUnnamedAddr
Definition Core.h:206
LLVMModuleFlagBehavior
Definition Core.h:428
LLVMDiagnosticSeverity
Definition Core.h:416
LLVMVisibility
Definition Core.h:200
LLVMAtomicRMWBinOp
Definition Core.h:365
LLVMThreadLocalMode
Definition Core.h:330
unsigned LLVMGEPNoWrapFlags
Flags that constrain the allowed wrap semantics of a getelementptr instruction.
Definition Core.h:542
LLVMAtomicOrdering
Definition Core.h:338
LLVMInlineAsmDialect
Definition Core.h:423
@ LLVMDLLImportLinkage
Obsolete.
Definition Core.h:191
@ LLVMInternalLinkage
Rename collisions when linking (static functions)
Definition Core.h:188
@ LLVMLinkOnceAnyLinkage
Keep one copy of function when linking (inline)
Definition Core.h:180
@ LLVMExternalLinkage
Externally visible function.
Definition Core.h:178
@ LLVMExternalWeakLinkage
ExternalWeak linkage description.
Definition Core.h:193
@ LLVMLinkOnceODRLinkage
Same, but only replaced by something equivalent.
Definition Core.h:181
@ LLVMPrivateLinkage
Like Internal, but omit from symbol table.
Definition Core.h:190
@ LLVMDLLExportLinkage
Obsolete.
Definition Core.h:192
@ LLVMLinkerPrivateLinkage
Like Private, but linker removes.
Definition Core.h:196
@ LLVMWeakODRLinkage
Same, but only replaced by something equivalent.
Definition Core.h:185
@ LLVMGhostLinkage
Obsolete.
Definition Core.h:194
@ LLVMWeakAnyLinkage
Keep one copy of function when linking (weak)
Definition Core.h:184
@ LLVMAppendingLinkage
Special purpose, only applies to global arrays.
Definition Core.h:187
@ LLVMCommonLinkage
Tentative definitions.
Definition Core.h:195
@ LLVMLinkOnceODRAutoHideLinkage
Obsolete.
Definition Core.h:183
@ LLVMLinkerPrivateWeakLinkage
Like LinkerPrivate, but is weak.
Definition Core.h:197
@ LLVMAvailableExternallyLinkage
Definition Core.h:179
@ LLVMFastMathAllowReassoc
Definition Core.h:508
@ LLVMFastMathNoSignedZeros
Definition Core.h:511
@ LLVMFastMathApproxFunc
Definition Core.h:514
@ LLVMFastMathNoInfs
Definition Core.h:510
@ LLVMFastMathNoNaNs
Definition Core.h:509
@ LLVMFastMathNone
Definition Core.h:515
@ LLVMFastMathAllowContract
Definition Core.h:513
@ LLVMFastMathAllowReciprocal
Definition Core.h:512
@ LLVMGEPFlagInBounds
Definition Core.h:531
@ LLVMGEPFlagNUSW
Definition Core.h:532
@ LLVMGEPFlagNUW
Definition Core.h:533
@ LLVMHalfTypeKind
16 bit floating point type
Definition Core.h:154
@ LLVMFP128TypeKind
128 bit floating point type (112-bit mantissa)
Definition Core.h:158
@ LLVMIntegerTypeKind
Arbitrary bit width integers.
Definition Core.h:161
@ LLVMPointerTypeKind
Pointers.
Definition Core.h:165
@ LLVMX86_FP80TypeKind
80 bit floating point type (X87)
Definition Core.h:157
@ LLVMX86_AMXTypeKind
X86 AMX.
Definition Core.h:172
@ LLVMMetadataTypeKind
Metadata.
Definition Core.h:167
@ LLVMByteTypeKind
Arbitrary bit width bytes.
Definition Core.h:174
@ LLVMScalableVectorTypeKind
Scalable SIMD vector type.
Definition Core.h:170
@ LLVMArrayTypeKind
Arrays.
Definition Core.h:164
@ LLVMBFloatTypeKind
16 bit brain floating point type
Definition Core.h:171
@ LLVMStructTypeKind
Structures.
Definition Core.h:163
@ LLVMLabelTypeKind
Labels.
Definition Core.h:160
@ LLVMDoubleTypeKind
64 bit floating point type
Definition Core.h:156
@ LLVMVoidTypeKind
type with no size
Definition Core.h:153
@ LLVMTokenTypeKind
Tokens.
Definition Core.h:169
@ LLVMFloatTypeKind
32 bit floating point type
Definition Core.h:155
@ LLVMFunctionTypeKind
Functions.
Definition Core.h:162
@ LLVMVectorTypeKind
Fixed width SIMD vector type.
Definition Core.h:166
@ LLVMPPC_FP128TypeKind
128 bit floating point type (two 64-bits)
Definition Core.h:159
@ LLVMTargetExtTypeKind
Target extension type.
Definition Core.h:173
@ LLVMInstructionValueKind
Definition Core.h:292
@ LLVMDbgRecordValue
Definition Core.h:547
@ LLVMDbgRecordDeclare
Definition Core.h:546
@ LLVMDbgRecordLabel
Definition Core.h:545
@ LLVMDbgRecordAssign
Definition Core.h:548
@ LLVMGlobalUnnamedAddr
Address of the GV is globally insignificant.
Definition Core.h:209
@ LLVMLocalUnnamedAddr
Address of the GV is locally insignificant.
Definition Core.h:208
@ LLVMNoUnnamedAddr
Address of the GV is significant.
Definition Core.h:207
@ LLVMModuleFlagBehaviorRequire
Adds a requirement that another module flag be present and have a specified value after linking is pe...
Definition Core.h:454
@ LLVMModuleFlagBehaviorWarning
Emits a warning if two values disagree.
Definition Core.h:442
@ LLVMModuleFlagBehaviorOverride
Uses the specified value, regardless of the behavior or value of the other module.
Definition Core.h:462
@ LLVMModuleFlagBehaviorAppendUnique
Appends the two values, which are required to be metadata nodes.
Definition Core.h:476
@ LLVMModuleFlagBehaviorAppend
Appends the two values, which are required to be metadata nodes.
Definition Core.h:468
@ LLVMModuleFlagBehaviorError
Emits an error if two values disagree, otherwise the resulting value is that of the operands.
Definition Core.h:435
@ LLVMDSWarning
Definition Core.h:418
@ LLVMDSNote
Definition Core.h:420
@ LLVMDSError
Definition Core.h:417
@ LLVMDSRemark
Definition Core.h:419
@ LLVMAtomicRMWBinOpXor
Xor a value and return the old one.
Definition Core.h:372
@ LLVMAtomicRMWBinOpXchg
Set the new value and return the one old.
Definition Core.h:366
@ LLVMAtomicRMWBinOpSub
Subtract a value and return the old one.
Definition Core.h:368
@ LLVMAtomicRMWBinOpUMax
Sets the value if it's greater than the original using an unsigned comparison and return the old one.
Definition Core.h:379
@ LLVMAtomicRMWBinOpUSubSat
Subtracts the value, clamping to zero.
Definition Core.h:401
@ LLVMAtomicRMWBinOpAnd
And a value and return the old one.
Definition Core.h:369
@ LLVMAtomicRMWBinOpUDecWrap
Decrements the value, wrapping back to the input value when decremented below zero.
Definition Core.h:397
@ LLVMAtomicRMWBinOpFMax
Sets the value if it's greater than the original using an floating point comparison and return the ol...
Definition Core.h:389
@ LLVMAtomicRMWBinOpMin
Sets the value if it's Smaller than the original using a signed comparison and return the old one.
Definition Core.h:376
@ LLVMAtomicRMWBinOpOr
OR a value and return the old one.
Definition Core.h:371
@ LLVMAtomicRMWBinOpFMin
Sets the value if it's smaller than the original using an floating point comparison and return the ol...
Definition Core.h:392
@ LLVMAtomicRMWBinOpMax
Sets the value if it's greater than the original using a signed comparison and return the old one.
Definition Core.h:373
@ LLVMAtomicRMWBinOpFMaximum
Sets the value if it's greater than the original using an floating point comparison and return the ol...
Definition Core.h:402
@ LLVMAtomicRMWBinOpFMinimum
Sets the value if it's smaller than the original using an floating point comparison and return the ol...
Definition Core.h:405
@ LLVMAtomicRMWBinOpFMinimumNum
Sets the value if it's smaller than the original using an floating point comparison and return the ol...
Definition Core.h:411
@ LLVMAtomicRMWBinOpUIncWrap
Increments the value, wrapping back to zero when incremented above input value.
Definition Core.h:395
@ LLVMAtomicRMWBinOpFMaximumNum
Sets the value if it's greater than the original using an floating point comparison and return the ol...
Definition Core.h:408
@ LLVMAtomicRMWBinOpFAdd
Add a floating point value and return the old one.
Definition Core.h:385
@ LLVMAtomicRMWBinOpFSub
Subtract a floating point value and return the old one.
Definition Core.h:387
@ LLVMAtomicRMWBinOpAdd
Add a value and return the old one.
Definition Core.h:367
@ LLVMAtomicRMWBinOpUMin
Sets the value if it's greater than the original using an unsigned comparison and return the old one.
Definition Core.h:382
@ LLVMAtomicRMWBinOpNand
Not-And a value and return the old one.
Definition Core.h:370
@ LLVMAtomicRMWBinOpUSubCond
Subtracts the value only if no unsigned overflow.
Definition Core.h:399
@ LLVMGeneralDynamicTLSModel
Definition Core.h:332
@ LLVMLocalDynamicTLSModel
Definition Core.h:333
@ LLVMNotThreadLocal
Definition Core.h:331
@ LLVMInitialExecTLSModel
Definition Core.h:334
@ LLVMLocalExecTLSModel
Definition Core.h:335
@ LLVMAtomicOrderingAcquireRelease
provides both an Acquire and a Release barrier (for fences and operations which both read and write m...
Definition Core.h:351
@ LLVMAtomicOrderingRelease
Release is similar to Acquire, but with a barrier of the sort necessary to release a lock.
Definition Core.h:348
@ LLVMAtomicOrderingAcquire
Acquire provides a barrier of the sort necessary to acquire a lock to access other memory with normal...
Definition Core.h:345
@ LLVMAtomicOrderingMonotonic
guarantees that if you take all the operations affecting a specific address, a consistent ordering ex...
Definition Core.h:342
@ LLVMAtomicOrderingSequentiallyConsistent
provides Acquire semantics for loads and Release semantics for stores.
Definition Core.h:355
@ LLVMAtomicOrderingNotAtomic
A load or store which is not atomic.
Definition Core.h:339
@ LLVMAtomicOrderingUnordered
Lowest level of atomicity, guarantees somewhat sane results, lock free.
Definition Core.h:340
@ LLVMInlineAsmDialectATT
Definition Core.h:424
@ LLVMInlineAsmDialectIntel
Definition Core.h:425
LLVMValueRef LLVMGetLastInstruction(LLVMBasicBlockRef BB)
Obtain the last instruction in a basic block.
Definition Core.cpp:3005
void LLVMMoveBasicBlockAfter(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos)
Move a basic block to after another one.
Definition Core.cpp:2987
LLVMBasicBlockRef LLVMGetFirstBasicBlock(LLVMValueRef Fn)
Obtain the first basic block in a function.
Definition Core.cpp:2903
LLVMBasicBlockRef LLVMCreateBasicBlockInContext(LLVMContextRef C, const char *Name)
Create a new basic block without inserting it into a function.
Definition Core.cpp:2935
LLVMBasicBlockRef LLVMGetPreviousBasicBlock(LLVMBasicBlockRef BB)
Go backwards in a basic block iterator.
Definition Core.cpp:2927
LLVMBasicBlockRef LLVMGetLastBasicBlock(LLVMValueRef Fn)
Obtain the last basic block in a function.
Definition Core.cpp:2911
LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB)
Obtain the terminator instruction for a basic block.
Definition Core.cpp:2885
const char * LLVMGetBasicBlockName(LLVMBasicBlockRef BB)
Obtain the string name of a basic block.
Definition Core.cpp:2877
void LLVMAppendExistingBasicBlock(LLVMValueRef Fn, LLVMBasicBlockRef BB)
Append the given basic block to the basic block list of the given function.
Definition Core.cpp:2948
void LLVMDeleteBasicBlock(LLVMBasicBlockRef BBRef)
Remove a basic block from a function and delete it.
Definition Core.cpp:2975
LLVMBasicBlockRef LLVMInsertBasicBlockInContext(LLVMContextRef C, LLVMBasicBlockRef BBRef, const char *Name)
Insert a basic block in a function before another basic block.
Definition Core.cpp:2963
void LLVMGetBasicBlocks(LLVMValueRef FnRef, LLVMBasicBlockRef *BasicBlocksRefs)
Obtain all of the basic blocks in a function.
Definition Core.cpp:2893
void LLVMMoveBasicBlockBefore(LLVMBasicBlockRef BB, LLVMBasicBlockRef MovePos)
Move a basic block to before another one.
Definition Core.cpp:2983
LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB)
Obtain the function to which a basic block belongs.
Definition Core.cpp:2881
LLVMBasicBlockRef LLVMGetEntryBasicBlock(LLVMValueRef Fn)
Obtain the basic block that corresponds to the entry point of a function.
Definition Core.cpp:2899
LLVMValueRef LLVMGetFirstInstruction(LLVMBasicBlockRef BB)
Obtain the first instruction in a basic block.
Definition Core.cpp:2997
void LLVMInsertExistingBasicBlockAfterInsertBlock(LLVMBuilderRef Builder, LLVMBasicBlockRef BB)
Insert the given basic block after the insertion point of the given builder.
Definition Core.cpp:2940
LLVMValueRef LLVMBasicBlockAsValue(LLVMBasicBlockRef BB)
Convert a basic block instance to a value type.
Definition Core.cpp:2865
LLVMBasicBlockRef LLVMValueAsBasicBlock(LLVMValueRef Val)
Convert an LLVMValueRef to an LLVMBasicBlockRef instance.
Definition Core.cpp:2873
void LLVMRemoveBasicBlockFromParent(LLVMBasicBlockRef BBRef)
Remove a basic block from a function.
Definition Core.cpp:2979
LLVMBasicBlockRef LLVMGetNextBasicBlock(LLVMBasicBlockRef BB)
Advance a basic block iterator.
Definition Core.cpp:2919
unsigned LLVMCountBasicBlocks(LLVMValueRef FnRef)
Obtain the number of basic blocks in a function.
Definition Core.cpp:2889
LLVMBasicBlockRef LLVMAppendBasicBlockInContext(LLVMContextRef C, LLVMValueRef FnRef, const char *Name)
Append a basic block to the end of a function.
Definition Core.cpp:2953
LLVMBool LLVMValueIsBasicBlock(LLVMValueRef Val)
Determine whether an LLVMValueRef is itself a basic block.
Definition Core.cpp:2869
LLVMValueRef LLVMConstantPtrAuth(LLVMValueRef Ptr, LLVMValueRef Key, LLVMValueRef Disc, LLVMValueRef AddrDisc)
Create a ConstantPtrAuth constant with the given values.
Definition Core.cpp:1768
LLVMValueRef LLVMGetAggregateElement(LLVMValueRef C, unsigned Idx)
Get element of a constant aggregate (struct, array or vector) at the specified index.
Definition Core.cpp:1697
LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size)
Create a ConstantVector from values.
Definition Core.cpp:1763
LLVMValueRef LLVMConstStringInContext2(LLVMContextRef C, const char *Str, size_t Length, LLVMBool DontNullTerminate)
Create a ConstantDataSequential and initialize it with a string.
Definition Core.cpp:1682
LLVMValueRef LLVMConstDataArray(LLVMTypeRef ElementTy, const char *Data, size_t SizeInBytes)
Create a ConstantDataArray from raw values.
Definition Core.cpp:1733
LLVMValueRef LLVMConstArray(LLVMTypeRef ElementTy, LLVMValueRef *ConstantVals, unsigned Length)
Create a ConstantArray from values.
Definition Core.cpp:1721
LLVMBool LLVMIsConstantString(LLVMValueRef C)
Returns true if the specified constant is an array of i8.
Definition Core.cpp:1705
LLVMValueRef LLVMConstStringInContext(LLVMContextRef C, const char *Str, unsigned Length, LLVMBool DontNullTerminate)
Create a ConstantDataSequential and initialize it with a string.
Definition Core.cpp:1673
LLVMValueRef LLVMConstArray2(LLVMTypeRef ElementTy, LLVMValueRef *ConstantVals, uint64_t Length)
Create a ConstantArray from values.
Definition Core.cpp:1727
const char * LLVMGetAsString(LLVMValueRef C, size_t *Length)
Get the given constant data sequential as a string.
Definition Core.cpp:1709
LLVMValueRef LLVMConstNamedStruct(LLVMTypeRef StructTy, LLVMValueRef *ConstantVals, unsigned Count)
Create a non-anonymous ConstantStruct from values.
Definition Core.cpp:1754
const char * LLVMGetRawDataValues(LLVMValueRef C, size_t *SizeInBytes)
Get the raw, underlying bytes of the given constant data sequential.
Definition Core.cpp:1715
LLVMValueRef LLVMConstStructInContext(LLVMContextRef C, LLVMValueRef *ConstantVals, unsigned Count, LLVMBool Packed)
Create an anonymous ConstantStruct with the specified values.
Definition Core.cpp:1740
LLVMValueRef LLVMConstAddrSpaceCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType)
Definition Core.cpp:1944
LLVMValueRef LLVMSizeOf(LLVMTypeRef Ty)
Definition Core.cpp:1835
LLVMValueRef LLVMConstAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)
Definition Core.cpp:1856
LLVMValueRef LLVMConstSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)
Definition Core.cpp:1873
LLVMValueRef LLVMConstTruncOrBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType)
Definition Core.cpp:1950
LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty)
Definition Core.cpp:1831
LLVMValueRef LLVMConstBitCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType)
Definition Core.cpp:1939
LLVMValueRef LLVMConstNUWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)
Definition Core.cpp:1884
LLVMValueRef LLVMConstGEPWithNoWrapFlags(LLVMTypeRef Ty, LLVMValueRef ConstantVal, LLVMValueRef *ConstantIndices, unsigned NumIndices, LLVMGEPNoWrapFlags NoWrapFlags)
Creates a constant GetElementPtr expression.
Definition Core.cpp:1912
LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal)
Definition Core.cpp:1827
LLVMValueRef LLVMConstExtractElement(LLVMValueRef VectorConstant, LLVMValueRef IndexConstant)
Definition Core.cpp:1962
LLVMValueRef LLVMConstNSWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)
Definition Core.cpp:1861
LLVMValueRef LLVMConstNeg(LLVMValueRef ConstantVal)
Definition Core.cpp:1839
LLVMValueRef LLVMConstPointerCast(LLVMValueRef ConstantVal, LLVMTypeRef ToType)
Definition Core.cpp:1956
LLVMValueRef LLVMConstInsertElement(LLVMValueRef VectorConstant, LLVMValueRef ElementValueConstant, LLVMValueRef IndexConstant)
Definition Core.cpp:1968
LLVMValueRef LLVMConstXor(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)
Definition Core.cpp:1890
LLVMValueRef LLVMConstNSWSub(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)
Definition Core.cpp:1878
LLVMValueRef LLVMConstShuffleVector(LLVMValueRef VectorAConstant, LLVMValueRef VectorBConstant, LLVMValueRef MaskConstant)
Definition Core.cpp:1976
LLVMValueRef LLVMConstTrunc(LLVMValueRef ConstantVal, LLVMTypeRef ToType)
Definition Core.cpp:1924
LLVMValueRef LLVMConstGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal, LLVMValueRef *ConstantIndices, unsigned NumIndices)
Definition Core.cpp:1895
LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB)
Definition Core.cpp:1994
LLVMValueRef LLVMConstNot(LLVMValueRef ConstantVal)
Definition Core.cpp:1852
LLVMValueRef LLVMConstNUWAdd(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant)
Definition Core.cpp:1867
LLVMValueRef LLVMConstPtrToInt(LLVMValueRef ConstantVal, LLVMTypeRef ToType)
Definition Core.cpp:1929
LLVMValueRef LLVMConstIntToPtr(LLVMValueRef ConstantVal, LLVMTypeRef ToType)
Definition Core.cpp:1934
LLVMValueRef LLVMConstInBoundsGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal, LLVMValueRef *ConstantIndices, unsigned NumIndices)
Definition Core.cpp:1903
LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, const char *AsmString, const char *Constraints, LLVMBool HasSideEffects, LLVMBool IsAlignStack)
Deprecated: Use LLVMGetInlineAsm instead.
Definition Core.cpp:1986
LLVMValueRef LLVMConstNSWNeg(LLVMValueRef ConstantVal)
Definition Core.cpp:1843
LLVMValueRef LLVMGetBlockAddressFunction(LLVMValueRef BlockAddr)
Gets the function associated with a given BlockAddress constant value.
Definition Core.cpp:1998
LLVMBasicBlockRef LLVMGetBlockAddressBasicBlock(LLVMValueRef BlockAddr)
Gets the basic block associated with a given BlockAddress constant value.
Definition Core.cpp:2002
LLVMUnnamedAddr LLVMGetUnnamedAddress(LLVMValueRef Global)
Definition Core.cpp:2140
LLVMTypeRef LLVMGlobalGetValueType(LLVMValueRef Global)
Returns the "value type" of a global value.
Definition Core.cpp:2175
unsigned LLVMGetAlignment(LLVMValueRef V)
Obtain the preferred alignment of the value.
Definition Core.cpp:2181
void LLVMSetSection(LLVMValueRef Global, const char *Section)
Definition Core.cpp:2116
void LLVMSetUnnamedAddress(LLVMValueRef Global, LLVMUnnamedAddr UnnamedAddr)
Definition Core.cpp:2152
void LLVMGlobalSetMetadata(LLVMValueRef Global, unsigned Kind, LLVMMetadataRef MD)
Sets a metadata attachment, erasing the existing metadata attachment if it already exists for the giv...
Definition Core.cpp:2256
void LLVMSetLinkage(LLVMValueRef Global, LLVMLinkage Linkage)
Definition Core.cpp:2045
void LLVMSetUnnamedAddr(LLVMValueRef Global, LLVMBool HasUnnamedAddr)
Deprecated: Use LLVMSetUnnamedAddress instead.
Definition Core.cpp:2169
LLVMModuleRef LLVMGetGlobalParent(LLVMValueRef Global)
Definition Core.cpp:2008
unsigned LLVMValueMetadataEntriesGetKind(LLVMValueMetadataEntry *Entries, unsigned Index)
Returns the kind of a value metadata entry at a specific index.
Definition Core.cpp:2237
void LLVMSetDLLStorageClass(LLVMValueRef Global, LLVMDLLStorageClass Class)
Definition Core.cpp:2135
LLVMVisibility LLVMGetVisibility(LLVMValueRef Global)
Definition Core.cpp:2120
LLVMValueMetadataEntry * LLVMGlobalCopyAllMetadata(LLVMValueRef Value, size_t *NumEntries)
Retrieves an array of metadata entries representing the metadata attached to this value.
Definition Core.cpp:2225
void LLVMSetAlignment(LLVMValueRef V, unsigned Bytes)
Set the preferred alignment of the value.
Definition Core.cpp:2203
const char * LLVMGetSection(LLVMValueRef Global)
Definition Core.cpp:2110
void LLVMSetVisibility(LLVMValueRef Global, LLVMVisibility Viz)
Definition Core.cpp:2125
LLVMLinkage LLVMGetLinkage(LLVMValueRef Global)
Definition Core.cpp:2016
void LLVMGlobalEraseMetadata(LLVMValueRef Global, unsigned Kind)
Erases a metadata attachment of the given kind if it exists.
Definition Core.cpp:2266
LLVMDLLStorageClass LLVMGetDLLStorageClass(LLVMValueRef Global)
Definition Core.cpp:2130
LLVMBool LLVMIsDeclaration(LLVMValueRef Global)
Definition Core.cpp:2012
void LLVMGlobalClearMetadata(LLVMValueRef Global)
Removes all metadata attachments from this value.
Definition Core.cpp:2270
void LLVMGlobalAddMetadata(LLVMValueRef Global, unsigned Kind, LLVMMetadataRef MD)
Adds a metadata attachment.
Definition Core.cpp:2261
LLVMBool LLVMHasUnnamedAddr(LLVMValueRef Global)
Deprecated: Use LLVMGetUnnamedAddress instead.
Definition Core.cpp:2165
LLVMMetadataRef LLVMValueMetadataEntriesGetMetadata(LLVMValueMetadataEntry *Entries, unsigned Index)
Returns the underlying metadata node of a value metadata entry at a specific index.
Definition Core.cpp:2245
void LLVMDisposeValueMetadataEntries(LLVMValueMetadataEntry *Entries)
Destroys value metadata entries.
Definition Core.cpp:2252
void LLVMGlobalAddDebugInfo(LLVMValueRef Global, LLVMMetadataRef GVE)
Add debuginfo metadata to this global.
Definition Core.cpp:2274
LLVMValueRef LLVMConstInt(LLVMTypeRef IntTy, unsigned long long N, LLVMBool SignExtend)
Obtain a constant value for an integer type.
Definition Core.cpp:1568
LLVMValueRef LLVMConstFPFromBits(LLVMTypeRef Ty, const uint64_t N[])
Obtain a constant for a floating point value from array of 64 bit values.
Definition Core.cpp:1630
LLVMValueRef LLVMConstIntOfArbitraryPrecision(LLVMTypeRef IntTy, unsigned NumWords, const uint64_t Words[])
Obtain a constant value for an integer of arbitrary precision.
Definition Core.cpp:1573
long long LLVMConstIntGetSExtValue(LLVMValueRef ConstantVal)
Obtain the sign extended value for an integer constant value.
Definition Core.cpp:1642
unsigned long long LLVMConstByteGetZExtValue(LLVMValueRef ConstantVal)
Obtain the zero extended value for a byte constant value.
Definition Core.cpp:1646
LLVMValueRef LLVMConstRealOfString(LLVMTypeRef RealTy, const char *Text)
Obtain a constant for a floating point value parsed from a string.
Definition Core.cpp:1621
LLVMValueRef LLVMConstByteOfArbitraryPrecision(LLVMTypeRef ByteTy, unsigned NumWords, const uint64_t Words[])
Obtain a constant value for a byte of arbitrary precision.
Definition Core.cpp:1597
double LLVMConstRealGetDouble(LLVMValueRef ConstantVal, LLVMBool *LosesInfo)
Obtain the double value for an floating point constant value.
Definition Core.cpp:1654
LLVMValueRef LLVMConstByte(LLVMTypeRef ByteTy, unsigned long long N)
Obtain a constant value for a byte type.
Definition Core.cpp:1593
LLVMValueRef LLVMConstReal(LLVMTypeRef RealTy, double N)
Obtain a constant value referring to a double floating point value.
Definition Core.cpp:1617
long long LLVMConstByteGetSExtValue(LLVMValueRef ConstantVal)
Obtain the sign extended value for a byte constant value.
Definition Core.cpp:1650
unsigned long long LLVMConstIntGetZExtValue(LLVMValueRef ConstantVal)
Obtain the zero extended value for an integer constant value.
Definition Core.cpp:1638
LLVMValueRef LLVMGetPoison(LLVMTypeRef Ty)
Obtain a constant value referring to a poison value of a type.
Definition Core.cpp:1283
LLVMValueRef LLVMConstPointerNull(LLVMTypeRef Ty)
Obtain a constant that is a constant pointer pointing to NULL for a specified type.
Definition Core.cpp:1305
LLVMValueRef LLVMGetUndef(LLVMTypeRef Ty)
Obtain a constant value referring to an undefined value of a type.
Definition Core.cpp:1279
LLVMBool LLVMIsNull(LLVMValueRef Val)
Determine whether a value instance is null.
Definition Core.cpp:1291
LLVMValueRef LLVMConstNull(LLVMTypeRef Ty)
Obtain a constant value referring to the null instance of a type.
Definition Core.cpp:1271
LLVMValueRef LLVMConstAllOnes(LLVMTypeRef Ty)
Obtain a constant value referring to the instance of a type consisting of all ones.
Definition Core.cpp:1275
LLVMValueRef LLVMGetPreviousParam(LLVMValueRef Arg)
Obtain the previous parameter to a function.
Definition Core.cpp:2758
void LLVMSetParamAlignment(LLVMValueRef Arg, unsigned align)
Set the alignment for a function parameter.
Definition Core.cpp:2765
unsigned LLVMCountParams(LLVMValueRef FnRef)
Obtain the number of parameters in a function.
Definition Core.cpp:2713
void LLVMGetParams(LLVMValueRef FnRef, LLVMValueRef *ParamRefs)
Obtain the parameters in a function.
Definition Core.cpp:2719
LLVMValueRef LLVMGetFirstParam(LLVMValueRef Fn)
Obtain the first parameter to a function.
Definition Core.cpp:2734
LLVMValueRef LLVMGetLastParam(LLVMValueRef Fn)
Obtain the last parameter to a function.
Definition Core.cpp:2742
LLVMValueRef LLVMGetParam(LLVMValueRef FnRef, unsigned index)
Obtain the parameter at the specified index.
Definition Core.cpp:2725
LLVMValueRef LLVMGetNextParam(LLVMValueRef Arg)
Obtain the next parameter to a function.
Definition Core.cpp:2750
LLVMValueRef LLVMGetParamParent(LLVMValueRef V)
Obtain the function to which this argument belongs.
Definition Core.cpp:2730
char * LLVMIntrinsicCopyOverloadedName2(LLVMModuleRef Mod, unsigned ID, LLVMTypeRef *OverloadTypes, size_t OverloadCount, size_t *NameLength)
Copies the name of an overloaded intrinsic identified by a given list of overload types.
Definition Core.cpp:2589
void LLVMAddAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, LLVMAttributeRef A)
Add an attribute to a function.
Definition Core.cpp:2663
LLVMValueRef LLVMGetPrefixData(LLVMValueRef Fn)
Gets the prefix data associated with a function.
Definition Core.cpp:2631
LLVMValueRef LLVMGetPrologueData(LLVMValueRef Fn)
Gets the prologue data associated with a function.
Definition Core.cpp:2647
unsigned LLVMGetIntrinsicID(LLVMValueRef Fn)
Obtain the ID number from a function instance.
Definition Core.cpp:2544
LLVMValueRef LLVMGetPersonalityFn(LLVMValueRef Fn)
Obtain the personality function attached to the function.
Definition Core.cpp:2535
unsigned LLVMGetAttributeCountAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx)
Definition Core.cpp:2668
LLVMBool LLVMHasPersonalityFn(LLVMValueRef Fn)
Check whether the given function has a personality function.
Definition Core.cpp:2531
void LLVMRemoveStringAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, const char *K, unsigned KLen)
Definition Core.cpp:2699
void LLVMSetPrefixData(LLVMValueRef Fn, LLVMValueRef prefixData)
Sets the prefix data for the function.
Definition Core.cpp:2641
const char * LLVMGetGC(LLVMValueRef Fn)
Obtain the name of the garbage collector to use during code generation.
Definition Core.cpp:2618
char * LLVMIntrinsicCopyOverloadedName(unsigned ID, LLVMTypeRef *OverloadTypes, size_t OverloadCount, size_t *NameLength)
Deprecated: Use LLVMIntrinsicCopyOverloadedName2 instead.
Definition Core.cpp:2579
void LLVMSetGC(LLVMValueRef Fn, const char *GC)
Define the garbage collector to use during code generation.
Definition Core.cpp:2623
void LLVMSetPrologueData(LLVMValueRef Fn, LLVMValueRef prologueData)
Sets the prologue data for the function.
Definition Core.cpp:2657
void LLVMSetPersonalityFn(LLVMValueRef Fn, LLVMValueRef PersonalityFn)
Set the personality function attached to the function.
Definition Core.cpp:2539
void LLVMGetAttributesAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, LLVMAttributeRef *Attrs)
Definition Core.cpp:2673
unsigned LLVMGetFunctionCallConv(LLVMValueRef Fn)
Obtain the calling function of a function.
Definition Core.cpp:2609
LLVMBool LLVMIntrinsicIsOverloaded(unsigned ID)
Obtain if the intrinsic identified by the given ID is overloaded.
Definition Core.cpp:2604
void LLVMDeleteFunction(LLVMValueRef Fn)
Remove a function from its containing module and deletes it.
Definition Core.cpp:2527
void LLVMRemoveEnumAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, unsigned KindID)
Definition Core.cpp:2694
LLVMAttributeRef LLVMGetEnumAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, unsigned KindID)
Definition Core.cpp:2680
unsigned LLVMLookupIntrinsicID(const char *Name, size_t NameLen)
Obtain the intrinsic ID number which matches the given function name.
Definition Core.cpp:2600
const char * LLVMIntrinsicGetName(unsigned ID, size_t *NameLength)
Retrieves the name of an intrinsic.
Definition Core.cpp:2564
LLVMValueRef LLVMGetIntrinsicDeclaration(LLVMModuleRef Mod, unsigned ID, LLVMTypeRef *OverloadTypes, size_t OverloadCount)
Get or insert the declaration of an intrinsic.
Definition Core.cpp:2555
LLVMBool LLVMHasPrologueData(LLVMValueRef Fn)
Check if a given function has prologue data.
Definition Core.cpp:2652
LLVMBool LLVMHasPrefixData(LLVMValueRef Fn)
Check if a given function has prefix data.
Definition Core.cpp:2636
void LLVMSetFunctionCallConv(LLVMValueRef Fn, unsigned CC)
Set the calling convention of a function.
Definition Core.cpp:2613
LLVMTypeRef LLVMIntrinsicGetType(LLVMContextRef Ctx, unsigned ID, LLVMTypeRef *OverloadTypes, size_t OverloadCount)
Retrieves the type of an intrinsic.
Definition Core.cpp:2571
void LLVMAddTargetDependentFunctionAttr(LLVMValueRef Fn, const char *A, const char *V)
Add a target-dependent attribute to a function.
Definition Core.cpp:2704
LLVMAttributeRef LLVMGetStringAttributeAtIndex(LLVMValueRef F, LLVMAttributeIndex Idx, const char *K, unsigned KLen)
Definition Core.cpp:2687
LLVMValueRef LLVMIsAMDString(LLVMValueRef Val)
Definition Core.cpp:1195
LLVMBool LLVMIsPoison(LLVMValueRef Val)
Determine whether a value instance is poisonous.
Definition Core.cpp:1301
LLVMValueKind LLVMGetValueKind(LLVMValueRef Val)
Obtain the enumerated type of a Value instance.
Definition Core.cpp:1034
void LLVMDumpValue(LLVMValueRef Val)
Dump a representation of a value to stderr.
Definition Core.cpp:1064
const char * LLVMGetValueName(LLVMValueRef Val)
Deprecated: Use LLVMGetValueName2 instead.
Definition Core.cpp:1056
LLVMContextRef LLVMGetValueContext(LLVMValueRef Val)
Obtain the context to which this value is associated.
Definition Core.cpp:1080
void LLVMReplaceAllUsesWith(LLVMValueRef OldVal, LLVMValueRef NewVal)
Replace all uses of a value with another one.
Definition Core.cpp:1096
const char * LLVMGetValueName2(LLVMValueRef Val, size_t *Length)
Obtain the string name of a value.
Definition Core.cpp:1046
void LLVMSetValueName(LLVMValueRef Val, const char *Name)
Deprecated: Use LLVMSetValueName2 instead.
Definition Core.cpp:1060
LLVMValueRef LLVMIsAMDNode(LLVMValueRef Val)
Definition Core.cpp:1180
char * LLVMPrintDbgRecordToString(LLVMDbgRecordRef Record)
Return a string representation of the DbgRecord.
Definition Core.cpp:1084
LLVMBool LLVMIsUndef(LLVMValueRef Val)
Determine whether a value instance is undefined.
Definition Core.cpp:1297
LLVMTypeRef LLVMTypeOf(LLVMValueRef Val)
Obtain the type of a value.
Definition Core.cpp:1030
char * LLVMPrintValueToString(LLVMValueRef Val)
Return a string representation of the value.
Definition Core.cpp:1068
LLVMValueRef LLVMIsAValueAsMetadata(LLVMValueRef Val)
Definition Core.cpp:1188
LLVMBool LLVMIsConstant(LLVMValueRef Ty)
Determine whether the specified value instance is constant.
Definition Core.cpp:1287
void LLVMSetValueName2(LLVMValueRef Val, const char *Name, size_t NameLen)
Set the string name of a value.
Definition Core.cpp:1052
LLVMValueRef LLVMGetFirstGlobalIFunc(LLVMModuleRef M)
Obtain an iterator to the first GlobalIFunc in a Module.
Definition Core.cpp:2787
LLVMValueRef LLVMGetNamedGlobalIFunc(LLVMModuleRef M, const char *Name, size_t NameLen)
Obtain a GlobalIFunc value from a Module by its name.
Definition Core.cpp:2782
void LLVMRemoveGlobalIFunc(LLVMValueRef IFunc)
Remove a global indirect function from its parent module.
Definition Core.cpp:2831
LLVMValueRef LLVMAddGlobalIFunc(LLVMModuleRef M, const char *Name, size_t NameLen, LLVMTypeRef Ty, unsigned AddrSpace, LLVMValueRef Resolver)
Add a global indirect function to a module under a specified name.
Definition Core.cpp:2772
LLVMValueRef LLVMGetNextGlobalIFunc(LLVMValueRef IFunc)
Advance a GlobalIFunc iterator to the next GlobalIFunc.
Definition Core.cpp:2803
LLVMValueRef LLVMGetPreviousGlobalIFunc(LLVMValueRef IFunc)
Decrement a GlobalIFunc iterator to the previous GlobalIFunc.
Definition Core.cpp:2811
LLVMValueRef LLVMGetGlobalIFuncResolver(LLVMValueRef IFunc)
Retrieves the resolver function associated with this indirect function, or NULL if it doesn't not exi...
Definition Core.cpp:2819
void LLVMSetGlobalIFuncResolver(LLVMValueRef IFunc, LLVMValueRef Resolver)
Sets the resolver function associated with this indirect function.
Definition Core.cpp:2823
LLVMValueRef LLVMGetLastGlobalIFunc(LLVMModuleRef M)
Obtain an iterator to the last GlobalIFunc in a Module.
Definition Core.cpp:2795
void LLVMEraseGlobalIFunc(LLVMValueRef IFunc)
Remove a global indirect function from its parent module and delete it.
Definition Core.cpp:2827
LLVMTypeRef LLVMGetAllocatedType(LLVMValueRef Alloca)
Obtain the type that is being allocated by the alloca instruction.
Definition Core.cpp:3340
void LLVMSetTailCall(LLVMValueRef Call, LLVMBool isTailCall)
Set whether a call instruction is a tail call.
Definition Core.cpp:3239
void LLVMAddCallSiteAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, LLVMAttributeRef A)
Definition Core.cpp:3171
unsigned LLVMGetNumOperandBundles(LLVMValueRef C)
Obtain the number of operand bundles attached to this instruction.
Definition Core.cpp:3223
void LLVMRemoveCallSiteEnumAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, unsigned KindID)
Definition Core.cpp:3205
void LLVMRemoveCallSiteStringAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, const char *K, unsigned KLen)
Definition Core.cpp:3210
LLVMAttributeRef LLVMGetCallSiteEnumAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, unsigned KindID)
Definition Core.cpp:3191
unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr)
Obtain the calling convention for a call instruction.
Definition Core.cpp:3154
LLVMBasicBlockRef LLVMGetCallBrDefaultDest(LLVMValueRef CallBr)
Get the default destination of a CallBr instruction.
Definition Core.cpp:3279
LLVMValueRef LLVMGetCalledValue(LLVMValueRef Instr)
Obtain the pointer to the function invoked by this instruction.
Definition Core.cpp:3215
void LLVMSetNormalDest(LLVMValueRef Invoke, LLVMBasicBlockRef B)
Set the normal destination basic block.
Definition Core.cpp:3266
LLVMBool LLVMIsTailCall(LLVMValueRef Call)
Obtain whether a call instruction is a tail call.
Definition Core.cpp:3235
LLVMAttributeRef LLVMGetCallSiteStringAttribute(LLVMValueRef C, LLVMAttributeIndex Idx, const char *K, unsigned KLen)
Definition Core.cpp:3198
unsigned LLVMGetCallBrNumIndirectDests(LLVMValueRef CallBr)
Get the number of indirect destinations of a CallBr instruction.
Definition Core.cpp:3283
void LLVMGetCallSiteAttributes(LLVMValueRef C, LLVMAttributeIndex Idx, LLVMAttributeRef *Attrs)
Definition Core.cpp:3183
LLVMBasicBlockRef LLVMGetNormalDest(LLVMValueRef Invoke)
Return the normal destination basic block.
Definition Core.cpp:3253
unsigned LLVMGetNumArgOperands(LLVMValueRef Instr)
Obtain the argument count for a call instruction.
Definition Core.cpp:3145
void LLVMSetTailCallKind(LLVMValueRef Call, LLVMTailCallKind kind)
Set the call kind of the call instruction.
Definition Core.cpp:3247
LLVMOperandBundleRef LLVMGetOperandBundleAtIndex(LLVMValueRef C, unsigned Index)
Obtain the operand bundle attached to this instruction at the given index.
Definition Core.cpp:3227
LLVMBasicBlockRef LLVMGetCallBrIndirectDest(LLVMValueRef CallBr, unsigned Idx)
Get the indirect destination of a CallBr instruction at the given index.
Definition Core.cpp:3287
LLVMTailCallKind LLVMGetTailCallKind(LLVMValueRef Call)
Obtain a tail call kind of the call instruction.
Definition Core.cpp:3243
void LLVMSetUnwindDest(LLVMValueRef Invoke, LLVMBasicBlockRef B)
Set the unwind destination basic block.
Definition Core.cpp:3270
LLVMTypeRef LLVMGetCalledFunctionType(LLVMValueRef Instr)
Obtain the function type called by this instruction.
Definition Core.cpp:3219
LLVMBasicBlockRef LLVMGetUnwindDest(LLVMValueRef Invoke)
Return the unwind destination basic block.
Definition Core.cpp:3257
void LLVMSetInstrParamAlignment(LLVMValueRef Instr, LLVMAttributeIndex Idx, unsigned align)
Definition Core.cpp:3163
unsigned LLVMGetCallSiteAttributeCount(LLVMValueRef C, LLVMAttributeIndex Idx)
Definition Core.cpp:3176
void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC)
Set the calling convention for a call instruction.
Definition Core.cpp:3158
LLVMGEPNoWrapFlags LLVMGEPGetNoWrapFlags(LLVMValueRef GEP)
Get the no-wrap related flags for the given GEP instruction.
Definition Core.cpp:3358
LLVMBool LLVMIsInBounds(LLVMValueRef GEP)
Check whether the given GEP operator is inbounds.
Definition Core.cpp:3346
void LLVMSetIsInBounds(LLVMValueRef GEP, LLVMBool InBounds)
Set the given GEP instruction to be inbounds or not.
Definition Core.cpp:3350
LLVMTypeRef LLVMGetGEPSourceElementType(LLVMValueRef GEP)
Get the source element type of the given GEP operator.
Definition Core.cpp:3354
void LLVMGEPSetNoWrapFlags(LLVMValueRef GEP, LLVMGEPNoWrapFlags NoWrapFlags)
Set the no-wrap related flags for the given GEP instruction.
Definition Core.cpp:3363
unsigned LLVMGetNumIndices(LLVMValueRef Inst)
Obtain the number of indices.
Definition Core.cpp:3391
const unsigned * LLVMGetIndices(LLVMValueRef Inst)
Obtain the indices as an array.
Definition Core.cpp:3403
LLVMBasicBlockRef LLVMGetIncomingBlock(LLVMValueRef PhiNode, unsigned Index)
Obtain an incoming value to a PHI node as an LLVMBasicBlockRef.
Definition Core.cpp:3385
LLVMValueRef LLVMGetIncomingValue(LLVMValueRef PhiNode, unsigned Index)
Obtain an incoming value to a PHI node as an LLVMValueRef.
Definition Core.cpp:3381
void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues, LLVMBasicBlockRef *IncomingBlocks, unsigned Count)
Add an incoming value to the end of a PHI list.
Definition Core.cpp:3370
unsigned LLVMCountIncoming(LLVMValueRef PhiNode)
Obtain the number of incoming basic blocks to a PHI node.
Definition Core.cpp:3377
LLVMValueRef LLVMGetCondition(LLVMValueRef Branch)
Return the condition of a branch instruction.
Definition Core.cpp:3311
LLVMBasicBlockRef LLVMGetSuccessor(LLVMValueRef Term, unsigned i)
Return the specified successor.
Definition Core.cpp:3297
void LLVMSetCondition(LLVMValueRef Branch, LLVMValueRef Cond)
Set the condition of a branch instruction.
Definition Core.cpp:3315
void LLVMSetSuccessor(LLVMValueRef Term, unsigned i, LLVMBasicBlockRef block)
Update the specified successor to point at the provided block.
Definition Core.cpp:3301
LLVMValueRef LLVMGetSwitchCaseValue(LLVMValueRef Switch, unsigned i)
Obtain the case value for a successor of a switch instruction.
Definition Core.cpp:3325
LLVMBool LLVMIsConditional(LLVMValueRef Branch)
Return if an instruction is a conditional branch.
Definition Core.cpp:3307
LLVMBasicBlockRef LLVMGetSwitchDefaultDest(LLVMValueRef Switch)
Obtain the default destination basic block of a switch instruction.
Definition Core.cpp:3321
void LLVMSetSwitchCaseValue(LLVMValueRef Switch, unsigned i, LLVMValueRef CaseValue)
Set the case value for a successor of a switch instruction.
Definition Core.cpp:3331
unsigned LLVMGetNumSuccessors(LLVMValueRef Term)
Return the number of successors that this terminator has.
Definition Core.cpp:3293
LLVMRealPredicate LLVMGetFCmpPredicate(LLVMValueRef Inst)
Obtain the float predicate of an instruction.
Definition Core.cpp:3055
int LLVMHasMetadata(LLVMValueRef Inst)
Determine whether an instruction has any metadata attached.
Definition Core.cpp:1100
void LLVMInstructionRemoveFromParent(LLVMValueRef Inst)
Remove an instruction.
Definition Core.cpp:3029
LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst)
Obtain the instruction that occurred before this one.
Definition Core.cpp:3021
LLVMDbgRecordRef LLVMGetPreviousDbgRecord(LLVMDbgRecordRef Rec)
Obtain the previous DbgRecord in the sequence or NULL if there are no more.
Definition Core.cpp:3106
LLVMMetadataRef LLVMDbgVariableRecordGetExpression(LLVMDbgRecordRef Rec)
Get the debug info expression of the DbgVariableRecord.
Definition Core.cpp:3141
LLVMDbgRecordRef LLVMGetFirstDbgRecord(LLVMValueRef Inst)
Obtain the first debug record attached to an instruction.
Definition Core.cpp:3078
LLVMOpcode LLVMGetInstructionOpcode(LLVMValueRef Inst)
Obtain the code opcode for an individual instruction.
Definition Core.cpp:3061
LLVMDbgRecordRef LLVMGetNextDbgRecord(LLVMDbgRecordRef Rec)
Obtain the next DbgRecord in the sequence or NULL if there are no more.
Definition Core.cpp:3098
LLVMDbgRecordRef LLVMGetLastDbgRecord(LLVMValueRef Inst)
Obtain the last debug record attached to an instruction.
Definition Core.cpp:3088
LLVMMetadataRef LLVMDbgVariableRecordGetVariable(LLVMDbgRecordRef Rec)
Get the debug info variable of the DbgVariableRecord.
Definition Core.cpp:3137
LLVMValueRef LLVMIsATerminatorInst(LLVMValueRef Inst)
Determine whether an instruction is a terminator.
Definition Core.cpp:3073
LLVMValueRef LLVMDbgVariableRecordGetValue(LLVMDbgRecordRef Rec, unsigned OpIdx)
Get the value of the DbgVariableRecord.
Definition Core.cpp:3132
LLVMDbgRecordKind LLVMDbgRecordGetKind(LLVMDbgRecordRef Rec)
Definition Core.cpp:3118
LLVMValueMetadataEntry * LLVMInstructionGetAllMetadataOtherThanDebugLoc(LLVMValueRef Value, size_t *NumEntries)
Returns the metadata associated with an instruction value, but filters out all the debug locations.
Definition Core.cpp:1157
void LLVMDeleteInstruction(LLVMValueRef Inst)
Delete an instruction.
Definition Core.cpp:3037
LLVMBasicBlockRef LLVMGetInstructionParent(LLVMValueRef Inst)
Obtain the basic block to which an instruction belongs.
Definition Core.cpp:2993
LLVMMetadataRef LLVMDbgRecordGetDebugLoc(LLVMDbgRecordRef Rec)
Get the debug location attached to the debug record.
Definition Core.cpp:3114
LLVMBool LLVMGetICmpSameSign(LLVMValueRef Inst)
Get whether or not an icmp instruction has the samesign flag.
Definition Core.cpp:3047
LLVMValueRef LLVMInstructionClone(LLVMValueRef Inst)
Create a copy of 'this' instruction that is identical in all ways except the following:
Definition Core.cpp:3067
void LLVMInstructionEraseFromParent(LLVMValueRef Inst)
Remove and delete an instruction.
Definition Core.cpp:3033
void LLVMSetMetadata(LLVMValueRef Inst, unsigned KindID, LLVMValueRef Val)
Set metadata associated with an instruction value.
Definition Core.cpp:1126
LLVMValueRef LLVMGetMetadata(LLVMValueRef Inst, unsigned KindID)
Return metadata associated with an instruction value.
Definition Core.cpp:1104
LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst)
Obtain the predicate of an instruction.
Definition Core.cpp:3041
LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst)
Obtain the instruction that occurs after the one specified.
Definition Core.cpp:3013
void LLVMSetICmpSameSign(LLVMValueRef Inst, LLVMBool SameSign)
Set the samesign flag on an icmp instruction.
Definition Core.cpp:3051
LLVMMetadataRef LLVMMDNodeInContext2(LLVMContextRef C, LLVMMetadataRef *MDs, size_t Count)
Create an MDNode value with the given array of operands.
Definition Core.cpp:1316
const char * LLVMGetMDString(LLVMValueRef V, unsigned *Length)
Obtain the underlying string from a MDString value.
Definition Core.cpp:1376
LLVMValueRef LLVMMetadataAsValue(LLVMContextRef C, LLVMMetadataRef MD)
Obtain a Metadata as a Value.
Definition Core.cpp:1363
unsigned LLVMGetMDNodeNumOperands(LLVMValueRef V)
Obtain the number of operands from an MDNode value.
Definition Core.cpp:1386
LLVMValueRef LLVMMDStringInContext(LLVMContextRef C, const char *Str, unsigned SLen)
Deprecated: Use LLVMMDStringInContext2 instead.
Definition Core.cpp:1321
LLVMMetadataRef LLVMMDStringInContext2(LLVMContextRef C, const char *Str, size_t SLen)
Create an MDString value from a given string value.
Definition Core.cpp:1311
LLVMValueRef LLVMMDNodeInContext(LLVMContextRef C, LLVMValueRef *Vals, unsigned Count)
Deprecated: Use LLVMMDNodeInContext2 instead.
Definition Core.cpp:1332
void LLVMReplaceMDNodeOperandWith(LLVMValueRef V, unsigned Index, LLVMMetadataRef Replacement)
Replace an operand at a specific index in a llvm::MDNode value.
Definition Core.cpp:1454
LLVMMetadataRef LLVMValueAsMetadata(LLVMValueRef Val)
Obtain a Value as a Metadata.
Definition Core.cpp:1367
void LLVMGetMDNodeOperands(LLVMValueRef V, LLVMValueRef *Dest)
Obtain the given MDNode's operands.
Definition Core.cpp:1441
LLVMUseRef LLVMGetOperandUse(LLVMValueRef Val, unsigned Index)
Obtain the use of an operand at a specific index in a llvm::User value.
Definition Core.cpp:1252
int LLVMGetNumOperands(LLVMValueRef Val)
Obtain the number of operands in a llvm::User value.
Definition Core.cpp:1261
void LLVMSetOperand(LLVMValueRef Val, unsigned Index, LLVMValueRef Op)
Set an operand at a specific index in a llvm::User value.
Definition Core.cpp:1257
LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index)
Obtain an operand at a specific index in a llvm::User value.
Definition Core.cpp:1238
LLVMValueRef LLVMGetUser(LLVMUseRef U)
Obtain the user value for a user.
Definition Core.cpp:1218
LLVMValueRef LLVMGetUsedValue(LLVMUseRef U)
Obtain the value this use corresponds to.
Definition Core.cpp:1222
LLVMUseRef LLVMGetNextUse(LLVMUseRef U)
Obtain the next use of a value.
Definition Core.cpp:1211
LLVMUseRef LLVMGetFirstUse(LLVMValueRef Val)
Obtain the first use of a value.
Definition Core.cpp:1203
#define LLVM_FOR_EACH_VALUE_SUBCLASS(macro)
Definition Core.h:2030
void LLVMDisposeMessage(char *Message)
Definition Core.cpp:88
char * LLVMCreateMessage(const char *Message)
Definition Core.cpp:84
void LLVMGetVersion(unsigned *Major, unsigned *Minor, unsigned *Patch)
Return the major, minor, and patch version of LLVM.
Definition Core.cpp:73
void LLVMShutdown()
Deallocate and destroy all ManagedStatic variables.
Definition Core.cpp:67
struct LLVMOpaqueValue * LLVMValueRef
Represents an individual value in LLVM IR.
Definition Types.h:75
struct LLVMOpaqueAttributeRef * LLVMAttributeRef
Used to represent an attributes.
Definition Types.h:145
int LLVMBool
Definition Types.h:28
struct LLVMOpaqueModuleFlagEntry LLVMModuleFlagEntry
Definition Types.h:160
struct LLVMOpaqueNamedMDNode * LLVMNamedMDNodeRef
Represents an LLVM Named Metadata Node.
Definition Types.h:96
struct LLVMOpaquePassManager * LLVMPassManagerRef
Definition Types.h:127
struct LLVMOpaqueDbgRecord * LLVMDbgRecordRef
Definition Types.h:175
struct LLVMOpaqueDiagnosticInfo * LLVMDiagnosticInfoRef
Definition Types.h:150
struct LLVMOpaqueValueMetadataEntry LLVMValueMetadataEntry
Represents an entry in a Global Object's metadata attachments.
Definition Types.h:103
struct LLVMOpaqueMemoryBuffer * LLVMMemoryBufferRef
LLVM uses a polymorphic type hierarchy which C cannot represent, therefore parameters must be passed ...
Definition Types.h:48
struct LLVMOpaqueContext * LLVMContextRef
The top-level container for all LLVM global data.
Definition Types.h:53
struct LLVMOpaqueBuilder * LLVMBuilderRef
Represents an LLVM basic block builder.
Definition Types.h:110
struct LLVMOpaqueUse * LLVMUseRef
Used to get the users and usees of a Value.
Definition Types.h:133
struct LLVMOpaqueBasicBlock * LLVMBasicBlockRef
Represents a basic block of instructions in LLVM IR.
Definition Types.h:82
struct LLVMOpaqueType * LLVMTypeRef
Each value in the LLVM IR has a type, an LLVMTypeRef.
Definition Types.h:68
struct LLVMOpaqueMetadata * LLVMMetadataRef
Represents an LLVM Metadata.
Definition Types.h:89
struct LLVMOpaqueModule * LLVMModuleRef
The top-level container for all other LLVM Intermediate Representation (IR) objects.
Definition Types.h:61
struct LLVMOpaqueModuleProvider * LLVMModuleProviderRef
Interface used to provide a module to JIT or interpreter.
Definition Types.h:124
struct LLVMOpaqueOperandBundle * LLVMOperandBundleRef
Definition Types.h:138
LLVMValueRef LLVMAddAlias2(LLVMModuleRef M, LLVMTypeRef ValueTy, unsigned AddrSpace, LLVMValueRef Aliasee, const char *Name)
Add a GlobalAlias with the given value type, address space and aliasee.
Definition Core.cpp:2417
LLVMValueRef LLVMGetLastGlobalAlias(LLVMModuleRef M)
Obtain an iterator to the last GlobalAlias in a Module.
Definition Core.cpp:2438
LLVMValueRef LLVMGetPreviousGlobalAlias(LLVMValueRef GA)
Decrement a GlobalAlias iterator to the previous GlobalAlias.
Definition Core.cpp:2454
void LLVMAliasSetAliasee(LLVMValueRef Alias, LLVMValueRef Aliasee)
Set the target value of an alias.
Definition Core.cpp:2466
LLVMValueRef LLVMGetFirstGlobalAlias(LLVMModuleRef M)
Obtain an iterator to the first GlobalAlias in a Module.
Definition Core.cpp:2430
LLVMValueRef LLVMAliasGetAliasee(LLVMValueRef Alias)
Retrieve the target value of an alias.
Definition Core.cpp:2462
LLVMValueRef LLVMGetNamedGlobalAlias(LLVMModuleRef M, const char *Name, size_t NameLen)
Obtain a GlobalAlias value from a Module by its name.
Definition Core.cpp:2425
LLVMValueRef LLVMGetNextGlobalAlias(LLVMValueRef GA)
Advance a GlobalAlias iterator to the next GlobalAlias.
Definition Core.cpp:2446
LLVMBool LLVMIsThreadLocal(LLVMValueRef GlobalVar)
Definition Core.cpp:2352
LLVMThreadLocalMode LLVMGetThreadLocalMode(LLVMValueRef GlobalVar)
Definition Core.cpp:2368
LLVMBool LLVMIsGlobalConstant(LLVMValueRef GlobalVar)
Definition Core.cpp:2360
LLVMValueRef LLVMGetPreviousGlobal(LLVMValueRef GlobalVar)
Definition Core.cpp:2328
void LLVMSetThreadLocal(LLVMValueRef GlobalVar, LLVMBool IsThreadLocal)
Definition Core.cpp:2356
LLVMBool LLVMIsExternallyInitialized(LLVMValueRef GlobalVar)
Definition Core.cpp:2407
LLVMValueRef LLVMGetLastGlobal(LLVMModuleRef M)
Definition Core.cpp:2312
LLVMValueRef LLVMGetNamedGlobalWithLength(LLVMModuleRef M, const char *Name, size_t Length)
Definition Core.cpp:2299
LLVMValueRef LLVMGetFirstGlobal(LLVMModuleRef M)
Definition Core.cpp:2304
void LLVMSetThreadLocalMode(LLVMValueRef GlobalVar, LLVMThreadLocalMode Mode)
Definition Core.cpp:2385
LLVMValueRef LLVMGetNextGlobal(LLVMValueRef GlobalVar)
Definition Core.cpp:2320
void LLVMSetExternallyInitialized(LLVMValueRef GlobalVar, LLVMBool IsExtInit)
Definition Core.cpp:2411
LLVMValueRef LLVMGetNamedGlobal(LLVMModuleRef M, const char *Name)
Definition Core.cpp:2295
LLVMValueRef LLVMAddGlobalInAddressSpace(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name, unsigned AddressSpace)
Definition Core.cpp:2286
void LLVMDeleteGlobal(LLVMValueRef GlobalVar)
Definition Core.cpp:2336
void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, LLVMBool IsConstant)
Definition Core.cpp:2364
LLVMValueRef LLVMAddGlobal(LLVMModuleRef M, LLVMTypeRef Ty, const char *Name)
Definition Core.cpp:2281
LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar)
Definition Core.cpp:2340
void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal)
Definition Core.cpp:2347
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
Definition CallingConv.h:24
@ C
The default llvm calling convention, compatible with C.
Definition CallingConv.h:34
LLVM_ABI StringRef getName(ID id)
Return the LLVM name for an intrinsic, such as "llvm.ppc.altivec.lvx".
LLVM_ABI Function * getOrInsertDeclaration(Module *M, ID id, ArrayRef< Type * > OverloadTys={})
Look up the Function declaration of the intrinsic id in the Module M.
LLVM_ABI ID lookupIntrinsicID(StringRef Name)
This does the actual lookup of an intrinsic ID which matches the given function name.
LLVM_ABI bool isOverloaded(ID id)
Returns true if the intrinsic can be overloaded.
LLVM_ABI FunctionType * getType(LLVMContext &Context, ID id, ArrayRef< Type * > OverloadTys={})
Return the function type for an intrinsic.
LLVM_ABI std::string getNameNoUnnamedTypes(ID Id, ArrayRef< Type * > OverloadTys)
Return the LLVM name for an intrinsic.
@ SingleThread
Synchronized with respect to signal handlers executing in the same thread.
Definition LLVMContext.h:55
@ System
Synchronized with respect to all concurrently executing threads.
Definition LLVMContext.h:58
@ OF_TextWithCRLF
The file should be opened in text mode and use a carriage linefeed '\r '.
Definition FileSystem.h:786
This is an optimization pass for GlobalISel generic memory operations.
@ Length
Definition DWP.cpp:532
constexpr bool llvm_is_multithreaded()
Returns true if LLVM is compiled with support for multi-threading, and false otherwise.
Definition Threading.h:52
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:643
LLVM_ABI void initializePrintModulePassWrapperPass(PassRegistry &)
void * PointerTy
void setAtomicSyncScopeID(Instruction *I, SyncScope::ID SSID)
A helper function that sets an atomic operation's sync scope.
auto dyn_cast_or_null(const Y &Val)
Definition Casting.h:753
LLVM_ABI LLVMContextRef getGlobalContextForCAPI()
Get the deprecated global context for use by the C API.
Definition Core.cpp:100
LLVM_ABI void initializeVerifierLegacyPassPass(PassRegistry &)
decltype(auto) get(const PointerIntPair< PointerTy, IntBits, IntType, PtrTraits, Info > &Pair)
std::optional< SyncScope::ID > getAtomicSyncScopeID(const Instruction *I)
A helper function that returns an atomic operation's sync scope; returns std::nullopt if it is not an...
LLVM_ABI void initializeCore(PassRegistry &)
Initialize all passes linked into the Core library.
Definition Core.cpp:59
FunctionAddr VTableAddr Count
Definition InstrProf.h:139
LLVM_ABI void initializeDominatorTreeWrapperPassPass(PassRegistry &)
LLVM_ATTRIBUTE_RETURNS_NONNULL void * safe_malloc(size_t Sz)
Definition MemAlloc.h:25
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
Definition Casting.h:547
LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key
LLVM_ABI void initializePrintFunctionPassWrapperPass(PassRegistry &)
constexpr int PoisonMaskElem
LLVM_ABI raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
@ Global
Append to llvm.global_dtors.
AtomicOrdering
Atomic ordering for LLVM's memory model.
constexpr T divideCeil(U Numerator, V Denominator)
Returns the integer ceil(Numerator / Denominator).
Definition MathExtras.h:394
FunctionAddr VTableAddr uintptr_t uintptr_t Data
Definition InstrProf.h:221
Attribute unwrap(LLVMAttributeRef Attr)
Definition Attributes.h:397
OperandBundleDefT< Value * > OperandBundleDef
Definition AutoUpgrade.h:34
FunctionAddr VTableAddr Next
Definition InstrProf.h:141
DWARFExpression::Operation Op
ArrayRef(const T &OneElt) -> ArrayRef< T >
LLVM_ABI void llvm_shutdown()
llvm_shutdown - Deallocate and destroy all ManagedStatic variables.
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:559
LLVMAttributeRef wrap(Attribute Attr)
Definition Attributes.h:392
LLVM_ABI void initializeSafepointIRVerifierPass(PassRegistry &)
#define N
LLVMModuleFlagBehavior Behavior
Definition Core.cpp:352
LLVMMetadataRef Metadata
Definition Core.cpp:355
LLVMMetadataRef Metadata
Definition Core.cpp:1134
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition Alignment.h:39
Represents the full denormal controls for a function, including the default mode and the f32 specific...
constexpr uint32_t toIntValue() const
Represent subnormal handling kind for floating point instruction inputs and outputs.
DenormalModeKind
Represent handled modes for denormal (aka subnormal) modes in the floating point environment.
void(*)(const DiagnosticInfo *DI, void *Context) DiagnosticHandlerTy
This struct is a compact representation of a valid (power of two) or undefined (0) alignment.
Definition Alignment.h:106