Lines Matching defs:IRB
518 Value *getShadowOffset(Value *Addr, IRBuilder<> &IRB);
531 void buildExternWeakCheckIfNeeded(IRBuilder<> &IRB, Function *F);
628 Value *getArgTLS(Type *T, unsigned ArgOffset, IRBuilder<> &IRB);
631 Value *getRetvalTLS(Type *T, IRBuilder<> &IRB);
636 Value *getArgOriginTLS(unsigned ArgNo, IRBuilder<> &IRB);
708 void addReachesFunctionCallbacksIfEnabled(IRBuilder<> &IRB, Instruction &I,
718 IRBuilder<> &IRB);
720 Value *collapseToPrimitiveShadow(Value *Shadow, IRBuilder<> &IRB);
745 Value *updateOrigin(Value *V, IRBuilder<> &IRB);
749 Value *updateOriginIfTainted(Value *Shadow, Value *Origin, IRBuilder<> &IRB);
753 Value *originToIntptr(IRBuilder<> &IRB, Value *Origin);
757 void paintOrigin(IRBuilder<> &IRB, Value *Origin, Value *StoreOriginAddr,
770 Value *convertToBool(Value *V, IRBuilder<> &IRB, const Twine &Name = "");
838 IRBuilder<> &IRB);
841 IRBuilder<> &IRB);
843 Value *makeAddAcquireOrderingTable(IRBuilder<> &IRB);
844 Value *makeAddReleaseOrderingTable(IRBuilder<> &IRB);
950 Value *PrimitiveShadow, IRBuilder<> &IRB) {
952 return IRB.CreateInsertValue(Shadow, PrimitiveShadow, Indices);
958 Shadow, Indices, AT->getElementType(), PrimitiveShadow, IRB);
968 Shadow, Indices, ST->getElementType(Idx), PrimitiveShadow, IRB);
991 IRBuilder<> IRB(Pos->getParent(), Pos);
995 PrimitiveShadow, IRB);
1004 IRBuilder<> &IRB) {
1008 Value *FirstItem = IRB.CreateExtractValue(Shadow, 0);
1009 Value *Aggregator = collapseToPrimitiveShadow(FirstItem, IRB);
1012 Value *ShadowItem = IRB.CreateExtractValue(Shadow, Idx);
1013 Value *ShadowInner = collapseToPrimitiveShadow(ShadowItem, IRB);
1014 Aggregator = IRB.CreateOr(Aggregator, ShadowInner);
1020 IRBuilder<> &IRB) {
1025 return collapseAggregateShadow<>(AT, Shadow, IRB);
1027 return collapseAggregateShadow<>(ST, Shadow, IRB);
1042 IRBuilder<> IRB(Pos->getParent(), Pos);
1043 Value *PrimitiveShadow = collapseToPrimitiveShadow(Shadow, IRB);
1054 IRBuilder<> IRB(&I);
1059 CI = IRB.CreateCall(DFS.DFSanConditionalCallbackOriginFn,
1062 CI = IRB.CreateCall(DFS.DFSanConditionalCallbackFn, {CondShadow});
1067 void DFSanFunction::addReachesFunctionCallbacksIfEnabled(IRBuilder<> &IRB,
1074 Value *DataShadow = collapseToPrimitiveShadow(getShadow(Data), IRB);
1080 FilePathPtr = IRB.CreateGlobalString(
1085 FilePathPtr = IRB.CreateGlobalString(dbgloc->getFilename());
1089 IRB.CreateGlobalString(I.getFunction()->getName());
1097 CB = IRB.CreateCall(DFS.DFSanReachesFunctionCallbackOriginFn, args);
1100 CB = IRB.CreateCall(DFS.DFSanReachesFunctionCallbackFn, args);
1283 void DataFlowSanitizer::buildExternWeakCheckIfNeeded(IRBuilder<> &IRB,
1295 Args.push_back(IRB.CreateGlobalString(F->getName()));
1296 IRB.CreateCall(DFSanWrapperExternWeakNullFn, Args);
1711 // Ensure IRB insertion point is after loads for shadow and origin.
1718 IRBuilder<> IRB(Next);
1719 DFSF.addReachesFunctionCallbacksIfEnabled(IRB, *Next, &FArg);
1773 IRBuilder<> IRB(Pos->getParent(), Pos);
1776 IRB.CreateICmpNE(PrimitiveShadow, DFSF.DFS.ZeroPrimitiveShadow);
1789 Value *DFSanFunction::getArgTLS(Type *T, unsigned ArgOffset, IRBuilder<> &IRB) {
1790 Value *Base = IRB.CreatePointerCast(DFS.ArgTLS, DFS.IntptrTy);
1792 Base = IRB.CreateAdd(Base, ConstantInt::get(DFS.IntptrTy, ArgOffset));
1793 return IRB.CreateIntToPtr(Base, PointerType::get(*DFS.Ctx, 0), "_dfsarg");
1796 Value *DFSanFunction::getRetvalTLS(Type *T, IRBuilder<> &IRB) {
1797 return IRB.CreatePointerCast(DFS.RetvalTLS, PointerType::get(*DFS.Ctx, 0),
1803 Value *DFSanFunction::getArgOriginTLS(unsigned ArgNo, IRBuilder<> &IRB) {
1804 return IRB.CreateConstInBoundsGEP2_64(DFS.ArgOriginTLSTy, DFS.ArgOriginTLS, 0,
1819 IRBuilder<> IRB(ArgOriginTLSPos);
1820 Value *ArgOriginPtr = getArgOriginTLS(A->getArgNo(), IRB);
1821 Origin = IRB.CreateLoad(DFS.OriginTy, ArgOriginPtr);
1863 IRBuilder<> IRB(ArgTLSPos);
1864 Value *ArgShadowPtr = getArgTLS(FArg.getType(), ArgOffset, IRB);
1865 return IRB.CreateAlignedLoad(DFS.getShadowTy(&FArg), ArgShadowPtr,
1900 Value *DataFlowSanitizer::getShadowOffset(Value *Addr, IRBuilder<> &IRB) {
1902 Value *OffsetLong = IRB.CreatePointerCast(Addr, IntptrTy);
1907 IRB.CreateAnd(OffsetLong, ConstantInt::get(IntptrTy, ~AndMask));
1911 OffsetLong = IRB.CreateXor(OffsetLong, ConstantInt::get(IntptrTy, XorMask));
1919 IRBuilder<> IRB(Pos->getParent(), Pos);
1920 Value *ShadowOffset = getShadowOffset(Addr, IRB);
1925 IRB.CreateAdd(ShadowLong, ConstantInt::get(IntptrTy, ShadowBase));
1927 Value *ShadowPtr = IRB.CreateIntToPtr(ShadowLong, PointerType::get(*Ctx, 0));
1934 IRB.CreateAdd(OriginLong, ConstantInt::get(IntptrTy, OriginBase));
1940 OriginLong = IRB.CreateAnd(OriginLong, ConstantInt::get(IntptrTy, ~Mask));
1942 OriginPtr = IRB.CreateIntToPtr(OriginLong, OriginPtrTy);
1950 IRBuilder<> IRB(Pos->getParent(), Pos);
1951 return IRB.CreateIntToPtr(ShadowOffset, PrimitiveShadowPtrTy);
1956 IRBuilder<> IRB(Pos->getParent(), Pos);
1957 Value *ShadowOffset = getShadowOffset(Addr, IRB);
2008 IRBuilder<> IRB(Pos->getParent(), Pos);
2010 CCS.Shadow = IRB.CreateOr(PV1, PV2);
2072 IRBuilder<> IRB(Pos->getParent(), Pos);
2073 Value *Cond = IRB.CreateICmpNE(PrimitiveShadow, Zero);
2074 Origin = IRB.CreateSelect(Cond, OpOrigin, Origin);
2141 IRBuilder<> IRB(Pos->getParent(), Pos);
2143 IRB.CreateGEP(OriginTy, *OriginAddr, ConstantInt::get(IntptrTy, 1));
2144 return IRB.CreateAlignedLoad(OriginTy, *OriginAddr, OriginAlign);
2173 IRBuilder<> IRB(Pos->getParent(), Pos);
2175 IRB.CreateAlignedLoad(WideShadowTy, ShadowAddr, ShadowAlign);
2189 Value *WideShadowLo = IRB.CreateShl(
2212 ShadowAddr = IRB.CreateGEP(WideShadowTy, ShadowAddr,
2215 IRB.CreateAlignedLoad(WideShadowTy, ShadowAddr, ShadowAlign);
2216 CombinedWideShadow = IRB.CreateOr(CombinedWideShadow, NextWideShadow);
2224 Value *ShrShadow = IRB.CreateLShr(CombinedWideShadow, Width);
2225 CombinedWideShadow = IRB.CreateOr(CombinedWideShadow, ShrShadow);
2227 return {IRB.CreateTrunc(CombinedWideShadow, DFS.PrimitiveShadowTy),
2230 ConstantInt::getSigned(IRB.getInt64Ty(), 0))
2242 IRBuilder<> IRB(Pos->getParent(), Pos);
2243 Value *ShadowLI = IRB.CreateLoad(DFS.PrimitiveShadowTy, SI->second);
2247 ? IRB.CreateLoad(DFS.OriginTy, OI->second)
2277 IRBuilder<> IRB(Pos->getParent(), Pos);
2279 IRB.CreateCall(DFS.DFSanLoadLabelAndOriginFn,
2282 return {IRB.CreateTrunc(IRB.CreateLShr(Call, DFS.OriginWidthBits),
2284 IRB.CreateTrunc(Call, DFS.OriginTy)};
2296 IRBuilder<> IRB(Pos->getParent(), Pos);
2297 Origin = IRB.CreateAlignedLoad(DFS.OriginTy, OriginAddr, OriginAlign);
2309 IRBuilder<> IRB(Pos->getParent(), Pos);
2310 Value *ShadowAddr1 = IRB.CreateGEP(DFS.PrimitiveShadowTy, ShadowAddr,
2313 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr, ShadowAlign);
2315 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr1, ShadowAlign);
2325 IRBuilder<> IRB(Pos->getParent(), Pos);
2326 CallInst *FallbackCall = IRB.CreateCall(
2340 IRBuilder<> IRB(Pos->getParent(), Pos);
2343 Origin = updateOriginIfTainted(PrimitiveShadow, Origin, IRB);
2443 IRBuilder<> IRB(Pos->getParent(), Pos);
2446 IRB.CreateCall(DFSF.DFS.DFSanLoadCallbackFn, {PrimitiveShadow, Addr});
2450 IRBuilder<> IRB(AfterLi->getParent(), AfterLi);
2451 DFSF.addReachesFunctionCallbacksIfEnabled(IRB, LI, &LI);
2455 IRBuilder<> &IRB) {
2457 return IRB.CreateCall(DFS.DFSanChainOriginIfTaintedFn, {Shadow, Origin});
2460 Value *DFSanFunction::updateOrigin(Value *V, IRBuilder<> &IRB) {
2463 return IRB.CreateCall(DFS.DFSanChainOriginFn, V);
2466 Value *DFSanFunction::originToIntptr(IRBuilder<> &IRB, Value *Origin) {
2473 Origin = IRB.CreateIntCast(Origin, DFS.IntptrTy, /* isSigned */ false);
2474 return IRB.CreateOr(Origin, IRB.CreateShl(Origin, OriginSize * 8));
2477 void DFSanFunction::paintOrigin(IRBuilder<> &IRB, Value *Origin,
2490 Value *IntptrOrigin = originToIntptr(IRB, Origin);
2492 IRB.CreatePointerCast(StoreOriginAddr, PointerType::get(*DFS.Ctx, 0));
2495 I ? IRB.CreateConstGEP1_32(DFS.IntptrTy, IntptrStoreOriginPtr, I)
2497 IRB.CreateAlignedStore(IntptrOrigin, Ptr, CurrentAlignment);
2505 Value *GEP = I ? IRB.CreateConstGEP1_32(DFS.OriginTy, StoreOriginAddr, I)
2507 IRB.CreateAlignedStore(Origin, GEP, CurrentAlignment);
2512 Value *DFSanFunction::convertToBool(Value *V, IRBuilder<> &IRB,
2519 return IRB.CreateICmpNE(V, ConstantInt::get(VTy, 0), Name);
2529 IRBuilder<> IRB(Pos->getParent(), Pos);
2532 paintOrigin(IRB, updateOrigin(Origin, IRB), StoreOriginAddr, Size,
2538 IRB.CreateCall(
2542 Value *Cmp = convertToBool(CollapsedShadow, IRB, "_dfscmp");
2545 Cmp, &*IRB.GetInsertPoint(), false, DFS.OriginStoreWeights, &DTU);
2556 IRBuilder<> IRB(Pos->getParent(), Pos);
2561 IRB.CreateAlignedStore(ExtZeroShadow, ShadowAddr, ShadowAlign);
2576 IRBuilder<> IRB(Pos->getParent(), Pos);
2577 IRB.CreateStore(PrimitiveShadow, SI->second);
2584 IRB.CreateStore(Origin, OI->second);
2596 IRBuilder<> IRB(Pos->getParent(), Pos);
2612 ShadowVec = IRB.CreateInsertElement(
2618 IRB.CreateConstGEP1_32(ShadowVecTy, ShadowAddr, Offset);
2619 IRB.CreateAlignedStore(ShadowVec, CurShadowVecAddr, ShadowAlign);
2627 IRB.CreateConstGEP1_32(DFS.PrimitiveShadowTy, ShadowAddr, Offset);
2628 IRB.CreateAlignedStore(PrimitiveShadow, CurShadowAddr, ShadowAlign);
2701 IRBuilder<> IRB(&SI);
2704 IRB.CreateCall(DFSF.DFS.DFSanStoreCallbackFn, {PrimitiveShadow, Addr});
2720 IRBuilder<> IRB(&I);
2765 IRBuilder<> IRB(&CI);
2768 IRB.CreateCall(DFSF.DFS.DFSanCmpCallbackFn, CombinedShadow);
2818 IRBuilder<> IRB(&I);
2821 Value *ResShadow = IRB.CreateExtractValue(AggShadow, I.getIndices());
2827 IRBuilder<> IRB(&I);
2830 Value *Res = IRB.CreateInsertValue(AggShadow, InsShadow, I.getIndices());
2850 IRBuilder<> IRB(&I);
2851 DFSF.AllocaShadowMap[&I] = IRB.CreateAlloca(DFSF.DFS.PrimitiveShadowTy);
2854 IRB.CreateAlloca(DFSF.DFS.OriginTy, nullptr, "_dfsa");
2916 IRBuilder<> IRB(&I);
2921 IRB.CreateCall(DFSF.DFS.DFSanSetLabelFn,
2923 IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)});
2927 IRBuilder<> IRB(&I);
2932 IRB.CreateCall(
2935 IRB.CreateIntCast(I.getArgOperand(2), DFSF.DFS.IntptrTy, false)});
2941 IRB.CreateMul(I.getLength(), ConstantInt::get(I.getLength()->getType(),
2944 IRB.CreateCall(I.getFunctionType(), I.getCalledOperand(),
2949 IRB.CreateCall(
2951 {DestShadow, IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)});
2984 IRBuilder<> IRB(&RI);
2990 IRB.CreateAlignedStore(S, DFSF.getRetvalTLS(RT, IRB), ShadowTLSAlignment);
2994 IRB.CreateStore(O, DFSF.getRetvalOriginTLS());
3001 IRBuilder<> &IRB) {
3020 auto *LabelVAPtr = IRB.CreateStructGEP(LabelVATy, LabelVAAlloca, N);
3021 IRB.CreateStore(
3026 Args.push_back(IRB.CreateStructGEP(LabelVATy, LabelVAAlloca, 0));
3042 IRBuilder<> &IRB) {
3060 auto *OriginVAPtr = IRB.CreateStructGEP(OriginVATy, OriginVAAlloca, N);
3061 IRB.CreateStore(DFSF.getOrigin(*I), OriginVAPtr);
3064 Args.push_back(IRB.CreateStructGEP(OriginVATy, OriginVAAlloca, 0));
3079 IRBuilder<> IRB(&CB);
3083 IRB.CreateCall(DFSF.DFS.DFSanUnimplementedFn,
3084 IRB.CreateGlobalString(F.getName()));
3085 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F);
3091 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F);
3097 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F);
3134 addShadowArguments(F, CB, Args, IRB);
3139 addOriginArguments(F, CB, Args, IRB);
3144 CallInst *CustomCI = IRB.CreateCall(CustomF, Args);
3168 IRB.CreateLoad(DFSF.DFS.PrimitiveShadowTy, DFSF.LabelReturnAlloca);
3174 IRB.CreateLoad(DFSF.DFS.OriginTy, DFSF.OriginReturnAlloca);
3186 Value *DFSanVisitor::makeAddAcquireOrderingTable(IRBuilder<> &IRB) {
3200 return ConstantDataVector::get(IRB.getContext(), OrderingTable);
3207 IRBuilder<> IRB(&CB);
3215 IRB.CreateExtractElement(makeAddAcquireOrderingTable(IRB), Ordering);
3229 Value *DFSanVisitor::makeAddReleaseOrderingTable(IRBuilder<> &IRB) {
3243 return ConstantDataVector::get(IRB.getContext(), OrderingTable);
3247 IRBuilder<> IRB(&CB);
3255 IRB.CreateExtractElement(makeAddReleaseOrderingTable(IRB), Ordering);
3261 IRB.CreateCall(
3263 {DstPtr, SrcPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)});
3269 IRBuilder<> IRB(&CB);
3281 IRB.CreateCall(
3283 {DstPtr, TargetPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)});
3286 IRB.CreateCall(
3288 {TargetPtr, SrcPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)});
3369 IRBuilder<> IRB(&CB);
3383 IRB.CreateStore(DFSF.getOrigin(CB.getArgOperand(I)),
3384 DFSF.getArgOriginTLS(I, IRB));
3393 IRB.CreateAlignedStore(DFSF.getShadow(CB.getArgOperand(I)),
3394 DFSF.getArgTLS(FT->getParamType(I), ArgOffset, IRB),