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.CreateGlobalStringPtr(
1086 IRB.CreateGlobalStringPtr(dbgloc->getFilename());
1090 IRB.CreateGlobalStringPtr(I.getFunction()->getName());
1098 CB = IRB.CreateCall(DFS.DFSanReachesFunctionCallbackOriginFn, args);
1101 CB = IRB.CreateCall(DFS.DFSanReachesFunctionCallbackFn, args);
1284 void DataFlowSanitizer::buildExternWeakCheckIfNeeded(IRBuilder<> &IRB,
1296 Args.push_back(IRB.CreateGlobalStringPtr(F->getName()));
1297 IRB.CreateCall(DFSanWrapperExternWeakNullFn, Args);
1713 // Ensure IRB insertion point is after loads for shadow and origin.
1720 IRBuilder<> IRB(Next);
1721 DFSF.addReachesFunctionCallbacksIfEnabled(IRB, *Next, &FArg);
1775 IRBuilder<> IRB(Pos->getParent(), Pos);
1778 IRB.CreateICmpNE(PrimitiveShadow, DFSF.DFS.ZeroPrimitiveShadow);
1791 Value *DFSanFunction::getArgTLS(Type *T, unsigned ArgOffset, IRBuilder<> &IRB) {
1792 Value *Base = IRB.CreatePointerCast(DFS.ArgTLS, DFS.IntptrTy);
1794 Base = IRB.CreateAdd(Base, ConstantInt::get(DFS.IntptrTy, ArgOffset));
1795 return IRB.CreateIntToPtr(Base, PointerType::get(DFS.getShadowTy(T), 0),
1799 Value *DFSanFunction::getRetvalTLS(Type *T, IRBuilder<> &IRB) {
1800 return IRB.CreatePointerCast(
1806 Value *DFSanFunction::getArgOriginTLS(unsigned ArgNo, IRBuilder<> &IRB) {
1807 return IRB.CreateConstInBoundsGEP2_64(DFS.ArgOriginTLSTy, DFS.ArgOriginTLS, 0,
1822 IRBuilder<> IRB(ArgOriginTLSPos);
1823 Value *ArgOriginPtr = getArgOriginTLS(A->getArgNo(), IRB);
1824 Origin = IRB.CreateLoad(DFS.OriginTy, ArgOriginPtr);
1866 IRBuilder<> IRB(ArgTLSPos);
1867 Value *ArgShadowPtr = getArgTLS(FArg.getType(), ArgOffset, IRB);
1868 return IRB.CreateAlignedLoad(DFS.getShadowTy(&FArg), ArgShadowPtr,
1903 Value *DataFlowSanitizer::getShadowOffset(Value *Addr, IRBuilder<> &IRB) {
1905 Value *OffsetLong = IRB.CreatePointerCast(Addr, IntptrTy);
1910 IRB.CreateAnd(OffsetLong, ConstantInt::get(IntptrTy, ~AndMask));
1914 OffsetLong = IRB.CreateXor(OffsetLong, ConstantInt::get(IntptrTy, XorMask));
1922 IRBuilder<> IRB(Pos->getParent(), Pos);
1923 Value *ShadowOffset = getShadowOffset(Addr, IRB);
1928 IRB.CreateAdd(ShadowLong, ConstantInt::get(IntptrTy, ShadowBase));
1932 IRB.CreateIntToPtr(ShadowLong, PointerType::get(ShadowTy, 0));
1939 IRB.CreateAdd(OriginLong, ConstantInt::get(IntptrTy, OriginBase));
1945 OriginLong = IRB.CreateAnd(OriginLong, ConstantInt::get(IntptrTy, ~Mask));
1947 OriginPtr = IRB.CreateIntToPtr(OriginLong, OriginPtrTy);
1955 IRBuilder<> IRB(Pos->getParent(), Pos);
1956 return IRB.CreateIntToPtr(ShadowOffset, PrimitiveShadowPtrTy);
1961 IRBuilder<> IRB(Pos->getParent(), Pos);
1962 Value *ShadowOffset = getShadowOffset(Addr, IRB);
2013 IRBuilder<> IRB(Pos->getParent(), Pos);
2015 CCS.Shadow = IRB.CreateOr(PV1, PV2);
2077 IRBuilder<> IRB(Pos->getParent(), Pos);
2078 Value *Cond = IRB.CreateICmpNE(PrimitiveShadow, Zero);
2079 Origin = IRB.CreateSelect(Cond, OpOrigin, Origin);
2146 IRBuilder<> IRB(Pos->getParent(), Pos);
2148 IRB.CreateGEP(OriginTy, *OriginAddr, ConstantInt::get(IntptrTy, 1));
2149 return IRB.CreateAlignedLoad(OriginTy, *OriginAddr, OriginAlign);
2178 IRBuilder<> IRB(Pos->getParent(), Pos);
2180 IRB.CreateAlignedLoad(WideShadowTy, ShadowAddr, ShadowAlign);
2194 Value *WideShadowLo = IRB.CreateShl(
2217 ShadowAddr = IRB.CreateGEP(WideShadowTy, ShadowAddr,
2220 IRB.CreateAlignedLoad(WideShadowTy, ShadowAddr, ShadowAlign);
2221 CombinedWideShadow = IRB.CreateOr(CombinedWideShadow, NextWideShadow);
2229 Value *ShrShadow = IRB.CreateLShr(CombinedWideShadow, Width);
2230 CombinedWideShadow = IRB.CreateOr(CombinedWideShadow, ShrShadow);
2232 return {IRB.CreateTrunc(CombinedWideShadow, DFS.PrimitiveShadowTy),
2235 ConstantInt::getSigned(IRB.getInt64Ty(), 0))
2247 IRBuilder<> IRB(Pos->getParent(), Pos);
2248 Value *ShadowLI = IRB.CreateLoad(DFS.PrimitiveShadowTy, SI->second);
2252 ? IRB.CreateLoad(DFS.OriginTy, OI->second)
2282 IRBuilder<> IRB(Pos->getParent(), Pos);
2284 IRB.CreateCall(DFS.DFSanLoadLabelAndOriginFn,
2287 return {IRB.CreateTrunc(IRB.CreateLShr(Call, DFS.OriginWidthBits),
2289 IRB.CreateTrunc(Call, DFS.OriginTy)};
2301 IRBuilder<> IRB(Pos->getParent(), Pos);
2302 Origin = IRB.CreateAlignedLoad(DFS.OriginTy, OriginAddr, OriginAlign);
2314 IRBuilder<> IRB(Pos->getParent(), Pos);
2315 Value *ShadowAddr1 = IRB.CreateGEP(DFS.PrimitiveShadowTy, ShadowAddr,
2318 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr, ShadowAlign);
2320 IRB.CreateAlignedLoad(DFS.PrimitiveShadowTy, ShadowAddr1, ShadowAlign);
2330 IRBuilder<> IRB(Pos->getParent(), Pos);
2331 CallInst *FallbackCall = IRB.CreateCall(
2345 IRBuilder<> IRB(Pos->getParent(), Pos);
2348 Origin = updateOriginIfTainted(PrimitiveShadow, Origin, IRB);
2448 IRBuilder<> IRB(Pos->getParent(), Pos);
2451 IRB.CreateCall(DFSF.DFS.DFSanLoadCallbackFn, {PrimitiveShadow, Addr});
2455 IRBuilder<> IRB(AfterLi->getParent(), AfterLi);
2456 DFSF.addReachesFunctionCallbacksIfEnabled(IRB, LI, &LI);
2460 IRBuilder<> &IRB) {
2462 return IRB.CreateCall(DFS.DFSanChainOriginIfTaintedFn, {Shadow, Origin});
2465 Value *DFSanFunction::updateOrigin(Value *V, IRBuilder<> &IRB) {
2468 return IRB.CreateCall(DFS.DFSanChainOriginFn, V);
2471 Value *DFSanFunction::originToIntptr(IRBuilder<> &IRB, Value *Origin) {
2478 Origin = IRB.CreateIntCast(Origin, DFS.IntptrTy, /* isSigned */ false);
2479 return IRB.CreateOr(Origin, IRB.CreateShl(Origin, OriginSize * 8));
2482 void DFSanFunction::paintOrigin(IRBuilder<> &IRB, Value *Origin,
2495 Value *IntptrOrigin = originToIntptr(IRB, Origin);
2496 Value *IntptrStoreOriginPtr = IRB.CreatePointerCast(
2500 I ? IRB.CreateConstGEP1_32(DFS.IntptrTy, IntptrStoreOriginPtr, I)
2502 IRB.CreateAlignedStore(IntptrOrigin, Ptr, CurrentAlignment);
2510 Value *GEP = I ? IRB.CreateConstGEP1_32(DFS.OriginTy, StoreOriginAddr, I)
2512 IRB.CreateAlignedStore(Origin, GEP, CurrentAlignment);
2517 Value *DFSanFunction::convertToBool(Value *V, IRBuilder<> &IRB,
2524 return IRB.CreateICmpNE(V, ConstantInt::get(VTy, 0), Name);
2534 IRBuilder<> IRB(Pos->getParent(), Pos);
2537 paintOrigin(IRB, updateOrigin(Origin, IRB), StoreOriginAddr, Size,
2543 IRB.CreateCall(
2547 Value *Cmp = convertToBool(CollapsedShadow, IRB, "_dfscmp");
2550 Cmp, &*IRB.GetInsertPoint(), false, DFS.OriginStoreWeights, &DTU);
2561 IRBuilder<> IRB(Pos->getParent(), Pos);
2566 IRB.CreateAlignedStore(ExtZeroShadow, ShadowAddr, ShadowAlign);
2581 IRBuilder<> IRB(Pos->getParent(), Pos);
2582 IRB.CreateStore(PrimitiveShadow, SI->second);
2589 IRB.CreateStore(Origin, OI->second);
2601 IRBuilder<> IRB(Pos->getParent(), Pos);
2617 ShadowVec = IRB.CreateInsertElement(
2623 IRB.CreateConstGEP1_32(ShadowVecTy, ShadowAddr, Offset);
2624 IRB.CreateAlignedStore(ShadowVec, CurShadowVecAddr, ShadowAlign);
2632 IRB.CreateConstGEP1_32(DFS.PrimitiveShadowTy, ShadowAddr, Offset);
2633 IRB.CreateAlignedStore(PrimitiveShadow, CurShadowAddr, ShadowAlign);
2706 IRBuilder<> IRB(&SI);
2709 IRB.CreateCall(DFSF.DFS.DFSanStoreCallbackFn, {PrimitiveShadow, Addr});
2725 IRBuilder<> IRB(&I);
2770 IRBuilder<> IRB(&CI);
2773 IRB.CreateCall(DFSF.DFS.DFSanCmpCallbackFn, CombinedShadow);
2823 IRBuilder<> IRB(&I);
2826 Value *ResShadow = IRB.CreateExtractValue(AggShadow, I.getIndices());
2832 IRBuilder<> IRB(&I);
2835 Value *Res = IRB.CreateInsertValue(AggShadow, InsShadow, I.getIndices());
2855 IRBuilder<> IRB(&I);
2856 DFSF.AllocaShadowMap[&I] = IRB.CreateAlloca(DFSF.DFS.PrimitiveShadowTy);
2859 IRB.CreateAlloca(DFSF.DFS.OriginTy, nullptr, "_dfsa");
2921 IRBuilder<> IRB(&I);
2926 IRB.CreateCall(DFSF.DFS.DFSanSetLabelFn,
2928 IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)});
2932 IRBuilder<> IRB(&I);
2937 IRB.CreateCall(
2940 IRB.CreateIntCast(I.getArgOperand(2), DFSF.DFS.IntptrTy, false)});
2946 IRB.CreateMul(I.getLength(), ConstantInt::get(I.getLength()->getType(),
2949 IRB.CreateCall(I.getFunctionType(), I.getCalledOperand(),
2954 IRB.CreateCall(
2956 {DestShadow, IRB.CreateZExtOrTrunc(I.getLength(), DFSF.DFS.IntptrTy)});
2989 IRBuilder<> IRB(&RI);
2995 IRB.CreateAlignedStore(S, DFSF.getRetvalTLS(RT, IRB), ShadowTLSAlignment);
2999 IRB.CreateStore(O, DFSF.getRetvalOriginTLS());
3006 IRBuilder<> &IRB) {
3025 auto *LabelVAPtr = IRB.CreateStructGEP(LabelVATy, LabelVAAlloca, N);
3026 IRB.CreateStore(
3031 Args.push_back(IRB.CreateStructGEP(LabelVATy, LabelVAAlloca, 0));
3047 IRBuilder<> &IRB) {
3065 auto *OriginVAPtr = IRB.CreateStructGEP(OriginVATy, OriginVAAlloca, N);
3066 IRB.CreateStore(DFSF.getOrigin(*I), OriginVAPtr);
3069 Args.push_back(IRB.CreateStructGEP(OriginVATy, OriginVAAlloca, 0));
3084 IRBuilder<> IRB(&CB);
3088 IRB.CreateCall(DFSF.DFS.DFSanUnimplementedFn,
3089 IRB.CreateGlobalStringPtr(F.getName()));
3090 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F);
3096 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F);
3102 DFSF.DFS.buildExternWeakCheckIfNeeded(IRB, &F);
3139 addShadowArguments(F, CB, Args, IRB);
3144 addOriginArguments(F, CB, Args, IRB);
3149 CallInst *CustomCI = IRB.CreateCall(CustomF, Args);
3173 IRB.CreateLoad(DFSF.DFS.PrimitiveShadowTy, DFSF.LabelReturnAlloca);
3179 IRB.CreateLoad(DFSF.DFS.OriginTy, DFSF.OriginReturnAlloca);
3191 Value *DFSanVisitor::makeAddAcquireOrderingTable(IRBuilder<> &IRB) {
3205 return ConstantDataVector::get(IRB.getContext(), OrderingTable);
3212 IRBuilder<> IRB(&CB);
3220 IRB.CreateExtractElement(makeAddAcquireOrderingTable(IRB), Ordering);
3234 Value *DFSanVisitor::makeAddReleaseOrderingTable(IRBuilder<> &IRB) {
3248 return ConstantDataVector::get(IRB.getContext(), OrderingTable);
3252 IRBuilder<> IRB(&CB);
3260 IRB.CreateExtractElement(makeAddReleaseOrderingTable(IRB), Ordering);
3266 IRB.CreateCall(
3268 {DstPtr, SrcPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)});
3274 IRBuilder<> IRB(&CB);
3286 IRB.CreateCall(
3288 {DstPtr, TargetPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)});
3291 IRB.CreateCall(
3293 {TargetPtr, SrcPtr, IRB.CreateIntCast(Size, DFSF.DFS.IntptrTy, false)});
3374 IRBuilder<> IRB(&CB);
3388 IRB.CreateStore(DFSF.getOrigin(CB.getArgOperand(I)),
3389 DFSF.getArgOriginTLS(I, IRB));
3398 IRB.CreateAlignedStore(DFSF.getShadow(CB.getArgOperand(I)),
3399 DFSF.getArgTLS(FT->getParamType(I), ArgOffset, IRB),