Skip to content

Commit

Permalink
Make various assume bundle data structures use uint64_t
Browse files Browse the repository at this point in the history
Following D110451, we need to make sure to support 64 bit values.
  • Loading branch information
aeubanks committed Oct 13, 2021
1 parent a652e5b commit 3628bb7
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 11 deletions.
6 changes: 3 additions & 3 deletions llvm/include/llvm/Analysis/AssumeBundleQueries.h
Expand Up @@ -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
Expand Down Expand Up @@ -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 &&
Expand Down
4 changes: 2 additions & 2 deletions llvm/lib/Analysis/AssumeBundleQueries.cpp
Expand Up @@ -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};
Expand All @@ -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();
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Analysis/ValueTracking.cpp
Expand Up @@ -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));
}
}

Expand Down
9 changes: 4 additions & 5 deletions llvm/lib/Transforms/Utils/AssumeBundleBuilder.cpp
Expand Up @@ -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;
Expand Down Expand Up @@ -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});
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -392,7 +391,7 @@ struct AssumeSimplify {
void dropRedundantKnowledge() {
struct MapValue {
IntrinsicInst *Assume;
unsigned ArgValue;
uint64_t ArgValue;
CallInst::BundleOpInfo *BOI;
};
buildMapping(false);
Expand Down
17 changes: 17 additions & 0 deletions llvm/test/Transforms/InstCombine/assume-align.ll
Expand Up @@ -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)

0 comments on commit 3628bb7

Please sign in to comment.