@@ -1108,15 +1108,14 @@ def NVVM_CpAsyncOp : NVVM_Op<"cp.async.shared.global">,
1108
1108
let assemblyFormat = "$dst `,` $src `,` $size `,` `cache` `=` $modifier (`,` $cpSize^)? attr-dict `:` type(operands)";
1109
1109
let hasVerifier = 1;
1110
1110
let extraClassDeclaration = [{
1111
- static llvm::Intrinsic::ID
1112
- getIntrinsicIDAndArgs (Operation &op, LLVM::ModuleTranslation &mt,
1113
- llvm::SmallVector<llvm::Value *> &args );
1111
+ static NVVM::IIDArgsMaybeWithTypes
1112
+ getIntrinsicIDAndArgsMaybeWithTypes (Operation &op, LLVM::ModuleTranslation &mt,
1113
+ llvm::IRBuilderBase &builder );
1114
1114
}];
1115
1115
string llvmBuilder = [{
1116
- llvm::SmallVector<llvm::Value *> translatedOperands;
1117
- auto id = NVVM::CpAsyncOp::getIntrinsicIDAndArgs(
1118
- *op, moduleTranslation, translatedOperands);
1119
- createIntrinsicCall(builder, id, translatedOperands);
1116
+ auto [id, args, types] = NVVM::CpAsyncOp::getIntrinsicIDAndArgsMaybeWithTypes(
1117
+ *op, moduleTranslation, builder);
1118
+ createIntrinsicCall(builder, id, args);
1120
1119
}];
1121
1120
}
1122
1121
@@ -2543,8 +2542,8 @@ def NVVM_CpAsyncBulkTensorSharedCTAToGlobalOp :
2543
2542
let extraClassDeclaration = [{
2544
2543
bool hasIntrinsic() { return !getPredicate(); }
2545
2544
2546
- static mlir::NVVM::IDArgPair
2547
- getIntrinsicIDAndArgs (Operation &op, LLVM::ModuleTranslation &mt,
2545
+ static mlir::NVVM::IIDArgsMaybeWithTypes
2546
+ getIntrinsicIDAndArgsMaybeWithTypes (Operation &op, LLVM::ModuleTranslation &mt,
2548
2547
llvm::IRBuilderBase& builder);
2549
2548
}];
2550
2549
@@ -2565,7 +2564,7 @@ def NVVM_CpAsyncBulkTensorSharedCTAToGlobalOp :
2565
2564
let hasVerifier = 1;
2566
2565
2567
2566
string llvmBuilder = [{
2568
- auto [id, args] = NVVM::CpAsyncBulkTensorSharedCTAToGlobalOp::getIntrinsicIDAndArgs (
2567
+ auto [id, args, types ] = NVVM::CpAsyncBulkTensorSharedCTAToGlobalOp::getIntrinsicIDAndArgsMaybeWithTypes (
2569
2568
*op, moduleTranslation, builder);
2570
2569
createIntrinsicCall(builder, id, args);
2571
2570
}];
@@ -2631,8 +2630,8 @@ def NVVM_PrefetchOp : NVVM_Op<"prefetch",
2631
2630
let hasVerifier = 1;
2632
2631
2633
2632
let extraClassDeclaration = [{
2634
- static NVVM::IDArgPair
2635
- getIntrinsicIDAndArgs(NVVM::PrefetchOp &op,LLVM::ModuleTranslation &mt,
2633
+ static NVVM::IIDArgsMaybeWithTypes
2634
+ getIntrinsicIDAndArgsMaybeWithTypes(Operation &op, LLVM::ModuleTranslation &mt,
2636
2635
llvm::IRBuilderBase &builder);
2637
2636
bool hasIntrinsic() { return !getPredicate() || !getTensormap(); }
2638
2637
}];
@@ -2643,7 +2642,7 @@ def NVVM_PrefetchOp : NVVM_Op<"prefetch",
2643
2642
}
2644
2643
}];
2645
2644
let llvmBuilder = [{
2646
- auto [id, args] = NVVM::PrefetchOp::getIntrinsicIDAndArgs( op,
2645
+ auto [id, args, types ] = NVVM::PrefetchOp::getIntrinsicIDAndArgsMaybeWithTypes(* op,
2647
2646
moduleTranslation, builder);
2648
2647
2649
2648
if(op.getTensormap())
@@ -2685,13 +2684,13 @@ def NVVM_CpAsyncBulkPrefetchOp : NVVM_Op<"cp.async.bulk.prefetch"> {
2685
2684
}];
2686
2685
2687
2686
let extraClassDeclaration = [{
2688
- static mlir::NVVM::IDArgPair
2689
- getIntrinsicIDAndArgs (Operation &op, LLVM::ModuleTranslation &mt,
2687
+ static mlir::NVVM::IIDArgsMaybeWithTypes
2688
+ getIntrinsicIDAndArgsMaybeWithTypes (Operation &op, LLVM::ModuleTranslation &mt,
2690
2689
llvm::IRBuilderBase& builder);
2691
2690
}];
2692
2691
2693
2692
string llvmBuilder = [{
2694
- auto [id, args] = NVVM::CpAsyncBulkPrefetchOp::getIntrinsicIDAndArgs (
2693
+ auto [id, args, types ] = NVVM::CpAsyncBulkPrefetchOp::getIntrinsicIDAndArgsMaybeWithTypes (
2695
2694
*op, moduleTranslation, builder);
2696
2695
createIntrinsicCall(builder, id, args);
2697
2696
}];
@@ -2726,15 +2725,15 @@ def NVVM_CpAsyncBulkTensorPrefetchOp :
2726
2725
}];
2727
2726
2728
2727
let extraClassDeclaration = [{
2729
- static mlir::NVVM::IDArgPair
2730
- getIntrinsicIDAndArgs (Operation &op, LLVM::ModuleTranslation &mt,
2728
+ static mlir::NVVM::IIDArgsMaybeWithTypes
2729
+ getIntrinsicIDAndArgsMaybeWithTypes (Operation &op, LLVM::ModuleTranslation &mt,
2731
2730
llvm::IRBuilderBase& builder);
2732
2731
}];
2733
2732
2734
2733
let hasVerifier = 1;
2735
2734
2736
2735
string llvmBuilder = [{
2737
- auto [id, args] = NVVM::CpAsyncBulkTensorPrefetchOp::getIntrinsicIDAndArgs (
2736
+ auto [id, args, types ] = NVVM::CpAsyncBulkTensorPrefetchOp::getIntrinsicIDAndArgsMaybeWithTypes (
2738
2737
*op, moduleTranslation, builder);
2739
2738
createIntrinsicCall(builder, id, args);
2740
2739
}];
@@ -2795,35 +2794,17 @@ def NVVM_CpAsyncBulkTensorReduceOp :
2795
2794
}];
2796
2795
2797
2796
let extraClassDeclaration = [{
2798
- static llvm::Intrinsic::ID getIntrinsicID(int tensorDims,
2799
- NVVM::TMAReduxKind kind ,
2800
- bool isIm2Col );
2797
+ static mlir::NVVM::IIDArgsMaybeWithTypes
2798
+ getIntrinsicIDAndArgsMaybeWithTypes(Operation &op ,
2799
+ LLVM::ModuleTranslation &mt, llvm::IRBuilderBase& builder );
2801
2800
}];
2802
2801
2803
2802
let hasVerifier = 1;
2804
2803
2805
2804
string llvmBuilder = [{
2806
- // Arguments to the intrinsic:
2807
- // shared_mem_ptr, tmaDesc, tensorDims
2808
- // cache_hint(if applicable) and flag(boolean)
2809
- llvm::SmallVector<llvm::Value *> translatedOperands;
2810
- translatedOperands.push_back($srcMem);
2811
- translatedOperands.push_back($tmaDescriptor);
2812
-
2813
- for (auto v : op.getCoordinates())
2814
- translatedOperands.push_back(moduleTranslation.lookupValue(v));
2815
-
2816
- llvm::LLVMContext &ctx = moduleTranslation.getLLVMContext();
2817
- auto *i64Undef = llvm::UndefValue::get(llvm::IntegerType::get(ctx, 64));
2818
-
2819
- bool isCacheHint = op.getL2CacheHint() ? true : false;
2820
- translatedOperands.push_back(isCacheHint ? $l2CacheHint : i64Undef);
2821
- translatedOperands.push_back(builder.getInt1(isCacheHint));
2822
-
2823
- auto intId = NVVM::CpAsyncBulkTensorReduceOp::getIntrinsicID(
2824
- op.getCoordinates().size(), $redKind,
2825
- (op.getMode() == NVVM::TMAStoreMode::IM2COL));
2826
- createIntrinsicCall(builder, intId, translatedOperands);
2805
+ auto [id, args, types] = NVVM::CpAsyncBulkTensorReduceOp::getIntrinsicIDAndArgsMaybeWithTypes(
2806
+ *op, moduleTranslation, builder);
2807
+ createIntrinsicCall(builder, id, args);
2827
2808
}];
2828
2809
}
2829
2810
@@ -2860,36 +2841,17 @@ def NVVM_CpAsyncBulkGlobalToSharedClusterOp :
2860
2841
(`l2_cache_hint` `=` $l2CacheHint^ )?
2861
2842
attr-dict `:` type($dstMem) `,` type($srcMem)
2862
2843
}];
2844
+
2845
+ let extraClassDeclaration = [{
2846
+ static mlir::NVVM::IIDArgsMaybeWithTypes
2847
+ getIntrinsicIDAndArgsMaybeWithTypes(Operation &op,
2848
+ LLVM::ModuleTranslation &mt, llvm::IRBuilderBase& builder);
2849
+ }];
2863
2850
2864
2851
string llvmBuilder = [{
2865
- // Arguments to the intrinsic:
2866
- // dst, mbar, src, size
2867
- // multicast_mask, cache_hint,
2868
- // flag for multicast_mask,
2869
- // flag for cache_hint
2870
- llvm::SmallVector<llvm::Value *> translatedOperands;
2871
- translatedOperands.push_back($dstMem);
2872
- translatedOperands.push_back($mbar);
2873
- translatedOperands.push_back($srcMem);
2874
- translatedOperands.push_back($size);
2875
-
2876
- // Multicast, if available
2877
- llvm::LLVMContext &ctx = moduleTranslation.getLLVMContext();
2878
- auto *i16Unused = llvm::ConstantInt::get(llvm::Type::getInt16Ty(ctx), 0);
2879
- bool isMulticast = op.getMulticastMask() ? true : false;
2880
- translatedOperands.push_back(isMulticast ? $multicastMask : i16Unused);
2881
-
2882
- // Cachehint, if available
2883
- auto *i64Unused = llvm::ConstantInt::get(llvm::Type::getInt64Ty(ctx), 0);
2884
- bool isCacheHint = op.getL2CacheHint() ? true : false;
2885
- translatedOperands.push_back(isCacheHint ? $l2CacheHint : i64Unused);
2886
-
2887
- // Flag arguments for multicast and cachehint
2888
- translatedOperands.push_back(builder.getInt1(isMulticast));
2889
- translatedOperands.push_back(builder.getInt1(isCacheHint));
2890
-
2891
- createIntrinsicCall(builder,
2892
- llvm::Intrinsic::nvvm_cp_async_bulk_global_to_shared_cluster, translatedOperands);
2852
+ auto [id, args, types] = NVVM::CpAsyncBulkGlobalToSharedClusterOp::getIntrinsicIDAndArgsMaybeWithTypes(
2853
+ *op, moduleTranslation, builder);
2854
+ createIntrinsicCall(builder, id, args);
2893
2855
}];
2894
2856
}
2895
2857
@@ -2971,12 +2933,12 @@ def NVVM_CpAsyncBulkSharedCTAToGlobalOp :
2971
2933
}];
2972
2934
2973
2935
let extraClassDeclaration = [{
2974
- static mlir::NVVM::IDArgPair
2975
- getIntrinsicIDAndArgs (Operation &op, LLVM::ModuleTranslation &mt,
2936
+ static mlir::NVVM::IIDArgsMaybeWithTypes
2937
+ getIntrinsicIDAndArgsMaybeWithTypes (Operation &op, LLVM::ModuleTranslation &mt,
2976
2938
llvm::IRBuilderBase& builder);
2977
2939
}];
2978
2940
string llvmBuilder = [{
2979
- auto [id, args] = NVVM::CpAsyncBulkSharedCTAToGlobalOp::getIntrinsicIDAndArgs (
2941
+ auto [id, args, types ] = NVVM::CpAsyncBulkSharedCTAToGlobalOp::getIntrinsicIDAndArgsMaybeWithTypes (
2980
2942
*op, moduleTranslation, builder);
2981
2943
createIntrinsicCall(builder, id, args);
2982
2944
}];
@@ -3392,14 +3354,13 @@ def NVVM_Tcgen05AllocOp : NVVM_Op<"tcgen05.alloc", [NVVMRequiresSMa<[100, 101]>]
3392
3354
let assemblyFormat = "$addr `,` $nCols attr-dict `:` type(operands)";
3393
3355
3394
3356
let extraClassDeclaration = [{
3395
- static llvm::Intrinsic::ID
3396
- getIntrinsicIDAndArgs (Operation &op, LLVM::ModuleTranslation &mt,
3397
- llvm::SmallVector<llvm::Value *> &args );
3357
+ static NVVM::IIDArgsMaybeWithTypes
3358
+ getIntrinsicIDAndArgsMaybeWithTypes (Operation &op, LLVM::ModuleTranslation &mt,
3359
+ llvm::IRBuilderBase &builder );
3398
3360
}];
3399
3361
string llvmBuilder = [{
3400
- llvm::SmallVector<llvm::Value *> args;
3401
- auto id = NVVM::Tcgen05AllocOp::getIntrinsicIDAndArgs(
3402
- *op, moduleTranslation, args);
3362
+ auto [id, args, types] = NVVM::Tcgen05AllocOp::getIntrinsicIDAndArgsMaybeWithTypes(
3363
+ *op, moduleTranslation, builder);
3403
3364
createIntrinsicCall(builder, id, args);
3404
3365
}];
3405
3366
}
@@ -3420,14 +3381,13 @@ def NVVM_Tcgen05DeallocOp : NVVM_Op<"tcgen05.dealloc", [NVVMRequiresSMa<[100, 10
3420
3381
let assemblyFormat = "$taddr `,` $nCols attr-dict `:` type(operands)";
3421
3382
3422
3383
let extraClassDeclaration = [{
3423
- static llvm::Intrinsic::ID
3424
- getIntrinsicIDAndArgs (Operation &op, LLVM::ModuleTranslation &mt,
3425
- llvm::SmallVector<llvm::Value *> &args );
3384
+ static NVVM::IIDArgsMaybeWithTypes
3385
+ getIntrinsicIDAndArgsMaybeWithTypes (Operation &op, LLVM::ModuleTranslation &mt,
3386
+ llvm::IRBuilderBase &builder );
3426
3387
}];
3427
3388
string llvmBuilder = [{
3428
- llvm::SmallVector<llvm::Value *> args;
3429
- auto id = NVVM::Tcgen05DeallocOp::getIntrinsicIDAndArgs(
3430
- *op, moduleTranslation, args);
3389
+ auto [id, args, types] = NVVM::Tcgen05DeallocOp::getIntrinsicIDAndArgsMaybeWithTypes(
3390
+ *op, moduleTranslation, builder);
3431
3391
createIntrinsicCall(builder, id, args);
3432
3392
}];
3433
3393
}
@@ -3524,15 +3484,14 @@ def NVVM_Tcgen05CommitOp : NVVM_Op<"tcgen05.commit", [NVVMRequiresSMa<[100, 101]
3524
3484
}];
3525
3485
3526
3486
let extraClassDeclaration = [{
3527
- static llvm::Intrinsic::ID
3528
- getIntrinsicIDAndArgs (Operation &op, LLVM::ModuleTranslation &mt,
3529
- llvm::SmallVector<llvm::Value *> &args );
3487
+ static NVVM::IIDArgsMaybeWithTypes
3488
+ getIntrinsicIDAndArgsMaybeWithTypes (Operation &op, LLVM::ModuleTranslation &mt,
3489
+ llvm::IRBuilderBase &builder );
3530
3490
}];
3531
3491
3532
3492
string llvmBuilder = [{
3533
- llvm::SmallVector<llvm::Value *> args;
3534
- auto id = NVVM::Tcgen05CommitOp::getIntrinsicIDAndArgs(
3535
- *op, moduleTranslation, args);
3493
+ auto [id, args, types] = NVVM::Tcgen05CommitOp::getIntrinsicIDAndArgsMaybeWithTypes(
3494
+ *op, moduleTranslation, builder);
3536
3495
createIntrinsicCall(builder, id, args);
3537
3496
}];
3538
3497
}
@@ -3636,12 +3595,14 @@ def NVVM_Tcgen05CpOp : NVVM_Op<"tcgen05.cp", [NVVMRequiresSMa<[100, 101]>]> {
3636
3595
let hasVerifier = 1;
3637
3596
3638
3597
let extraClassDeclaration = [{
3639
- static llvm::Intrinsic::ID getIntrinsicID(Operation &op);
3598
+ static NVVM::IIDArgsMaybeWithTypes getIntrinsicIDAndArgsMaybeWithTypes(Operation &op,
3599
+ LLVM::ModuleTranslation &mt, llvm::IRBuilderBase &builder);
3640
3600
}];
3641
3601
3642
3602
string llvmBuilder = [{
3643
- auto id = NVVM::Tcgen05CpOp::getIntrinsicID(*op);
3644
- createIntrinsicCall(builder, id, {$taddr, $smem_desc});
3603
+ auto [id, args, types] = NVVM::Tcgen05CpOp::getIntrinsicIDAndArgsMaybeWithTypes(*op,
3604
+ moduleTranslation, builder);
3605
+ createIntrinsicCall(builder, id, args);
3645
3606
}];
3646
3607
}
3647
3608
@@ -3969,13 +3930,13 @@ def NVVM_DotAccumulate4WayOp : NVVM_Op<"dot.accumulate.4way"> {
3969
3930
let assemblyFormat = "$a $a_type `,` $b $b_type `,` $c attr-dict `:` type($a) `,` type($b)";
3970
3931
3971
3932
let extraClassDeclaration = [{
3972
- static mlir::NVVM::IDArgPair
3973
- getIntrinsicIDAndArgs (Operation &op, LLVM::ModuleTranslation &mt,
3933
+ static mlir::NVVM::IIDArgsMaybeWithTypes
3934
+ getIntrinsicIDAndArgsMaybeWithTypes (Operation &op, LLVM::ModuleTranslation &mt,
3974
3935
llvm::IRBuilderBase &builder);
3975
3936
}];
3976
3937
3977
3938
string llvmBuilder = [{
3978
- auto [id, args] = NVVM::DotAccumulate4WayOp::getIntrinsicIDAndArgs (
3939
+ auto [id, args, types ] = NVVM::DotAccumulate4WayOp::getIntrinsicIDAndArgsMaybeWithTypes (
3979
3940
*op, moduleTranslation, builder);
3980
3941
$res = createIntrinsicCall(builder, id, args);
3981
3942
}];
@@ -4023,13 +3984,13 @@ def NVVM_DotAccumulate2WayOp : NVVM_Op<"dot.accumulate.2way"> {
4023
3984
let assemblyFormat = "$a $a_type `,` $b $b_type `,` $c attr-dict `:` type($a) `,` type($b)";
4024
3985
4025
3986
let extraClassDeclaration = [{
4026
- static mlir::NVVM::IDArgPair
4027
- getIntrinsicIDAndArgs (Operation &op, LLVM::ModuleTranslation &mt,
3987
+ static mlir::NVVM::IIDArgsMaybeWithTypes
3988
+ getIntrinsicIDAndArgsMaybeWithTypes (Operation &op, LLVM::ModuleTranslation &mt,
4028
3989
llvm::IRBuilderBase &builder);
4029
3990
}];
4030
3991
4031
3992
string llvmBuilder = [{
4032
- auto [id, args] = NVVM::DotAccumulate2WayOp::getIntrinsicIDAndArgs (
3993
+ auto [id, args, types ] = NVVM::DotAccumulate2WayOp::getIntrinsicIDAndArgsMaybeWithTypes (
4033
3994
*op, moduleTranslation, builder);
4034
3995
$res = createIntrinsicCall(builder, id, args);
4035
3996
}];
0 commit comments