2014-03-04 3 views
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; 
    } 
} 
+0

실제로'replaceAllUsesWith' 호출을 포함하는 행에 도달했는지 확인 했습니까?'re-> second'는 실제로 그 시점에서 포함 할 것으로 기대되는 것을 포함합니까? – Oak

+0

예,이 실행 지점과 인쇄의 경우 (ISA (재> 초)) \t \t \t \t \t \t \t \t \t \t 잘못한다() << "여기"에 도달; – user3342227

+0

나는 다른 지시 사항에서 아무 것도 대체하지 않는 OI-> setOperand (재> second)를 시도해 보았습니다 !! – user3342227

답변

0

내가> change.bc 같은 다른 파일에 지시하는 대신 선택 하 -load sample.dylib -passname sample.bc>을/dev/null을하고 있었다. 내가이 일을하고 변화를 가져올 때. 나는 변화를 볼 수있다.