summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/Mips
diff options
context:
space:
mode:
authorSimon Atanasyan <simon@atanasyan.com>2019-08-28 12:35:53 +0000
committerSimon Atanasyan <simon@atanasyan.com>2019-08-28 12:35:53 +0000
commitf46ba4f0771be75016b3a2cde6779e5d0210350f (patch)
tree6692023ef73148b7508462d8ad5072d506193605 /llvm/test/CodeGen/Mips
parent95686fa898e62c57529a649758e7f735d851c00d (diff)
downloadbcm5719-llvm-f46ba4f0771be75016b3a2cde6779e5d0210350f.tar.gz
bcm5719-llvm-f46ba4f0771be75016b3a2cde6779e5d0210350f.zip
[mips] Use less registers to load address of TargetExternalSymbol
There is no pattern matched `add hi, (MipsLo texternalsym)`. As a result, loading an address of 32-bit symbol requires two registers and one more additional instruction: ``` addiu $1, $zero, %lo(foo) lui $2, %hi(foo) addu $25, $2, $1 ``` This patch adds the missed pattern and enables generation more effective set of instructions: ``` lui $1, %hi(foo) addiu $25, $1, %lo(foo) ``` Differential Revision: https://reviews.llvm.org/D66771 llvm-svn: 370196
Diffstat (limited to 'llvm/test/CodeGen/Mips')
-rw-r--r--llvm/test/CodeGen/Mips/indirect-jump-hazard/long-calls.ll13
-rw-r--r--llvm/test/CodeGen/Mips/long-calls.ll8
2 files changed, 8 insertions, 13 deletions
diff --git a/llvm/test/CodeGen/Mips/indirect-jump-hazard/long-calls.ll b/llvm/test/CodeGen/Mips/indirect-jump-hazard/long-calls.ll
index 50d8fd6dd1d..5be7bd1897b 100644
--- a/llvm/test/CodeGen/Mips/indirect-jump-hazard/long-calls.ll
+++ b/llvm/test/CodeGen/Mips/indirect-jump-hazard/long-calls.ll
@@ -28,11 +28,10 @@ define void @caller() {
; O32-NEXT: addiu $25, $1, %lo(callee)
; O32-NEXT: jalr.hb $25
; O32-NEXT: nop
-; O32-NEXT: addiu $1, $zero, %lo(memset)
-; O32-NEXT: lui $2, %hi(memset)
-; O32-NEXT: addu $25, $2, $1
; O32-NEXT: lui $1, %hi(val)
; O32-NEXT: addiu $4, $1, %lo(val)
+; O32-NEXT: lui $1, %hi(memset)
+; O32-NEXT: addiu $25, $1, %lo(memset)
; O32-NEXT: addiu $5, $zero, 0
; O32-NEXT: jalr.hb $25
; O32-NEXT: addiu $6, $zero, 80
@@ -50,11 +49,10 @@ define void @caller() {
; N32-NEXT: addiu $25, $1, %lo(callee)
; N32-NEXT: jalr.hb $25
; N32-NEXT: nop
-; N32-NEXT: addiu $1, $zero, %lo(memset)
-; N32-NEXT: lui $2, %hi(memset)
-; N32-NEXT: addu $25, $2, $1
; N32-NEXT: lui $1, %hi(val)
; N32-NEXT: addiu $4, $1, %lo(val)
+; N32-NEXT: lui $1, %hi(memset)
+; N32-NEXT: addiu $25, $1, %lo(memset)
; N32-NEXT: daddiu $5, $zero, 0
; N32-NEXT: jalr.hb $25
; N32-NEXT: daddiu $6, $zero, 80
@@ -83,8 +81,7 @@ define void @caller() {
; N64-NEXT: lui $2, %hi(memset)
; N64-NEXT: daddu $1, $1, $2
; N64-NEXT: dsll $1, $1, 16
-; N64-NEXT: daddiu $2, $zero, %lo(memset)
-; N64-NEXT: daddu $25, $1, $2
+; N64-NEXT: daddiu $25, $1, %lo(memset)
; N64-NEXT: lui $1, %highest(val)
; N64-NEXT: daddiu $1, $1, %higher(val)
; N64-NEXT: dsll $1, $1, 16
diff --git a/llvm/test/CodeGen/Mips/long-calls.ll b/llvm/test/CodeGen/Mips/long-calls.ll
index d4652a54635..9cd868902a0 100644
--- a/llvm/test/CodeGen/Mips/long-calls.ll
+++ b/llvm/test/CodeGen/Mips/long-calls.ll
@@ -33,9 +33,8 @@ define void @caller() {
; ON32: addiu $25, $1, %lo(callee)
; ON32: jalr $25
-; ON32: addiu $1, $zero, %lo(memset)
-; ON32: lui $2, %hi(memset)
-; ON32: addu $25, $2, $1
+; ON32: lui $1, %hi(memset)
+; ON32: addiu $25, $1, %lo(memset)
; ON32: jalr $25
; ON64: lui $1, %highest(callee)
@@ -47,8 +46,7 @@ define void @caller() {
; ON64: daddiu $1, $zero, %higher(memset)
; ON64: lui $2, %highest(memset)
; ON64: lui $2, %hi(memset)
-; ON64: daddiu $2, $zero, %lo(memset)
-; ON64: daddu $25, $1, $2
+; ON64: daddiu $25, $1, %lo(memset)
; ON64: jalr $25
call void @callee()
OpenPOWER on IntegriCloud