@@ -1619,14 +1619,16 @@ multiclass F_ATOMIC_2_imp<ValueType ptrT, NVPTXRegClass ptrclass,
16191619  ValueType regT, NVPTXRegClass regclass,
16201620  string SpaceStr, string TypeStr, string OpcStr, PatFrag IntOp,
16211621  Operand IMMType, SDNode IMM, list<Predicate> Pred> {
1622-   def reg : NVPTXInst<(outs regclass:$dst), (ins ptrclass:$addr, regclass:$b),
1623-     !strconcat("atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b;"),
1624-     [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), (regT regclass:$b)))]>,
1625-   Requires<Pred>;
1626-   def imm : NVPTXInst<(outs regclass:$dst), (ins ptrclass:$addr, IMMType:$b),
1627-     !strconcat("atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b;", ""),
1628-     [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), IMM:$b))]>,
1629-   Requires<!if(!or(!eq(TypeStr, ".f16"), !eq(TypeStr, ".bf16")), [Predicate<"false">], Pred)>;
1622+   let mayLoad = 1, mayStore = 1, hasSideEffects = 1 in {
1623+     def reg : NVPTXInst<(outs regclass:$dst), (ins ptrclass:$addr, regclass:$b),
1624+       !strconcat("atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b;"),
1625+       [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), (regT regclass:$b)))]>,
1626+     Requires<Pred>;
1627+     def imm : NVPTXInst<(outs regclass:$dst), (ins ptrclass:$addr, IMMType:$b),
1628+       !strconcat("atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b;", ""),
1629+       [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), IMM:$b))]>,
1630+     Requires<!if(!or(!eq(TypeStr, ".f16"), !eq(TypeStr, ".bf16")), [Predicate<"false">], Pred)>;
1631+   }
16301632}
16311633multiclass F_ATOMIC_2<ValueType regT, NVPTXRegClass regclass, string SpaceStr, string TypeStr,
16321634  string OpcStr, PatFrag IntOp, Operand IMMType, SDNode IMM,
@@ -1642,15 +1644,17 @@ multiclass F_ATOMIC_2_NEG_imp<ValueType ptrT, NVPTXRegClass ptrclass,
16421644  ValueType regT, NVPTXRegClass regclass,
16431645  string SpaceStr, string TypeStr, string OpcStr, PatFrag IntOp,
16441646  list<Predicate> Pred> {
1645-   def reg : NVPTXInst<(outs regclass:$dst), (ins ptrclass:$addr, regclass:$b),
1646-     !strconcat(
1647-       "{{ \n\t",
1648-       ".reg \t.s", TypeStr, " temp; \n\t",
1649-       "neg.s", TypeStr, " \ttemp, $b; \n\t",
1650-       "atom", SpaceStr, OpcStr, ".u", TypeStr, " \t$dst, [$addr], temp; \n\t",
1651-       "}}"),
1652-     [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), (regT regclass:$b)))]>,
1653-   Requires<Pred>;
1647+   let mayLoad = 1, mayStore = 1, hasSideEffects = 1 in {
1648+     def reg : NVPTXInst<(outs regclass:$dst), (ins ptrclass:$addr, regclass:$b),
1649+       !strconcat(
1650+         "{{ \n\t",
1651+         ".reg \t.s", TypeStr, " temp; \n\t",
1652+         "neg.s", TypeStr, " \ttemp, $b; \n\t",
1653+         "atom", SpaceStr, OpcStr, ".u", TypeStr, " \t$dst, [$addr], temp; \n\t",
1654+         "}}"),
1655+       [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), (regT regclass:$b)))]>,
1656+     Requires<Pred>;
1657+   }
16541658}
16551659multiclass F_ATOMIC_2_NEG<ValueType regT, NVPTXRegClass regclass, string SpaceStr,
16561660  string TypeStr, string OpcStr, PatFrag IntOp, list<Predicate> Pred = []> {
@@ -1665,29 +1669,31 @@ multiclass F_ATOMIC_3_imp<ValueType ptrT, NVPTXRegClass ptrclass,
16651669  ValueType regT, NVPTXRegClass regclass,
16661670  string SpaceStr, string TypeStr, string OpcStr, PatFrag IntOp,
16671671  Operand IMMType, list<Predicate> Pred> {
1668-   def reg : NVPTXInst<(outs regclass:$dst),
1669-     (ins ptrclass:$addr, regclass:$b, regclass:$c),
1670-     !strconcat("atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b, $c;"),
1671-     [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), (regT regclass:$b), (regT regclass:$c)))]>,
1672-   Requires<Pred>;
1673- 
1674-   def imm1 : NVPTXInst<(outs regclass:$dst),
1675-     (ins ptrclass:$addr, IMMType:$b, regclass:$c),
1676-     !strconcat("atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b, $c;"),
1677-     [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), imm:$b, (regT regclass:$c)))]>,
1678-   Requires<Pred>;
1679- 
1680-   def imm2 : NVPTXInst<(outs regclass:$dst),
1681-     (ins ptrclass:$addr, regclass:$b, IMMType:$c),
1682-     !strconcat("atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b, $c;", ""),
1683-     [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), (regT regclass:$b), imm:$c))]>,
1684-   Requires<Pred>;
1685- 
1686-   def imm3 : NVPTXInst<(outs regclass:$dst),
1687-     (ins ptrclass:$addr, IMMType:$b, IMMType:$c),
1688-     !strconcat("atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b, $c;"),
1689-     [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), imm:$b, imm:$c))]>,
1690-   Requires<Pred>;
1672+   let mayLoad = 1, mayStore = 1, hasSideEffects = 1 in {
1673+     def reg : NVPTXInst<(outs regclass:$dst),
1674+       (ins ptrclass:$addr, regclass:$b, regclass:$c),
1675+       !strconcat("atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b, $c;"),
1676+       [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), (regT regclass:$b), (regT regclass:$c)))]>,
1677+     Requires<Pred>;
1678+ 
1679+     def imm1 : NVPTXInst<(outs regclass:$dst),
1680+       (ins ptrclass:$addr, IMMType:$b, regclass:$c),
1681+       !strconcat("atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b, $c;"),
1682+       [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), imm:$b, (regT regclass:$c)))]>,
1683+     Requires<Pred>;
1684+ 
1685+     def imm2 : NVPTXInst<(outs regclass:$dst),
1686+       (ins ptrclass:$addr, regclass:$b, IMMType:$c),
1687+       !strconcat("atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b, $c;", ""),
1688+       [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), (regT regclass:$b), imm:$c))]>,
1689+     Requires<Pred>;
1690+ 
1691+     def imm3 : NVPTXInst<(outs regclass:$dst),
1692+       (ins ptrclass:$addr, IMMType:$b, IMMType:$c),
1693+       !strconcat("atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b, $c;"),
1694+       [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), imm:$b, imm:$c))]>,
1695+     Requires<Pred>;
1696+   }
16911697}
16921698multiclass F_ATOMIC_3<ValueType regT, NVPTXRegClass regclass, string SpaceStr, string TypeStr,
16931699  string OpcStr, PatFrag IntOp, Operand IMMType, list<Predicate> Pred = []> {
0 commit comments