Skip to content
21 changes: 21 additions & 0 deletions sources/LLVMSharp.Interop/Extensions/LLVMModuleRef.cs
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,27 @@ public LLVMValueRef AddGlobalInAddressSpace(LLVMTypeRef Ty, ReadOnlySpan<char> N
return LLVM.AddGlobalInAddressSpace(this, Ty, marshaledName, AddressSpace);
}

public void AddModuleFlag(string FlagName, LLVMModuleFlagBehavior Behavior, uint ValAsUInt)
{
LLVMOpaqueValue* valAsValueRef = LLVMValueRef.CreateConstInt(LLVMTypeRef.Int32, ValAsUInt);
AddModuleFlag(FlagName, Behavior, valAsValueRef);
}

public void AddModuleFlag(string FlagName, LLVMModuleFlagBehavior Behavior, LLVMValueRef ValAsValueRef)
{
LLVMOpaqueMetadata* valAsMetadata = LLVM.ValueAsMetadata(ValAsValueRef);
AddModuleFlag(FlagName, Behavior, valAsMetadata);
}

public void AddModuleFlag(string FlagName, LLVMModuleFlagBehavior Behavior, LLVMMetadataRef ValAsMetadataRef) => AddModuleFlag(FlagName.AsSpan(), Behavior, ValAsMetadataRef);


public void AddModuleFlag(ReadOnlySpan<char> FlagName, LLVMModuleFlagBehavior Behavior, LLVMMetadataRef ValAsMetadataRef)
{
using var marshaledName = new MarshaledString(FlagName);
LLVM.AddModuleFlag(this, Behavior, marshaledName, (UIntPtr)FlagName.Length, ValAsMetadataRef);
}

public void AddNamedMetadataOperand(string Name, LLVMValueRef Val) => AddNamedMetadataOperand(Name.AsSpan(), Val);

public void AddNamedMetadataOperand(ReadOnlySpan<char> Name, LLVMValueRef Val)
Expand Down