diff options
author | Reed Kotler <rkotler@mips.com> | 2013-10-04 22:01:40 +0000 |
---|---|---|
committer | Reed Kotler <rkotler@mips.com> | 2013-10-04 22:01:40 +0000 |
commit | 5404ed811de113a21c99366c43b1209f3ba40c62 (patch) | |
tree | 439138fea26521da41669d7d24f4aa37fcc39c6f | |
parent | ec2ac8985650a501b452b8fdb69d3124d7be5af9 (diff) | |
download | llvm-5404ed811de113a21c99366c43b1209f3ba40c62.tar.gz llvm-5404ed811de113a21c99366c43b1209f3ba40c62.tar.bz2 llvm-5404ed811de113a21c99366c43b1209f3ba40c62.tar.xz |
Support tblockaddr for static compilation in Mips16.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191986 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/Mips/Mips16InstrInfo.td | 5 | ||||
-rw-r--r-- | test/CodeGen/Mips/blockaddr.ll | 10 |
2 files changed, 14 insertions, 1 deletions
diff --git a/lib/Target/Mips/Mips16InstrInfo.td b/lib/Target/Mips/Mips16InstrInfo.td index c9840b3f27..95e6b05aee 100644 --- a/lib/Target/Mips/Mips16InstrInfo.td +++ b/lib/Target/Mips/Mips16InstrInfo.td @@ -1788,7 +1788,8 @@ def: Mips16Pat<(add CPU16Regs:$hi, (MipsLo tglobaladdr:$lo)), (AddiuRxRxImmX16 CPU16Regs:$hi, tglobaladdr:$lo)>; // hi/lo relocs - +def : Mips16Pat<(MipsHi tblockaddress:$in), + (SllX16 (LiRxImmX16 tblockaddress:$in), 16)>; def : Mips16Pat<(MipsHi tglobaladdr:$in), (SllX16 (LiRxImmX16 tglobaladdr:$in), 16)>; def : Mips16Pat<(MipsHi tjumptable:$in), @@ -1796,6 +1797,8 @@ def : Mips16Pat<(MipsHi tjumptable:$in), def : Mips16Pat<(MipsHi tglobaltlsaddr:$in), (SllX16 (LiRxImmX16 tglobaltlsaddr:$in), 16)>; +def : Mips16Pat<(MipsLo tblockaddress:$in), (LiRxImmX16 tblockaddress:$in)>; + // wrapper_pic class Wrapper16Pat<SDNode node, Instruction ADDiuOp, RegisterClass RC>: Mips16Pat<(MipsWrapper RC:$gp, node:$in), diff --git a/test/CodeGen/Mips/blockaddr.ll b/test/CodeGen/Mips/blockaddr.ll index 7de7fa6f6b..beab65f471 100644 --- a/test/CodeGen/Mips/blockaddr.ll +++ b/test/CodeGen/Mips/blockaddr.ll @@ -4,6 +4,8 @@ ; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n32 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-N32 ; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n64 -relocation-model=pic < %s | FileCheck %s -check-prefix=PIC-N64 ; RUN: llc -march=mips64el -mcpu=mips64r2 -mattr=n64 -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-N64 +; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips32 -mattr=+mips16 -soft-float -mips16-hard-float -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-MIPS16-1 +; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips32 -mattr=+mips16 -soft-float -mips16-hard-float -relocation-model=static < %s | FileCheck %s -check-prefix=STATIC-MIPS16-2 @reg = common global i8* null, align 4 @@ -36,6 +38,14 @@ entry: ; STATIC-N64: daddiu ${{[0-9]+}}, $[[R2]], %got_ofst($tmp[[T2]]) ; STATIC-N64: ld $[[R3:[0-9]+]], %got_page($tmp[[T3:[0-9]+]]) ; STATIC-N64: daddiu ${{[0-9]+}}, $[[R3]], %got_ofst($tmp[[T3]]) +; STATIC-MIPS16-1: .ent f +; STATIC-MIPS16-2: .ent f +; STATIC-MIPS16-1: li $[[R1_16:[0-9]+]], %hi($tmp[[TI_16:[0-9]+]]) +; STATIC-MIPS16-1: sll ${{[0-9]+}}, $[[R1_16]], 16 +; STATIC-MIPS16-2: li ${{[0-9]+}}, %lo($tmp{{[0-9]+}}) +; STATIC-MIPS16-1 jal dummy +; STATIC-MIPS16-2 jal dummy + define void @f() nounwind { entry: %call = tail call i8* @dummy(i8* blockaddress(@f, %baz)) |