summaryrefslogtreecommitdiffstats
path: root/llvm/include
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2011-04-26 01:21:15 +0000
committerChris Lattner <sabre@nondot.org>2011-04-26 01:21:15 +0000
commit6f83d06ffa19e4321cb603188e1b922bc5c7196c (patch)
treed5072c030e17e899b00cc1b63c4011dcaa27cecd /llvm/include
parent6f095d613a406b64465b918d2cc47fe3e13ad8b8 (diff)
downloadbcm5719-llvm-6f83d06ffa19e4321cb603188e1b922bc5c7196c.tar.gz
bcm5719-llvm-6f83d06ffa19e4321cb603188e1b922bc5c7196c.zip
Enhance MemDep: When alias analysis returns a partial alias result,
return it as a clobber. This allows GVN to do smart things. Enhance GVN to be smart about the case when a small load is clobbered by a larger overlapping load. In this case, forward the value. This allows us to compile stuff like this: int test(void *P) { int tmp = *(unsigned int*)P; return tmp+*((unsigned char*)P+1); } into: _test: ## @test movl (%rdi), %ecx movzbl %ch, %eax addl %ecx, %eax ret which has one load. We already handled the case where the smaller load was from a must-aliased base pointer. llvm-svn: 130180
Diffstat (limited to 'llvm/include')
-rw-r--r--llvm/include/llvm/Analysis/MemoryDependenceAnalysis.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/include/llvm/Analysis/MemoryDependenceAnalysis.h b/llvm/include/llvm/Analysis/MemoryDependenceAnalysis.h
index 4d5dd1987f2..f2e33535ae2 100644
--- a/llvm/include/llvm/Analysis/MemoryDependenceAnalysis.h
+++ b/llvm/include/llvm/Analysis/MemoryDependenceAnalysis.h
@@ -48,6 +48,11 @@ namespace llvm {
/// this occurs when we see a may-aliased store to the memory location we
/// care about.
///
+ /// There are several cases that may be interesting here:
+ /// 1. Loads are clobbered by may-alias stores.
+ /// 2. Loads are considered clobbered by partially-aliased loads. The
+ /// client may choose to analyze deeper into these cases.
+ ///
/// A dependence query on the first instruction of the entry block will
/// return a clobber(self) result.
Clobber,
OpenPOWER on IntegriCloud