Fix bug in zero-store peephole pattern reported in pr11615.

The patch and test case were originally written by Mans Rullgard.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147024 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Akira Hatanaka 2011-12-21 00:31:10 +00:00
parent c79507a4dd
commit c7541c49a9
2 changed files with 27 additions and 4 deletions

View File

@ -1022,10 +1022,14 @@ let Predicates = [IsN64] in {
}
// peepholes
def : Pat<(store (i32 0), addr:$dst), (SW ZERO, addr:$dst)>,
Requires<[NotN64]>;
def : Pat<(store (i32 0), addr:$dst), (SW_P8 ZERO, addr:$dst)>,
Requires<[IsN64]>;
let Predicates = [NotN64] in {
def : Pat<(store_a (i32 0), addr:$dst), (SW ZERO, addr:$dst)>;
def : Pat<(store_u (i32 0), addr:$dst), (USW ZERO, addr:$dst)>;
}
let Predicates = [IsN64] in {
def : Pat<(store_a (i32 0), addr:$dst), (SW_P8 ZERO, addr:$dst)>;
def : Pat<(store_u (i32 0), addr:$dst), (USW_P8 ZERO, addr:$dst)>;
}
// brcond patterns
multiclass BrcondPats<RegisterClass RC, Instruction BEQOp, Instruction BNEOp,

View File

@ -0,0 +1,19 @@
; RUN: llc -march=mipsel < %s | FileCheck %s
%struct.unaligned = type <{ i32 }>
define void @zero_u(%struct.unaligned* nocapture %p) nounwind {
entry:
; CHECK: usw $zero
%x = getelementptr inbounds %struct.unaligned* %p, i32 0, i32 0
store i32 0, i32* %x, align 1
ret void
}
define void @zero_a(i32* nocapture %p) nounwind {
entry:
; CHECK: sw $zero
store i32 0, i32* %p, align 4
ret void
}