mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 20:23:59 +00:00
Initial implementation of 'fence' instruction, the new C++0x-style replacement for llvm.memory.barrier.
This is just a LangRef entry and reading/writing/memory representation; optimizer+codegen support coming soon. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136009 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -101,6 +101,27 @@ static unsigned GetEncodedBinaryOpcode(unsigned Opcode) {
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned GetEncodedOrdering(AtomicOrdering Ordering) {
|
||||
switch (Ordering) {
|
||||
default: llvm_unreachable("Unknown atomic ordering");
|
||||
case NotAtomic: return bitc::ORDERING_NOTATOMIC;
|
||||
case Unordered: return bitc::ORDERING_UNORDERED;
|
||||
case Monotonic: return bitc::ORDERING_MONOTONIC;
|
||||
case Acquire: return bitc::ORDERING_ACQUIRE;
|
||||
case Release: return bitc::ORDERING_RELEASE;
|
||||
case AcquireRelease: return bitc::ORDERING_ACQREL;
|
||||
case SequentiallyConsistent: return bitc::ORDERING_SEQCST;
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned GetEncodedSynchScope(SynchronizationScope SynchScope) {
|
||||
switch (SynchScope) {
|
||||
default: llvm_unreachable("Unknown synchronization scope");
|
||||
case SingleThread: return bitc::SYNCHSCOPE_SINGLETHREAD;
|
||||
case CrossThread: return bitc::SYNCHSCOPE_CROSSTHREAD;
|
||||
}
|
||||
}
|
||||
|
||||
static void WriteStringRecord(unsigned Code, StringRef Str,
|
||||
unsigned AbbrevToUse, BitstreamWriter &Stream) {
|
||||
SmallVector<unsigned, 64> Vals;
|
||||
@ -1147,6 +1168,11 @@ static void WriteInstruction(const Instruction &I, unsigned InstID,
|
||||
Vals.push_back(Log2_32(cast<StoreInst>(I).getAlignment())+1);
|
||||
Vals.push_back(cast<StoreInst>(I).isVolatile());
|
||||
break;
|
||||
case Instruction::Fence:
|
||||
Code = bitc::FUNC_CODE_INST_FENCE;
|
||||
Vals.push_back(GetEncodedOrdering(cast<FenceInst>(I).getOrdering()));
|
||||
Vals.push_back(GetEncodedSynchScope(cast<FenceInst>(I).getSynchScope()));
|
||||
break;
|
||||
case Instruction::Call: {
|
||||
const CallInst &CI = cast<CallInst>(I);
|
||||
PointerType *PTy = cast<PointerType>(CI.getCalledValue()->getType());
|
||||
|
Reference in New Issue
Block a user