Skip to content

Commit

Permalink
[ARM] Enable useAA() for the in-order Cortex-R52
Browse files Browse the repository at this point in the history
This option allows codegen (such as DAGCombine or MI scheduling) to use alias
analysis information, which can help with the codegen on in-order cpu's,
especially machine scheduling. Here I have done things the same way as AArch64,
adding a subtarget feature to enable this for specific cores, and enabled it for
the R52 where we have a schedule to make use of it.

Differential Revision: https://reviews.llvm.org/D48074

llvm-svn: 335249
  • Loading branch information
davemgreen committed Jun 21, 2018
1 parent 9092cc9 commit 21a2973
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 1 deletion.
7 changes: 6 additions & 1 deletion llvm/lib/Target/ARM/ARM.td
Expand Up @@ -330,6 +330,10 @@ def FeatureNoPostRASched : SubtargetFeature<"disable-postra-scheduler",
"DisablePostRAScheduler", "true",
"Don't schedule again after register allocation">;

// Enable use of alias analysis during code generation
def FeatureUseAA : SubtargetFeature<"use-aa", "UseAA", "true",
"Use alias analysis during codegen">;

//===----------------------------------------------------------------------===//
// ARM architecture class
//
Expand Down Expand Up @@ -1006,7 +1010,8 @@ def : ProcNoItin<"kryo", [ARMv8a, ProcKryo,

def : ProcessorModel<"cortex-r52", CortexR52Model, [ARMv8r, ProcR52,
FeatureUseMISched,
FeatureFPAO]>;
FeatureFPAO,
FeatureUseAA]>;

//===----------------------------------------------------------------------===//
// Register File Description
Expand Down
7 changes: 7 additions & 0 deletions llvm/lib/Target/ARM/ARMSubtarget.h
Expand Up @@ -198,6 +198,9 @@ class ARMSubtarget : public ARMGenSubtargetInfo {
/// register allocation.
bool DisablePostRAScheduler = false;

/// UseAA - True if using AA during codegen (DAGCombine, MISched, etc)
bool UseAA = false;

/// HasThumb2 - True if Thumb2 instructions are supported.
bool HasThumb2 = false;

Expand Down Expand Up @@ -723,6 +726,10 @@ class ARMSubtarget : public ARMGenSubtargetInfo {
/// True for some subtargets at > -O0.
bool enablePostRAScheduler() const override;

/// Enable use of alias analysis during code generation (during MI
/// scheduling, DAGCombine, etc.).
bool useAA() const override { return UseAA; }

// enableAtomicExpand- True if we need to expand our atomics.
bool enableAtomicExpand() const override;

Expand Down
26 changes: 26 additions & 0 deletions llvm/test/CodeGen/ARM/useaa.ll
@@ -0,0 +1,26 @@
; RUN: llc < %s -mtriple=armv8r-eabi -mcpu=cortex-r52 | FileCheck %s --check-prefix=CHECK --check-prefix=USEAA
; RUN: llc < %s -mtriple=armv8r-eabi -mcpu=generic | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC

; Check we use AA during codegen, so can interleave these loads/stores.

; CHECK-LABEL: test
; GENERIC: ldr
; GENERIC: str
; GENERIC: ldr
; GENERIC: str
; USEAA: ldr
; USEAA: ldr
; USEAA: str
; USEAA: str

define void @test(i32* nocapture %a, i32* noalias nocapture %b) {
entry:
%0 = load i32, i32* %a, align 4
%add = add nsw i32 %0, 10
store i32 %add, i32* %a, align 4
%1 = load i32, i32* %b, align 4
%add2 = add nsw i32 %1, 20
store i32 %add2, i32* %b, align 4
ret void
}

0 comments on commit 21a2973

Please sign in to comment.