Skip to content

Commit 66af942

Browse files
authored
[MLIR][XeVM] Add XeVM special id ops. (#160735)
Add special GPU id, index ops.
1 parent dd43a79 commit 66af942

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

mlir/include/mlir/Dialect/LLVMIR/XeVMOps.td

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,4 +634,37 @@ def XeVM_TargetAttr : XeVM_Attr<"XeVMTarget", "target"> {
634634
let genVerifyDecl = 1;
635635
}
636636

637+
//===----------------------------------------------------------------------===//
638+
// XeVM special register op definitions
639+
//===----------------------------------------------------------------------===//
640+
641+
class XeVM_SpecialIdRegisterOp<string mnemonic, list<Trait> traits = []>
642+
: XeVM_Op<mnemonic, traits>,
643+
Results<(outs AnyTypeOf<[I32, I64]>:$res)>,
644+
Arguments<(ins OptionalAttr<LLVM_ConstantRangeAttr>:$range)> {
645+
let assemblyFormat = "(`range` $range^)? attr-dict `:` type($res)";
646+
}
647+
648+
multiclass XeVM_SpecialRegisterXYZ<string mnemonic, list<Trait> traits = []> {
649+
def XOp : XeVM_SpecialIdRegisterOp<!strconcat(mnemonic, ".x"), traits>;
650+
def YOp : XeVM_SpecialIdRegisterOp<!strconcat(mnemonic, ".y"), traits>;
651+
def ZOp : XeVM_SpecialIdRegisterOp<!strconcat(mnemonic, ".z"), traits>;
652+
}
653+
654+
//===----------------------------------------------------------------------===//
655+
// Workitem index and range
656+
defm XeVM_WorkitemId : XeVM_SpecialRegisterXYZ<"local_id">;
657+
defm XeVM_WorkgroupDim : XeVM_SpecialRegisterXYZ<"local_size">;
658+
659+
//===----------------------------------------------------------------------===//
660+
// Workgroup index and range
661+
defm XeVM_WorkgroupId : XeVM_SpecialRegisterXYZ<"group_id">;
662+
defm XeVM_GridDim : XeVM_SpecialRegisterXYZ<"group_count">;
663+
664+
//===----------------------------------------------------------------------===//
665+
// Lane, Subgroup index and range
666+
def XeVM_LaneIdOp : XeVM_SpecialIdRegisterOp<"lane_id">;
667+
def XeVM_SubgroupIdOp : XeVM_SpecialIdRegisterOp<"subgroup_id">;
668+
def XeVM_SubgroupSizeOp : XeVM_SpecialIdRegisterOp<"subgroup_size">;
669+
637670
#endif // XEVMIR_OPS

mlir/test/Dialect/LLVMIR/xevm.mlir

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,39 @@ func.func @prefetch(%ptr: !llvm.ptr<1>) {
116116
// CHECK-LABEL: @xevm_module [#xevm.target<O = 3, chip = "pvc">] {
117117
gpu.module @xevm_module [#xevm.target<O = 3, chip = "pvc">]{
118118
}
119+
120+
// -----
121+
// CHECK-LABEL: @xevm_special_ids
122+
llvm.func @xevm_special_ids() -> i32 {
123+
// CHECK: xevm.local_id.x : i32
124+
%1 = xevm.local_id.x : i32
125+
// CHECK: xevm.local_id.y : i32
126+
%2 = xevm.local_id.y : i32
127+
// CHECK: xevm.local_id.z : i32
128+
%3 = xevm.local_id.z : i32
129+
// CHECK: xevm.local_size.x : i32
130+
%4 = xevm.local_size.x : i32
131+
// CHECK: xevm.local_size.y : i32
132+
%5 = xevm.local_size.y : i32
133+
// CHECK: xevm.local_size.z : i32
134+
%6 = xevm.local_size.z : i32
135+
// CHECK: xevm.group_id.x : i32
136+
%7 = xevm.group_id.x : i32
137+
// CHECK: xevm.group_id.y : i32
138+
%8 = xevm.group_id.y : i32
139+
// CHECK: xevm.group_id.z : i32
140+
%9 = xevm.group_id.z : i32
141+
// CHECK: xevm.group_count.x : i32
142+
%10 = xevm.group_count.x : i32
143+
// CHECK: xevm.group_count.y : i32
144+
%11 = xevm.group_count.y : i32
145+
// CHECK: xevm.group_count.z : i32
146+
%12 = xevm.group_count.z : i32
147+
// CHECK: xevm.lane_id : i32
148+
%14 = xevm.lane_id : i32
149+
// CHECK: xevm.subgroup_size : i32
150+
%39 = xevm.subgroup_size : i32
151+
// CHECK: xevm.subgroup_id : i32
152+
%40 = xevm.subgroup_id : i32
153+
llvm.return %1 : i32
154+
}

0 commit comments

Comments
 (0)