[llvm] 75d43d3 - [ARM] Accept two-register form of vnmul
Oliver Stannard via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 13 07:16:56 PST 2023
Author: Jirui Wu
Date: 2023-01-13T15:16:41Z
New Revision: 75d43d383450def4d2e373ddc9cdd829302b2bff
URL: https://github.com/llvm/llvm-project/commit/75d43d383450def4d2e373ddc9cdd829302b2bff
DIFF: https://github.com/llvm/llvm-project/commit/75d43d383450def4d2e373ddc9cdd829302b2bff.diff
LOG: [ARM] Accept two-register form of vnmul
The previous vnmul only accepts three registers. It should accept either
two or three registers as vmul does.
Differential Revision: https://reviews.llvm.org/D141405
Added:
Modified:
llvm/lib/Target/ARM/ARMInstrVFP.td
llvm/test/MC/ARM/fullfp16.s
llvm/test/MC/ARM/simple-fp-encoding.s
llvm/test/MC/Disassembler/ARM/fp-encoding.txt
llvm/test/MC/Disassembler/ARM/fullfp16-arm.txt
llvm/test/MC/Disassembler/ARM/fullfp16-thumb.txt
Removed:
################################################################################
diff --git a/llvm/lib/Target/ARM/ARMInstrVFP.td b/llvm/lib/Target/ARM/ARMInstrVFP.td
index 8be35c81420b0..c1fecf3673a0b 100644
--- a/llvm/lib/Target/ARM/ARMInstrVFP.td
+++ b/llvm/lib/Target/ARM/ARMInstrVFP.td
@@ -496,12 +496,14 @@ def VMULH : AHbI<0b11100, 0b10, 0, 0,
[(set (f16 HPR:$Sd), (fmul (f16 HPR:$Sn), (f16 HPR:$Sm)))]>,
Sched<[WriteFPMUL32, ReadFPMUL, ReadFPMUL]>;
+let TwoOperandAliasConstraint = "$Dn = $Dd" in
def VNMULD : ADbI<0b11100, 0b10, 1, 0,
(outs DPR:$Dd), (ins DPR:$Dn, DPR:$Dm),
IIC_fpMUL64, "vnmul", ".f64\t$Dd, $Dn, $Dm",
[(set DPR:$Dd, (fneg (fmul DPR:$Dn, (f64 DPR:$Dm))))]>,
Sched<[WriteFPMUL64, ReadFPMUL, ReadFPMUL]>;
+let TwoOperandAliasConstraint = "$Sn = $Sd" in
def VNMULS : ASbI<0b11100, 0b10, 1, 0,
(outs SPR:$Sd), (ins SPR:$Sn, SPR:$Sm),
IIC_fpMUL32, "vnmul", ".f32\t$Sd, $Sn, $Sm",
@@ -512,6 +514,7 @@ def VNMULS : ASbI<0b11100, 0b10, 1, 0,
let D = VFPNeonA8Domain;
}
+let TwoOperandAliasConstraint = "$Sn = $Sd" in
def VNMULH : AHbI<0b11100, 0b10, 1, 0,
(outs HPR:$Sd), (ins HPR:$Sn, HPR:$Sm),
IIC_fpMUL16, "vnmul", ".f16\t$Sd, $Sn, $Sm",
diff --git a/llvm/test/MC/ARM/fullfp16.s b/llvm/test/MC/ARM/fullfp16.s
index d9149ee150e7d..fcb5d83845663 100644
--- a/llvm/test/MC/ARM/fullfp16.s
+++ b/llvm/test/MC/ARM/fullfp16.s
@@ -23,6 +23,10 @@
@ ARM: vnmul.f16 s0, s1, s0 @ encoding: [0xc0,0x09,0x20,0xee]
@ THUMB: vnmul.f16 s0, s1, s0 @ encoding: [0x20,0xee,0xc0,0x09]
+ vnmul.f16 s0, s1
+@ ARM: vnmul.f16 s0, s0, s1 @ encoding: [0x60,0x09,0x20,0xee]
+@ THUMB: vnmul.f16 s0, s0, s1 @ encoding: [0x20,0xee,0x60,0x09]
+
vmla.f16 s1, s2, s0
@ ARM: vmla.f16 s1, s2, s0 @ encoding: [0x00,0x09,0x41,0xee]
@ THUMB: vmla.f16 s1, s2, s0 @ encoding: [0x41,0xee,0x00,0x09]
diff --git a/llvm/test/MC/ARM/simple-fp-encoding.s b/llvm/test/MC/ARM/simple-fp-encoding.s
index 74babf9a699a6..22bc30498fc70 100644
--- a/llvm/test/MC/ARM/simple-fp-encoding.s
+++ b/llvm/test/MC/ARM/simple-fp-encoding.s
@@ -34,9 +34,13 @@
vnmul.f64 d16, d17, d16
vnmul.f32 s0, s1, s0
+ vnmul.f64 d0, d1
+ vnmul.f32 s0, s1
@ CHECK: vnmul.f64 d16, d17, d16 @ encoding: [0xe0,0x0b,0x61,0xee]
@ CHECK: vnmul.f32 s0, s1, s0 @ encoding: [0xc0,0x0a,0x20,0xee]
+@ CHECK: vnmul.f64 d0, d0, d1 @ encoding: [0x41,0x0b,0x20,0xee]
+@ CHECK: vnmul.f32 s0, s0, s1 @ encoding: [0x60,0x0a,0x20,0xee]
vcmp.f64 d17, d16
vcmp.f32 s1, s0
diff --git a/llvm/test/MC/Disassembler/ARM/fp-encoding.txt b/llvm/test/MC/Disassembler/ARM/fp-encoding.txt
index 196bf44d4af3d..beccce813e380 100644
--- a/llvm/test/MC/Disassembler/ARM/fp-encoding.txt
+++ b/llvm/test/MC/Disassembler/ARM/fp-encoding.txt
@@ -27,9 +27,15 @@
0xe0 0x0b 0x61 0xee
# CHECK: vnmul.f64 d16, d17, d16
+0x41 0x0b 0x20 0xee
+# CHECK: vnmul.f64 d0, d0, d1
+
0xc0 0x0a 0x20 0xee
# CHECK: vnmul.f32 s0, s1, s0
+0x60 0x0a 0x20 0xee
+# CHECK: vnmul.f32 s0, s0, s1
+
0xe0 0x1b 0xf4 0xee
# CHECK: vcmpe.f64 d17, d16
diff --git a/llvm/test/MC/Disassembler/ARM/fullfp16-arm.txt b/llvm/test/MC/Disassembler/ARM/fullfp16-arm.txt
index 8a7ce68933eb3..c40a374c5af29 100644
--- a/llvm/test/MC/Disassembler/ARM/fullfp16-arm.txt
+++ b/llvm/test/MC/Disassembler/ARM/fullfp16-arm.txt
@@ -15,6 +15,9 @@
# CHECK: vnmul.f16 s0, s1, s0
[0xc0,0x09,0x20,0xee]
+# CHECK: vnmul.f16 s0, s0, s1
+[0x60,0x09,0x20,0xee]
+
# CHECK: vmla.f16 s1, s2, s0
[0x00,0x09,0x41,0xee]
diff --git a/llvm/test/MC/Disassembler/ARM/fullfp16-thumb.txt b/llvm/test/MC/Disassembler/ARM/fullfp16-thumb.txt
index 4511720514363..c7d440631ee40 100644
--- a/llvm/test/MC/Disassembler/ARM/fullfp16-thumb.txt
+++ b/llvm/test/MC/Disassembler/ARM/fullfp16-thumb.txt
@@ -15,6 +15,9 @@
# CHECK: vnmul.f16 s0, s1, s0
[0x20,0xee,0xc0,0x09]
+# CHECK: vnmul.f16 s0, s0, s1
+[0x20,0xee,0x60,0x09]
+
# CHECK: vmla.f16 s1, s2, s0
[0x41,0xee,0x00,0x09]
More information about the llvm-commits
mailing list