aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineInstr.cpp
diff options
context:
space:
mode:
authorWei Mi <wmi@google.com>2016-07-20 16:40:33 +0000
committerWei Mi <wmi@google.com>2016-07-20 16:40:33 +0000
commitdb80c0c77f5347b6f0126b0bb98ed20a39516fd0 (patch)
treea90658b91396d465a26dea3bdb5ea4602a3a8bf1 /llvm/lib/CodeGen/MachineInstr.cpp
parentbe53c65fab8b240a8bbc804dec012ab0cf1422f4 (diff)
downloadllvm-db80c0c77f5347b6f0126b0bb98ed20a39516fd0.zip
llvm-db80c0c77f5347b6f0126b0bb98ed20a39516fd0.tar.gz
llvm-db80c0c77f5347b6f0126b0bb98ed20a39516fd0.tar.bz2
Use ValueOffsetPair to enhance value reuse during SCEV expansion.
In D12090, the ExprValueMap was added to reuse existing value during SCEV expansion. However, const folding and sext/zext distribution can make the reuse still difficult. A simplified case is: suppose we know S1 expands to V1 in ExprValueMap, and S1 = S2 + C_a S3 = S2 + C_b where C_a and C_b are different SCEVConstants. Then we'd like to expand S3 as V1 - C_a + C_b instead of expanding S2 literally. It is helpful when S2 is a complex SCEV expr and S2 has no entry in ExprValueMap, which is usually caused by the fact that S3 is generated from S1 after const folding. In order to do that, we represent ExprValueMap as a mapping from SCEV to ValueOffsetPair. We will save both S1->{V1, 0} and S2->{V1, C_a} into the ExprValueMap when we create SCEV for V1. When S3 is expanded, it will first expand S2 to V1 - C_a because of S2->{V1, C_a} in the map, then expand S3 to V1 - C_a + C_b. Differential Revision: https://reviews.llvm.org/D21313 llvm-svn: 276136
Diffstat (limited to 'llvm/lib/CodeGen/MachineInstr.cpp')
0 files changed, 0 insertions, 0 deletions