Skip to content

Commit 7a21ca8

Browse files
SC llvm teamSC llvm team
authored andcommitted
Merged main:03948882d3bac33cf71a47df1c7ee0f87aad9fc2 into amd-gfx:d2b54d8b4b44
Local branch amd-gfx d2b54d8 Merged main:e61a7dc256bd530a0b9551e2732e5b5b77e2cd1e into amd-gfx:0ba2414d4826 Remote branch main 0394888 Fix MSVC "32-bit shift implicitly converted to 64 bits" warning. NFC
2 parents d2b54d8 + 0394888 commit 7a21ca8

File tree

9 files changed

+143
-13
lines changed

9 files changed

+143
-13
lines changed

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7146,8 +7146,8 @@ void CodeGenModule::EmitTopLevelDecl(Decl *D) {
71467146
// For C++ standard modules we are done - we will call the module
71477147
// initializer for imported modules, and that will likewise call those for
71487148
// any imports it has.
7149-
if (CXX20ModuleInits && Import->getImportedOwningModule() &&
7150-
!Import->getImportedOwningModule()->isModuleMapModule())
7149+
if (CXX20ModuleInits && Import->getImportedModule() &&
7150+
Import->getImportedModule()->isNamedModule())
71517151
break;
71527152

71537153
// For clang C++ module map modules the initializers for sub-modules are
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// RUN: rm -rf %t
2+
// RUN: mkdir -p %t
3+
// RUN: split-file %s %t
4+
//
5+
// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++20 %t/a.cppm -emit-module-interface -o %t/a.pcm
6+
// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++20 %t/a.cpp -fmodule-file=a=%t/a.pcm -emit-llvm -o - | FileCheck %t/a.cpp
7+
8+
//--- a.cppm
9+
export module a;
10+
int func();
11+
static int a = func();
12+
13+
//--- a.cpp
14+
import a;
15+
16+
// CHECK-NOT: internal global
17+
// CHECK-NOT: __cxx_global_var_init
18+

flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,19 @@ static bool canCacheThisType(mlir::LLVM::DICompositeTypeAttr comTy) {
271271
return true;
272272
}
273273

274+
std::pair<std::uint64_t, unsigned short>
275+
DebugTypeGenerator::getFieldSizeAndAlign(mlir::Type fieldTy) {
276+
mlir::Type llvmTy;
277+
if (auto boxTy = mlir::dyn_cast_or_null<fir::BaseBoxType>(fieldTy))
278+
llvmTy = llvmTypeConverter.convertBoxTypeAsStruct(boxTy, getBoxRank(boxTy));
279+
else
280+
llvmTy = llvmTypeConverter.convertType(fieldTy);
281+
282+
uint64_t byteSize = dataLayout->getTypeSize(llvmTy);
283+
unsigned short byteAlign = dataLayout->getTypeABIAlignment(llvmTy);
284+
return std::pair{byteSize, byteAlign};
285+
}
286+
274287
mlir::LLVM::DITypeAttr DebugTypeGenerator::convertRecordType(
275288
fir::RecordType Ty, mlir::LLVM::DIFileAttr fileAttr,
276289
mlir::LLVM::DIScopeAttr scope, fir::cg::XDeclareOp declOp) {
@@ -303,15 +316,7 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertRecordType(
303316
mlir::IntegerType intTy = mlir::IntegerType::get(context, 64);
304317
std::uint64_t offset = 0;
305318
for (auto [fieldName, fieldTy] : Ty.getTypeList()) {
306-
mlir::Type llvmTy;
307-
if (auto boxTy = mlir::dyn_cast_or_null<fir::BaseBoxType>(fieldTy))
308-
llvmTy =
309-
llvmTypeConverter.convertBoxTypeAsStruct(boxTy, getBoxRank(boxTy));
310-
else
311-
llvmTy = llvmTypeConverter.convertType(fieldTy);
312-
313-
uint64_t byteSize = dataLayout->getTypeSize(llvmTy);
314-
unsigned short byteAlign = dataLayout->getTypeABIAlignment(llvmTy);
319+
auto [byteSize, byteAlign] = getFieldSizeAndAlign(fieldTy);
315320
std::optional<llvm::ArrayRef<int64_t>> lowerBounds =
316321
fir::getComponentLowerBoundsIfNonDefault(Ty, fieldName, module,
317322
symbolTable);
@@ -368,6 +373,42 @@ mlir::LLVM::DITypeAttr DebugTypeGenerator::convertRecordType(
368373
return finalAttr;
369374
}
370375

376+
mlir::LLVM::DITypeAttr DebugTypeGenerator::convertTupleType(
377+
mlir::TupleType Ty, mlir::LLVM::DIFileAttr fileAttr,
378+
mlir::LLVM::DIScopeAttr scope, fir::cg::XDeclareOp declOp) {
379+
// Check if this type has already been converted.
380+
auto iter = typeCache.find(Ty);
381+
if (iter != typeCache.end())
382+
return iter->second;
383+
384+
llvm::SmallVector<mlir::LLVM::DINodeAttr> elements;
385+
mlir::MLIRContext *context = module.getContext();
386+
387+
std::uint64_t offset = 0;
388+
for (auto fieldTy : Ty.getTypes()) {
389+
auto [byteSize, byteAlign] = getFieldSizeAndAlign(fieldTy);
390+
mlir::LLVM::DITypeAttr elemTy =
391+
convertType(fieldTy, fileAttr, scope, /*declOp=*/nullptr);
392+
offset = llvm::alignTo(offset, byteAlign);
393+
mlir::LLVM::DIDerivedTypeAttr tyAttr = mlir::LLVM::DIDerivedTypeAttr::get(
394+
context, llvm::dwarf::DW_TAG_member, mlir::StringAttr::get(context, ""),
395+
elemTy, byteSize * 8, byteAlign * 8, offset * 8,
396+
/*optional<address space>=*/std::nullopt,
397+
/*extra data=*/nullptr);
398+
elements.push_back(tyAttr);
399+
offset += llvm::alignTo(byteSize, byteAlign);
400+
}
401+
402+
auto typeAttr = mlir::LLVM::DICompositeTypeAttr::get(
403+
context, llvm::dwarf::DW_TAG_structure_type,
404+
mlir::StringAttr::get(context, ""), fileAttr, /*line=*/0, scope,
405+
/*baseType=*/nullptr, mlir::LLVM::DIFlags::Zero, offset * 8,
406+
/*alignInBits=*/0, elements, /*dataLocation=*/nullptr, /*rank=*/nullptr,
407+
/*allocated=*/nullptr, /*associated=*/nullptr);
408+
typeCache[Ty] = typeAttr;
409+
return typeAttr;
410+
}
411+
371412
mlir::LLVM::DITypeAttr DebugTypeGenerator::convertSequenceType(
372413
fir::SequenceType seqTy, mlir::LLVM::DIFileAttr fileAttr,
373414
mlir::LLVM::DIScopeAttr scope, fir::cg::XDeclareOp declOp) {
@@ -574,6 +615,8 @@ DebugTypeGenerator::convertType(mlir::Type Ty, mlir::LLVM::DIFileAttr fileAttr,
574615
/*hasDescriptor=*/false);
575616
} else if (auto recTy = mlir::dyn_cast_or_null<fir::RecordType>(Ty)) {
576617
return convertRecordType(recTy, fileAttr, scope, declOp);
618+
} else if (auto tupleTy = mlir::dyn_cast_if_present<mlir::TupleType>(Ty)) {
619+
return convertTupleType(tupleTy, fileAttr, scope, declOp);
577620
} else if (auto refTy = mlir::dyn_cast_if_present<fir::ReferenceType>(Ty)) {
578621
auto elTy = refTy.getEleTy();
579622
return convertPointerLikeType(elTy, fileAttr, scope, declOp,

flang/lib/Optimizer/Transforms/DebugTypeGenerator.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ class DebugTypeGenerator {
3939
mlir::LLVM::DIFileAttr fileAttr,
4040
mlir::LLVM::DIScopeAttr scope,
4141
fir::cg::XDeclareOp declOp);
42+
mlir::LLVM::DITypeAttr convertTupleType(mlir::TupleType Ty,
43+
mlir::LLVM::DIFileAttr fileAttr,
44+
mlir::LLVM::DIScopeAttr scope,
45+
fir::cg::XDeclareOp declOp);
4246
mlir::LLVM::DITypeAttr convertSequenceType(fir::SequenceType seqTy,
4347
mlir::LLVM::DIFileAttr fileAttr,
4448
mlir::LLVM::DIScopeAttr scope,
@@ -73,6 +77,8 @@ class DebugTypeGenerator {
7377
mlir::LLVM::DIFileAttr fileAttr,
7478
mlir::LLVM::DIScopeAttr scope,
7579
fir::cg::XDeclareOp declOp);
80+
std::pair<std::uint64_t, unsigned short>
81+
getFieldSizeAndAlign(mlir::Type fieldTy);
7682

7783
mlir::ModuleOp module;
7884
mlir::SymbolTable *symbolTable;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// RUN: fir-opt --add-debug-info --mlir-print-debuginfo %s | FileCheck %s
2+
3+
module attributes {dlti.dl_spec = #dlti.dl_spec<>} {
4+
func.func private @fn1(!fir.ref<tuple<f64, f64>>)
5+
func.func private @_FortranAioOutputDerivedType(!fir.ref<tuple<>>)
6+
}
7+
8+
// CHECK: #[[F64:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "real", sizeInBits = 64, encoding = DW_ATE_float>
9+
// CHECK: #[[CU:.*]] = #llvm.di_compile_unit<{{.*}}>
10+
// CHECK: #[[DTY1:.*]] = #llvm.di_derived_type<tag = DW_TAG_member, name = "", baseType = #[[F64]], sizeInBits = 64, alignInBits = {{.*}}>
11+
// CHECK: #[[DTY2:.*]] = #llvm.di_derived_type<tag = DW_TAG_member, name = "", baseType = #[[F64]], sizeInBits = 64, alignInBits = {{.*}}, offsetInBits = {{.*}}>
12+
// CHECK: #[[COM_TY1:.*]] = #llvm.di_composite_type<tag = DW_TAG_structure_type, name = "", file = #{{.*}}, scope = #[[CU]]{{.*}}elements = #[[DTY1]], #[[DTY2]]>
13+
// CHECK: #[[COM_TY2:.*]] = #llvm.di_composite_type<tag = DW_TAG_structure_type, name = "", file = #{{.*}}, scope = #[[CU]]>
14+
// CHECK: #llvm.di_subroutine_type<callingConvention = DW_CC_normal, types = #di_null_type, #[[COM_TY1]]>
15+
// CHECK: #llvm.di_subroutine_type<callingConvention = DW_CC_normal, types = #di_null_type, #[[COM_TY2]]>

llvm/include/llvm/Config/llvm-config.h.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
/* Indicate that this is LLVM compiled from the amd-gfx branch. */
1818
#define LLVM_HAVE_BRANCH_AMD_GFX
19-
#define LLVM_MAIN_REVISION 516488
19+
#define LLVM_MAIN_REVISION 516492
2020

2121
/* Define if LLVM_ENABLE_DUMP is enabled */
2222
#cmakedefine LLVM_ENABLE_DUMP

llvm/lib/Support/TrieRawHashMap.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class TrieSubtrie final
7979

8080
static constexpr size_t sizeToAlloc(unsigned NumBits) {
8181
assert(NumBits < 20 && "Tries should have fewer than ~1M slots");
82-
size_t Count = 1u << NumBits;
82+
unsigned Count = 1u << NumBits;
8383
return totalSizeToAlloc<LazyAtomicPointer<TrieNode>>(Count);
8484
}
8585

llvm/test/MC/AMDGPU/gfx12_asm_vimage.s

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,12 @@ image_load v[0:2], [v4, v5], s[8:15] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY th:TH_LO
158158
image_load v[4:7], [v1, v0], s[4:11] dmask:0xf dim:SQ_RSRC_IMG_2D
159159
// GFX12: encoding: [0x01,0x00,0xc0,0xd3,0x04,0x08,0x00,0x00,0x01,0x00,0x00,0x00]
160160

161+
image_load v[1:4], [v2, v1, v0], s[4:11] dmask:0xf dim:SQ_RSRC_IMG_3D
162+
// GFX12: encoding: [0x02,0x00,0xc0,0xd3,0x01,0x08,0x00,0x00,0x02,0x01,0x00,0x00]
163+
164+
image_load v[1:4], [v3, v2, v1, v0], s[4:11] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY
165+
// GFX12: encoding: [0x07,0x00,0xc0,0xd3,0x01,0x08,0x00,0x00,0x03,0x02,0x01,0x00]
166+
161167
image_load_mip v[252:255], [v0, v1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D
162168
// GFX12: encoding: [0x00,0x40,0xc0,0xd3,0xfc,0x00,0x00,0x00,0x00,0x01,0x00,0x00]
163169

@@ -408,6 +414,12 @@ image_store v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_STORE_BYPASS scope
408414
image_store v[1:4], [v2, v0], s[4:11] dmask:0xf dim:SQ_RSRC_IMG_2D
409415
// GFX12: encoding: [0x01,0x80,0xc1,0xd3,0x01,0x08,0x00,0x00,0x02,0x00,0x00,0x00]
410416

417+
image_store v[1:4], [v2, v1, v0], s[4:11] dmask:0xf dim:SQ_RSRC_IMG_3D
418+
// GFX12: encoding: [0x02,0x80,0xc1,0xd3,0x01,0x08,0x00,0x00,0x02,0x01,0x00,0x00]
419+
420+
image_store v[1:4], [v3, v2, v1, v0], s[4:11] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY
421+
// GFX12: encoding: [0x07,0x80,0xc1,0xd3,0x01,0x08,0x00,0x00,0x03,0x02,0x01,0x00]
422+
411423
image_store_mip v[252:255], [v0, v1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D
412424
// GFX12: encoding: [0x00,0xc0,0xc1,0xd3,0xfc,0x00,0x00,0x00,0x00,0x01,0x00,0x00]
413425

@@ -568,6 +580,12 @@ image_atomic_swap v[254:255], [v4, v5], s[96:103] dmask:0x3 dim:SQ_RSRC_IMG_2D_M
568580
image_atomic_swap v1, [v2, v0], s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_2D
569581
// GFX12: encoding: [0x01,0x80,0x42,0xd0,0x01,0x08,0x00,0x00,0x02,0x00,0x00,0x00]
570582

583+
image_atomic_swap v1, [v2, v1, v0], s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_3D
584+
// GFX12: encoding: [0x02,0x80,0x42,0xd0,0x01,0x08,0x00,0x00,0x02,0x01,0x00,0x00]
585+
586+
image_atomic_swap v1, [v3, v2, v1, v0], s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY
587+
// GFX12: encoding: [0x07,0x80,0x42,0xd0,0x01,0x08,0x00,0x00,0x03,0x02,0x01,0x00]
588+
571589
image_atomic_cmpswap v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D
572590
// GFX12: encoding: [0x00,0xc0,0xc2,0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
573591

@@ -625,6 +643,12 @@ image_atomic_add_uint v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_N
625643
image_atomic_add_uint v1, [v2, v0], s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_2D
626644
// GFX12: encoding: [0x01,0x00,0x43,0xd0,0x01,0x08,0x00,0x00,0x02,0x00,0x00,0x00]
627645

646+
image_atomic_add_uint v1, [v2, v1, v0], s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_3D
647+
// GFX12: encoding: [0x02,0x00,0x43,0xd0,0x01,0x08,0x00,0x00,0x02,0x01,0x00,0x00]
648+
649+
image_atomic_add_uint v1, [v3, v2, v1, v0], s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY
650+
// GFX12: encoding: [0x07,0x00,0x43,0xd0,0x01,0x08,0x00,0x00,0x03,0x02,0x01,0x00]
651+
628652
image_atomic_sub_uint v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D
629653
// GFX12: encoding: [0x00,0x40,0x43,0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
630654

llvm/test/MC/Disassembler/AMDGPU/gfx12_dasm_vimage.txt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,12 @@
160160
# GFX12: image_load v[4:7], [v1, v0], s[4:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x01,0x00,0xc0,0xd3,0x04,0x08,0x00,0x00,0x01,0x00,0x00,0x00]
161161
0x01,0x00,0xc0,0xd3,0x04,0x08,0x00,0x00,0x01,0x00,0x00,0x00
162162

163+
# GFX12: image_load v[1:4], [v2, v1, v0], s[4:11] dmask:0xf dim:SQ_RSRC_IMG_3D ; encoding: [0x02,0x00,0xc0,0xd3,0x01,0x08,0x00,0x00,0x02,0x01,0x00,0x00]
164+
0x02,0x00,0xc0,0xd3,0x01,0x08,0x00,0x00,0x02,0x01,0x00,0x00
165+
166+
# GFX12: image_load v[1:4], [v3, v2, v1, v0], s[4:11] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY ; encoding: [0x07,0x00,0xc0,0xd3,0x01,0x08,0x00,0x00,0x03,0x02,0x01,0x00]
167+
0x07,0x00,0xc0,0xd3,0x01,0x08,0x00,0x00,0x03,0x02,0x01,0x00
168+
163169
# GFX12: image_load_mip v[252:255], [v0, v1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x40,0xc0,0xd3,0xfc,0x00,0x00,0x00,0x00,0x01,0x00,0x00]
164170
0x00,0x40,0xc0,0xd3,0xfc,0x00,0x00,0x00,0x00,0x01,0x00,0x00
165171

@@ -409,6 +415,12 @@
409415
# GFX12: image_store v[1:4], [v2, v0], s[4:11] dmask:0xf dim:SQ_RSRC_IMG_2D ; encoding: [0x01,0x80,0xc1,0xd3,0x01,0x08,0x00,0x00,0x02,0x00,0x00,0x00]
410416
0x01,0x80,0xc1,0xd3,0x01,0x08,0x00,0x00,0x02,0x00,0x00,0x00
411417

418+
# GFX12: image_store v[1:4], [v2, v1, v0], s[4:11] dmask:0xf dim:SQ_RSRC_IMG_3D ; encoding: [0x02,0x80,0xc1,0xd3,0x01,0x08,0x00,0x00,0x02,0x01,0x00,0x00]
419+
0x02,0x80,0xc1,0xd3,0x01,0x08,0x00,0x00,0x02,0x01,0x00,0x00
420+
421+
# GFX12: image_store v[1:4], [v3, v2, v1, v0], s[4:11] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY ; encoding: [0x07,0x80,0xc1,0xd3,0x01,0x08,0x00,0x00,0x03,0x02,0x01,0x00]
422+
0x07,0x80,0xc1,0xd3,0x01,0x08,0x00,0x00,0x03,0x02,0x01,0x00
423+
412424
# GFX12: image_store_mip v[252:255], [v0, v1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0xc0,0xc1,0xd3,0xfc,0x00,0x00,0x00,0x00,0x01,0x00,0x00]
413425
0x00,0xc0,0xc1,0xd3,0xfc,0x00,0x00,0x00,0x00,0x01,0x00,0x00
414426

@@ -568,6 +580,12 @@
568580
# GFX12: image_atomic_swap v1, [v2, v0], s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_2D ; encoding: [0x01,0x80,0x42,0xd0,0x01,0x08,0x00,0x00,0x02,0x00,0x00,0x00]
569581
0x01,0x80,0x42,0xd0,0x01,0x08,0x00,0x00,0x02,0x00,0x00,0x00
570582

583+
# GFX12: image_atomic_swap v1, [v2, v1, v0], s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_3D ; encoding: [0x02,0x80,0x42,0xd0,0x01,0x08,0x00,0x00,0x02,0x01,0x00,0x00]
584+
0x02,0x80,0x42,0xd0,0x01,0x08,0x00,0x00,0x02,0x01,0x00,0x00
585+
586+
# GFX12: image_atomic_swap v1, [v3, v2, v1, v0], s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY ; encoding: [0x07,0x80,0x42,0xd0,0x01,0x08,0x00,0x00,0x03,0x02,0x01,0x00]
587+
0x07,0x80,0x42,0xd0,0x01,0x08,0x00,0x00,0x03,0x02,0x01,0x00
588+
571589
# GFX12: image_atomic_cmpswap v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0xc0,0xc2,0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
572590
0x00,0xc0,0xc2,0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
573591

@@ -625,6 +643,12 @@
625643
# GFX12: image_atomic_add_uint v1, [v2, v0], s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_2D ; encoding: [0x01,0x00,0x43,0xd0,0x01,0x08,0x00,0x00,0x02,0x00,0x00,0x00]
626644
0x01,0x00,0x43,0xd0,0x01,0x08,0x00,0x00,0x02,0x00,0x00,0x00
627645

646+
# GFX12: image_atomic_add_uint v1, [v2, v1, v0], s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_3D ; encoding: [0x02,0x00,0x43,0xd0,0x01,0x08,0x00,0x00,0x02,0x01,0x00,0x00]
647+
0x02,0x00,0x43,0xd0,0x01,0x08,0x00,0x00,0x02,0x01,0x00,0x00
648+
649+
# GFX12: image_atomic_add_uint v1, [v3, v2, v1, v0], s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY ; encoding: [0x07,0x00,0x43,0xd0,0x01,0x08,0x00,0x00,0x03,0x02,0x01,0x00]
650+
0x07,0x00,0x43,0xd0,0x01,0x08,0x00,0x00,0x03,0x02,0x01,0x00
651+
628652
# GFX12: image_atomic_sub_uint v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D ; encoding: [0x00,0x40,0x43,0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
629653
0x00,0x40,0x43,0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
630654

0 commit comments

Comments
 (0)