summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-10-13 19:02:59 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-10-13 19:02:59 +0000
commit7c9c05888c15a5f8681a06b4aa611179aacf55fa (patch)
treebd864af2ca9a4c5f5629dd0609e751ef55d68ea2 /llvm/test
parentfd874c20ec195994e670ee7983d06ee003e7d33e (diff)
downloadbcm5719-llvm-7c9c05888c15a5f8681a06b4aa611179aacf55fa.tar.gz
bcm5719-llvm-7c9c05888c15a5f8681a06b4aa611179aacf55fa.zip
[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. llvm-svn: 315735
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/Hexagon/cext-opt-basic.mir75
-rw-r--r--llvm/test/CodeGen/Hexagon/zextloadi1.ll2
2 files changed, 76 insertions, 1 deletions
diff --git a/llvm/test/CodeGen/Hexagon/cext-opt-basic.mir b/llvm/test/CodeGen/Hexagon/cext-opt-basic.mir
new file mode 100644
index 00000000000..5ad44c1e3ea
--- /dev/null
+++ b/llvm/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/llvm/test/CodeGen/Hexagon/zextloadi1.ll b/llvm/test/CodeGen/Hexagon/zextloadi1.ll
index 582120d0f35..29ebf2e0927 100644
--- a/llvm/test/CodeGen/Hexagon/zextloadi1.ll
+++ b/llvm/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
OpenPOWER on IntegriCloud