mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
[PowerPC] Use subfic instruction for subtract from immediate
Provide a 64-bit pattern to use SUBFIC for subtracting from a 16-bit immediate. The corresponding pattern already exists for 32-bit integers. Committing on behalf of Hiroshi Inoue. Differential Revision: https://reviews.llvm.org/D29387 llvm-svn: 296144
This commit is contained in:
parent
6a343cafa0
commit
f87f345963
@ -1232,6 +1232,10 @@ def : Pat<(srl i64:$rS, i32:$rB),
|
||||
def : Pat<(shl i64:$rS, i32:$rB),
|
||||
(SLD $rS, $rB)>;
|
||||
|
||||
// SUBFIC
|
||||
def : Pat<(sub imm64SExt16:$imm, i64:$in),
|
||||
(SUBFIC8 $in, imm:$imm)>;
|
||||
|
||||
// SHL/SRL
|
||||
def : Pat<(shl i64:$in, (i32 imm:$imm)),
|
||||
(RLDICR $in, imm:$imm, (SHL64 imm:$imm))>;
|
||||
|
41
test/CodeGen/PowerPC/subtract_from_imm.ll
Normal file
41
test/CodeGen/PowerPC/subtract_from_imm.ll
Normal file
@ -0,0 +1,41 @@
|
||||
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s
|
||||
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s
|
||||
|
||||
; Make sure that the subfic is generated iff possible
|
||||
|
||||
define i64 @subtract_from_imm1(i64 %v) nounwind readnone {
|
||||
entry:
|
||||
; CHECK-LABEL: subtract_from_imm1
|
||||
; CHECK: subfic 3, 3, 32767
|
||||
; CHECK: blr
|
||||
%sub = sub i64 32767, %v
|
||||
ret i64 %sub
|
||||
}
|
||||
|
||||
define i64 @subtract_from_imm2(i64 %v) nounwind readnone {
|
||||
entry:
|
||||
; CHECK-LABEL: subtract_from_imm2
|
||||
; CHECK-NOT: subfic
|
||||
; CHECK: blr
|
||||
%sub = sub i64 32768, %v
|
||||
ret i64 %sub
|
||||
}
|
||||
|
||||
define i64 @subtract_from_imm3(i64 %v) nounwind readnone {
|
||||
entry:
|
||||
; CHECK-LABEL: subtract_from_imm3
|
||||
; CHECK: subfic 3, 3, -32768
|
||||
; CHECK: blr
|
||||
%sub = sub i64 -32768, %v
|
||||
ret i64 %sub
|
||||
}
|
||||
|
||||
define i64 @subtract_from_imm4(i64 %v) nounwind readnone {
|
||||
entry:
|
||||
; CHECK-LABEL: subtract_from_imm4
|
||||
; CHECK-NOT: subfic
|
||||
; CHECK: blr
|
||||
%sub = sub i64 -32769, %v
|
||||
ret i64 %sub
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user