@@ -1982,93 +1982,72 @@ class ATOMIC_SHARED_CHK <dag ops, dag frag>
19821982class ATOMIC_GENERIC_CHK <dag ops, dag frag>
19831983 : PatFrag<ops, frag, AS_match.generic>;
19841984
1985- multiclass F_ATOMIC_2_imp<ValueType ptrT, NVPTXRegClass ptrclass,
1985+ multiclass F_ATOMIC_2<
19861986 ValueType regT, NVPTXRegClass regclass,
19871987 string SpaceStr, string TypeStr, string OpcStr, PatFrag IntOp,
1988- Operand IMMType, SDNode IMM, list<Predicate> Pred> {
1988+ Operand IMMType, SDNode IMM, list<Predicate> Pred = [] > {
19891989 let mayLoad = 1, mayStore = 1, hasSideEffects = 1 in {
1990- def reg : NVPTXInst<(outs regclass:$dst), (ins ptrclass :$addr, regclass:$b),
1991- !strconcat( "atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b;") ,
1992- [(set (regT regclass:$dst), (IntOp (ptrT ptrclass :$addr) , (regT regclass:$b)))]>,
1990+ def r : NVPTXInst<(outs regclass:$dst), (ins ADDR :$addr, regclass:$b),
1991+ "atom" # SpaceStr # OpcStr # TypeStr # " \t$dst, [$addr], $b;",
1992+ [(set (regT regclass:$dst), (IntOp addr :$addr, (regT regclass:$b)))]>,
19931993 Requires<Pred>;
1994- def imm : NVPTXInst<(outs regclass:$dst), (ins ptrclass:$addr, IMMType:$b),
1995- !strconcat("atom", SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b;", ""),
1996- [(set (regT regclass:$dst), (IntOp (ptrT ptrclass:$addr), IMM:$b))]>,
1997- Requires<!if(!or(!eq(TypeStr, ".f16"), !eq(TypeStr, ".bf16")), [Predicate<"false">], Pred)>;
1994+ if !not(!or(!eq(TypeStr, ".f16"), !eq(TypeStr, ".bf16"))) then
1995+ def i : NVPTXInst<(outs regclass:$dst), (ins ADDR:$addr, IMMType:$b),
1996+ "atom" # SpaceStr # OpcStr # TypeStr # " \t$dst, [$addr], $b;",
1997+ [(set (regT regclass:$dst), (IntOp addr:$addr, IMM:$b))]>,
1998+ Requires<Pred>;
19981999 }
19992000}
2000- multiclass F_ATOMIC_2<ValueType regT, NVPTXRegClass regclass, string SpaceStr, string TypeStr,
2001- string OpcStr, PatFrag IntOp, Operand IMMType, SDNode IMM,
2002- list<Predicate> Pred = []> {
2003- defm p32 : F_ATOMIC_2_imp<i32, Int32Regs, regT, regclass, SpaceStr, TypeStr, OpcStr,
2004- IntOp, IMMType, IMM, Pred>;
2005- defm p64 : F_ATOMIC_2_imp<i64, Int64Regs, regT, regclass, SpaceStr, TypeStr, OpcStr,
2006- IntOp, IMMType, IMM, Pred>;
2007- }
20082001
20092002// has 2 operands, neg the second one
2010- multiclass F_ATOMIC_2_NEG_imp<ValueType ptrT, NVPTXRegClass ptrclass,
2003+ multiclass F_ATOMIC_2_NEG<
20112004 ValueType regT, NVPTXRegClass regclass,
20122005 string SpaceStr, string TypeStr, string OpcStr, PatFrag IntOp,
2013- list<Predicate> Pred> {
2006+ list<Predicate> Pred = [] > {
20142007 let mayLoad = 1, mayStore = 1, hasSideEffects = 1 in {
2015- def reg : NVPTXInst<(outs regclass:$dst), (ins ptrclass :$addr, regclass:$b),
2008+ def reg : NVPTXInst<(outs regclass:$dst), (ins ADDR :$addr, regclass:$b),
20162009 !strconcat(
20172010 "{{ \n\t",
20182011 ".reg \t.s", TypeStr, " temp; \n\t",
20192012 "neg.s", TypeStr, " \ttemp, $b; \n\t",
20202013 "atom", SpaceStr, OpcStr, ".u", TypeStr, " \t$dst, [$addr], temp; \n\t",
20212014 "}}"),
2022- [(set (regT regclass:$dst), (IntOp (ptrT ptrclass :$addr) , (regT regclass:$b)))]>,
2015+ [(set (regT regclass:$dst), (IntOp addr :$addr, (regT regclass:$b)))]>,
20232016 Requires<Pred>;
20242017 }
20252018}
2026- multiclass F_ATOMIC_2_NEG<ValueType regT, NVPTXRegClass regclass, string SpaceStr,
2027- string TypeStr, string OpcStr, PatFrag IntOp, list<Predicate> Pred = []> {
2028- defm p32: F_ATOMIC_2_NEG_imp<i32, Int32Regs, regT, regclass, SpaceStr, TypeStr, OpcStr,
2029- IntOp, Pred> ;
2030- defm p64: F_ATOMIC_2_NEG_imp<i64, Int64Regs, regT, regclass, SpaceStr, TypeStr, OpcStr,
2031- IntOp, Pred> ;
2032- }
20332019
20342020// has 3 operands
2035- multiclass F_ATOMIC_3_imp<ValueType ptrT, NVPTXRegClass ptrclass,
2021+ multiclass F_ATOMIC_3<
20362022 ValueType regT, NVPTXRegClass regclass, string SemStr,
20372023 string SpaceStr, string TypeStr, string OpcStr, PatFrag IntOp,
2038- Operand IMMType, list<Predicate> Pred> {
2024+ Operand IMMType, list<Predicate> Pred = [] > {
20392025 let mayLoad = 1, mayStore = 1, hasSideEffects = 1 in {
2040- def reg : NVPTXInst<(outs regclass:$dst),
2041- (ins ptrclass :$addr, regclass:$b, regclass:$c),
2042- !strconcat( "atom", SemStr, SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b, $c;") ,
2043- [(set (regT regclass:$dst), (IntOp (ptrT ptrclass :$addr), ( regT regclass :$b), ( regT regclass :$c) ))]>,
2026+ def rr : NVPTXInst<(outs regclass:$dst),
2027+ (ins ADDR :$addr, regclass:$b, regclass:$c),
2028+ "atom" # SemStr # SpaceStr # OpcStr # TypeStr # " \t$dst, [$addr], $b, $c;",
2029+ [(set (regT regclass:$dst), (IntOp addr :$addr, regT:$b, regT:$c))]>,
20442030 Requires<Pred>;
20452031
2046- def imm1 : NVPTXInst<(outs regclass:$dst),
2047- (ins ptrclass :$addr, IMMType:$b, regclass:$c),
2048- !strconcat( "atom", SemStr, SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b, $c;") ,
2049- [(set (regT regclass:$dst), (IntOp (ptrT ptrclass :$addr) , imm:$b, ( regT regclass :$c) ))]>,
2032+ def ir : NVPTXInst<(outs regclass:$dst),
2033+ (ins ADDR :$addr, IMMType:$b, regclass:$c),
2034+ "atom" # SemStr # SpaceStr # OpcStr # TypeStr # " \t$dst, [$addr], $b, $c;",
2035+ [(set (regT regclass:$dst), (IntOp addr :$addr, imm:$b, regT:$c))]>,
20502036 Requires<Pred>;
20512037
2052- def imm2 : NVPTXInst<(outs regclass:$dst),
2053- (ins ptrclass :$addr, regclass:$b, IMMType:$c),
2054- !strconcat( "atom", SemStr, SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b, $c;", "") ,
2055- [(set (regT regclass:$dst), (IntOp (ptrT ptrclass :$addr), ( regT regclass :$b) , imm:$c))]>,
2038+ def ri : NVPTXInst<(outs regclass:$dst),
2039+ (ins ADDR :$addr, regclass:$b, IMMType:$c),
2040+ "atom" # SemStr # SpaceStr # OpcStr # TypeStr # " \t$dst, [$addr], $b, $c;",
2041+ [(set (regT regclass:$dst), (IntOp addr :$addr, regT:$b, imm:$c))]>,
20562042 Requires<Pred>;
20572043
2058- def imm3 : NVPTXInst<(outs regclass:$dst),
2059- (ins ptrclass :$addr, IMMType:$b, IMMType:$c),
2060- !strconcat( "atom", SemStr, SpaceStr, OpcStr, TypeStr, " \t$dst, [$addr], $b, $c;") ,
2061- [(set (regT regclass:$dst), (IntOp (ptrT ptrclass :$addr) , imm:$b, imm:$c))]>,
2044+ def ii : NVPTXInst<(outs regclass:$dst),
2045+ (ins ADDR :$addr, IMMType:$b, IMMType:$c),
2046+ "atom" # SemStr # SpaceStr # OpcStr # TypeStr # " \t$dst, [$addr], $b, $c;",
2047+ [(set (regT regclass:$dst), (IntOp addr :$addr, imm:$b, imm:$c))]>,
20622048 Requires<Pred>;
20632049 }
20642050}
2065- multiclass F_ATOMIC_3<ValueType regT, NVPTXRegClass regclass, string SemStr, string SpaceStr,
2066- string TypeStr, string OpcStr, PatFrag IntOp, Operand IMMType, list<Predicate> Pred = []> {
2067- defm p32 : F_ATOMIC_3_imp<i32, Int32Regs, regT, regclass, SemStr, SpaceStr, TypeStr,
2068- OpcStr, IntOp, IMMType, Pred>;
2069- defm p64 : F_ATOMIC_3_imp<i64, Int64Regs, regT, regclass, SemStr, SpaceStr, TypeStr,
2070- OpcStr, IntOp, IMMType, Pred>;
2071- }
20722051
20732052// atom_add
20742053
@@ -2540,27 +2519,15 @@ multiclass ATOM2P_impl<string AsmStr, Intrinsic Intr,
25402519 list<Predicate> Preds> {
25412520 let AddedComplexity = 1 in {
25422521 def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2543- (ins Int16Regs:$src, regclass:$b),
2544- (Intr i16:$src, regT:$b)>;
2545- def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2546- (ins Int32Regs:$src, regclass:$b),
2547- (Intr i32:$src, regT:$b)>;
2548- def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2549- (ins Int64Regs:$src, regclass:$b),
2550- (Intr i64:$src, regT:$b)>;
2522+ (ins ADDR:$src, regclass:$b),
2523+ (Intr addr:$src, regT:$b)>;
25512524 }
25522525 // tablegen can't infer argument types from Intrinsic (though it can
25532526 // from Instruction) so we have to enforce specific type on
25542527 // immediates via explicit cast to ImmTy.
25552528 def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2556- (ins Int16Regs:$src, ImmType:$b),
2557- (Intr i16:$src, (ImmTy Imm:$b))>;
2558- def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2559- (ins Int32Regs:$src, ImmType:$b),
2560- (Intr i32:$src, (ImmTy Imm:$b))>;
2561- def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2562- (ins Int64Regs:$src, ImmType:$b),
2563- (Intr i64:$src, (ImmTy Imm:$b))>;
2529+ (ins ADDR:$src, ImmType:$b),
2530+ (Intr addr:$src, (ImmTy Imm:$b))>;
25642531}
25652532
25662533multiclass ATOM3P_impl<string AsmStr, Intrinsic Intr,
@@ -2570,32 +2537,20 @@ multiclass ATOM3P_impl<string AsmStr, Intrinsic Intr,
25702537 // Variants for register/immediate permutations of $b and $c
25712538 let AddedComplexity = 2 in {
25722539 def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2573- (ins Int32Regs:$src, regclass:$b, regclass:$c),
2574- (Intr i32:$src, regT:$b, regT:$c)>;
2575- def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2576- (ins Int64Regs:$src, regclass:$b, regclass:$c),
2577- (Intr i64:$src, regT:$b, regT:$c)>;
2540+ (ins ADDR:$src, regclass:$b, regclass:$c),
2541+ (Intr addr:$src, regT:$b, regT:$c)>;
25782542 }
25792543 let AddedComplexity = 1 in {
25802544 def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2581- (ins Int32Regs :$src, ImmType:$b, regclass:$c),
2582- (Intr i32 :$src, (ImmTy Imm:$b), regT:$c)>;
2545+ (ins ADDR :$src, ImmType:$b, regclass:$c),
2546+ (Intr addr :$src, (ImmTy Imm:$b), regT:$c)>;
25832547 def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2584- (ins Int64Regs:$src, ImmType:$b, regclass:$c),
2585- (Intr i64:$src, (ImmTy Imm:$b), regT:$c)>;
2586- def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2587- (ins Int32Regs:$src, regclass:$b, ImmType:$c),
2588- (Intr i32:$src, regT:$b, (ImmTy Imm:$c))>;
2589- def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2590- (ins Int64Regs:$src, regclass:$b, ImmType:$c),
2591- (Intr i64:$src, regT:$b, (ImmTy Imm:$c))>;
2548+ (ins ADDR:$src, regclass:$b, ImmType:$c),
2549+ (Intr addr:$src, regT:$b, (ImmTy Imm:$c))>;
25922550 }
25932551 def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2594- (ins Int32Regs:$src, ImmType:$b, ImmType:$c),
2595- (Intr i32:$src, (ImmTy Imm:$b), (ImmTy Imm:$c))>;
2596- def : ATOM23_impl<AsmStr, regT, regclass, Preds,
2597- (ins Int64Regs:$src, ImmType:$b, ImmType:$c),
2598- (Intr i64:$src, (ImmTy Imm:$b), (ImmTy Imm:$c))>;
2552+ (ins ADDR:$src, ImmType:$b, ImmType:$c),
2553+ (Intr addr:$src, (ImmTy Imm:$b), (ImmTy Imm:$c))>;
25992554}
26002555
26012556// Constructs intrinsic name and instruction asm strings.
0 commit comments