@@ -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