summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/SourceManager.cpp
diff options
context:
space:
mode:
authorWei Mi <wmi@google.com>2017-06-26 18:16:10 +0000
committerWei Mi <wmi@google.com>2017-06-26 18:16:10 +0000
commit71f06420e4d1c5cb937b032f79025f452ad52838 (patch)
treeffbd5ad841e487ddfe86432890bbbd580761bc29 /clang/lib/Basic/SourceManager.cpp
parentf28683cf514b5e48a6474459a37e5d6bbc845b3c (diff)
downloadbcm5719-llvm-71f06420e4d1c5cb937b032f79025f452ad52838.tar.gz
bcm5719-llvm-71f06420e4d1c5cb937b032f79025f452ad52838.zip
[GVN] Recommit the patch "Add phi-translate support in scalarpre".
The recommit fixes three bugs: The first one is to use CurrentBlock instead of PREInstr's Parent as param of performScalarPREInsertion because the Parent of a clone instruction may be uninitialized. The second one is stop PRE when CurrentBlock to its predecessor is a backedge and an operand of CurInst is defined inside of CurrentBlock. The same value defined inside of loop in last iteration can not be regarded as available. The third one is an out-of-bound array access in a flipped if guard. Right now scalarpre doesn't have phi-translate support, so it will miss some simple pre opportunities. Like the following testcase, current scalarpre cannot recognize the last "a * b" is fully redundent because a and b used by the last "a * b" expr are both defined by phis. long a[100], b[100], g1, g2, g3; __attribute__((pure)) long goo(); void foo(long a, long b, long c, long d) { g1 = a * b; if (__builtin_expect(g2 > 3, 0)) { a = c; b = d; g2 = a * b; } g3 = a * b; // fully redundant. } The patch adds phi-translate support in scalarpre. This is only a temporary solution before the newpre based on newgvn is available. llvm-svn: 306313
Diffstat (limited to 'clang/lib/Basic/SourceManager.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud