[llvm] 3628bb7 - Make various assume bundle data structures use uint64_t
Arthur Eubanks via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 13 10:39:20 PDT 2021
Author: Arthur Eubanks
Date: 2021-10-13T10:38:41-07:00
New Revision: 3628bb743642f1399d16718f584737e9b33d89a4
URL: https://github.com/llvm/llvm-project/commit/3628bb743642f1399d16718f584737e9b33d89a4
DIFF: https://github.com/llvm/llvm-project/commit/3628bb743642f1399d16718f584737e9b33d89a4.diff
LOG: Make various assume bundle data structures use uint64_t
Following D110451, we need to make sure to support 64 bit values.
Added:
Modified:
llvm/include/llvm/Analysis/AssumeBundleQueries.h
llvm/lib/Analysis/AssumeBundleQueries.cpp
llvm/lib/Analysis/ValueTracking.cpp
llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp
llvm/test/Transforms/InstCombine/assume-align.ll
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/AssumeBundleQueries.h b/llvm/include/llvm/Analysis/AssumeBundleQueries.h
index 49c0cd89a4dbf..af763a4a72c6d 100644
--- a/llvm/include/llvm/Analysis/AssumeBundleQueries.h
+++ b/llvm/include/llvm/Analysis/AssumeBundleQueries.h
@@ -70,8 +70,8 @@ template<> struct DenseMapInfo<Attribute::AttrKind> {
using RetainedKnowledgeKey = std::pair<Value *, Attribute::AttrKind>;
struct MinMax {
- unsigned Min;
- unsigned Max;
+ uint64_t Min;
+ uint64_t Max;
};
/// A mapping from intrinsics (=`llvm.assume` calls) to a value range
@@ -100,7 +100,7 @@ void fillMapFromAssume(AssumeInst &Assume, RetainedKnowledgeMap &Result);
/// - ArgValue will be 4.
struct RetainedKnowledge {
Attribute::AttrKind AttrKind = Attribute::None;
- unsigned ArgValue = 0;
+ uint64_t ArgValue = 0;
Value *WasOn = nullptr;
bool operator==(RetainedKnowledge Other) const {
return AttrKind == Other.AttrKind && WasOn == Other.WasOn &&
diff --git a/llvm/lib/Analysis/AssumeBundleQueries.cpp b/llvm/lib/Analysis/AssumeBundleQueries.cpp
index dee044346f025..9d4fe1225b339 100644
--- a/llvm/lib/Analysis/AssumeBundleQueries.cpp
+++ b/llvm/lib/Analysis/AssumeBundleQueries.cpp
@@ -84,7 +84,7 @@ void llvm::fillMapFromAssume(AssumeInst &Assume, RetainedKnowledgeMap &Result) {
getValueFromBundleOpInfo(Assume, Bundles, ABA_Argument));
if (!CI)
continue;
- unsigned Val = CI->getZExtValue();
+ uint64_t Val = CI->getZExtValue();
auto Lookup = Result.find(Key);
if (Lookup == Result.end() || !Lookup->second.count(&Assume)) {
Result[Key][&Assume] = {Val, Val};
@@ -102,7 +102,7 @@ llvm::getKnowledgeFromBundle(AssumeInst &Assume,
Result.AttrKind = Attribute::getAttrKindFromName(BOI.Tag->getKey());
if (bundleHasArgument(BOI, ABA_WasOn))
Result.WasOn = getValueFromBundleOpInfo(Assume, BOI, ABA_WasOn);
- auto GetArgOr1 = [&](unsigned Idx) -> unsigned {
+ auto GetArgOr1 = [&](unsigned Idx) -> uint64_t {
if (auto *ConstInt = dyn_cast<ConstantInt>(
getValueFromBundleOpInfo(Assume, BOI, ABA_Argument + Idx)))
return ConstInt->getZExtValue();
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index cce1e88a6bf32..b463ef71302eb 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -635,7 +635,7 @@ static void computeKnownBitsFromAssume(const Value *V, KnownBits &Known,
if (V->getType()->isPointerTy()) {
if (RetainedKnowledge RK = getKnowledgeValidInContext(
V, {Attribute::Alignment}, Q.CxtI, Q.DT, Q.AC)) {
- Known.Zero.setLowBits(Log2_32(RK.ArgValue));
+ Known.Zero.setLowBits(Log2_64(RK.ArgValue));
}
}
diff --git a/llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp b/llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp
index fb1940a6d0df9..f910f7c3c31f7 100644
--- a/llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp
+++ b/llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp
@@ -104,7 +104,7 @@ struct AssumeBuilderState {
Module *M;
using MapKey = std::pair<Value *, Attribute::AttrKind>;
- SmallMapVector<MapKey, unsigned, 8> AssumedKnowledgeMap;
+ SmallMapVector<MapKey, uint64_t, 8> AssumedKnowledgeMap;
Instruction *InstBeingModified = nullptr;
AssumptionCache* AC = nullptr;
DominatorTree* DT = nullptr;
@@ -197,7 +197,7 @@ struct AssumeBuilderState {
(!ShouldPreserveAllAttributes &&
!isUsefullToPreserve(Attr.getKindAsEnum())))
return;
- unsigned AttrArg = 0;
+ uint64_t AttrArg = 0;
if (Attr.isIntAttribute())
AttrArg = Attr.getValueAsInt();
addKnowledge({Attr.getKindAsEnum(), AttrArg, WasOn});
@@ -261,8 +261,7 @@ struct AssumeBuilderState {
addKnowledge({Attribute::NonNull, 0u, Pointer});
}
if (MA.valueOrOne() > 1)
- addKnowledge(
- {Attribute::Alignment, unsigned(MA.valueOrOne().value()), Pointer});
+ addKnowledge({Attribute::Alignment, MA.valueOrOne().value(), Pointer});
}
void addInstruction(Instruction *I) {
@@ -392,7 +391,7 @@ struct AssumeSimplify {
void dropRedundantKnowledge() {
struct MapValue {
IntrinsicInst *Assume;
- unsigned ArgValue;
+ uint64_t ArgValue;
CallInst::BundleOpInfo *BOI;
};
buildMapping(false);
diff --git a/llvm/test/Transforms/InstCombine/assume-align.ll b/llvm/test/Transforms/InstCombine/assume-align.ll
index 99e9fd656c5a6..fbe884b672ab6 100644
--- a/llvm/test/Transforms/InstCombine/assume-align.ll
+++ b/llvm/test/Transforms/InstCombine/assume-align.ll
@@ -88,3 +88,20 @@ if.end: ; preds = %if.else, %if.then
ret void
}
+define void @f3(i64 %a, i8* %b) {
+; CHECK-LABEL: @f3(
+; CHECK-NEXT: [[C:%.*]] = ptrtoint i8* [[B:%.*]] to i64
+; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(i8* [[B]], i64 4294967296) ]
+; CHECK-NEXT: [[D:%.*]] = add i64 [[C]], [[A:%.*]]
+; CHECK-NEXT: call void @g(i64 [[D]])
+; CHECK-NEXT: ret void
+;
+ %c = ptrtoint i8* %b to i64
+ call void @llvm.assume(i1 true) [ "align"(i8* %b, i64 4294967296) ]
+ %d = add i64 %a, %c
+ call void @g(i64 %d)
+ ret void
+}
+
+declare void @g(i64)
+
More information about the llvm-commits
mailing list