@@ -2637,18 +2637,15 @@ class LoadParamRegInst<NVPTXRegClass regclass, string opstr> :
2637
2637
[(set regclass:$dst, (LoadParam (i32 0), (i32 imm:$b)))]>;
2638
2638
2639
2639
let mayStore = true in {
2640
- class StoreParamInstReg<NVPTXRegClass regclass, string opstr> :
2641
- NVPTXInst<(outs), (ins regclass:$val, i32imm:$a, i32imm:$b),
2642
- "st.param" # opstr # " \t[param$a+$b], $val;",
2643
- []>;
2644
-
2645
- multiclass StoreParamInst<NVPTXRegClass regclass, Operand IMMType, string opstr> {
2646
- def _r: StoreParamInstReg<regclass, opstr>;
2647
2640
2648
- def _i:
2649
- NVPTXInst<(outs), (ins IMMType:$val, i32imm:$a, i32imm:$b),
2650
- "st.param" # opstr # " \t[param$a+$b], $val;",
2651
- []>;
2641
+ multiclass StoreParamInst<NVPTXRegClass regclass, Operand IMMType, string opstr, bit support_imm = true> {
2642
+ foreach op = [IMMType, regclass] in
2643
+ if !or(support_imm, !isa<NVPTXRegClass>(op)) then
2644
+ def _ # !if(!isa<NVPTXRegClass>(op), "r", "i")
2645
+ : NVPTXInst<(outs),
2646
+ (ins op:$val, i32imm:$a, i32imm:$b),
2647
+ "st.param" # opstr # " \t[param$a+$b], $val;",
2648
+ []>;
2652
2649
}
2653
2650
2654
2651
multiclass StoreParamV2Inst<NVPTXRegClass regclass, Operand IMMType, string opstr> {
@@ -2764,8 +2761,8 @@ defm StoreParamI32 : StoreParamInst<Int32Regs, i32imm, ".b32">;
2764
2761
defm StoreParamI16 : StoreParamInst<Int16Regs, i16imm, ".b16">;
2765
2762
defm StoreParamI8 : StoreParamInst<Int16Regs, i8imm, ".b8">;
2766
2763
2767
- def StoreParamI8TruncI32 : StoreParamInstReg <Int32Regs, ".b8">;
2768
- def StoreParamI8TruncI64 : StoreParamInstReg <Int64Regs, ".b8">;
2764
+ defm StoreParamI8TruncI32 : StoreParamInst <Int32Regs, i8imm, ".b8", /* support_imm */ false >;
2765
+ defm StoreParamI8TruncI64 : StoreParamInst <Int64Regs, i8imm, ".b8", /* support_imm */ false >;
2769
2766
2770
2767
defm StoreParamV2I64 : StoreParamV2Inst<Int64Regs, i64imm, ".b64">;
2771
2768
defm StoreParamV2I32 : StoreParamV2Inst<Int32Regs, i32imm, ".b32">;
0 commit comments