LLVM API Documentation
#include "llvm/CodeGen/Passes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/Debug.h"
#include "llvm/Target/TargetLowering.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetSubtargetInfo.h"
Go to the source code of this file.
Defines | |
#define | DEBUG_TYPE "atomic-expand" |
Functions | |
INITIALIZE_TM_PASS (AtomicExpand,"atomic-expand","Expand Atomic calls in terms of either load-linked & store-conditional or cmpxchg", false, false) FunctionPass *llvm | |
static Value * | performAtomicOp (AtomicRMWInst::BinOp Op, IRBuilder<> &Builder, Value *Loaded, Value *Inc) |
#define DEBUG_TYPE "atomic-expand" |
Definition at line 29 of file AtomicExpandPass.cpp.
INITIALIZE_TM_PASS | ( | AtomicExpand | , |
"atomic-expand" | , | ||
"Expand Atomic calls in terms of either load-linked & store-conditional or cmpxchg" | , | ||
false | , | ||
false | |||
) |
Definition at line 55 of file AtomicExpandPass.cpp.
static Value* performAtomicOp | ( | AtomicRMWInst::BinOp | Op, |
IRBuilder<> & | Builder, | ||
Value * | Loaded, | ||
Value * | Inc | ||
) | [static] |
Emit IR to implement the given atomicrmw operation on values in registers, returning the new value.
Definition at line 159 of file AtomicExpandPass.cpp.
References llvm::AtomicRMWInst::Add, llvm::AtomicRMWInst::And, llvm::IRBuilder< preserveNames, T, Inserter >::CreateAdd(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateAnd(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateICmpSGT(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateICmpSLE(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateICmpUGT(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateICmpULE(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateNot(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateOr(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateSelect(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateSub(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateXor(), llvm_unreachable, llvm::AtomicRMWInst::Max, llvm::AtomicRMWInst::Min, llvm::AtomicRMWInst::Nand, llvm::AtomicRMWInst::Or, llvm::AtomicRMWInst::Sub, llvm::AtomicRMWInst::UMax, llvm::AtomicRMWInst::UMin, llvm::AtomicRMWInst::Xchg, and llvm::AtomicRMWInst::Xor.