From f3f88287c5842dc166d0889cc4474e10b558db0b Mon Sep 17 00:00:00 2001 From: Johannes Doerfert Date: Mon, 1 Mar 2021 17:10:01 -0600 Subject: [PATCH] [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. --- llvm/include/llvm/Transforms/IPO/Attributor.h | 2 +- llvm/lib/Transforms/IPO/AttributorAttributes.cpp | 5 ++--- llvm/test/Transforms/Attributor/depgraph.ll | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/llvm/include/llvm/Transforms/IPO/Attributor.h b/llvm/include/llvm/Transforms/IPO/Attributor.h index 5ebd0a4..c8d95f3 100644 --- a/llvm/include/llvm/Transforms/IPO/Attributor.h +++ b/llvm/include/llvm/Transforms/IPO/Attributor.h @@ -3033,7 +3033,7 @@ struct AADereferenceable }; using AAAlignmentStateType = - IncIntegerState; + IncIntegerState; /// An abstract interface for all align attributes. struct AAAlign : public IRAttribute< Attribute::Alignment, diff --git a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp index 4018cf1..54b5b58 100644 --- a/llvm/lib/Transforms/IPO/AttributorAttributes.cpp +++ b/llvm/lib/Transforms/IPO/AttributorAttributes.cpp @@ -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(); diff --git a/llvm/test/Transforms/Attributor/depgraph.ll b/llvm/test/Transforms/Attributor/depgraph.ll index 2291440..06b2279 100644 --- a/llvm/test/Transforms/Attributor/depgraph.ll +++ b/llvm/test/Transforms/Attributor/depgraph.ll @@ -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: -- 2.7.4