File tree Expand file tree Collapse file tree 2 files changed +41
-12
lines changed Expand file tree Collapse file tree 2 files changed +41
-12
lines changed Original file line number Diff line number Diff line change @@ -1312,6 +1312,23 @@ class SYCLGen : public SYCLGenBase {
1312
1312
if (Inst->getNumInputOperands () != 1 )
1313
1313
return SYCLGenError ();
1314
1314
1315
+ const InlineAsmVectorExpr *VE;
1316
+ if (VE = dyn_cast<InlineAsmVectorExpr>(Inst->getOutputOperand ())) {
1317
+ auto numOutputOperands = VE->getNumElements ();
1318
+ if (Inst->hasAttr (InstAttr::x1)) {
1319
+ if (numOutputOperands != 1 )
1320
+ return SYCLGenError ();
1321
+ } else if (Inst->hasAttr (InstAttr::x2)) {
1322
+ if (numOutputOperands != 2 )
1323
+ return SYCLGenError ();
1324
+ } else if (Inst->hasAttr (InstAttr::x4)) {
1325
+ if (numOutputOperands != 4 )
1326
+ return SYCLGenError ();
1327
+ }
1328
+ } else {
1329
+ return SYCLGenError ();
1330
+ }
1331
+
1315
1332
llvm::SaveAndRestore<const InlineAsmInstruction *> Store (CurrInst);
1316
1333
CurrInst = Inst;
1317
1334
const auto *Src =
@@ -1324,18 +1341,13 @@ class SYCLGen : public SYCLGenBase {
1324
1341
return SYCLGenError ();
1325
1342
}
1326
1343
OS () << " , " ;
1327
- if (const auto *VE =
1328
- dyn_cast<InlineAsmVectorExpr>(Inst->getOutputOperand ())) {
1329
- for (unsigned Inst = 0 ; Inst != VE->getNumElements (); ++Inst) {
1330
- if (isa<InlineAsmDiscardExpr>(VE->getElement (Inst)))
1331
- continue ;
1332
- OS () << " &" ;
1333
- if (emitStmt (VE->getElement (Inst)))
1334
- return SYCLGenError ();
1335
- OS () << " , " ;
1336
- }
1337
- } else {
1338
- return SYCLGenError ();
1344
+ for (unsigned Inst = 0 ; Inst != VE->getNumElements (); ++Inst) {
1345
+ if (isa<InlineAsmDiscardExpr>(VE->getElement (Inst)))
1346
+ continue ;
1347
+ OS () << " &" ;
1348
+ if (emitStmt (VE->getElement (Inst)))
1349
+ return SYCLGenError ();
1350
+ OS () << " , " ;
1339
1351
}
1340
1352
OS () << DpctGlobalInfo::getItem (GAS);
1341
1353
if (Inst->hasAttr (InstAttr::trans))
Original file line number Diff line number Diff line change @@ -97,4 +97,21 @@ int main () {
97
97
return 0 ;
98
98
}
99
99
100
+ __device__ void test_xn (uint32_t addr, int *r) {
101
+ // CHECK: DPCT1053:{{.*}}: Migration of device assembly code is not supported.
102
+ asm volatile (" ldmatrix.sync.aligned.m8n8.x1.shared.b16 {%0, %1}, [%2];\n "
103
+ : " =r" (r[0 ]), " =r" (r[1 ])
104
+ : " r" (addr));
105
+
106
+ // CHECK: DPCT1053:{{.*}}: Migration of device assembly code is not supported.
107
+ asm volatile (" ldmatrix.sync.aligned.m8n8.x2.shared.b16 {%0}, [%0];\n "
108
+ :
109
+ : " r" (addr));
110
+
111
+ // CHECK: DPCT1053:{{.*}}: Migration of device assembly code is not supported.
112
+ asm volatile (" ldmatrix.sync.aligned.m8n8.x4.shared.b16 {%0, %1, %2}, [%3];\n "
113
+ : " =r" (r[0 ]), " =r" (r[1 ]), " =r" (r[2 ])
114
+ : " r" (addr));
115
+ }
116
+
100
117
// clang-format on
You can’t perform that action at this time.
0 commit comments