[X86] Ensure multiclass ATOMIC_RMW_BINOP is tagged as MayLoad and MayStore
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 27 Apr 2021 13:11:05 +0000 (14:11 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Tue, 27 Apr 2021 13:11:22 +0000 (14:11 +0100)
These are RMW ops and should be tagged as both loads and stores.

llvm/lib/Target/X86/X86InstrCompiler.td

index e9dedf1..8cd47ab 100644 (file)
@@ -934,8 +934,8 @@ defm LCMPXCHG : LCMPXCHG_BinOp<0xB0, 0xB1, MRMDestMem, "cmpxchg", X86cas>;
 // Atomic exchange and add
 multiclass ATOMIC_RMW_BINOP<bits<8> opc8, bits<8> opc, string mnemonic,
                             string frag> {
-  let Constraints = "$val = $dst", Defs = [EFLAGS], isCodeGenOnly = 1,
-      SchedRW = [WriteALURMW] in {
+  let Constraints = "$val = $dst", Defs = [EFLAGS], mayLoad = 1, mayStore = 1,
+      isCodeGenOnly = 1, SchedRW = [WriteALURMW] in {
     def NAME#8  : I<opc8, MRMSrcMem, (outs GR8:$dst),
                     (ins GR8:$val, i8mem:$ptr),
                     !strconcat(mnemonic, "{b}\t{$val, $ptr|$ptr, $val}"),