forked from OSchip/llvm-project
[Attributor] Manifest load/store alignment generally
Summary: Any pointer could have load/store users not only floating ones so we move the manifest logic for alignment into the AAAlignImpl class. Reviewers: uenoku, sstefan1 Subscribers: hiraditya, bollu, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D66922 llvm-svn: 370479
This commit is contained in:
parent
c2fed1dc8a
commit
81df452d82
|
@ -2185,30 +2185,6 @@ struct AAAlignImpl : AAAlign {
|
||||||
takeKnownMaximum(Attr.getValueAsInt());
|
takeKnownMaximum(Attr.getValueAsInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Provide a helper to determine the implied ABI alignment and check in
|
|
||||||
// the existing manifest method and a new one for AAAlignImpl that value
|
|
||||||
// to avoid making the alignment explicit if it did not improve.
|
|
||||||
|
|
||||||
/// See AbstractAttribute::getDeducedAttributes
|
|
||||||
virtual void
|
|
||||||
getDeducedAttributes(LLVMContext &Ctx,
|
|
||||||
SmallVectorImpl<Attribute> &Attrs) const override {
|
|
||||||
if (getAssumedAlign() > 1)
|
|
||||||
Attrs.emplace_back(Attribute::getWithAlignment(Ctx, getAssumedAlign()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// See AbstractAttribute::getAsStr().
|
|
||||||
const std::string getAsStr() const override {
|
|
||||||
return getAssumedAlign() ? ("align<" + std::to_string(getKnownAlign()) +
|
|
||||||
"-" + std::to_string(getAssumedAlign()) + ">")
|
|
||||||
: "unknown-align";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Align attribute for a floating value.
|
|
||||||
struct AAAlignFloating : AAAlignImpl {
|
|
||||||
AAAlignFloating(const IRPosition &IRP) : AAAlignImpl(IRP) {}
|
|
||||||
|
|
||||||
/// See AbstractAttribute::manifest(...).
|
/// See AbstractAttribute::manifest(...).
|
||||||
ChangeStatus manifest(Attributor &A) override {
|
ChangeStatus manifest(Attributor &A) override {
|
||||||
ChangeStatus Changed = ChangeStatus::UNCHANGED;
|
ChangeStatus Changed = ChangeStatus::UNCHANGED;
|
||||||
|
@ -2235,9 +2211,33 @@ struct AAAlignFloating : AAAlignImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return AAAlignImpl::manifest(A) | Changed;
|
return AAAlign::manifest(A) | Changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Provide a helper to determine the implied ABI alignment and check in
|
||||||
|
// the existing manifest method and a new one for AAAlignImpl that value
|
||||||
|
// to avoid making the alignment explicit if it did not improve.
|
||||||
|
|
||||||
|
/// See AbstractAttribute::getDeducedAttributes
|
||||||
|
virtual void
|
||||||
|
getDeducedAttributes(LLVMContext &Ctx,
|
||||||
|
SmallVectorImpl<Attribute> &Attrs) const override {
|
||||||
|
if (getAssumedAlign() > 1)
|
||||||
|
Attrs.emplace_back(Attribute::getWithAlignment(Ctx, getAssumedAlign()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// See AbstractAttribute::getAsStr().
|
||||||
|
const std::string getAsStr() const override {
|
||||||
|
return getAssumedAlign() ? ("align<" + std::to_string(getKnownAlign()) +
|
||||||
|
"-" + std::to_string(getAssumedAlign()) + ">")
|
||||||
|
: "unknown-align";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Align attribute for a floating value.
|
||||||
|
struct AAAlignFloating : AAAlignImpl {
|
||||||
|
AAAlignFloating(const IRPosition &IRP) : AAAlignImpl(IRP) {}
|
||||||
|
|
||||||
/// See AbstractAttribute::updateImpl(...).
|
/// See AbstractAttribute::updateImpl(...).
|
||||||
ChangeStatus updateImpl(Attributor &A) override {
|
ChangeStatus updateImpl(Attributor &A) override {
|
||||||
const DataLayout &DL = A.getDataLayout();
|
const DataLayout &DL = A.getDataLayout();
|
||||||
|
|
|
@ -90,6 +90,8 @@ define internal i8* @f1(i8* readnone %0) local_unnamed_addr #0 {
|
||||||
; <label>:3: ; preds = %1
|
; <label>:3: ; preds = %1
|
||||||
; ATTRIBUTOR: %4 = tail call i8* @f2(i8* nonnull align 8 dereferenceable(1) @a1)
|
; ATTRIBUTOR: %4 = tail call i8* @f2(i8* nonnull align 8 dereferenceable(1) @a1)
|
||||||
%4 = tail call i8* @f2(i8* nonnull @a1)
|
%4 = tail call i8* @f2(i8* nonnull @a1)
|
||||||
|
; ATTRIBUTOR: %l = load i8, i8* %4, align 8
|
||||||
|
%l = load i8, i8* %4
|
||||||
br label %5
|
br label %5
|
||||||
|
|
||||||
; <label>:5: ; preds = %1, %3
|
; <label>:5: ; preds = %1, %3
|
||||||
|
|
Loading…
Reference in New Issue