@@ -1619,14 +1619,16 @@ multiclass F_ATOMIC_2_imp<ValueType ptrT, NVPTXRegClass ptrclass,
1619
1619
ValueType regT, NVPTXRegClass regclass,
1620
1620
string SpaceStr, string TypeStr, string OpcStr, PatFrag IntOp,
1621
1621
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
+ }
1630
1632
}
1631
1633
multiclass F_ATOMIC_2<ValueType regT, NVPTXRegClass regclass, string SpaceStr, string TypeStr,
1632
1634
string OpcStr, PatFrag IntOp, Operand IMMType, SDNode IMM,
@@ -1642,15 +1644,17 @@ multiclass F_ATOMIC_2_NEG_imp<ValueType ptrT, NVPTXRegClass ptrclass,
1642
1644
ValueType regT, NVPTXRegClass regclass,
1643
1645
string SpaceStr, string TypeStr, string OpcStr, PatFrag IntOp,
1644
1646
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
+ }
1654
1658
}
1655
1659
multiclass F_ATOMIC_2_NEG<ValueType regT, NVPTXRegClass regclass, string SpaceStr,
1656
1660
string TypeStr, string OpcStr, PatFrag IntOp, list<Predicate> Pred = []> {
@@ -1665,29 +1669,31 @@ multiclass F_ATOMIC_3_imp<ValueType ptrT, NVPTXRegClass ptrclass,
1665
1669
ValueType regT, NVPTXRegClass regclass,
1666
1670
string SpaceStr, string TypeStr, string OpcStr, PatFrag IntOp,
1667
1671
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
+ }
1691
1697
}
1692
1698
multiclass F_ATOMIC_3<ValueType regT, NVPTXRegClass regclass, string SpaceStr, string TypeStr,
1693
1699
string OpcStr, PatFrag IntOp, Operand IMMType, list<Predicate> Pred = []> {
0 commit comments