[llvm] 2898101 - [BasicAA] Move DecomposedGEP out of header (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 29 14:45:23 PDT 2021
Author: Nikita Popov
Date: 2021-09-29T23:45:15+02:00
New Revision: 28981015526f2192440c18f18e8a20cd11b0779c
URL: https://github.com/llvm/llvm-project/commit/28981015526f2192440c18f18e8a20cd11b0779c
DIFF: https://github.com/llvm/llvm-project/commit/28981015526f2192440c18f18e8a20cd11b0779c.diff
LOG: [BasicAA] Move DecomposedGEP out of header (NFC)
It's sufficient to have a forward declaration in the header, we
can move the definition of the struct (and VariableGEPIndex)
in the source file.
Added:
Modified:
llvm/include/llvm/Analysis/BasicAliasAnalysis.h
llvm/lib/Analysis/BasicAliasAnalysis.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/BasicAliasAnalysis.h b/llvm/include/llvm/Analysis/BasicAliasAnalysis.h
index da1ed5f6fe41..ed9d1ba4c5a7 100644
--- a/llvm/include/llvm/Analysis/BasicAliasAnalysis.h
+++ b/llvm/include/llvm/Analysis/BasicAliasAnalysis.h
@@ -13,10 +13,8 @@
#ifndef LLVM_ANALYSIS_BASICALIASANALYSIS_H
#define LLVM_ANALYSIS_BASICALIASANALYSIS_H
-#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/SmallPtrSet.h"
-#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/IR/PassManager.h"
#include "llvm/Pass.h"
@@ -28,7 +26,6 @@
namespace llvm {
struct AAMDNodes;
-class APInt;
class AssumptionCache;
class BasicBlock;
class DataLayout;
@@ -98,71 +95,7 @@ class BasicAAResult : public AAResultBase<BasicAAResult> {
FunctionModRefBehavior getModRefBehavior(const Function *Fn);
private:
- // A linear transformation of a Value; this class represents ZExt(SExt(V,
- // SExtBits), ZExtBits) * Scale + Offset.
- struct VariableGEPIndex {
- // An opaque Value - we can't decompose this further.
- const Value *V;
-
- // We need to track what extensions we've done as we consider the same Value
- // with
diff erent extensions as
diff erent variables in a GEP's linear
- // expression;
- // e.g.: if V == -1, then sext(x) != zext(x).
- unsigned ZExtBits;
- unsigned SExtBits;
-
- APInt Scale;
-
- // Context instruction to use when querying information about this index.
- const Instruction *CxtI;
-
- /// True if all operations in this expression are NSW.
- bool IsNSW;
-
- void dump() const {
- print(dbgs());
- dbgs() << "\n";
- }
- void print(raw_ostream &OS) const {
- OS << "(V=" << V->getName()
- << ", zextbits=" << ZExtBits
- << ", sextbits=" << SExtBits
- << ", scale=" << Scale << ")";
- }
- };
-
- // Represents the internal structure of a GEP, decomposed into a base pointer,
- // constant offsets, and variable scaled indices.
- struct DecomposedGEP {
- // Base pointer of the GEP
- const Value *Base;
- // Total constant offset from base.
- APInt Offset;
- // Scaled variable (non-constant) indices.
- SmallVector<VariableGEPIndex, 4> VarIndices;
- // Is GEP index scale compile-time constant.
- bool HasCompileTimeConstantScale;
- // Are all operations inbounds GEPs or non-indexing operations?
- // (None iff expression doesn't involve any geps)
- Optional<bool> InBounds;
-
- void dump() const {
- print(dbgs());
- dbgs() << "\n";
- }
- void print(raw_ostream &OS) const {
- OS << "(DecomposedGEP Base=" << Base->getName()
- << ", Offset=" << Offset
- << ", VarIndices=[";
- for (size_t i = 0; i < VarIndices.size(); i++) {
- if (i != 0)
- OS << ", ";
- VarIndices[i].print(OS);
- }
- OS << "], HasCompileTimeConstantScale=" << HasCompileTimeConstantScale
- << ")";
- }
- };
+ struct DecomposedGEP;
/// Tracks phi nodes we have visited.
///
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
index f80a44fd7a11..6f0fd52ca541 100644
--- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp
+++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
@@ -455,6 +455,75 @@ static unsigned getMaxPointerSize(const DataLayout &DL) {
return MaxPointerSize;
}
+namespace {
+// A linear transformation of a Value; this class represents ZExt(SExt(V,
+// SExtBits), ZExtBits) * Scale + Offset.
+struct VariableGEPIndex {
+ // An opaque Value - we can't decompose this further.
+ const Value *V;
+
+ // We need to track what extensions we've done as we consider the same Value
+ // with
diff erent extensions as
diff erent variables in a GEP's linear
+ // expression;
+ // e.g.: if V == -1, then sext(x) != zext(x).
+ unsigned ZExtBits;
+ unsigned SExtBits;
+
+ APInt Scale;
+
+ // Context instruction to use when querying information about this index.
+ const Instruction *CxtI;
+
+ /// True if all operations in this expression are NSW.
+ bool IsNSW;
+
+ void dump() const {
+ print(dbgs());
+ dbgs() << "\n";
+ }
+ void print(raw_ostream &OS) const {
+ OS << "(V=" << V->getName()
+ << ", zextbits=" << ZExtBits
+ << ", sextbits=" << SExtBits
+ << ", scale=" << Scale << ")";
+ }
+};
+}
+
+// Represents the internal structure of a GEP, decomposed into a base pointer,
+// constant offsets, and variable scaled indices.
+struct BasicAAResult::DecomposedGEP {
+ // Base pointer of the GEP
+ const Value *Base;
+ // Total constant offset from base.
+ APInt Offset;
+ // Scaled variable (non-constant) indices.
+ SmallVector<VariableGEPIndex, 4> VarIndices;
+ // Is GEP index scale compile-time constant.
+ bool HasCompileTimeConstantScale;
+ // Are all operations inbounds GEPs or non-indexing operations?
+ // (None iff expression doesn't involve any geps)
+ Optional<bool> InBounds;
+
+ void dump() const {
+ print(dbgs());
+ dbgs() << "\n";
+ }
+ void print(raw_ostream &OS) const {
+ OS << "(DecomposedGEP Base=" << Base->getName()
+ << ", Offset=" << Offset
+ << ", VarIndices=[";
+ for (size_t i = 0; i < VarIndices.size(); i++) {
+ if (i != 0)
+ OS << ", ";
+ VarIndices[i].print(OS);
+ }
+ OS << "], HasCompileTimeConstantScale=" << HasCompileTimeConstantScale
+ << ")";
+ }
+};
+
+
/// If V is a symbolic pointer expression, decompose it into a base pointer
/// with a constant offset and a number of scaled symbolic offsets.
///
More information about the llvm-commits
mailing list