[RISCV] Define sfence.vma InstAliases to match the GNU RISC-V tools
authorAlex Bradbury <asb@lowrisc.org>
Wed, 13 Dec 2017 12:46:55 +0000 (12:46 +0000)
committerAlex Bradbury <asb@lowrisc.org>
Wed, 13 Dec 2017 12:46:55 +0000 (12:46 +0000)
Unfortunately these aren't defined explicitly in the privileged spec, but the
GNU assembler does accept `sfence.vma` and `sfence.vma rs` as well as the
usual `sfence.vma rs, rt`.

llvm-svn: 320575

llvm/lib/Target/RISCV/RISCVInstrInfo.td
llvm/test/MC/RISCV/priv-invalid.s
llvm/test/MC/RISCV/rvi-aliases-valid.s

index fa0af15549b74b24d974975bd90863478d6934a6..1aae2f39dbdd74f9f341b09ea2f91203df8f9a0e 100644 (file)
@@ -459,6 +459,9 @@ def : InstAlias<"csrwi $csr, $imm", (CSRRWI X0, uimm12:$csr, uimm5:$imm)>;
 def : InstAlias<"csrsi $csr, $imm", (CSRRSI X0, uimm12:$csr, uimm5:$imm)>;
 def : InstAlias<"csrci $csr, $imm", (CSRRCI X0, uimm12:$csr, uimm5:$imm)>;
 
+def : InstAlias<"sfence.vma",     (SFENCE_VMA      X0, X0)>;
+def : InstAlias<"sfence.vma $rs", (SFENCE_VMA GPR:$rs, X0)>;
+
 //===----------------------------------------------------------------------===//
 // Pseudo-instructions and codegen patterns
 //
index 96ce291bf6dae5916997b8c0cce826a7c5726571..8f421e471f9342390257bc670bc90d37e47d906b 100644 (file)
@@ -2,6 +2,6 @@
 
 mret 0x10 # CHECK: :[[@LINE]]:6: error: invalid operand for instruction
 
-sfence.vma zero # CHECK: :[[@LINE]]:1: error: too few operands for instruction
+sfence.vma zero, a1, a2 # CHECK: :[[@LINE]]:22: error: invalid operand for instruction
 
 sfence.vma a0, 0x10 # CHECK: :[[@LINE]]:16: error: invalid operand for instruction
index 8d5edf793b11c33d062e77d53237460b77df8088..08d0f8c6590f941351db8357ca73028d17271273 100644 (file)
@@ -136,3 +136,10 @@ csrsi 0xfff, 0x10
 # CHECK-INST: csrrci zero, 320, 17
 # CHECK-ALIAS: csrci 320, 17
 csrci 0x140, 0x11
+
+# CHECK-INST: sfence.vma zero, zero
+# CHECK-ALIAS: sfence.vma
+sfence.vma
+# CHECK-INST: sfence.vma a0, zero
+# CHECK-ALIAS: sfence.vma a0
+sfence.vma a0