mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-16 08:29:43 +00:00
Sparc: When storing 0, use %g0 directly in the store instruction instead of
using two instructions (sethi and store). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183090 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
65ca7aa57d
commit
85cc972a06
@ -286,6 +286,10 @@ def : Pat<(truncstorei16 i64:$src, ADDRri:$addr), (STHri ADDRri:$addr, $src)>;
|
||||
def : Pat<(truncstorei32 i64:$src, ADDRrr:$addr), (STrr ADDRrr:$addr, $src)>;
|
||||
def : Pat<(truncstorei32 i64:$src, ADDRri:$addr), (STri ADDRri:$addr, $src)>;
|
||||
|
||||
// store 0, addr -> store %g0, addr
|
||||
def : Pat<(store (i64 0), ADDRrr:$dst), (STXrr ADDRrr:$dst, (i64 G0))>;
|
||||
def : Pat<(store (i64 0), ADDRri:$dst), (STXri ADDRri:$dst, (i64 G0))>;
|
||||
|
||||
} // Predicates = [Is64Bit]
|
||||
|
||||
|
||||
|
@ -815,4 +815,8 @@ def : Pat<(i32 (extloadi16 ADDRri:$src)), (LDUHri ADDRri:$src)>;
|
||||
def : Pat<(i32 (zextloadi1 ADDRrr:$src)), (LDUBrr ADDRrr:$src)>;
|
||||
def : Pat<(i32 (zextloadi1 ADDRri:$src)), (LDUBri ADDRri:$src)>;
|
||||
|
||||
// store 0, addr -> store %g0, addr
|
||||
def : Pat<(store (i32 0), ADDRrr:$dst), (STrr ADDRrr:$dst, (i32 G0))>;
|
||||
def : Pat<(store (i32 0), ADDRri:$dst), (STri ADDRri:$dst, (i32 G0))>;
|
||||
|
||||
include "SparcInstr64Bit.td"
|
||||
|
@ -262,3 +262,18 @@ define double @bitcast_f64_i64(i64 %x) {
|
||||
%y = bitcast i64 %x to double
|
||||
ret double %y
|
||||
}
|
||||
|
||||
; CHECK: store_zero:
|
||||
; CHECK: stx %g0, [%i0]
|
||||
; CHECK: stx %g0, [%i1+8]
|
||||
|
||||
; OPT: store_zero:
|
||||
; OPT: stx %g0, [%o0]
|
||||
; OPT: stx %g0, [%o1+8]
|
||||
define i64 @store_zero(i64* nocapture %a, i64* nocapture %b) {
|
||||
entry:
|
||||
store i64 0, i64* %a, align 8
|
||||
%0 = getelementptr inbounds i64* %b, i32 1
|
||||
store i64 0, i64* %0, align 8
|
||||
ret i64 0
|
||||
}
|
||||
|
@ -24,3 +24,15 @@ define i32 @test2(i32 %X, i32 %Y) {
|
||||
; CHECK: test2:
|
||||
; CHECK: xnor %o0, %o1, %o0
|
||||
}
|
||||
|
||||
; CHECK: store_zero:
|
||||
; CHECK: st %g0, [%o0]
|
||||
; CHECK: st %g0, [%o1+4]
|
||||
define i32 @store_zero(i32* %a, i32* %b) {
|
||||
entry:
|
||||
store i32 0, i32* %a, align 4
|
||||
%0 = getelementptr inbounds i32* %b, i32 1
|
||||
store i32 0, i32* %0, align 4
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user