0
SWL은 상점 주소를 키로, 상수를 해당 값으로 갖는 맵입니다. 그러나 내가로드에서 사용되는이 저장소를 확인하면 상수와 저장 명령의 사용을 대체하려고합니다. 그렇게하면 지시 사항을 대체하지 않습니다. 이 패스를 실행 한 후에는 바이트 코드에 변화가 없습니다.replacealluseswith가 작동하지 않습니다.
std::map<Value*,Value*> SWL;
for (User::op_iterator OI = I.op_begin(); OI != I.op_end(); ++OI)
{
Value *v = *OI;
std::map<Value*,Value*> :: iterator re = SWL.find(v);
if(re != SWL.end() && isa<LoadInst>(&I))
{
I.replaceAllUsesWith(re->second);
bRet = true;
}
}
실제로'replaceAllUsesWith' 호출을 포함하는 행에 도달했는지 확인 했습니까?'re-> second'는 실제로 그 시점에서 포함 할 것으로 기대되는 것을 포함합니까? – Oak
예,이 실행 지점과 인쇄의 경우 (ISA (재> 초)) \t \t \t \t \t \t \t \t \t \t 잘못한다() << "여기"에 도달; –
user3342227
나는 다른 지시 사항에서 아무 것도 대체하지 않는 OI-> setOperand (재> second)를 시도해 보았습니다 !! – user3342227