2017-11-29 37 views
0

기본적으로, 내가 3 명령을 가지고 있다고 가정하십시오 : load $src, store $destmodify.LLVM : 몇 가지 명령어/내장 함수를 여러 개의 연결된 명령어로 변환하는 방법은 무엇입니까?

는 그리고 난 그냥 직접 액세스 할 수없는 특수 레지스터를 수정

load $x 
modify 
store $x 

로드 및 저장처럼 뭔가 거라고 고유/명령 foo $x을 추가 할 수 있습니다. 내가 직면 한 문제는 어떤 이유로 여러 명령어를 출력하는 테이블 gen의 Pattern<...>이 컴파일되지 않으며 명령어가 서로 다른 결과를 직접 사용하지 않기 때문에 Pat<...>이 수행하지 않기 때문입니다 (즉, 특수 레지스터 매개 변수는 암시 적입니다), 그래서 나는 그들로부터 단일 노드의 dag 패턴을 생성 할 수 없다.

어떻게 해결할 수 있습니까? 나는 의사의 지시에 돌고 여러 지침을 낮추는 생각,하지만 난 컴파일러가

load $x 
modify 
modify 
store $x 

그런 식으로 foo $x 연속 두 가지를 최적화 할 수있을 것입니다 확실하지 않다.

답변

0

MyTargetDAGtoDAG의 Select 메서드에 내장 함수의 특수 처리를 추가하여 원하는대로 처리 할 수있었습니다. 주어진 노드를 연결된 명령 노드로 대체했습니다. 하지만 코드 생성 문제를 해결했지만 아직 최적화 문제에 대한 해결책을 찾지 못했습니다.