summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/ARM/load.ll
diff options
context:
space:
mode:
authorDavid Green <david.green@arm.com>2019-01-29 10:40:31 +0000
committerDavid Green <david.green@arm.com>2019-01-29 10:40:31 +0000
commit54b011554715919de3f277e8dc1bf500f5b2b32c (patch)
tree2a6532946f6ca531a2ea80f449646a96dc408bab /llvm/test/CodeGen/ARM/load.ll
parent0b7fce6d72f54c5c45aa98e1cee938b6c2b64303 (diff)
downloadbcm5719-llvm-54b011554715919de3f277e8dc1bf500f5b2b32c.tar.gz
bcm5719-llvm-54b011554715919de3f277e8dc1bf500f5b2b32c.zip
[ARM] Use sub for negative offset load/store in thumb1
This attempts to optimise negative values used in load/store operands a little. We currently try to selct them as rr, materialising the negative constant using a MOV/MVN pair. This instead selects ri with an immediate of 0, forcing the add node to become a simpler sub. Differential Revision: https://reviews.llvm.org/D57121 llvm-svn: 352475
Diffstat (limited to 'llvm/test/CodeGen/ARM/load.ll')
-rw-r--r--llvm/test/CodeGen/ARM/load.ll60
1 files changed, 24 insertions, 36 deletions
diff --git a/llvm/test/CodeGen/ARM/load.ll b/llvm/test/CodeGen/ARM/load.ll
index d44bdac97a0..f33294267f5 100644
--- a/llvm/test/CodeGen/ARM/load.ll
+++ b/llvm/test/CodeGen/ARM/load.ll
@@ -608,9 +608,8 @@ entry:
define i32 @ldrb_ri_negative(i8* %p) {
; CHECK-T1-LABEL: ldrb_ri_negative:
; CHECK-T1: @ %bb.0: @ %entry
-; CHECK-T1-NEXT: movs r1, #0
-; CHECK-T1-NEXT: mvns r1, r1
-; CHECK-T1-NEXT: ldrb r0, [r0, r1]
+; CHECK-T1-NEXT: subs r0, r0, #1
+; CHECK-T1-NEXT: ldrb r0, [r0]
; CHECK-T1-NEXT: bx lr
;
; CHECK-T2-LABEL: ldrb_ri_negative:
@@ -627,9 +626,8 @@ entry:
define i32 @ldrh_ri_negative(i8* %p) {
; CHECK-T1-LABEL: ldrh_ri_negative:
; CHECK-T1: @ %bb.0: @ %entry
-; CHECK-T1-NEXT: movs r1, #0
-; CHECK-T1-NEXT: mvns r1, r1
-; CHECK-T1-NEXT: ldrh r0, [r0, r1]
+; CHECK-T1-NEXT: subs r0, r0, #1
+; CHECK-T1-NEXT: ldrh r0, [r0]
; CHECK-T1-NEXT: bx lr
;
; CHECK-T2-LABEL: ldrh_ri_negative:
@@ -647,9 +645,8 @@ entry:
define i32 @ldr_ri_negative(i8* %p) {
; CHECK-T1-LABEL: ldr_ri_negative:
; CHECK-T1: @ %bb.0: @ %entry
-; CHECK-T1-NEXT: movs r1, #0
-; CHECK-T1-NEXT: mvns r1, r1
-; CHECK-T1-NEXT: ldr r0, [r0, r1]
+; CHECK-T1-NEXT: subs r0, r0, #1
+; CHECK-T1-NEXT: ldr r0, [r0]
; CHECK-T1-NEXT: bx lr
;
; CHECK-T2-LABEL: ldr_ri_negative:
@@ -666,9 +663,8 @@ entry:
define void @strb_ri_negative(i8* %p, i32 %x) {
; CHECK-T1-LABEL: strb_ri_negative:
; CHECK-T1: @ %bb.0: @ %entry
-; CHECK-T1-NEXT: movs r2, #0
-; CHECK-T1-NEXT: mvns r2, r2
-; CHECK-T1-NEXT: strb r1, [r0, r2]
+; CHECK-T1-NEXT: subs r0, r0, #1
+; CHECK-T1-NEXT: strb r1, [r0]
; CHECK-T1-NEXT: bx lr
;
; CHECK-T2-LABEL: strb_ri_negative:
@@ -685,9 +681,8 @@ entry:
define void @strh_ri_negative(i8* %p, i32 %x) {
; CHECK-T1-LABEL: strh_ri_negative:
; CHECK-T1: @ %bb.0: @ %entry
-; CHECK-T1-NEXT: movs r2, #0
-; CHECK-T1-NEXT: mvns r2, r2
-; CHECK-T1-NEXT: strh r1, [r0, r2]
+; CHECK-T1-NEXT: subs r0, r0, #1
+; CHECK-T1-NEXT: strh r1, [r0]
; CHECK-T1-NEXT: bx lr
;
; CHECK-T2-LABEL: strh_ri_negative:
@@ -705,9 +700,8 @@ entry:
define void @str_ri_negative(i8* %p, i32 %x) {
; CHECK-T1-LABEL: str_ri_negative:
; CHECK-T1: @ %bb.0: @ %entry
-; CHECK-T1-NEXT: movs r2, #0
-; CHECK-T1-NEXT: mvns r2, r2
-; CHECK-T1-NEXT: str r1, [r0, r2]
+; CHECK-T1-NEXT: subs r0, r0, #1
+; CHECK-T1-NEXT: str r1, [r0]
; CHECK-T1-NEXT: bx lr
;
; CHECK-T2-LABEL: str_ri_negative:
@@ -766,9 +760,8 @@ entry:
define i32 @ldrb_ri_negative255(i8* %p) {
; CHECK-T1-LABEL: ldrb_ri_negative255:
; CHECK-T1: @ %bb.0: @ %entry
-; CHECK-T1-NEXT: movs r1, #254
-; CHECK-T1-NEXT: mvns r1, r1
-; CHECK-T1-NEXT: ldrb r0, [r0, r1]
+; CHECK-T1-NEXT: subs r0, #255
+; CHECK-T1-NEXT: ldrb r0, [r0]
; CHECK-T1-NEXT: bx lr
;
; CHECK-T2-LABEL: ldrb_ri_negative255:
@@ -785,9 +778,8 @@ entry:
define i32 @ldrh_ri_negative255(i8* %p) {
; CHECK-T1-LABEL: ldrh_ri_negative255:
; CHECK-T1: @ %bb.0: @ %entry
-; CHECK-T1-NEXT: movs r1, #254
-; CHECK-T1-NEXT: mvns r1, r1
-; CHECK-T1-NEXT: ldrh r0, [r0, r1]
+; CHECK-T1-NEXT: subs r0, #255
+; CHECK-T1-NEXT: ldrh r0, [r0]
; CHECK-T1-NEXT: bx lr
;
; CHECK-T2-LABEL: ldrh_ri_negative255:
@@ -805,9 +797,8 @@ entry:
define i32 @ldr_ri_negative255(i8* %p) {
; CHECK-T1-LABEL: ldr_ri_negative255:
; CHECK-T1: @ %bb.0: @ %entry
-; CHECK-T1-NEXT: movs r1, #254
-; CHECK-T1-NEXT: mvns r1, r1
-; CHECK-T1-NEXT: ldr r0, [r0, r1]
+; CHECK-T1-NEXT: subs r0, #255
+; CHECK-T1-NEXT: ldr r0, [r0]
; CHECK-T1-NEXT: bx lr
;
; CHECK-T2-LABEL: ldr_ri_negative255:
@@ -824,9 +815,8 @@ entry:
define void @strb_ri_negative255(i8* %p, i32 %x) {
; CHECK-T1-LABEL: strb_ri_negative255:
; CHECK-T1: @ %bb.0: @ %entry
-; CHECK-T1-NEXT: movs r2, #254
-; CHECK-T1-NEXT: mvns r2, r2
-; CHECK-T1-NEXT: strb r1, [r0, r2]
+; CHECK-T1-NEXT: subs r0, #255
+; CHECK-T1-NEXT: strb r1, [r0]
; CHECK-T1-NEXT: bx lr
;
; CHECK-T2-LABEL: strb_ri_negative255:
@@ -843,9 +833,8 @@ entry:
define void @strh_ri_negative255(i8* %p, i32 %x) {
; CHECK-T1-LABEL: strh_ri_negative255:
; CHECK-T1: @ %bb.0: @ %entry
-; CHECK-T1-NEXT: movs r2, #254
-; CHECK-T1-NEXT: mvns r2, r2
-; CHECK-T1-NEXT: strh r1, [r0, r2]
+; CHECK-T1-NEXT: subs r0, #255
+; CHECK-T1-NEXT: strh r1, [r0]
; CHECK-T1-NEXT: bx lr
;
; CHECK-T2-LABEL: strh_ri_negative255:
@@ -863,9 +852,8 @@ entry:
define void @str_ri_negative255(i8* %p, i32 %x) {
; CHECK-T1-LABEL: str_ri_negative255:
; CHECK-T1: @ %bb.0: @ %entry
-; CHECK-T1-NEXT: movs r2, #254
-; CHECK-T1-NEXT: mvns r2, r2
-; CHECK-T1-NEXT: str r1, [r0, r2]
+; CHECK-T1-NEXT: subs r0, #255
+; CHECK-T1-NEXT: str r1, [r0]
; CHECK-T1-NEXT: bx lr
;
; CHECK-T2-LABEL: str_ri_negative255:
OpenPOWER on IntegriCloud