forked from OSchip/llvm-project
[Attributor] Use known alignment as lower bound to avoid work
If we know already more than available from a use, we don't need to invest time on it.
This commit is contained in:
parent
c14213e030
commit
f3f88287c5
|
@ -3033,7 +3033,7 @@ struct AADereferenceable
|
|||
};
|
||||
|
||||
using AAAlignmentStateType =
|
||||
IncIntegerState<uint32_t, Value::MaximumAlignment, 0>;
|
||||
IncIntegerState<uint32_t, Value::MaximumAlignment, 1>;
|
||||
/// An abstract interface for all align attributes.
|
||||
struct AAAlign : public IRAttribute<
|
||||
Attribute::Alignment,
|
||||
|
|
|
@ -3679,8 +3679,7 @@ struct AADereferenceableCallSiteReturned final
|
|||
|
||||
// ------------------------ Align Argument Attribute ------------------------
|
||||
|
||||
static unsigned getKnownAlignForUse(Attributor &A,
|
||||
AbstractAttribute &QueryingAA,
|
||||
static unsigned getKnownAlignForUse(Attributor &A, AAAlign &QueryingAA,
|
||||
Value &AssociatedValue, const Use *U,
|
||||
const Instruction *I, bool &TrackUse) {
|
||||
// We need to follow common pointer manipulation uses to the accesses they
|
||||
|
@ -3721,7 +3720,7 @@ static unsigned getKnownAlignForUse(Attributor &A,
|
|||
MA = LI->getAlign();
|
||||
}
|
||||
|
||||
if (!MA || *MA <= 1)
|
||||
if (!MA || *MA <= QueryingAA.getKnownAlign())
|
||||
return 0;
|
||||
|
||||
unsigned Alignment = MA->value();
|
||||
|
|
|
@ -130,7 +130,7 @@ define i32* @checkAndAdvance(i32* align 16 %0) {
|
|||
; GRAPH-EMPTY:
|
||||
; GRAPH-NEXT: [AAValueSimplify] for CtxI ' %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance@-1]} with state simplified
|
||||
; GRAPH-EMPTY:
|
||||
; GRAPH-NEXT: [AAAlign] for CtxI ' %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance@-1]} with state align<0-16>
|
||||
; GRAPH-NEXT: [AAAlign] for CtxI ' %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance@-1]} with state align<1-16>
|
||||
; GRAPH-NEXT: updates [AAAlign] for CtxI ' %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_ret: [@-1]} with state align<1-16>
|
||||
; GRAPH-NEXT: updates [AAAlign] for CtxI ' %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_ret: [@-1]} with state align<1-16>
|
||||
; GRAPH-EMPTY:
|
||||
|
@ -250,7 +250,7 @@ define i32* @checkAndAdvance(i32* align 16 %0) {
|
|||
; GRAPH-NEXT: [AAIsDead] for CtxI ' br label %8' at position {flt: [@-1]} with state assumed-live
|
||||
; GRAPH-EMPTY:
|
||||
; GRAPH-NEXT: [AAAlign] for CtxI ' %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_ret: [@-1]} with state align<1-16>
|
||||
; GRAPH-NEXT: updates [AAAlign] for CtxI ' %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance@-1]} with state align<0-16>
|
||||
; GRAPH-NEXT: updates [AAAlign] for CtxI ' %2 = load i32, i32* %0, align 4' at position {fn_ret:checkAndAdvance [checkAndAdvance@-1]} with state align<1-16>
|
||||
; GRAPH-EMPTY:
|
||||
; GRAPH-NEXT: [AADereferenceable] for CtxI ' %6 = call i32* @checkAndAdvance(i32* %5)' at position {cs_ret: [@-1]} with state unknown-dereferenceable
|
||||
; GRAPH-EMPTY:
|
||||
|
|
Loading…
Reference in New Issue