diff options
author | Hal Finkel <hfinkel@anl.gov> | 2014-01-25 19:24:54 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2014-01-25 19:24:54 +0000 |
commit | dbebb52a2fccf13937bfc60d4f0ce949963b2940 (patch) | |
tree | d4b88e2de68d6900af707b3073bad0472a931ea7 /llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | |
parent | 1e8f163709aa6feb120a84a549827eb6dd0490d6 (diff) | |
download | bcm5719-llvm-dbebb52a2fccf13937bfc60d4f0ce949963b2940.tar.gz bcm5719-llvm-dbebb52a2fccf13937bfc60d4f0ce949963b2940.zip |
Disable the use of TBAA when using AA in CodeGen
There are currently two issues, of which I currently know, that prevent TBAA
from being correctly usable in CodeGen:
1. Stack coloring does not update TBAA when merging allocas. This is easy
enough to fix, but is not the largest problem.
2. CGP inserts ptrtoint/inttoptr pairs when sinking address computations.
Because BasicAA does not handle inttoptr, we'll often miss basic type punning
idioms that we need to catch so we don't miscompile real-world code (like LLVM).
I don't yet have a small test case for this, but this fixes self hosting a
non-asserts build of LLVM on PPC64 when using -enable-aa-sched-mi and -misched=shuffle.
llvm-svn: 200093
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index af7519a88e1..b95a6c1198d 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -56,6 +56,16 @@ namespace { CombinerGlobalAA("combiner-global-alias-analysis", cl::Hidden, cl::desc("Enable DAG combiner's use of IR alias analysis")); +// FIXME: Enable the use of TBAA. There are two known issues preventing this: +// 1. Stack coloring does not update TBAA when merging allocas +// 2. CGP inserts ptrtoint/inttoptr pairs when sinking address computations. +// Because BasicAA does not handle inttoptr, we'll often miss basic type +// punning idioms that we need to catch so we don't miscompile real-world +// code. + static cl::opt<bool> + UseTBAA("combiner-use-tbaa", cl::Hidden, cl::init(false), + cl::desc("Enable DAG combiner's use of TBAA")); + #ifndef NDEBUG static cl::opt<std::string> CombinerAAOnlyFunc("combiner-aa-only-func", cl::Hidden, @@ -11079,8 +11089,10 @@ bool DAGCombiner::isAlias(SDValue Ptr1, int64_t Size1, bool IsVolatile1, int64_t Overlap1 = Size1 + SrcValueOffset1 - MinOffset; int64_t Overlap2 = Size2 + SrcValueOffset2 - MinOffset; AliasAnalysis::AliasResult AAResult = - AA.alias(AliasAnalysis::Location(SrcValue1, Overlap1, TBAAInfo1), - AliasAnalysis::Location(SrcValue2, Overlap2, TBAAInfo2)); + AA.alias(AliasAnalysis::Location(SrcValue1, Overlap1, + UseTBAA ? TBAAInfo1 : 0), + AliasAnalysis::Location(SrcValue2, Overlap2, + UseTBAA ? TBAAInfo2 : 0)); if (AAResult == AliasAnalysis::NoAlias) return false; } |