diff options
author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-10-13 19:02:59 +0000 |
---|---|---|
committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-10-13 19:02:59 +0000 |
commit | 59d5964ec6f0d455bc8f72d8a71ff09656e00276 (patch) | |
tree | 84de1f8798bba9180361d1d9bdd486432f12f436 /test/CodeGen/Hexagon | |
parent | 04312950d0c8191808ef2fef7476edd8f927c8c9 (diff) |
[Hexagon] Minimize number of repeated constant extenders
Each constant extender requires an extra instruction, which adds to the
code size and also reduces the number of available slots in an instruction
packet. In most cases, the value of a repeated constant extender could be
loaded into a register, and the instructions using the extender could be
replaced with their counterparts that use that register instead.
This patch adds a pass that tries to reduce the number of constant
extenders, including extenders which differ only in an immediate offset
known at compile time, e.g. @global and @global+12.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315735 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/Hexagon')
-rw-r--r-- | test/CodeGen/Hexagon/cext-opt-basic.mir | 75 | ||||
-rw-r--r-- | test/CodeGen/Hexagon/zextloadi1.ll | 2 |
2 files changed, 76 insertions, 1 deletions
diff --git a/test/CodeGen/Hexagon/cext-opt-basic.mir b/test/CodeGen/Hexagon/cext-opt-basic.mir new file mode 100644 index 00000000000..5ad44c1e3ea --- /dev/null +++ b/test/CodeGen/Hexagon/cext-opt-basic.mir @@ -0,0 +1,75 @@ +# RUN: llc -march=hexagon -run-pass hexagon-cext-opt -hexagon-cext-threshold=3 %s -o - | FileCheck %s + +--- | + define void @test0() { ret void } + define void @test1() { ret void } + define void @test2() { ret void } + @global_address = global [1024 x i32] zeroinitializer, align 8 +... + +# CHECK-LABEL: name: test0 +# CHECK: [[B:%[0-9]+]] = A2_tfrsi @global_address +# CHECK: L2_loadri_io [[B]], 0 +# CHECK: L2_loadri_io [[B]], 4 +# CHECK: L2_loadri_io [[B]], 8 +--- +name: test0 +registers: + - { id: 0, class: intregs } + - { id: 1, class: intregs } + - { id: 2, class: intregs } +body: | + bb.0: + %0 = PS_loadriabs @global_address + %1 = PS_loadriabs @global_address+4 + %2 = PS_loadriabs @global_address+8 +... + +# CHECK-LABEL: name: test1 +# CHECK: [[C:%[0-9]+]] = COPY %r0 +# CHECK: [[B:%[0-9]+]] = A2_addi [[C]], @global_address +# CHECK: L2_loadri_io [[B]], 0 +# CHECK: L2_loadri_io [[B]], 4 +# CHECK: L2_loadri_io [[B]], 8 +--- +name: test1 +registers: + - { id: 0, class: intregs } + - { id: 1, class: intregs } + - { id: 2, class: intregs } + - { id: 3, class: intregs } +body: | + bb.0: + liveins: %r0 + %0 = COPY %r0 + %1 = L4_loadri_ur %0, 0, @global_address + %2 = L4_loadri_ur %0, 0, @global_address+4 + %3 = L4_loadri_ur %0, 0, @global_address+8 +... + +# CHECK-LABEL: name: test2 +# CHECK: [[C:%[0-9]+]] = COPY %r0 +# CHECK: [[B:%[0-9]+]] = A2_tfrsi @global_address + 4 +# CHECK: [[T0:%[0-9]+]] = A2_addi [[B]], -4 +# CHECK: %r0 = COPY [[T0]] +# CHECK: [[T1:%[0-9]+]] = A2_addi [[B]], -2 +# CHECK: %r1 = COPY [[T1]] +# CHECK: L4_loadri_rr [[B]], [[C]], 0 +--- +name: test2 +registers: + - { id: 0, class: intregs } + - { id: 1, class: intregs } + - { id: 2, class: intregs } + - { id: 3, class: intregs } +body: | + bb.0: + liveins: %r0 + %0 = COPY %r0 + %1 = A2_tfrsi @global_address + %r0 = COPY %1 + %2 = A2_tfrsi @global_address+2 + %r1 = COPY %2 + %3 = L4_loadri_ur %0, 0, @global_address+4 +... + diff --git a/test/CodeGen/Hexagon/zextloadi1.ll b/test/CodeGen/Hexagon/zextloadi1.ll index 582120d0f35..29ebf2e0927 100644 --- a/test/CodeGen/Hexagon/zextloadi1.ll +++ b/test/CodeGen/Hexagon/zextloadi1.ll @@ -1,4 +1,4 @@ -; RUN: llc -march=hexagon < %s | FileCheck %s +; RUN: llc -march=hexagon -hexagon-cext=0 < %s | FileCheck %s @i65_l = external global i65 @i65_s = external global i65 |