forked from OSchip/llvm-project
Make various assume bundle data structures use uint64_t
Following D110451, we need to make sure to support 64 bit values.
This commit is contained in:
parent
a652e5b53a
commit
3628bb7436
|
@ -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 &&
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue