forked from OSchip/llvm-project
Let rotr and bswap be handled by expansion for Mips16 since we don't
have native instructions for this. llvm-svn: 192207
This commit is contained in:
parent
64d2a2853b
commit
97309af4f4
|
@ -145,6 +145,11 @@ Mips16TargetLowering::Mips16TargetLowering(MipsTargetMachine &TM)
|
|||
setOperationAction(ISD::ATOMIC_LOAD_UMIN, MVT::i32, Expand);
|
||||
setOperationAction(ISD::ATOMIC_LOAD_UMAX, MVT::i32, Expand);
|
||||
|
||||
setOperationAction(ISD::ROTR, MVT::i32, Expand);
|
||||
setOperationAction(ISD::ROTR, MVT::i64, Expand);
|
||||
setOperationAction(ISD::BSWAP, MVT::i32, Expand);
|
||||
setOperationAction(ISD::BSWAP, MVT::i64, Expand);
|
||||
|
||||
computeRegisterProperties();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
; RUN: llc < %s -march=mipsel -mcpu=mips32r2 | FileCheck %s -check-prefix=MIPS32
|
||||
; RUN: llc < %s -march=mips64el -mcpu=mips64r2 | FileCheck %s -check-prefix=MIPS64
|
||||
; RUN: llc < %s -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips32r2 -mattr=+mips16 -soft-float -mips16-hard-float | FileCheck %s -check-prefix=mips16
|
||||
|
||||
define i32 @bswap32(i32 %x) nounwind readnone {
|
||||
entry:
|
||||
; MIPS32-LABEL: bswap32:
|
||||
; MIPS32: wsbh $[[R0:[0-9]+]]
|
||||
; MIPS32: rotr ${{[0-9]+}}, $[[R0]], 16
|
||||
; mips16: .ent bswap32
|
||||
%or.3 = call i32 @llvm.bswap.i32(i32 %x)
|
||||
ret i32 %or.3
|
||||
}
|
||||
|
@ -15,6 +17,7 @@ entry:
|
|||
; MIPS64-LABEL: bswap64:
|
||||
; MIPS64: dsbh $[[R0:[0-9]+]]
|
||||
; MIPS64: dshd ${{[0-9]+}}, $[[R0]]
|
||||
; mips16: .ent bswap64
|
||||
%or.7 = call i64 @llvm.bswap.i64(i64 %x)
|
||||
ret i64 %or.7
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
; RUN: llc -march=mips -mcpu=mips32r2 < %s | FileCheck %s
|
||||
; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips32r2 -mattr=+mips16 -soft-float -mips16-hard-float < %s | FileCheck %s -check-prefix=mips16
|
||||
|
||||
; CHECK: rotrv $2, $4
|
||||
; mips16: .ent rot0
|
||||
define i32 @rot0(i32 %a, i32 %b) nounwind readnone {
|
||||
entry:
|
||||
%shl = shl i32 %a, %b
|
||||
|
@ -11,6 +13,7 @@ entry:
|
|||
}
|
||||
|
||||
; CHECK: rotr $2, $4, 22
|
||||
; mips16: .ent rot1
|
||||
define i32 @rot1(i32 %a) nounwind readnone {
|
||||
entry:
|
||||
%shl = shl i32 %a, 10
|
||||
|
@ -20,6 +23,7 @@ entry:
|
|||
}
|
||||
|
||||
; CHECK: rotrv $2, $4, $5
|
||||
; mips16: .ent rot2
|
||||
define i32 @rot2(i32 %a, i32 %b) nounwind readnone {
|
||||
entry:
|
||||
%shr = lshr i32 %a, %b
|
||||
|
@ -30,6 +34,7 @@ entry:
|
|||
}
|
||||
|
||||
; CHECK: rotr $2, $4, 10
|
||||
; mips16: .ent rot3
|
||||
define i32 @rot3(i32 %a) nounwind readnone {
|
||||
entry:
|
||||
%shr = lshr i32 %a, 10
|
||||
|
|
Loading…
Reference in New Issue