@@ -1982,93 +1982,72 @@ class ATOMIC_SHARED_CHK <dag ops, dag frag>
1982
1982
class ATOMIC_GENERIC_CHK <dag ops, dag frag>
1983
1983
: PatFrag<ops, frag, AS_match.generic>;
1984
1984
1985
- multiclass F_ATOMIC_2_imp<ValueType ptrT, NVPTXRegClass ptrclass,
1985
+ multiclass F_ATOMIC_2<
1986
1986
ValueType regT, NVPTXRegClass regclass,
1987
1987
string SpaceStr, string TypeStr, string OpcStr, PatFrag IntOp,
1988
- Operand IMMType, SDNode IMM, list<Predicate> Pred> {
1988
+ Operand IMMType, SDNode IMM, list<Predicate> Pred = [] > {
1989
1989
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)))]>,
1993
1993
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>;
1998
1999
}
1999
2000
}
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
- }
2008
2001
2009
2002
// has 2 operands, neg the second one
2010
- multiclass F_ATOMIC_2_NEG_imp<ValueType ptrT, NVPTXRegClass ptrclass,
2003
+ multiclass F_ATOMIC_2_NEG<
2011
2004
ValueType regT, NVPTXRegClass regclass,
2012
2005
string SpaceStr, string TypeStr, string OpcStr, PatFrag IntOp,
2013
- list<Predicate> Pred> {
2006
+ list<Predicate> Pred = [] > {
2014
2007
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),
2016
2009
!strconcat(
2017
2010
"{{ \n\t",
2018
2011
".reg \t.s", TypeStr, " temp; \n\t",
2019
2012
"neg.s", TypeStr, " \ttemp, $b; \n\t",
2020
2013
"atom", SpaceStr, OpcStr, ".u", TypeStr, " \t$dst, [$addr], temp; \n\t",
2021
2014
"}}"),
2022
- [(set (regT regclass:$dst), (IntOp (ptrT ptrclass :$addr) , (regT regclass:$b)))]>,
2015
+ [(set (regT regclass:$dst), (IntOp addr :$addr, (regT regclass:$b)))]>,
2023
2016
Requires<Pred>;
2024
2017
}
2025
2018
}
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
- }
2033
2019
2034
2020
// has 3 operands
2035
- multiclass F_ATOMIC_3_imp<ValueType ptrT, NVPTXRegClass ptrclass,
2021
+ multiclass F_ATOMIC_3<
2036
2022
ValueType regT, NVPTXRegClass regclass, string SemStr,
2037
2023
string SpaceStr, string TypeStr, string OpcStr, PatFrag IntOp,
2038
- Operand IMMType, list<Predicate> Pred> {
2024
+ Operand IMMType, list<Predicate> Pred = [] > {
2039
2025
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))]>,
2044
2030
Requires<Pred>;
2045
2031
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))]>,
2050
2036
Requires<Pred>;
2051
2037
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))]>,
2056
2042
Requires<Pred>;
2057
2043
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))]>,
2062
2048
Requires<Pred>;
2063
2049
}
2064
2050
}
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
- }
2072
2051
2073
2052
// atom_add
2074
2053
@@ -2540,27 +2519,15 @@ multiclass ATOM2P_impl<string AsmStr, Intrinsic Intr,
2540
2519
list<Predicate> Preds> {
2541
2520
let AddedComplexity = 1 in {
2542
2521
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)>;
2551
2524
}
2552
2525
// tablegen can't infer argument types from Intrinsic (though it can
2553
2526
// from Instruction) so we have to enforce specific type on
2554
2527
// immediates via explicit cast to ImmTy.
2555
2528
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))>;
2564
2531
}
2565
2532
2566
2533
multiclass ATOM3P_impl<string AsmStr, Intrinsic Intr,
@@ -2570,32 +2537,20 @@ multiclass ATOM3P_impl<string AsmStr, Intrinsic Intr,
2570
2537
// Variants for register/immediate permutations of $b and $c
2571
2538
let AddedComplexity = 2 in {
2572
2539
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)>;
2578
2542
}
2579
2543
let AddedComplexity = 1 in {
2580
2544
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)>;
2583
2547
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))>;
2592
2550
}
2593
2551
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))>;
2599
2554
}
2600
2555
2601
2556
// Constructs intrinsic name and instruction asm strings.
0 commit comments