mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Lower multiply-negate operation to mneg on AArch64
This patch pattern matches code such as- neg w8, w8 mul w8, w9, w8 to mneg w8, w8, w9 Review: http://reviews.llvm.org/D6754 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224706 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b646a4b0b8
commit
0c2590a266
@ -657,6 +657,10 @@ def : Pat<(i32 (ineg (mul GPR32:$Rn, GPR32:$Rm))),
|
||||
(MSUBWrrr GPR32:$Rn, GPR32:$Rm, WZR)>;
|
||||
def : Pat<(i64 (ineg (mul GPR64:$Rn, GPR64:$Rm))),
|
||||
(MSUBXrrr GPR64:$Rn, GPR64:$Rm, XZR)>;
|
||||
def : Pat<(i32 (mul (ineg GPR32:$Rn), GPR32:$Rm)),
|
||||
(MSUBWrrr GPR32:$Rn, GPR32:$Rm, WZR)>;
|
||||
def : Pat<(i64 (mul (ineg GPR64:$Rn), GPR64:$Rm)),
|
||||
(MSUBXrrr GPR64:$Rn, GPR64:$Rm, XZR)>;
|
||||
} // AddedComplexity = 7
|
||||
|
||||
let AddedComplexity = 5 in {
|
||||
|
@ -161,3 +161,18 @@ define i64 @test_umnegl(i32 %lhs, i32 %rhs) {
|
||||
; CHECK: umnegl {{x[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
|
||||
ret i64 %res
|
||||
}
|
||||
|
||||
@a = common global i32 0, align 4
|
||||
@b = common global i32 0, align 4
|
||||
@c = common global i32 0, align 4
|
||||
|
||||
define void @test_mneg(){
|
||||
; CHECK-LABEL: test_mneg:
|
||||
%1 = load i32* @a, align 4
|
||||
%2 = load i32* @b, align 4
|
||||
%3 = sub i32 0, %1
|
||||
%4 = mul i32 %2, %3
|
||||
store i32 %4, i32* @c, align 4
|
||||
; CHECK: mneg {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user