Use more conservative fences on RISC-V
authorPalmer Dabbelt <palmer@dabbelt.com>
Mon, 20 Mar 2017 16:43:17 +0000 (16:43 +0000)
committerPalmer Dabbelt <palmer@gcc.gnu.org>
Mon, 20 Mar 2017 16:43:17 +0000 (16:43 +0000)
The RISC-V memory model is still in the process of being formally
specified, so for now we're going to be safe and add the I/O bits to
userspace fences because there's no way to know if userspace is touching
memory-mapped I/O regions at compile time.

This will have no impact on existing microarchitecutres because they
treat all fences conservatively.

gcc/ChangeLog:

2017-03-17  Palmer Dabbelt  <palmer@dabbelt.com>

        * config/riscv/riscv.c (riscv_print_operand): Use "fence
        iorw,ow".
        * config/riscv/sync.mc (mem_thread_fence_1): Use "fence
        iorw,iorw".

From-SVN: r246282

gcc/ChangeLog
gcc/config/riscv/riscv.c
gcc/config/riscv/sync.md

index 90c8556..487a09b 100644 (file)
@@ -1,3 +1,10 @@
+2017-03-17  Palmer Dabbelt  <palmer@dabbelt.com>
+
+       * config/riscv/riscv.c (riscv_print_operand): Use "fence
+       iorw,ow".
+       * config/riscv/sync.mc (mem_thread_fence_1): Use "fence
+       iorw,iorw".
+
 2017-03-20  Marek Polacek  <polacek@redhat.com>
 
        PR sanitizer/80063
index 25cc803..fa93c3c 100644 (file)
@@ -2794,7 +2794,7 @@ riscv_print_operand (FILE *file, rtx op, int letter)
 
     case 'F':
       if (riscv_memmodel_needs_release_fence ((enum memmodel) INTVAL (op)))
-       fputs ("fence rw,w; ", file);
+       fputs ("fence iorw,ow; ", file);
       break;
 
     default:
index 09970b9..cde19e3 100644 (file)
@@ -53,7 +53,7 @@
        (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER))
    (match_operand:SI 1 "const_int_operand" "")] ;; model
   ""
-  "fence\trw,rw")
+  "fence\tiorw,iorw")
 
 ;; Atomic memory operations.