mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-20 14:29:27 +00:00
Add support to set/get ordering for load/store from the C API
Summary: As per title Reviewers: chandlerc, bogner, majnemer, axw Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D11141 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243847 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f03f83cfc0
commit
510a661596
@ -2792,6 +2792,8 @@ LLVMValueRef LLVMBuildGlobalStringPtr(LLVMBuilderRef B, const char *Str,
|
||||
const char *Name);
|
||||
LLVMBool LLVMGetVolatile(LLVMValueRef MemoryAccessInst);
|
||||
void LLVMSetVolatile(LLVMValueRef MemoryAccessInst, LLVMBool IsVolatile);
|
||||
LLVMAtomicOrdering LLVMGetOrdering(LLVMValueRef MemoryAccessInst);
|
||||
void LLVMSetOrdering(LLVMValueRef MemoryAccessInst, LLVMAtomicOrdering Ordering);
|
||||
|
||||
/* Casts */
|
||||
LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef, LLVMValueRef Val,
|
||||
|
@ -2489,7 +2489,6 @@ LLVMValueRef LLVMBuildFree(LLVMBuilderRef B, LLVMValueRef PointerVal) {
|
||||
CallInst::CreateFree(unwrap(PointerVal), unwrap(B)->GetInsertBlock())));
|
||||
}
|
||||
|
||||
|
||||
LLVMValueRef LLVMBuildLoad(LLVMBuilderRef B, LLVMValueRef PointerVal,
|
||||
const char *Name) {
|
||||
return wrap(unwrap(B)->CreateLoad(unwrap(PointerVal), Name));
|
||||
@ -2515,6 +2514,21 @@ static AtomicOrdering mapFromLLVMOrdering(LLVMAtomicOrdering Ordering) {
|
||||
llvm_unreachable("Invalid LLVMAtomicOrdering value!");
|
||||
}
|
||||
|
||||
static LLVMAtomicOrdering mapToLLVMOrdering(AtomicOrdering Ordering) {
|
||||
switch (Ordering) {
|
||||
case NotAtomic: return LLVMAtomicOrderingNotAtomic;
|
||||
case Unordered: return LLVMAtomicOrderingUnordered;
|
||||
case Monotonic: return LLVMAtomicOrderingMonotonic;
|
||||
case Acquire: return LLVMAtomicOrderingAcquire;
|
||||
case Release: return LLVMAtomicOrderingRelease;
|
||||
case AcquireRelease: return LLVMAtomicOrderingAcquireRelease;
|
||||
case SequentiallyConsistent:
|
||||
return LLVMAtomicOrderingSequentiallyConsistent;
|
||||
}
|
||||
|
||||
llvm_unreachable("Invalid AtomicOrdering value!");
|
||||
}
|
||||
|
||||
LLVMValueRef LLVMBuildFence(LLVMBuilderRef B, LLVMAtomicOrdering Ordering,
|
||||
LLVMBool isSingleThread, const char *Name) {
|
||||
return wrap(
|
||||
@ -2567,6 +2581,25 @@ void LLVMSetVolatile(LLVMValueRef MemAccessInst, LLVMBool isVolatile) {
|
||||
return cast<StoreInst>(P)->setVolatile(isVolatile);
|
||||
}
|
||||
|
||||
LLVMAtomicOrdering LLVMGetOrdering(LLVMValueRef MemAccessInst) {
|
||||
Value *P = unwrap<Value>(MemAccessInst);
|
||||
AtomicOrdering O;
|
||||
if (LoadInst *LI = dyn_cast<LoadInst>(P))
|
||||
O = LI->getOrdering();
|
||||
else
|
||||
O = cast<StoreInst>(P)->getOrdering();
|
||||
return mapToLLVMOrdering(O);
|
||||
}
|
||||
|
||||
void LLVMSetOrdering(LLVMValueRef MemAccessInst, LLVMAtomicOrdering Ordering) {
|
||||
Value *P = unwrap<Value>(MemAccessInst);
|
||||
AtomicOrdering O = mapFromLLVMOrdering(Ordering);
|
||||
|
||||
if (LoadInst *LI = dyn_cast<LoadInst>(P))
|
||||
return LI->setOrdering(O);
|
||||
return cast<StoreInst>(P)->setOrdering(O);
|
||||
}
|
||||
|
||||
/*--.. Casts ...............................................................--*/
|
||||
|
||||
LLVMValueRef LLVMBuildTrunc(LLVMBuilderRef B, LLVMValueRef Val,
|
||||
|
Loading…
x
Reference in New Issue
Block a user