Home | History | Annotate | Download | only in Instrumentation

Lines Matching full:irb

273   IRBuilder<> IRB(*C);
279 WarningFn = M.getOrInsertFunction(WarningFnName, IRB.getVoidTy(), NULL);
282 "__msan_copy_origin", IRB.getVoidTy(), IRB.getInt8PtrTy(),
283 IRB.getInt8PtrTy(), IntptrTy, NULL);
285 "__msan_set_alloca_origin", IRB.getVoidTy(), IRB.getInt8PtrTy(), IntptrTy,
286 IRB.getInt8PtrTy(), NULL);
288 "__msan_poison_stack", IRB.getVoidTy(), IRB.getInt8PtrTy(), IntptrTy, NULL);
290 "__msan_memmove", IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
291 IRB.getInt8PtrTy(), IntptrTy, NULL);
293 "__msan_memcpy", IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
296 "__msan_memset", IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), IRB.getInt32Ty(),
301 M, ArrayType::get(IRB.getInt64Ty(), 8), false,
309 M, ArrayType::get(IRB.getInt64Ty(), 1000), false,
317 M, ArrayType::get(IRB.getInt64Ty(), 1000), false,
321 M, IRB.getInt64Ty(), false, GlobalVariable::ExternalLinkage, 0,
325 M, IRB.getInt32Ty(), false, GlobalVariable::ExternalLinkage, 0,
329 EmptyAsm = InlineAsm::get(FunctionType::get(IRB.getVoidTy(), false),
358 IRBuilder<> IRB(*C);
359 IntptrTy = IRB.getIntPtrTy(TD);
360 OriginTy = IRB.getInt32Ty();
367 "__msan_init", IRB.getVoidTy(), NULL)), 0);
370 new GlobalVariable(M, IRB.getInt32Ty(), true, GlobalValue::WeakODRLinkage,
371 IRB.getInt32(TrackOrigins), "__msan_track_origins");
374 new GlobalVariable(M, IRB.getInt32Ty(), true, GlobalValue::WeakODRLinkage,
375 IRB.getInt32(ClKeepGoing), "__msan_keep_going");
392 virtual void visitCallSite(CallSite &CS, IRBuilder<> &IRB) = 0;
462 IRBuilder<> IRB(&I);
466 Value *ShadowPtr = getShadowPtr(Addr, Shadow->getType(), IRB);
469 IRB.CreateAlignedStore(Shadow, ShadowPtr, I.getAlignment());
479 IRB.CreateAlignedStore(getOrigin(Val), getOriginPtr(Addr, IRB),
482 Value *ConvertedShadow = convertToShadowTyNoVec(Shadow, IRB);
491 Value *Cmp = IRB.CreateICmpNE(ConvertedShadow,
508 IRBuilder<> IRB(OrigIns);
510 Value *ConvertedShadow = convertToShadowTyNoVec(Shadow, IRB);
512 Value *Cmp = IRB.CreateICmpNE(ConvertedShadow,
519 IRB.SetInsertPoint(CheckTerm);
522 IRB.CreateStore(Origin ? (Value*)Origin : (Value*)IRB.getInt32(0),
525 CallInst *Call = IRB.CreateCall(MS.WarningFn);
527 IRB.CreateCall(MS.EmptyAsm);
617 Value *convertToShadowTyNoVec(Value *V, IRBuilder<> &IRB) {
621 return IRB.CreateBitCast(V, NoVecTy);
629 IRBuilder<> &IRB) {
631 IRB.CreateAnd(IRB.CreatePointerCast(Addr, MS.IntptrTy),
633 return IRB.CreateIntToPtr(ShadowLong, PointerType::get(ShadowTy, 0));
640 Value *getOriginPtr(Value *Addr, IRBuilder<> &IRB) {
642 IRB.CreateAnd(IRB.CreatePointerCast(Addr, MS.IntptrTy),
645 IRB.CreateAdd(ShadowLong,
648 IRB.CreateAnd(Add, ConstantInt::get(MS.IntptrTy, ~3ULL));
649 return IRB.CreateIntToPtr(SecondAnd, PointerType::get(IRB.getInt32Ty(), 0));
655 Value *getShadowPtrForArgument(Value *A, IRBuilder<> &IRB,
657 Value *Base = IRB.CreatePointerCast(MS.ParamTLS, MS.IntptrTy);
658 Base = IRB.CreateAdd(Base, ConstantInt::get(MS.IntptrTy, ArgOffset));
659 return IRB.CreateIntToPtr(Base, PointerType::get(getShadowTy(A), 0),
664 Value *getOriginPtrForArgument(Value *A, IRBuilder<> &IRB,
667 Value *Base = IRB.CreatePointerCast(MS.ParamOriginTLS, MS.IntptrTy);
668 Base = IRB.CreateAdd(Base, ConstantInt::get(MS.IntptrTy, ArgOffset));
669 return IRB.CreateIntToPtr(Base, PointerType::get(MS.OriginTy, 0),
674 Value *getShadowPtrForRetval(Value *A, IRBuilder<> &IRB) {
675 Value *Base = IRB.CreatePointerCast(MS.RetvalTLS, MS.IntptrTy);
676 return IRB.CreateIntToPtr(Base, PointerType::get(getShadowTy(A), 0),
681 Value *getOriginPtrForRetval(IRBuilder<> &IRB) {
862 IRBuilder<> IRB(&I);
866 Value *ShadowPtr = getShadowPtr(Addr, ShadowTy, IRB);
868 IRB.CreateAlignedLoad(ShadowPtr, I.getAlignment(), "_msld"));
880 IRB.CreateAlignedLoad(getOriginPtr(Addr, IRB), Alignment));
898 IRBuilder<> IRB(&I);
899 setShadow(&I, IRB.CreateExtractElement(getShadow(&I, 0), I.getOperand(1),
906 IRBuilder<> IRB(&I);
907 setShadow(&I, IRB.CreateInsertElement(getShadow(&I, 0), getShadow(&I, 1),
914 IRBuilder<> IRB(&I);
915 setShadow(&I, IRB.CreateShuffleVector(getShadow(&I, 0), getShadow(&I, 1),
922 IRBuilder<> IRB(&I);
923 setShadow(&I, IRB.CreateSExt(getShadow(&I, 0), I.getType(), "_msprop"));
928 IRBuilder<> IRB(&I);
929 setShadow(&I, IRB.CreateZExt(getShadow(&I, 0), I.getType(), "_msprop"));
934 IRBuilder<> IRB(&I);
935 setShadow(&I, IRB.CreateTrunc(getShadow(&I, 0), I.getType(), "_msprop"));
940 IRBuilder<> IRB(&I);
941 setShadow(&I, IRB.CreateBitCast(getShadow(&I, 0), getShadowTy(&I)));
946 IRBuilder<> IRB(&I);
947 setShadow(&I, IRB.CreateIntCast(getShadow(&I, 0), getShadowTy(&I), false,
953 IRBuilder<> IRB(&I);
954 setShadow(&I, IRB.CreateIntCast(getShadow(&I, 0), getShadowTy(&I), false,
972 IRBuilder<> IRB(&I);
983 V1 = IRB.CreateIntCast(V1, S1->getType(), false);
984 V2 = IRB.CreateIntCast(V2, S2->getType(), false);
986 Value *S1S2 = IRB.CreateAnd(S1, S2);
987 Value *V1S2 = IRB.CreateAnd(V1, S2);
988 Value *S1V2 = IRB.CreateAnd(S1, V2);
989 setShadow(&I, IRB.CreateOr(S1S2, IRB.CreateOr(V1S2, S1V2)));
994 IRBuilder<> IRB(&I);
1002 Value *V1 = IRB.CreateNot(I.getOperand(0));
1003 Value *V2 = IRB.CreateNot(I.getOperand(1));
1005 V1 = IRB.CreateIntCast(V1, S1->getType(), false);
1006 V2 = IRB.CreateIntCast(V2, S2->getType(), false);
1008 Value *S1S2 = IRB.CreateAnd(S1, S2);
1009 Value *V1S2 = IRB.CreateAnd(V1, S2);
1010 Value *S1V2 = IRB.CreateAnd(S1, V2);
1011 setShadow(&I, IRB.CreateOr(S1S2, IRB.CreateOr(V1S2, S1V2)));
1034 IRBuilder<> &IRB;
1038 Combiner(MemorySanitizerVisitor *MSV, IRBuilder<> &IRB) :
1039 Shadow(0), Origin(0), IRB(IRB), MSV(MSV) {}
1048 OpShadow = MSV->CreateShadowCast(IRB, OpShadow, Shadow->getType());
1049 Shadow = IRB.CreateOr(Shadow, OpShadow, "_msprop");
1058 Value *FlatShadow = MSV->convertToShadowTyNoVec(OpShadow, IRB);
1059 Value *Cond = IRB.CreateICmpNE(FlatShadow,
1061 Origin = IRB.CreateSelect(Cond, OpOrigin, Origin);
1079 Shadow = MSV->CreateShadowCast(IRB, Shadow, MSV->getShadowTy(I));
1095 IRBuilder<> IRB(&I);
1096 OriginCombiner OC(this, IRB);
1112 Value *CreateShadowCast(IRBuilder<> &IRB, Value *V, Type *dstTy) {
1115 return IRB.CreateIntCast(V, dstTy, false);
1118 return IRB.CreateIntCast(V, dstTy, false);
1121 Value *V1 = IRB.CreateBitCast(V, Type::getIntNTy(*MS.C, srcSizeInBits));
1123 IRB.CreateIntCast(V1, Type::getIntNTy(*MS.C, dstSizeInBits), false);
1124 return IRB.CreateBitCast(V2, dstTy);
1130 IRBuilder<> IRB(&I);
1131 ShadowAndOriginCombiner SC(this, IRB);
1146 IRBuilder<> IRB(&I);
1165 IRBuilder<> IRB(&I);
1174 A = IRB.CreatePointerCast(A, Sa->getType());
1175 B = IRB.CreatePointerCast(B, Sb->getType());
1180 Value *C = IRB.CreateXor(A, B);
1181 Value *Sc = IRB.CreateOr(Sa, Sb);
1190 IRB.CreateAnd(IRB.CreateICmpNE(Sc, Zero),
1191 IRB.CreateICmpEQ(
1192 IRB.CreateAnd(IRB.CreateXor(Sc, MinusOne), C), Zero));
1200 Value *getLowestPossibleValue(IRBuilder<> &IRB, Value *A, Value *Sa,
1204 Value *SaOtherBits = IRB.CreateLShr(IRB.CreateShl(Sa, 1), 1);
1205 Value *SaSignBit = IRB.CreateXor(Sa, SaOtherBits);
1208 IRB.CreateOr(IRB.CreateAnd(A, IRB.CreateNot(SaOtherBits)), SaSignBit);
1211 return IRB.CreateAnd(A, IRB.CreateNot(Sa));
1217 Value *getHighestPossibleValue(IRBuilder<> &IRB, Value *A, Value *Sa,
1221 Value *SaOtherBits = IRB.CreateLShr(IRB.CreateShl(Sa, 1), 1);
1222 Value *SaSignBit = IRB.CreateXor(Sa, SaOtherBits);
1225 IRB.CreateOr(IRB.CreateAnd(A, IRB.CreateNot(SaSignBit)), SaOtherBits);
1228 return IRB.CreateOr(A, Sa);
1238 IRBuilder<> IRB(&I);
1247 A = IRB.CreatePointerCast(A, Sa->getType());
1248 B = IRB.CreatePointerCast(B, Sb->getType());
1254 Value *S1 = IRB.CreateICmp(I.getPredicate(),
1255 IRB, A, Sa, IsSigned),
1256 getHighestPossibleValue(IRB, B, Sb, IsSigned));
1257 Value *S2 = IRB.CreateICmp(I.getPredicate(),
1258 getHighestPossibleValue(IRB, A, Sa, IsSigned),
1259 getLowestPossibleValue(IRB, B, Sb, IsSigned));
1260 Value *Si = IRB.CreateXor(S1, S2);
1283 IRBuilder<> IRB(&I);
1285 IRB.CreateICmpSLT(getShadow(op), getCleanShadow(op), "_msprop_icmpslt");
1327 IRBuilder<> IRB(&I);
1332 Value *S2Conv = IRB.CreateSExt(IRB.CreateICmpNE(S2, getCleanShadow(S2)),
1335 Value *Shift = IRB.CreateBinOp(I.getOpcode(), S1, V2);
1336 setShadow(&I, IRB.CreateOr(Shift, S2Conv));
1355 IRBuilder<> IRB(&I);
1356 IRB.CreateCall3(
1358 IRB.CreatePointerCast(I.getArgOperand(0), IRB.getInt8PtrTy()),
1359 IRB.CreatePointerCast(I.getArgOperand(1), IRB.getInt8PtrTy()),
1360 IRB.CreateIntCast(I.getArgOperand(2), MS.IntptrTy, false));
1369 IRBuilder<> IRB(&I);
1370 IRB.CreateCall3(
1372 IRB.CreatePointerCast(I.getArgOperand(0), IRB.getInt8PtrTy()),
1373 IRB.CreatePointerCast(I.getArgOperand(1), IRB.getInt8PtrTy()),
1374 IRB.CreateIntCast(I.getArgOperand(2), MS.IntptrTy, false));
1380 IRBuilder<> IRB(&I);
1381 IRB.CreateCall3(
1383 IRB.CreatePointerCast(I.getArgOperand(0), IRB.getInt8PtrTy()),
1384 IRB.CreateIntCast(I.getArgOperand(1), IRB.getInt32Ty(), false),
1385 IRB.CreateIntCast(I.getArgOperand(2), MS.IntptrTy, false));
1421 IRBuilder<> IRB(&I);
1424 Value *ShadowPtr = getShadowPtr(Addr, Shadow->getType(), IRB);
1428 IRB.CreateAlignedStore(Shadow, ShadowPtr, 1);
1436 IRB.CreateStore(getOrigin(&I, 1), getOriginPtr(Addr, IRB));
1445 IRBuilder<> IRB(&I);
1450 Value *ShadowPtr = getShadowPtr(Addr, ShadowTy, IRB);
1453 setShadow(&I, IRB.CreateAlignedLoad(ShadowPtr, 1, "_msld"));
1464 setOrigin(&I, IRB.CreateLoad(getOriginPtr(Addr, IRB)));
1492 IRBuilder<> IRB(&I);
1493 ShadowAndOriginCombiner SC(this, IRB);
1548 IRBuilder<> IRB(&I);
1553 setShadow(&I, IRB.CreateCall(BswapFunc, getShadow(Op)));
1606 IRBuilder<> IRB(&I);
1623 Value *ArgShadowBase = getShadowPtrForArgument(A, IRB, ArgOffset);
1631 Store = IRB.CreateMemCpy(ArgShadowBase,
1632 getShadowPtr(A, Type::getInt8Ty(*MS.C), IRB),
1636 Store = IRB.CreateAlignedStore(ArgShadow, ArgShadowBase,
1640 IRB.CreateStore(getOrigin(A),
1641 getOriginPtrForArgument(A, IRB, ArgOffset));
1652 VAHelper->visitCallSite(CS, IRB);
1688 IRBuilder<> IRB(&I);
1692 Value *ShadowPtr = getShadowPtrForRetval(RetVal, IRB);
1694 IRB.CreateAlignedStore(Shadow, ShadowPtr, kShadowTLSAlignment);
1696 IRB.CreateStore(getOrigin(RetVal), getOriginPtrForRetval(IRB));
1701 IRBuilder<> IRB(&I);
1703 setShadow(&I, IRB.CreatePHI(getShadowTy(&I), I.getNumIncomingValues(),
1706 setOrigin(&I, IRB.CreatePHI(MS.OriginTy, I.getNumIncomingValues(),
1712 IRBuilder<> IRB(I.getNextNode());
1715 IRB.CreateCall2(MS.MsanPoisonStackFn,
1716 IRB.CreatePointerCast(&I, IRB.getInt8PtrTy()),
1719 Value *ShadowBase = getShadowPtr(&I, Type::getInt8PtrTy(*MS.C), IRB);
1720 Value *PoisonValue = IRB.getInt8(PoisonStack ? ClPoisonStackPattern : 0);
1721 IRB.CreateMemSet(ShadowBase, PoisonValue, Size, I.getAlignment());
1737 IRB.CreateCall3(MS.MsanSetAllocaOriginFn,
1738 IRB.CreatePointerCast(&I, IRB.getInt8PtrTy()),
1740 IRB.CreatePointerCast(Descr, IRB.getInt8PtrTy()));
1745 IRBuilder<> IRB(&I);
1746 setShadow(&I, IRB.CreateSelect(I.getCondition(),
1754 Value *ConvertedShadow = convertToShadowTyNoVec(Cond, IRB);
1755 Cond = IRB.CreateICmpNE(ConvertedShadow,
1758 setOrigin(&I, IRB.CreateSelect(Cond,
1775 IRBuilder<> IRB(&I);
1780 Value *ResShadow = IRB.CreateExtractValue(AggShadow, I.getIndices());
1787 IRBuilder<> IRB(&I);
1793 Value *Res = IRB.CreateInsertValue(AggShadow, InsShadow, I.getIndices());
1866 void visitCallSite(CallSite &CS, IRBuilder<> &IRB) {
1881 Base = getShadowPtrForVAArgument(A, IRB, GpOffset);
1885 Base = getShadowPtrForVAArgument(A, IRB, FpOffset);
1890 Base = getShadowPtrForVAArgument(A, IRB, OverflowOffset);
1893 IRB.CreateAlignedStore(MSV.getShadow(A), Base, kShadowTLSAlignment);
1896 ConstantInt::get(IRB.getInt64Ty(), OverflowOffset - AMD64FpEndOffset);
1897 IRB.CreateStore(OverflowSize, MS.VAArgOverflowSizeTLS);
1901 Value *getShadowPtrForVAArgument(Value *A, IRBuilder<> &IRB,
1903 Value *Base = IRB.CreatePointerCast(MS.VAArgTLS, MS.IntptrTy);
1904 Base = IRB.CreateAdd(Base, ConstantInt::get(MS.IntptrTy, ArgOffset));
1905 return IRB.CreateIntToPtr(Base, PointerType::get(MSV.getShadowTy(A), 0),
1910 IRBuilder<> IRB(&I);
1913 Value *ShadowPtr = MSV.getShadowPtr(VAListTag, IRB.getInt8Ty(), IRB);
1917 IRB.CreateMemSet(ShadowPtr, Constant::getNullValue(IRB.getInt8Ty()),
1922 IRBuilder<> IRB(&I);
1924 Value *ShadowPtr = MSV.getShadowPtr(VAListTag, IRB.getInt8Ty(), IRB);
1928 IRB.CreateMemSet(ShadowPtr, Constant::getNullValue(IRB.getInt8Ty()),
1938 IRBuilder<> IRB(F.getEntryBlock().getFirstNonPHI());
1939 VAArgOverflowSize = IRB.CreateLoad(MS.VAArgOverflowSizeTLS);
1941 IRB.CreateAdd(ConstantInt::get(MS.IntptrTy, AMD64FpEndOffset),
1943 VAArgTLSCopy = IRB.CreateAlloca(Type::getInt8Ty(*MS.C), CopySize);
1944 IRB.CreateMemCpy(VAArgTLSCopy, MS.VAArgTLS, CopySize, 8);
1951 IRBuilder<> IRB(OrigInst->getNextNode());
1955 IRB.CreateIntToPtr(
1956 IRB.CreateAdd(IRB.CreatePtrToInt(VAListTag, MS.IntptrTy),
1959 Value *RegSaveAreaPtr = IRB.CreateLoad(RegSaveAreaPtrPtr);
1961 MSV.getShadowPtr(RegSaveAreaPtr, IRB.getInt8Ty(), IRB);
1962 IRB.CreateMemCpy(RegSaveAreaShadowPtr, VAArgTLSCopy,
1966 IRB.CreateIntToPtr(
1967 IRB.CreateAdd(IRB.CreatePtrToInt(VAListTag, MS.IntptrTy),
1970 Value *OverflowArgAreaPtr = IRB.CreateLoad(OverflowArgAreaPtrPtr);
1972 MSV.getShadowPtr(OverflowArgAreaPtr, IRB.getInt8Ty(), IRB);
1974 getShadowPtrForVAArgument(VAArgTLSCopy, IRB, AMD64FpEndOffset);
1975 IRB.CreateMemCpy(OverflowArgAreaShadowPtr, SrcPtr, VAArgOverflowSize, 16);
1985 void visitCallSite(CallSite &CS, IRBuilder<> &IRB) {}