diff options
Diffstat (limited to 'llvm/utils/TableGen/DAGISelMatcherGen.cpp')
-rw-r--r-- | llvm/utils/TableGen/DAGISelMatcherGen.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/utils/TableGen/DAGISelMatcherGen.cpp b/llvm/utils/TableGen/DAGISelMatcherGen.cpp index 875c64f18d1..612342ddcdd 100644 --- a/llvm/utils/TableGen/DAGISelMatcherGen.cpp +++ b/llvm/utils/TableGen/DAGISelMatcherGen.cpp @@ -1000,9 +1000,16 @@ void MatcherGen::EmitResultCode() { } assert(Ops.size() >= NumSrcResults && "Didn't provide enough results"); - Ops.resize(NumSrcResults); + SmallVector<unsigned, 8> Results(Ops); - AddMatcher(new CompleteMatchMatcher(Ops, Pattern)); + // Apply result permutation. + for (unsigned ResNo = 0; ResNo < Pattern.getDstPattern()->getNumResults(); + ++ResNo) { + Results[ResNo] = Ops[Pattern.getDstPattern()->getResultIndex(ResNo)]; + } + + Results.resize(NumSrcResults); + AddMatcher(new CompleteMatchMatcher(Results, Pattern)); } |