| /freebsd/contrib/llvm-project/llvm/lib/Transforms/InstCombine/ |
| H A D | InstCombineAtomicRMW.cpp | 24 bool isIdempotentRMW(AtomicRMWInst& RMWI) { in isIdempotentRMW() 27 case AtomicRMWInst::FAdd: // -0.0 in isIdempotentRMW() 29 case AtomicRMWInst::FSub: // +0.0 in isIdempotentRMW() 40 case AtomicRMWInst::Add: in isIdempotentRMW() 41 case AtomicRMWInst::Sub: in isIdempotentRMW() 42 case AtomicRMWInst::Or: in isIdempotentRMW() 43 case AtomicRMWInst::Xor: in isIdempotentRMW() 45 case AtomicRMWInst::And: in isIdempotentRMW() 47 case AtomicRMWInst::Min: in isIdempotentRMW() 49 case AtomicRMWInst::Max: in isIdempotentRMW() [all …]
|
| /freebsd/contrib/llvm-project/llvm/lib/Target/AMDGPU/ |
| H A D | AMDGPUAtomicOptimizer.cpp | 45 AtomicRMWInst::BinOp Op; 78 Value *buildReduction(IRBuilder<> &B, AtomicRMWInst::BinOp Op, Value *V, 80 Value *buildScan(IRBuilder<> &B, AtomicRMWInst::BinOp Op, Value *V, 85 buildScanIteratively(IRBuilder<> &B, AtomicRMWInst::BinOp Op, 89 void optimizeAtomic(Instruction &I, AtomicRMWInst::BinOp Op, unsigned ValIdx, 104 void visitAtomicRMWInst(AtomicRMWInst &I); 182 void AMDGPUAtomicOptimizerImpl::visitAtomicRMWInst(AtomicRMWInst &I) { in visitAtomicRMWInst() 192 AtomicRMWInst::BinOp Op = I.getOperation(); in visitAtomicRMWInst() 197 case AtomicRMWInst::Add: in visitAtomicRMWInst() 198 case AtomicRMWInst::Sub: in visitAtomicRMWInst() [all …]
|
| H A D | AMDGPULowerBufferFatPointers.cpp | 1360 PtrParts visitAtomicRMWInst(AtomicRMWInst &AI); 1706 else if (auto *RMW = dyn_cast<AtomicRMWInst>(I)) { in handleMemoryInst() 1708 case AtomicRMWInst::Xchg: in handleMemoryInst() 1711 case AtomicRMWInst::Add: in handleMemoryInst() 1714 case AtomicRMWInst::Sub: in handleMemoryInst() 1717 case AtomicRMWInst::And: in handleMemoryInst() 1720 case AtomicRMWInst::Or: in handleMemoryInst() 1723 case AtomicRMWInst::Xor: in handleMemoryInst() 1726 case AtomicRMWInst::Max: in handleMemoryInst() 1729 case AtomicRMWInst::Min: in handleMemoryInst() [all …]
|
| /freebsd/contrib/llvm-project/llvm/lib/Transforms/Utils/ |
| H A D | LowerAtomic.cpp | 52 Value *llvm::buildAtomicRMWValue(AtomicRMWInst::BinOp Op, in buildAtomicRMWValue() 57 case AtomicRMWInst::Xchg: in buildAtomicRMWValue() 59 case AtomicRMWInst::Add: in buildAtomicRMWValue() 61 case AtomicRMWInst::Sub: in buildAtomicRMWValue() 63 case AtomicRMWInst::And: in buildAtomicRMWValue() 65 case AtomicRMWInst::Nand: in buildAtomicRMWValue() 67 case AtomicRMWInst::Or: in buildAtomicRMWValue() 69 case AtomicRMWInst::Xor: in buildAtomicRMWValue() 71 case AtomicRMWInst::Max: in buildAtomicRMWValue() 74 case AtomicRMWInst::Min: in buildAtomicRMWValue() [all …]
|
| /freebsd/contrib/llvm-project/llvm/lib/CodeGen/ |
| H A D | AtomicExpandPass.cpp | 88 bool tryExpandAtomicRMW(AtomicRMWInst *AI); 89 AtomicRMWInst *convertAtomicXchgToIntegerType(AtomicRMWInst *RMWI); 99 AtomicRMWInst *I, TargetLoweringBase::AtomicExpansionKind ExpansionKind); 100 AtomicRMWInst *widenPartwordAtomicRMW(AtomicRMWInst *AI); 102 void expandAtomicRMWToMaskedIntrinsic(AtomicRMWInst *AI); 114 bool isIdempotentRMW(AtomicRMWInst *RMWI); 115 bool simplifyIdempotentRMW(AtomicRMWInst *RMWI); 124 void expandAtomicRMWToLibcall(AtomicRMWInst *I); 128 llvm::expandAtomicRMWToCmpXchg(AtomicRMWInst *AI, 196 static unsigned getAtomicOpSize(AtomicRMWInst *RMWI) { in getAtomicOpSize() [all …]
|
| /freebsd/contrib/llvm-project/llvm/lib/Target/LoongArch/ |
| H A D | LoongArchExpandAtomicPseudoInsts.cpp | 49 MachineBasicBlock::iterator MBBI, AtomicRMWInst::BinOp, 54 AtomicRMWInst::BinOp, bool IsMasked, int Width, 93 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Xchg, true, 32, in expandMI() 96 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Xchg, false, 32, in expandMI() 99 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Add, true, 32, NextMBBI); in expandMI() 101 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Sub, true, 32, NextMBBI); in expandMI() 103 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Nand, false, 32, in expandMI() 106 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Nand, false, 64, in expandMI() 109 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Nand, true, 32, in expandMI() 112 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Add, false, 32, in expandMI() [all …]
|
| /freebsd/contrib/llvm-project/llvm/lib/Target/RISCV/ |
| H A D | RISCVExpandAtomicPseudoInsts.cpp | 50 MachineBasicBlock::iterator MBBI, AtomicRMWInst::BinOp, 55 AtomicRMWInst::BinOp, bool IsMasked, int Width, 113 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Nand, false, 32, in expandMI() 116 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Nand, false, 64, in expandMI() 119 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Xchg, true, 32, in expandMI() 122 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Add, true, 32, NextMBBI); in expandMI() 124 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Sub, true, 32, NextMBBI); in expandMI() 126 return expandAtomicBinOp(MBB, MBBI, AtomicRMWInst::Nand, true, 32, in expandMI() 129 return expandAtomicMinMaxOp(MBB, MBBI, AtomicRMWInst::Max, true, 32, in expandMI() 132 return expandAtomicMinMaxOp(MBB, MBBI, AtomicRMWInst::Min, true, 32, in expandMI() [all …]
|
| /freebsd/contrib/llvm-project/llvm/lib/Target/NVPTX/ |
| H A D | NVPTXAtomicLower.cpp | 45 SmallVector<AtomicRMWInst *> LocalMemoryAtomics; in runOnFunction() 47 if (AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(&I)) in runOnFunction() 52 for (AtomicRMWInst *RMWI : LocalMemoryAtomics) in runOnFunction()
|
| /freebsd/contrib/llvm-project/llvm/include/llvm/CodeGen/ |
| H A D | AtomicExpandUtils.h | 18 class AtomicRMWInst; variable 61 bool expandAtomicRMWToCmpXchg(AtomicRMWInst *AI, CreateCmpXchgInstFun CreateCmpXchg);
|
| /freebsd/contrib/llvm-project/llvm/include/llvm/Transforms/Utils/ |
| H A D | LowerAtomic.h | 35 bool lowerAtomicRMWInst(AtomicRMWInst *RMWI); 39 Value *buildAtomicRMWValue(AtomicRMWInst::BinOp Op, IRBuilderBase &Builder,
|
| /freebsd/contrib/llvm-project/llvm/lib/Transforms/Instrumentation/ |
| H A D | ThreadSanitizer.cpp | 163 FunctionCallee TsanAtomicRMW[AtomicRMWInst::LAST_BINOP + 1] 284 for (unsigned Op = AtomicRMWInst::FIRST_BINOP; in initialize() 285 Op <= AtomicRMWInst::LAST_BINOP; ++Op) { in initialize() 288 if (Op == AtomicRMWInst::Xchg) in initialize() 290 else if (Op == AtomicRMWInst::Add) in initialize() 292 else if (Op == AtomicRMWInst::Sub) in initialize() 294 else if (Op == AtomicRMWInst::And) in initialize() 296 else if (Op == AtomicRMWInst::Or) in initialize() 298 else if (Op == AtomicRMWInst::Xor) in initialize() 300 else if (Op == AtomicRMWInst::Nand) in initialize() [all …]
|
| /freebsd/contrib/llvm-project/llvm/lib/IR/ |
| H A D | Core.cpp | 2121 if (AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(P)) in LLVMGetAlignment() 2143 else if (AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(P)) in LLVMSetAlignment() 3952 static AtomicRMWInst::BinOp mapFromLLVMRMWBinOp(LLVMAtomicRMWBinOp BinOp) { in mapFromLLVMRMWBinOp() 3954 case LLVMAtomicRMWBinOpXchg: return AtomicRMWInst::Xchg; in mapFromLLVMRMWBinOp() 3955 case LLVMAtomicRMWBinOpAdd: return AtomicRMWInst::Add; in mapFromLLVMRMWBinOp() 3956 case LLVMAtomicRMWBinOpSub: return AtomicRMWInst::Sub; in mapFromLLVMRMWBinOp() 3957 case LLVMAtomicRMWBinOpAnd: return AtomicRMWInst::And; in mapFromLLVMRMWBinOp() 3958 case LLVMAtomicRMWBinOpNand: return AtomicRMWInst::Nand; in mapFromLLVMRMWBinOp() 3959 case LLVMAtomicRMWBinOpOr: return AtomicRMWInst::Or; in mapFromLLVMRMWBinOp() 3960 case LLVMAtomicRMWBinOpXor: return AtomicRMWInst::Xor; in mapFromLLVMRMWBinOp() [all …]
|
| H A D | Instructions.cpp | 1429 void AtomicRMWInst::Init(BinOp Operation, Value *Ptr, Value *Val, in Init() 1450 AtomicRMWInst::AtomicRMWInst(BinOp Operation, Value *Ptr, Value *Val, in AtomicRMWInst() function in AtomicRMWInst 1457 StringRef AtomicRMWInst::getOperationName(BinOp Op) { in getOperationName() 1459 case AtomicRMWInst::Xchg: in getOperationName() 1461 case AtomicRMWInst::Add: in getOperationName() 1463 case AtomicRMWInst::Sub: in getOperationName() 1465 case AtomicRMWInst::And: in getOperationName() 1467 case AtomicRMWInst::Nand: in getOperationName() 1469 case AtomicRMWInst::Or: in getOperationName() 1471 case AtomicRMWInst::Xor: in getOperationName() [all …]
|
| H A D | Instruction.cpp | 912 if (const AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(I1)) in hasSameSpecialState() 913 return RMWI->getOperation() == cast<AtomicRMWInst>(I2)->getOperation() && in hasSameSpecialState() 914 RMWI->isVolatile() == cast<AtomicRMWInst>(I2)->isVolatile() && in hasSameSpecialState() 915 RMWI->getOrdering() == cast<AtomicRMWInst>(I2)->getOrdering() && in hasSameSpecialState() 916 RMWI->getSyncScopeID() == cast<AtomicRMWInst>(I2)->getSyncScopeID(); in hasSameSpecialState() 1088 return cast<AtomicRMWInst>(this)->isVolatile(); in isVolatile()
|
| /freebsd/contrib/llvm-project/llvm/lib/Transforms/Scalar/ |
| H A D | LowerAtomicPass.cpp | 46 else if (AtomicRMWInst *RMWI = dyn_cast<AtomicRMWInst>(&Inst)) in runOnBasicBlock()
|
| /freebsd/contrib/llvm-project/llvm/lib/SandboxIR/ |
| H A D | Instruction.cpp | 1258 void AtomicRMWInst::setAlignment(Align Align) { in setAlignment() 1260 .emplaceIfTracking<GenericSetter<&AtomicRMWInst::getAlign, in setAlignment() 1261 &AtomicRMWInst::setAlignment>>(this); in setAlignment() 1262 cast<llvm::AtomicRMWInst>(Val)->setAlignment(Align); in setAlignment() 1265 void AtomicRMWInst::setVolatile(bool V) { in setVolatile() 1267 .emplaceIfTracking<GenericSetter<&AtomicRMWInst::isVolatile, in setVolatile() 1268 &AtomicRMWInst::setVolatile>>(this); in setVolatile() 1269 cast<llvm::AtomicRMWInst>(Val)->setVolatile(V); in setVolatile() 1272 void AtomicRMWInst::setOrdering(AtomicOrdering Ordering) { in setOrdering() 1274 .emplaceIfTracking<GenericSetter<&AtomicRMWInst::getOrdering, in setOrdering() [all …]
|
| H A D | Context.cpp | 237 auto *LLVMAtomicRMW = cast<llvm::AtomicRMWInst>(LLVMV); in getOrCreateValueInternal() 238 It->second = std::unique_ptr<AtomicRMWInst>( in getOrCreateValueInternal() 239 new AtomicRMWInst(LLVMAtomicRMW, *this)); in getOrCreateValueInternal() 598 AtomicRMWInst *Context::createAtomicRMWInst(llvm::AtomicRMWInst *I) { in createAtomicRMWInst() 599 auto NewPtr = std::unique_ptr<AtomicRMWInst>(new AtomicRMWInst(I, *this)); in createAtomicRMWInst() 600 return cast<AtomicRMWInst>(registerValue(std::move(NewPtr))); in createAtomicRMWInst()
|
| /freebsd/contrib/llvm-project/clang/lib/CodeGen/ |
| H A D | CGAtomic.cpp | 532 llvm::AtomicRMWInst::BinOp Op = llvm::AtomicRMWInst::Add; in EmitAtomicOp() 623 Op = llvm::AtomicRMWInst::Xchg; in EmitAtomicOp() 636 Op = E->getValueType()->isFloatingType() ? llvm::AtomicRMWInst::FAdd in EmitAtomicOp() 637 : llvm::AtomicRMWInst::Add; in EmitAtomicOp() 650 Op = E->getValueType()->isFloatingType() ? llvm::AtomicRMWInst::FSub in EmitAtomicOp() 651 : llvm::AtomicRMWInst::Sub; in EmitAtomicOp() 664 ? llvm::AtomicRMWInst::FMin in EmitAtomicOp() 666 ? llvm::AtomicRMWInst::Min in EmitAtomicOp() 667 : llvm::AtomicRMWInst::UMin); in EmitAtomicOp() 680 ? llvm::AtomicRMWInst::FMax in EmitAtomicOp() [all …]
|
| H A D | CGBuiltin.cpp | 294 CodeGenFunction &CGF, llvm::AtomicRMWInst::BinOp Kind, const CallExpr *E, in MakeBinaryAtomicValue() 337 llvm::AtomicRMWInst::BinOp Kind, in EmitBinaryAtomic() 346 llvm::AtomicRMWInst::BinOp Kind, in EmitBinaryAtomicPost() 545 AtomicRMWInst::Add, DestAddr, ConstantInt::get(IntTy, 1), Ordering); in EmitAtomicIncrementValue() 557 AtomicRMWInst::Sub, DestAddr, ConstantInt::get(IntTy, 1), Ordering); in EmitAtomicDecrementValue() 1736 llvm::AtomicRMWInst::BinOp RMWOp = llvm::AtomicRMWInst::Or; in EmitBitTestIntrinsic() 1739 RMWOp = llvm::AtomicRMWInst::And; in EmitBitTestIntrinsic() 1874 return MakeBinaryAtomicValue(*this, AtomicRMWInst::And, E); in EmitMSVCBuiltinExpr() 1876 return MakeBinaryAtomicValue(*this, AtomicRMWInst::Xchg, E); in EmitMSVCBuiltinExpr() 1878 return MakeBinaryAtomicValue(*this, AtomicRMWInst::Add, E); in EmitMSVCBuiltinExpr() [all …]
|
| /freebsd/contrib/llvm-project/clang/lib/CodeGen/TargetBuiltins/ |
| H A D | NVPTX.cpp | 420 return MakeBinaryAtomicValue(*this, llvm::AtomicRMWInst::Add, E); in EmitNVPTXBuiltinExpr() 425 return MakeBinaryAtomicValue(*this, llvm::AtomicRMWInst::Sub, E); in EmitNVPTXBuiltinExpr() 430 return MakeBinaryAtomicValue(*this, llvm::AtomicRMWInst::And, E); in EmitNVPTXBuiltinExpr() 435 return MakeBinaryAtomicValue(*this, llvm::AtomicRMWInst::Or, E); in EmitNVPTXBuiltinExpr() 440 return MakeBinaryAtomicValue(*this, llvm::AtomicRMWInst::Xor, E); in EmitNVPTXBuiltinExpr() 445 return MakeBinaryAtomicValue(*this, llvm::AtomicRMWInst::Xchg, E); in EmitNVPTXBuiltinExpr() 450 return MakeBinaryAtomicValue(*this, llvm::AtomicRMWInst::Max, E); in EmitNVPTXBuiltinExpr() 455 return MakeBinaryAtomicValue(*this, llvm::AtomicRMWInst::UMax, E); in EmitNVPTXBuiltinExpr() 460 return MakeBinaryAtomicValue(*this, llvm::AtomicRMWInst::Min, E); in EmitNVPTXBuiltinExpr() 465 return MakeBinaryAtomicValue(*this, llvm::AtomicRMWInst::UMin, E); in EmitNVPTXBuiltinExpr() [all …]
|
| /freebsd/contrib/llvm-project/llvm/include/llvm/SandboxIR/ |
| H A D | Instruction.h | 89 friend class AtomicRMWInst; // For getTopmostLLVMInstruction(). variable 2061 class AtomicRMWInst : public SingleLLVMInstructionImpl<llvm::AtomicRMWInst> { 2062 AtomicRMWInst(llvm::AtomicRMWInst *Atomic, Context &Ctx) in AtomicRMWInst() function 2069 using BinOp = llvm::AtomicRMWInst::BinOp; 2071 return cast<llvm::AtomicRMWInst>(Val)->getOperation(); in getOperation() 2074 return llvm::AtomicRMWInst::getOperationName(Op); in getOperationName() 2077 return llvm::AtomicRMWInst::isFPOperation(Op); in isFPOperation() 2080 cast<llvm::AtomicRMWInst>(Val)->setOperation(Op); in setOperation() 2082 Align getAlign() const { return cast<llvm::AtomicRMWInst>(Val)->getAlign(); } in getAlign() 2085 return cast<llvm::AtomicRMWInst>(Val)->isVolatile(); in isVolatile() [all …]
|
| H A D | Context.h | 219 LLVM_ABI AtomicRMWInst *createAtomicRMWInst(llvm::AtomicRMWInst *I); 220 friend AtomicRMWInst; // For createAtomicRMWInst()
|
| /freebsd/contrib/llvm-project/llvm/lib/Frontend/OpenMP/ |
| H A D | OMPIRBuilder.cpp | 8965 Value *Expr, AtomicOrdering AO, AtomicRMWInst::BinOp RMWOp, in createAtomicUpdate() 8979 assert((RMWOp != AtomicRMWInst::Max) && (RMWOp != AtomicRMWInst::Min) && in createAtomicUpdate() 8980 (RMWOp != AtomicRMWInst::UMax) && (RMWOp != AtomicRMWInst::UMin) && in createAtomicUpdate() 8995 AtomicRMWInst::BinOp RMWOp) { in emitRMWOpAsInstruction() 8997 case AtomicRMWInst::Add: in emitRMWOpAsInstruction() 8999 case AtomicRMWInst::Sub: in emitRMWOpAsInstruction() 9001 case AtomicRMWInst::And: in emitRMWOpAsInstruction() 9003 case AtomicRMWInst::Nand: in emitRMWOpAsInstruction() 9005 case AtomicRMWInst::Or: in emitRMWOpAsInstruction() 9007 case AtomicRMWInst::Xor: in emitRMWOpAsInstruction() [all …]
|
| /freebsd/contrib/llvm-project/llvm/lib/Target/DirectX/DXILWriter/ |
| H A D | DXILBitcodeWriter.cpp | 165 static unsigned getEncodedRMWOperation(AtomicRMWInst::BinOp Op); 551 unsigned DXILBitcodeWriter::getEncodedRMWOperation(AtomicRMWInst::BinOp Op) { in getEncodedRMWOperation() 555 case AtomicRMWInst::Xchg: in getEncodedRMWOperation() 557 case AtomicRMWInst::Add: in getEncodedRMWOperation() 559 case AtomicRMWInst::Sub: in getEncodedRMWOperation() 561 case AtomicRMWInst::And: in getEncodedRMWOperation() 563 case AtomicRMWInst::Nand: in getEncodedRMWOperation() 565 case AtomicRMWInst::Or: in getEncodedRMWOperation() 567 case AtomicRMWInst::Xor: in getEncodedRMWOperation() 569 case AtomicRMWInst::Max: in getEncodedRMWOperation() [all …]
|
| /freebsd/contrib/llvm-project/llvm/lib/CodeGen/GlobalISel/ |
| H A D | IRTranslator.cpp | 278 if (const AtomicRMWInst *AI = dyn_cast<AtomicRMWInst>(&I)) in getMemOpAlign() 3383 const AtomicRMWInst &I = cast<AtomicRMWInst>(U); in translateAtomicRMW() 3394 case AtomicRMWInst::Xchg: in translateAtomicRMW() 3397 case AtomicRMWInst::Add: in translateAtomicRMW() 3400 case AtomicRMWInst::Sub: in translateAtomicRMW() 3403 case AtomicRMWInst::And: in translateAtomicRMW() 3406 case AtomicRMWInst::Nand: in translateAtomicRMW() 3409 case AtomicRMWInst::Or: in translateAtomicRMW() 3412 case AtomicRMWInst::Xor: in translateAtomicRMW() 3415 case AtomicRMWInst::Max: in translateAtomicRMW() [all …]
|