Lines Matching defs:PMV
755 raw_ostream &operator<<(raw_ostream &O, const PartwordMaskValues &PMV) {
765 PrintObj(PMV.WordType);
767 PrintObj(PMV.ValueType);
769 PrintObj(PMV.AlignedAddr);
770 O << " AlignedAddrAlignment: " << PMV.AlignedAddrAlignment.value() << '\n';
772 PrintObj(PMV.ShiftAmt);
774 PrintObj(PMV.Mask);
776 PrintObj(PMV.Inv_Mask);
803 PartwordMaskValues PMV;
810 PMV.ValueType = PMV.IntValueType = ValueType;
811 if (PMV.ValueType->isFloatingPointTy() || PMV.ValueType->isVectorTy())
812 PMV.IntValueType =
815 PMV.WordType = MinWordSize > ValueSize ? Type::getIntNTy(Ctx, MinWordSize * 8)
817 if (PMV.ValueType == PMV.WordType) {
818 PMV.AlignedAddr = Addr;
819 PMV.AlignedAddrAlignment = AddrAlign;
820 PMV.ShiftAmt = ConstantInt::get(PMV.ValueType, 0);
821 PMV.Mask = ConstantInt::get(PMV.ValueType, ~0, /*isSigned*/ true);
822 return PMV;
825 PMV.AlignedAddrAlignment = Align(MinWordSize);
834 PMV.AlignedAddr = Builder.CreateIntrinsic(
843 PMV.AlignedAddr = Addr;
849 PMV.ShiftAmt = Builder.CreateShl(PtrLSB, 3);
852 PMV.ShiftAmt = Builder.CreateShl(
856 PMV.ShiftAmt = Builder.CreateTrunc(PMV.ShiftAmt, PMV.WordType, "ShiftAmt");
857 PMV.Mask = Builder.CreateShl(
858 ConstantInt::get(PMV.WordType, (1 << (ValueSize * 8)) - 1), PMV.ShiftAmt,
861 PMV.Inv_Mask = Builder.CreateNot(PMV.Mask, "Inv_Mask");
863 return PMV;
867 const PartwordMaskValues &PMV) {
868 assert(WideWord->getType() == PMV.WordType && "Widened type mismatch");
869 if (PMV.WordType == PMV.ValueType)
872 Value *Shift = Builder.CreateLShr(WideWord, PMV.ShiftAmt, "shifted");
873 Value *Trunc = Builder.CreateTrunc(Shift, PMV.IntValueType, "extracted");
874 return Builder.CreateBitCast(Trunc, PMV.ValueType);
878 Value *Updated, const PartwordMaskValues &PMV) {
879 assert(WideWord->getType() == PMV.WordType && "Widened type mismatch");
880 assert(Updated->getType() == PMV.ValueType && "Value type mismatch");
881 if (PMV.WordType == PMV.ValueType)
884 Updated = Builder.CreateBitCast(Updated, PMV.IntValueType);
886 Value *ZExt = Builder.CreateZExt(Updated, PMV.WordType, "extended");
888 Builder.CreateShl(ZExt, PMV.ShiftAmt, "shifted", /*HasNUW*/ true);
889 Value *And = Builder.CreateAnd(WideWord, PMV.Inv_Mask, "unmasked");
900 const PartwordMaskValues &PMV) {
903 // to merge bits from two values without requiring PMV.Inv_Mask.
906 Value *Loaded_MaskOut = Builder.CreateAnd(Loaded, PMV.Inv_Mask);
919 Value *NewVal_Masked = Builder.CreateAnd(NewVal, PMV.Mask);
920 Value *Loaded_MaskOut = Builder.CreateAnd(Loaded, PMV.Inv_Mask);
939 Value *Loaded_Extract = extractMaskedValue(Builder, Loaded, PMV);
941 Value *FinalVal = insertMaskedValue(Builder, Loaded, NewVal, PMV);
970 PartwordMaskValues PMV =
977 Value *ValOp = Builder.CreateBitCast(AI->getValOperand(), PMV.IntValueType);
979 Builder.CreateShl(Builder.CreateZExt(ValOp, PMV.WordType), PMV.ShiftAmt,
985 AI->getValOperand(), PMV);
991 Builder, PMV.WordType, PMV.AlignedAddr, PMV.AlignedAddrAlignment,
995 OldResult = insertRMWLLSCLoop(Builder, PMV.WordType, PMV.AlignedAddr,
996 PMV.AlignedAddrAlignment, MemOpOrder,
1000 Value *FinalOldResult = extractMaskedValue(Builder, OldResult, PMV);
1014 PartwordMaskValues PMV =
1019 Builder.CreateShl(Builder.CreateZExt(AI->getValOperand(), PMV.WordType),
1020 PMV.ShiftAmt, "ValOperand_Shifted");
1026 Builder.CreateOr(ValOperand_Shifted, PMV.Inv_Mask, "AndOperand");
1031 Op, PMV.AlignedAddr, NewOperand, PMV.AlignedAddrAlignment,
1036 Value *FinalOldResult = extractMaskedValue(Builder, NewAI, PMV);
1050 // [[Setup mask values PMV.*]]
1051 // %NewVal_Shifted = shl i32 %NewVal, %PMV.ShiftAmt
1052 // %Cmp_Shifted = shl i32 %Cmp, %PMV.ShiftAmt
1054 // %InitLoaded_MaskOut = and i32 %InitLoaded, %PMV.Inv_Mask
1061 // %NewCI = cmpxchg i32* %PMV.AlignedAddr, i32 %FullWord_Cmp,
1068 // %OldVal_MaskOut = and i32 %OldVal, %PMV.Inv_Mask
1073 // %tmp1 = lshr i32 %OldVal, %PMV.ShiftAmt
1098 PartwordMaskValues PMV =
1104 Builder.CreateShl(Builder.CreateZExt(NewVal, PMV.WordType), PMV.ShiftAmt);
1106 Builder.CreateShl(Builder.CreateZExt(Cmp, PMV.WordType), PMV.ShiftAmt);
1110 LoadInst *InitLoaded = Builder.CreateLoad(PMV.WordType, PMV.AlignedAddr);
1112 Value *InitLoaded_MaskOut = Builder.CreateAnd(InitLoaded, PMV.Inv_Mask);
1117 PHINode *Loaded_MaskOut = Builder.CreatePHI(PMV.WordType, 2);
1124 PMV.AlignedAddr, FullWord_Cmp, FullWord_NewVal, PMV.AlignedAddrAlignment,
1147 Value *OldVal_MaskOut = Builder.CreateAnd(OldVal, PMV.Inv_Mask);
1157 Value *FinalOldVal = extractMaskedValue(Builder, OldVal, PMV);
1182 PartwordMaskValues PMV =
1195 Builder.CreateCast(CastOp, AI->getValOperand(), PMV.WordType),
1196 PMV.ShiftAmt, "ValOperand_Shifted");
1198 Builder, AI, PMV.AlignedAddr, ValOperand_Shifted, PMV.Mask, PMV.ShiftAmt,
1200 Value *FinalOldResult = extractMaskedValue(Builder, OldResult, PMV);
1209 PartwordMaskValues PMV = createMaskInstrs(
1214 Builder.CreateZExt(CI->getCompareOperand(), PMV.WordType), PMV.ShiftAmt,
1217 Builder.CreateZExt(CI->getNewValOperand(), PMV.WordType), PMV.ShiftAmt,
1220 Builder, CI, PMV.AlignedAddr, CmpVal_Shifted, NewVal_Shifted, PMV.Mask,
1222 Value *FinalOldVal = extractMaskedValue(Builder, OldVal, PMV);
1226 CmpVal_Shifted, Builder.CreateAnd(OldVal, PMV.Mask), "Success");
1426 PartwordMaskValues PMV =
1434 TLI->emitLoadLinked(Builder, PMV.WordType, PMV.AlignedAddr, MemOpOrder);
1436 extractMaskedValue(Builder, UnreleasedLoad, PMV);
1451 Builder.CreatePHI(PMV.WordType, 2, "loaded.trystore");
1454 insertMaskedValue(Builder, LoadedTryStore, CI->getNewValOperand(), PMV);
1456 PMV.AlignedAddr, MemOpOrder);
1467 TLI->emitLoadLinked(Builder, PMV.WordType, PMV.AlignedAddr, MemOpOrder);
1468 Value *SecondLoadExtract = extractMaskedValue(Builder, SecondLoad, PMV);
1529 Value *Loaded = extractMaskedValue(Builder, LoadedFull, PMV);