Lines Matching refs:Shadow
20 /// byte of application memory is backed by two bytes of shadow memory which
32 /// | shadow memory |
37 /// To derive a shadow memory address from an application memory address,
40 /// account for the double byte representation of shadow labels and move the
41 /// address into the shadow memory range. See the function
75 // External symbol to be used when generating the shadow address for
83 // the shadow load to have alignment 16. This flag is disabled by default as
91 // The ABI list files control how shadow parameters are passed. The pass treats
220 /// pass the return value shadow in a register, while WK_Custom uses an
221 /// extra pointer argument to return the shadow. This allows the wrapped
301 Value *Shadow;
320 void setShadow(Instruction *I, Value *Shadow);
325 void storeShadow(Value *Addr, uint64_t Size, uint64_t Align, Value *Shadow,
447 // AArch64 supports multiple VMAs and the shadow mask is set at runtime.
824 // We will not necessarily be able to compute the shadow for every phi node
893 Value *&Shadow = ValShadowMap[V];
894 if (!Shadow) {
905 Shadow = IRB.CreateLoad(getArgTLS(A->getArgNo(), ArgTLSPos));
913 Shadow = &*i;
914 assert(Shadow->getType() == DFS.ShadowTy);
918 NonZeroChecks.push_back(Shadow);
920 Shadow = DFS.ZeroShadow;
923 return Shadow;
926 void DFSanFunction::setShadow(Instruction *I, Value *Shadow) {
928 assert(Shadow->getType() == DFS.ShadowTy);
929 ValShadowMap[I] = Shadow;
981 return CCS.Shadow;
991 CCS.Shadow = Call;
1009 CCS.Shadow = Phi;
1023 ShadowElements[CCS.Shadow] = std::move(UnionElems);
1025 return CCS.Shadow;
1035 Value *Shadow = getShadow(Inst->getOperand(0));
1037 Shadow = combineShadows(Shadow, getShadow(Inst->getOperand(i)), Inst);
1039 return Shadow;
1047 // Generates IR to load shadow corresponding to bytes [Addr, Addr+Size), where
1094 // Fast path for the common case where each byte has identical shadow: load
1095 // shadow 64 bits at a time, fall out to a __dfsan_union_load call if any
1096 // shadow is non-equal.
1150 PHINode *Shadow = PHINode::Create(DFS.ShadowTy, 2, "", &Tail->front());
1151 Shadow->addIncoming(FallbackCall, FallbackBB);
1152 Shadow->addIncoming(TruncShadow, LastBr->getParent());
1153 return Shadow;
1180 Value *Shadow = DFSF.loadShadow(LI.getPointerOperand(), Size, Align, &LI);
1183 Shadow = DFSF.combineShadows(Shadow, PtrShadow, &LI);
1185 if (Shadow != DFSF.DFS.ZeroShadow)
1186 DFSF.NonZeroChecks.push_back(Shadow);
1188 DFSF.setShadow(&LI, Shadow);
1192 Value *Shadow, Instruction *Pos) {
1198 IRB.CreateStore(Shadow, i->second);
1206 if (Shadow == DFS.ZeroShadow) {
1222 ShadowVec, Shadow, ConstantInt::get(Type::getInt32Ty(*DFS.Ctx), i));
1238 IRB.CreateAlignedStore(Shadow, CurShadowAddr, ShadowAlign);
1259 Value* Shadow = DFSF.getShadow(SI.getValueOperand());
1262 Shadow = DFSF.combineShadows(Shadow, PtrShadow, &SI);
1264 DFSF.storeShadow(SI.getPointerOperand(), Size, Align, Shadow, &SI);
1620 // Give the shadow phi node valid predecessors to fool SplitEdge into working.